FFMPEG: sws_scale не производит никаких данных в целевом кадре - PullRequest
0 голосов
/ 07 июня 2019

Я использую FFMPEG для декодирования потока H264.После того, как я получу декодированные кадры YUV420, я хочу преобразовать их в RGB24.

struct SwsContext * ctx = NULL;

// frame is AVFrame in YUV420 obtained from decoder. It has all three strides and seem to be valid.

if (ctx == NULL)
                {
                    ctx = sws_getContext(frame->width, frame->height, frame->format, frame->width, frame->height,
                        AV_PIX_FMT_RGB24, SWS_BICUBIC, 0, 0, 0);
                }

            AVFrame* frame2 = av_frame_alloc();

            int num_bytes = av_image_get_buffer_size(AV_PIX_FMT_RGB24, frame->width, frame->height, 32);

            uint8_t* frame2_buffer = (uint8_t *)av_malloc(num_bytes * sizeof(uint8_t));

            int size = av_image_fill_arrays(frame2->data, frame2->linesize, frame2_buffer, AV_PIX_FMT_RGB24, frame->width, frame->height, 32);

            int height_of_output = sws_scale(ctx, frame->data, frame->linesize, 0, frame->height, frame2->data, frame2->linesize);

            callbackFullRGB(state, frameIndex, 0, frame2->data[0], num_bytes, (__int32)frame2->format, (__int32)frame2->width, (__int32)frame2->height);

            av_frame_free(&frame2);

Однако для frame2 разрешение не установлено, формат пикселей равен -1, а буфер данных пуст.У меня есть вход 1280x720, длина шага установлена ​​на 3840 для выходного кадра, что правильно.sws_scale также возвращает 720 в результате - без ошибок, без исключений.

Что может быть не так?

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