ffmpeg: sws_scale, возвращающий неправильные значения в плоскости V во время преобразования RGB в YUV420 - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь использовать sws_scale для преобразования изображения из RGB в YUV420P. Код, который я использую в C ++, выглядит следующим образом:

SwsContext *swscontext = sws_getContext(current_width,
                                        current_height,
                                        PIX_FMT_RGB24,
                                        current_width,
                                        current_height,
                                        PIX_FMT_YUV420P,
                                        SWS_FAST_BILINEAR,
                                        NULL,
                                        NULL,
                                        NULL);
const int srcstride[3] = {current_width * 3, 0, 0};
BYTE *data_pos[3] = {data, NULL, NULL};
BYTE *dest[3] = {yuv,
                yuv + current_width * current_height,
                yuv + (current_width * current_height) 
                    + ((current_width * current_height) / 2)};
const int dststride[3] = {current_width, current_width / 2, current_width / 2};
sws_scale(swscontext, data_pos, srcstride, 0, current_height,
          dest, dststride);

Плоскости Y и U закодированы правильно, но плоскость V полностью записана со значением 0x80 Интересно, я что-то не так делаю.

1 Ответ

0 голосов
/ 01 марта 2012

Я до сих пор не знаю, почему это работает, но это решило проблему:

BYTE *dest[3] = {yuv,
                 yuv + current_width * current_height,
                 yuv + (current_width * current_height) 
                     + ((current_width >> 1) * (current_height >> 1))};

Семантически они одинаковы, поэтому я оставлю этот вопрос открытым, если кто-нибудь придет с объяснением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...