Android MediaCodec NDK未使用SPS / PPS VUI

问题描述 投票:1回答:1

我正在尝试使用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);

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

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

android h.264 mediacodec
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.