Масштабирование YUV420P с помощью libswscale - получение серого изображения

У меня есть базовое понимание формата данных YUV420p. Я понимаю, что это в плоскостях и что данные Y в основном являются черно-белыми значениями яркости и должны иметь ширину * высоту пикселей в длину.

Я полагаю, что плоскости U и V имеют ширину * высоту / 4 размера для каждой плоскости.

Итак, со всеми этими знаниями я пытаюсь масштабировать изображение yuv420p с помощью libswscale. Выходное изображение серое, как будто мне не хватает плоскостей U и V.

Вот что я делаю:

  int src_stride[3] = {0, 0, 0};
  src_stride[0] = mInputWidth;
  src_stride[1] = mInputWidth / 4;
  src_stride[2] = mInputWidth / 4;


  const uint8_t *input_planes[3];
  input_planes[0] = input.GetData(); // returns pointer to image data
  input_planes[1] = input_planes[0] + (mInputWidth * mInputHeight);
  input_planes[2] = input_planes[0] + (mInputWidth * mInputHeight) + (mInputWidth * mInputHeight / 4); 


  int scale_rc = sws_scale(mSwsEncodeContext, input_planes,
                       src_stride, 0, mInputHeight, mEncodeAvFrame->data,
                       mEncodeAvFrame->linesize);

Есть идеи, что я испортил src_stride или input_planes?


person spartygw    schedule 29.04.2013    source источник
comment
Обычно вопросы остаются без ответа, если они бессмысленны, содержат недостаточно информации или не имеют правильных тегов. Так ли это здесь?   -  person spartygw    schedule 30.04.2013


Ответы (1)


Приведенный выше код подходит для масштабирования данных YUV420P. Оказывается, мои данные были не YUV420P, а NV21, который имеет тот же размер, но данные U и V не находятся в разных плоскостях, они находятся в 1 плоскости и чередуются.

person spartygw    schedule 03.05.2013