Ticket #7251: ffmpeg-issue-7251.patch

File ffmpeg-issue-7251.patch, 2.3 KB (added by Jose Santiago, 8 years ago)

Patch that resolves the issue

  • libavcodec/mpeg12enc.c

    diff -Naur src.orig/libavcodec/mpeg12enc.c src/libavcodec/mpeg12enc.c
    old new  
    11611161    .pix_fmts             = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
    11621162                                                           AV_PIX_FMT_NONE },
    11631163    .capabilities         = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS,
     1164    .caps_internal        = FF_CODEC_CAP_INIT_CLEANUP,
    11641165    .priv_class           = &mpeg1_class,
    11651166};
    11661167
     
    11781179                                                           AV_PIX_FMT_YUV422P,
    11791180                                                           AV_PIX_FMT_NONE },
    11801181    .capabilities         = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS,
     1182    .caps_internal        = FF_CODEC_CAP_INIT_CLEANUP,
    11811183    .priv_class           = &mpeg2_class,
    11821184};
  • libavcodec/utils.c

    diff -Naur src.orig/libavcodec/utils.c src/libavcodec/utils.c
    old new  
    540540    int ret = 0;
    541541    AVDictionary *tmp = NULL;
    542542    const AVPixFmtDescriptor *pixdesc;
     543    int needFrameThreadEncoderFreeOnError = 0;
     544    int needThreadFreeOnError = 0;
    543545
    544546    if (avcodec_is_open(avctx))
    545547        return 0;
     
    724726        ff_lock_avcodec(avctx, codec);
    725727        if (ret < 0)
    726728            goto free_and_end;
     729        needFrameThreadEncoderFreeOnError = 1;
    727730    }
    728731
    729732    if (HAVE_THREADS
     
    732735        if (ret < 0) {
    733736            goto free_and_end;
    734737        }
     738        needThreadFreeOnError = 1;
    735739    }
    736740    if (!HAVE_THREADS && !(codec->capabilities & AV_CODEC_CAP_AUTO_THREADS))
    737741        avctx->thread_count = 1;
     
    10241028    av_dict_free(&tmp);
    10251029    av_freep(&avctx->priv_data);
    10261030    if (avctx->internal) {
     1031        if (needFrameThreadEncoderFreeOnError
     1032           && avctx->internal->frame_thread_encoder)
     1033        {
     1034            ff_frame_thread_encoder_free(avctx);
     1035        }
     1036        if (needThreadFreeOnError
     1037           && avctx->internal->thread_ctx)
     1038        {
     1039            ff_thread_free(avctx);
     1040        }
    10271041        av_frame_free(&avctx->internal->to_free);
    10281042        av_frame_free(&avctx->internal->compat_decode_frame);
    10291043        av_frame_free(&avctx->internal->buffer_frame);