SPS / PPS VUI не используется Android MediaCodec NDK

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" для линейной гаммы).

У кого-нибудь есть какие-либо предложения о том, почему медиа-кодек, кажется, фактически не использует данные колориметрии, которые я предоставил?

Теги:
h.264
mediacodec

1 ответ

1
Лучший ответ

Информация о цветовом пространстве в потоке H.264 является только информационными метаданными. Таким образом, ваши наблюдения верны, и декомпрессор работает как надо. Вы получите распакованное растровое изображение в том же цветовом пространстве, в котором оно было закодировано. Обычно декомпрессор не заботится о цветовых пространствах. Вы должны вести разговор в цветовом пространстве после декомпрессии.

  • 0
    Я рассчитываю выполнить преобразование цветового пространства после распаковки, но по моему опыту это обычно происходит при переходе от yuv-> rgb, что автоматически делает mediacodec.
  • 0
    Интересно - Mediacodec игнорирует информацию о цветовом пространстве при автоматическом преобразовании. Это, вероятно, хорошо, пока это 8-битный REC 709.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню