【Android】MediaFramework小细节备忘
·
MediaCodec
areRenderMetricsEnabled()

- server_configurable_flags::GetServerConfigurableFlag 函数的本质:
把参数_1和参数_2和 “persist.device_config” 拼接到一块,当做property的key值,获取其value,如果没有,就获取默认值
"persist.device_config.${param_1_string}.${param_2_string}"
- areRenderMetricsEnabled 获取 persist.device_config.media_native.render_metrics_enabled 属性值,返回值如下:
a. Pixel 8a 返回 false;
b. XiaoMi 13 Ultra 返回空,故也是false
VideoRenderQualityTracker::Configuration::getFromServerConfigurableFlags(GetServerConfigurableFlag)

getFlag的本质是,获取 persist.device_config.media_native.render_metrics_xxx 存放到 c.xxx变量中
如果找不到对应的属性值,c.xxx的值不变
而执行命令 adb shell getprop | findstr persist.device_config.media_native ,获得结果如下:
Pixel 8a
C:\Users\Liming>adb shell getprop | findstr persist.device_config.media_native
[persist.device_config.media_native.render_metrics_are_skipped_frames_dropped]: [true]
[persist.device_config.media_native.render_metrics_enable]: [true]
[persist.device_config.media_native.render_metrics_enabled]: [false]
[persist.device_config.media_native.render_metrics_frame_detection_tolerance_us]: [2000]
[persist.device_config.media_native.render_metrics_freeze_distance_ms_histogram_buckets]: [0,20,100,400,1000,2000,3000,4000,8000,15000,30000,60000]
[persist.device_config.media_native.render_metrics_freeze_duration_ms_histogram_buckets]: [0,20,40,60,80,100,120,150,175,225,300,400,500]
[persist.device_config.media_native.render_metrics_freeze_duration_ms_histogram_to_score]: [1,1,50,50,100,100,100,100,100,100,250,250,500]
[persist.device_config.media_native.render_metrics_freeze_event_details_max]: [20]
[persist.device_config.media_native.render_metrics_freeze_event_distance_ms_max]: [60000]
[persist.device_config.media_native.render_metrics_freeze_event_max]: [0]
[persist.device_config.media_native.render_metrics_judder_error_tolerance_us]: [2000]
[persist.device_config.media_native.render_metrics_judder_event_details_max]: [20]
[persist.device_config.media_native.render_metrics_judder_event_distance_ms_max]: [5000]
[persist.device_config.media_native.render_metrics_judder_event_max]: [0]
[persist.device_config.media_native.render_metrics_judder_score_histogram_buckets]: [0,4,5,9,11,20,30,40,50,60,70,80]
[persist.device_config.media_native.render_metrics_judder_score_histogram_to_score]: [1,1,1,1,1,1,1,1,1,1,1,1]
[persist.device_config.media_native.render_metrics_live_content_frame_drop_tolerance_us]: [200000]
[persist.device_config.media_native.render_metrics_max_expected_content_frame_duration_us]: [400000]
[persist.device_config.media_native.render_metrics_trace_maximum_freeze_duration_ms]: [1500]
[persist.device_config.media_native.render_metrics_trace_minimum_freeze_duration_ms]: [400]
[persist.device_config.media_native.render_metrics_trace_trigger_enabled]: [false]
[persist.device_config.media_native.render_metrics_trace_trigger_throttle_ms]: [300000]
故 VideoRenderQualityTracker::Configuration c 的一些变量如下:
enabled: false
areSkippedFramesDropped: true
maxExpectedContentFrameDurationUs: 400000
frameRateDetectionToleranceUs: 2000
liveContentFrameDropToleranceUs: 200000
freezeDurationMsHistogramBuckets:[0,20,40,60,80,100,120,150,175,225,300,400,500]
freezeDurationMsHistogramToScore:[1,1,50,50,100,100,100,100,100,100,250,250,500]
freezeDistanceMsHistogramBuckets: [0,20,100,400,1000,2000,3000,4000,8000,15000,30000,60000]
freezeEventMax: 0
freezeEventDetailsMax: 20
freezeEventDistanceToleranceMs: 原始值, 60000
judderErrorToleranceUs: 2000
judderScoreHistogramBuckets: [0,4,5,9,11,20,30,40,50,60,70,80]
judderScoreHistogramToScore: [1,1,1,1,1,1,1,1,1,1,1,1]
judderEventMax: 0
judderEventDetailsMax: 20
judderEventDistanceToleranceMs: 原始值, 5000
XiaoMi 13 Ultra上返回空, 故 VideoRenderQualityTracker::Configuration c 仍然采用代码中默认的值
而 MediaCodec与 VideoRenderQualityTracker 以及 VideoRenderQualityTracker::Configuration 的关系如下:

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)