ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ExoPlayer Transformer 像素测试黄金资产(Golden Assets)完全指南:目录结构、色彩空间与生成流程

ExoPlayer Transformer 像素测试黄金资产(Golden Assets)完全指南:目录结构、色彩空间与生成流程 ExoPlayer Transformer 像素测试黄金资产Golden Assets完全指南目录结构、色彩空间与生成流程【免费下载链接】ExoPlayerAn extensible media player for Android项目地址: https://gitcode.com/gh_mirrors/exop/ExoPlayer导读本文围绕 testdata/src/test/assets/media/bitmap/README.md 展开系统讲解 ExoPlayer 仓库中 Transformer 像素测试Pixel Test所用期望输出图片Golden Assets的组织方式、色彩空间约定以及如何生成并更新这些基准资产。读者将掌握bitmap测试资产目录的完整结构与每个子目录的用途理解黄金资产与 library/transformer 模块像素测试的对应关系并能按官方流程启动仿真器 → 运行测试 →adb pull拷贝结果为新增的帧变换效果产出新的期望图片。一、这些图片是什么Transformer 变换后首帧的期望输出按目录 README 的定义testdata/src/test/assets/media/bitmap/下的所有图片都是一段视频经过 Transformer 变换后其第一帧first frame的期望结果。它们被用作像素测试Pixel Test的基准用来验证各类帧操作旋转、裁剪、缩放、色彩调整、Bitmap 叠加、LUT 映射、HDR 到 SDR 色调映射等确实产出了预期输出。这种测试方式属于典型的黄金文件golden file对比测试代码读取这些 PNG 作为expectedBitmap用 Transformer / VideoFrameProcessor 处理输入视频的某一帧得到actualBitmap再逐像素比较二者差异从而把 GPU 上的变换结果量化验证。像素测试主体位于 library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh其中DefaultVideoFrameProcessorTextureOutputPixelTest.java 以media/bitmap/sample_mp4_first_frame/electrical_colors/original.png、original_hlg10.png、original_hdr10.png等作为 SDR / HLG / PQ 输入的期望输出DefaultVideoFrameProcessorMultipleTextureOutputPixelTest.java 使用srgb_to_electrical_original.png等文件验证 Bitmap 输入在 sRGB → 电光转换后的输出ToneMapHdrToSdrUsingOpenGlPixelTest.java 使用tone_map_hlg_to_sdr.png、tone_map_pq_to_sdr.png作为 HLG/PQ 视频色调映射到 SDR 的期望结果。二、资产目录全景四个子目录与各自用途整个bitmap资产目录可以划分为四个部分子目录内容用途input_images/london.jpg、media3test.png及各自 README作为像素测试的输入图片如 BitmapOverlay 叠加的素材、Bitmap 输入源lut/grayscale.png、identity.png、inverted.png3D LUT颜色查找表输入文件用于lut_map_*类效果测试sample_mp4_first_frame/electrical_colors/38 张 PNG输入视频为sample.mp4SDR、hdr10-720p.mp4PQ、hlg-1080p.mp4HLG时首帧在电气域/电光转换后色彩空间下的期望输出sample_mp4_first_frame/linear_colors/17 张 PNG同一批首帧在线性 RGB色彩空间下的期望输出两个 README 子目录内的图片命名直接对应测试用例例如electrical_colors/rotate90.png旋转 90°、aspect_ratio_scale_to_fit_wide.png宽画幅缩放适配、crop_then_aspect_ratio.png先裁剪再适配、overlay_bitmap_default.pngBitmap 默认叠加、overlay_text_default.png文本叠加、tone_map_hlg_to_sdr.pngHLG 色调映射、rotate_then_translate.png先旋转再平移等linear_colors/下则对应色彩处理类效果如increase_brightness.png、increase_contrast.png、rotate_hue_by_60_degrees.png、lut_map_white_to_green.png、only_red_channel.png等。从命名即可反推出测试矩阵覆盖的变换能力几何变换、颜色调整、LUT 映射、叠加、色调映射与它们的组合。三、色彩空间约定三个子目录三种颜色模型黄金资产的正确性高度依赖色彩空间约定相关 README 给出了明确规范1. input_imagessRGBIEC 61966-2-1input_images/README.md 声明该目录下所有文件都处于sRGB 色彩空间IEC 61966-2-1 规范遵循 android.graphics.Bitmap 所支持的色彩空间模型。也就是说测试中通过BitmapFactory解码出的 Bitmap 输入其像素值按 sRGB 语义解释。2. sample_mp4_first_frame/electrical_colorsSMPTE 170Melectrical_colors/README.md 声明该目录所有文件处于SMPTE 170M 颜色即 ITU-R BT.1700 定义的标准动态范围视频色彩对应 Android MediaFormat 文档中的COLOR_TRANSFER_SDR_VIDEOSDR 视频传输函数。所谓electrical指像素值代表经过电光转换EOTF后、可直接显示的电气信号域数值——这正是解码器输出、以及 Transformer 默认内部处理链路的数值语义。因此旋转、裁剪、叠加等不改变色彩语义的效果其期望输出与original.png同处一个色彩空间。3. sample_mp4_first_frame/linear_colorsLinear RGBlinear_colors/README.md 声明该目录文件处于线性 RGB对应 MediaFormat 的COLOR_TRANSFER_LINEAR。线性空间是颜色处理亮度、对比度、色相旋转、饱和度、LUT 映射等通常期望的运算空间因此这类效果的期望输出被独立存放避免与电光域的基准混用。可以推断同一帧画面在两个目录各有副本正是为了让测试分别验证在电气域执行几何类变换与在线性域执行颜色类变换两条路径这也是 ToneMapHdrToSdrUsingOpenGlPixelTest 通过setOutputColorInfo显式指定输出色彩信息TONE_MAP_SDR_COLOR进行对比的原因。四、像素精度判定平均像素绝对差与容差阈值黄金资产不是做逐像素完全一致的刚性比对——GPU 渲染与硬件解码存在设备差异。测试统一借助测试工具类 BitmapPixelTestUtil位于 testutils 模块中的getBitmapAveragePixelAbsoluteDifferenceArgb8888计算两张 ARGB_8888 Bitmap 的平均像素绝对差average pixel absolute difference再与阈值常量MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_DIFFERENT_DEVICE以及 FP16 输出场景的..._DIFFERENT_DEVICE_FP16比较断言assertThat(...).isAtMost(...)。这种平均差不超过容差的设计意味着同一测试可在不同机型 / 不同 GPU 上运行而不因微小舍入差异误报阈值取名DIFFERENT_DEVICE表明其数值已为跨设备差异预留余量当效果改动导致输出明显偏离基准时平均绝对差会显著超出阈值测试随即失败提示需要更新黄金资产。五、如何生成新的期望资产仿真器 测试 adb pull 三步法README 的copybara strip区块记录了更新/新增黄金资产的官方流程这也是仓库作者在本地重新生成基准图片的实操步骤第 1 步启动与 presubmit 相同配置的仿真器黄金资产必须在与预提交presubmit检查一致的仿真器配置下生成以保证 CI 与本地产出可比。仿真器配置可参考 transformer 模块的 androidTest BUILD 中的test_e2e_目标本地可使用 Google 内部提供的crow仿真器启动工具命令为crow --device generic_phone --api_level 33 --arch x86即设备型号generic_phone、Android API 级别 33Android 13、CPU 架构x86。第 2 步运行对应的像素测试在仿真器上运行目标像素测试。例如需要重新生成旋转 90° 的期望图片时运行DefaultVideoFrameProcessorTextureOutputPixelTest中对应的旋转用例。测试通过 VideoFrameProcessorTestRunner位于 transformer 的 androidTest 目录处理首帧并把结果 Bitmap 落盘到应用缓存目录供后续拉取。第 3 步从设备拷贝结果到资产目录使用adb pull把测试写出的 PNG 从设备拷贝回仓库资产目录覆盖或新增对应图片例如adb pull \ /sdcard/Android/data/com.google.android.exoplayer2.effect.test/cache/drawFrame_rotate90.png \ testdata/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/rotate90.png命令拆解设备端路径位于测试应用com.google.android.exoplayer2.effect.test的cache目录/sdcard/Android/data/package/cache/文件名为测试内部生成的位图如drawFrame_rotate90.png由绘制帧逻辑按测试 ID 命名目标路径即本文讨论的资产目录rotate90.png正是 assets 列表 中已存在的黄金文件覆盖完成后重新运行测试确认平均像素绝对差回落到阈值以内。值得注意的是README 将该流程包裹在copybara:strip_begin/copybara:strip_end注释之间表示这段内部开发流程涉及 Google 内部仿真器工具 crow 与 BUILD 目标在对外发布时会被同步工具剥离普通使用者看到的是一份纯净的资产用途说明。六、资产与测试的对应关系验证通过对照资产文件名与测试代码可以完整验证这套黄金资产确实被各像素测试引用黄金资产相对仓库根引用它的测试.../electrical_colors/original.png、original_hlg10.png、original_hdr10.pngDefaultVideoFrameProcessorTextureOutputPixelTest.java分别对应输入sample.mp4SDR、hlg-1080p.mp4HLG、hdr10-720p.mp4PQ的首帧基准.../electrical_colors/tone_map_hlg_to_sdr.png、tone_map_pq_to_sdr.pngToneMapHdrToSdrUsingOpenGlPixelTest.java.../electrical_colors/srgb_to_electrical_original.png、srgb_to_electrical_media3test.pngDefaultVideoFrameProcessorMultipleTextureOutputPixelTest.java验证 Bitmap 输入经 sRGB→电气域转换后的输出media/bitmap/input_images/media3test.png作为 Bitmap 叠加 / 输入素材被上述多个测试的OVERLAY_PNG_ASSET_PATH引用此外MssimCalculatorTest.java 也引用了sample_mp4_first_frame资产说明同一批黄金帧还被用于 MSSIM多尺度结构相似性指标的计算验证进一步佐证这些资产是 Transformer 输出质量评估的公共基准。七、使用与维护建议新增效果时同步新增黄金资产每引入新的帧变换能力应遵循第三节的色彩空间约定在electrical_colors几何/叠加类或linear_colors颜色类目录补入对应期望图片并在测试中按 DefaultVideoFrameProcessorTextureOutputPixelTest 的模式声明资产路径常量、执行对比。固定仿真器配置本地生成资产必须复现 presubmit 的generic_phone API 33 x86 环境否则 GPU 差异可能导致 CI 与本地结果不一致。留意色彩空间匹配期望图片的数值语义sRGB / SMPTE 170M / Linear RGB必须与测试管线的输入色彩信息一致例如 Bitmap 输入场景在 DefaultVideoFrameProcessorMultipleTextureOutputPixelTest 中显式指定ColorInfo.SRGB_BT709_FULL若黄金资产色彩语义错配对比结果将毫无意义。容差阈值不可随意放宽MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_DIFFERENT_DEVICE已包含跨设备余量若某次改动后测试失败应先审视变换逻辑本身而非直接更新资产或调大阈值。结语testdata/src/test/assets/media/bitmap/是 ExoPlayer Transformer 质量保障体系中以图验真的关键一环它用三个色彩空间明确区分的资产子集把数十种帧变换效果的期望输出固化为可机器比对的基准。理解其目录约定、色彩模型与仿真器 测试 adb pull的资产再生成流程无论是贡献新效果、排查像素测试失败还是研究 Transformer 的色彩处理链路都能让你快速定位到正确的基准资产与对应测试代码。【免费下载链接】ExoPlayerAn extensible media player for Android项目地址: https://gitcode.com/gh_mirrors/exop/ExoPlayer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表