0

評判が悪いため、質問の画像を投稿できません。

ffmpeg関数を使用して、デコードされたフレームをYUVからRGB24に変換しますが、色と結果の画像がひどく歪んでいます。以下は私のコードスニップです、フレームの幅と高さは(176、144)です

len = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
    if (got_picture) {
            //...

    AVFrame *pFrameRGB = avcodec_alloc_frame();
    // Determine required buffer size and allocate buffer
    int numBytes=avpicture_get_size(PIX_FMT_RGB24, c->width, c->height);
    uint8_t *buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
    avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, c->width, c->height);

    struct SwsContext *img_convert_ctx = sws_getContext(c->width, c->height, PIX_FMT_YUV420P, c->width, c->height, PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL);
    sws_scale(img_convert_ctx, picture->data, picture->linesize, 0, picture->height, pFrameRGB->data, pFrameRGB->linesize);
    sws_freeContext(img_convert_ctx);
    // Save the frame to disk
    if(++frame<=5)
        SaveFrame(pFrameRGB, c->width, c->height, frame);
4

2 に答える 2

0

ARGB に変換するように変更すると、結果は問題ありません @@。

于 2012-08-06T13:52:19.877 に答える
0

PIX_FMT_BGR24意図したときに誤って選択した可能性がありますPIX_FMT_RGB24か?

struct SwsContext *img_convert_ctx = sws_getContext(c->width, c->height, 
    PIX_FMT_YUV420P, c->width, c->height, PIX_FMT_RGB24, SWS_BICUBIC, 
    NULL, NULL, NULL);
于 2012-11-15T06:13:35.850 に答える