sws_scale() не конвертирует изображение, просто копируя его из источника в цель

Попытка прочитать произвольное видео как простые пиксели RGB24, поэтому преобразуйте кадр с sws_scale() следующим образом:

    //...
    AVFrame* pic_out = av_frame_alloc();
    pic_out->format = AV_PIX_FMT_RGB24;
    pic_out->width  = 1920;
    pic_out->height = 1080;
    av_frame_get_buffer( pic_out, 32 );

    struct SwsContext * img_convert_ctx = sws_getContext(
        1920, 1080, AV_PIX_FMT_YUV420P,
        1920, 1080, AV_PIX_FMT_RGB24,
        SWS_BICUBIC,
        NULL, NULL, NULL
    );
    //...
    sws_scale(
        img_convert_ctx,
        pic_src->data,     //pic_src is from avcodec_receive_frame()
        pic_src->linesize,
        0,
        1080,
        pic_out->data,
        pic_out->linesize
    );

Все проходит без ошибок, но pic_out получает те же данные, что и pic_src. В чем может быть проблема?

Полный минимальный пример приведен здесь (предположительно RGB24 изображение есть как < strong>2.bmp, который на самом деле выглядит как YUV-что-то)


person Slaus    schedule 13.03.2020    source источник


Ответы (1)


Проблема заключалась в том, что я рассматривал pic_out->data как данные изображения RGB24, но это должно быть pic_out->data[0]

person Slaus    schedule 13.03.2020