diff options
author | James Almer <jamrial@gmail.com> | 2017-08-30 02:07:00 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-09-05 14:21:41 -0300 |
commit | 9a174d203ae42cc03360c695c70066d6eb1058db (patch) | |
tree | 185c9ce638ca7a57987465b5719cd6026570fe15 | |
parent | 837c55e07271b59cd151b3cbecb1822fc10adf77 (diff) | |
download | ffmpeg-9a174d203ae42cc03360c695c70066d6eb1058db.tar.gz |
avfilter/lavfutils: remove usage of AVStream->codec
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavfilter/lavfutils.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libavfilter/lavfutils.c b/libavfilter/lavfutils.c index 35878b3d50..b6319cf027 100644 --- a/libavfilter/lavfutils.c +++ b/libavfilter/lavfutils.c @@ -29,6 +29,7 @@ int ff_load_image(uint8_t *data[4], int linesize[4], AVFormatContext *format_ctx = NULL; AVCodec *codec; AVCodecContext *codec_ctx; + AVCodecParameters *par; AVFrame *frame; int frame_decoded, ret = 0; AVPacket pkt; @@ -50,14 +51,27 @@ int ff_load_image(uint8_t *data[4], int linesize[4], return ret; } - codec_ctx = format_ctx->streams[0]->codec; - codec = avcodec_find_decoder(codec_ctx->codec_id); + par = format_ctx->streams[0]->codecpar; + codec = avcodec_find_decoder(par->codec_id); if (!codec) { av_log(log_ctx, AV_LOG_ERROR, "Failed to find codec\n"); ret = AVERROR(EINVAL); goto end; } + codec_ctx = avcodec_alloc_context3(codec); + if (!codec_ctx) { + av_log(log_ctx, AV_LOG_ERROR, "Failed to alloc video decoder context\n"); + ret = AVERROR(ENOMEM); + goto end; + } + + ret = avcodec_parameters_to_context(codec_ctx, par); + if (ret < 0) { + av_log(log_ctx, AV_LOG_ERROR, "Failed to copy codec parameters to decoder context\n"); + goto end; + } + av_dict_set(&opt, "thread_type", "slice", 0); if ((ret = avcodec_open2(codec_ctx, codec, &opt)) < 0) { av_log(log_ctx, AV_LOG_ERROR, "Failed to open codec\n"); @@ -96,7 +110,7 @@ int ff_load_image(uint8_t *data[4], int linesize[4], end: av_packet_unref(&pkt); - avcodec_close(codec_ctx); + avcodec_free_context(&codec_ctx); avformat_close_input(&format_ctx); av_frame_free(&frame); av_dict_free(&opt); |