我正在尝试使用MediaCodec NDK以非默认色度对视频进行解码。我分别在csd-0和csd-1缓冲区中提供了SPS和PPS,但是这些信息似乎并不影响解码后的视频的外观。
首先,我初始化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);
我现在将像往常一样开始对输入缓冲区进行解压缩。这样就可以运行,日志中没有任何错误,但是无论我为传输特性设置了什么(上面的线性伽玛设置为“ 8”),解码后的视频看起来都完全相同。
对于为什么媒体编解码器似乎并没有实际使用我提供的比色数据,有人是否有任何建议?
答案 0 :(得分:1)
H.264流中的颜色空间信息仅是信息性元数据。因此,您的观察是正确的,并且解压缩器可以正常工作。 您将在与编码后相同的色彩空间中获得解压缩的位图。 通常,解压缩器不执行或不关心色彩空间。减压后必须进行色彩空间对话。