ffmpeg sws_scale上的分段错误

时间:2017-04-03 00:53:22

标签: c++ c ffmpeg

我正在尝试使用ffmpeg的sws_scale函数将AVFrame从JPEG(YUV像素格式)转换为RGB24格式。我按如下方式设置了SwsContext:

struct SwsContext *sws_ctx = NULL;
    int frameFinished;
    AVPacket packet;
    // initialize SWS context for software scaling
    sws_ctx = sws_getContext(pCodecCtx->width,
        pCodecCtx->height,
        pCodecCtx->pix_fmt,
        pCodecCtx->width,
        pCodecCtx->height,
        AV_PIX_FMT_RGB24,
        SWS_BICUBIC,
        NULL, NULL, NULL
        );

然后,我使用以下命令执行sws_scale

sws_scale(sws_ctx,
          (uint8_t const * const *)pFrame->data,
          pFrame->linesize,
          0,
          pCodecCtx->height,
          pFrameRGB->data,
          pFrameRGB->linesize);

这给了我一个段错误,虽然我不知道为什么。我已经尝试通过打印和高度和线条检查值,所有内容都显示有效值。

1 个答案:

答案 0 :(得分:1)

对于将来遇到此问题的任何人,我的问题是我没有正确地将pFramepFrameRGB初始化。首先必须使用av_frame_alloc()为帧结构分配内存,然后必须使用av_image_alloc()分配数据缓冲区。