android - Android MediaCodec NDK 未使用 SPS/PPS VUI

标签 android h.264 android-mediacodec

我正在尝试使用 MediaCodec NDK 解码具有非默认比色法的视频。我将 SPS 和 PPS 分别提供给 csd-0 和 csd-1 缓冲区,但这些信息似乎不会影响解码视频的外观。

首先,我初始化 AMediaFormat

AMediaFormat * format = AMediaFormat_new ();
AMediaFormat_setString (format, AMEDIAFORMAT_KEY_MIME, "video/avc");
AMediaFormat_setInt32 (format, AMEDIAFORMAT_KEY_WIDTH, this->width);
AMediaFormat_setInt32 (format, AMEDIAFORMAT_KEY_HEIGHT, this->height);
AMediaFormat_setInt32 (format, AMEDIAFORMAT_KEY_FRAME_RATE, this->fps_n);

然后我为我的视频流提供 SPS 和 PPS 缓冲区

uint8_t sps[] = { 0,0,0,1,103,100,0,52,172,43,64,8,0,24,54,2,220,4,32,6,148,0,0,15,160,0,7,83,2,61,42,128 };
uint8_t pps[] = { 0,0,0,1,104,238,60,176 };
const size_t sps_len = 32;
const size_t pps_len = 8;
AMediaFormat_setBuffer (format, "csd-0", sps, sps_len);
AMediaFormat_setBuffer (format, "csd-1", pps, pps_len);

最后,我配置并启动编解码器

AMediaCodec_configure (codec, format, window, NULL, 0);
AMediaCodec_start (codec);
AMediaFormat_delete (format);

我现在将像往常一样开始对输入缓冲区进行排队以进行解压缩。这会运行,日志中没有任何错误,但解码后的视频看起来完全一样,无论我为传输特性设置了什么(上面的线性 Gamma 设置为“8”)。

对于为什么媒体编解码器似乎没有实际使用我提供的比色数据,有人有什么建议吗?

最佳答案

H.264 流中的色彩空间信息只是信息元数据。所以你的观察是正确的,解压缩器可以正常工作。 您将在与编码相同的颜色空间中获得解压缩的位图。 通常解压缩器不做或不关心颜色空间。解压后你必须进行色彩空间对话。

关于android - Android MediaCodec NDK 未使用 SPS/PPS VUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55788981/

相关文章:

Android MediaCodec Format/Resolution Change 中流

android - Ubuntu-Apache ssl 更新

java - Android万能音乐播放器在MediaItem ViewHolder中添加专辑封面

android - 即使我以 100% 的速度推出应用程序,Google Play 控制台仍将生产状态显示为非 Activity

ffmpeg - 在 macOS 上捕获相机 + 麦克风并编码为 h264/aac

android - 将 MediaCodec 解码的视频帧绘制到屏幕的最快方法?

Android Camera onPreviewFrame帧率不一致

具有单一或重叠背景的 Android 幻灯片 View

video - FFmpeg HLS 分段开始时间计算错误

android - 如何在android中捕获H.264编码的帧?