From 8aa04859fc68aeab28d08a1c7d97ef5a0f7ce050 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Wed, 28 Feb 2018 12:48:31 +0100 Subject: [PATCH] am7xxx-play: use AVStream.codecpar instead of the deprecated AVStream.codec MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit AVStream.codec has been deprecated and AVStream.codecpar should be used instead, as shown in: http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commitdiff;h=9200514ad8717c63f82101dc394f4378854325bf The changes fix the following compilation warnings: .../libam7xxx/examples/am7xxx-play.c: In function ‘video_input_init’: .../libam7xxx/examples/am7xxx-play.c:104:3: warning: ‘codec’ is deprecated [-Wdeprecated-declarations] if (input_format_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { ^~ In file included from /usr/include/x86_64-linux-gnu/libavdevice/avdevice.h:51:0, from .../libam7xxx/examples/am7xxx-play.c:32: /usr/include/x86_64-linux-gnu/libavformat/avformat.h:893:21: note: declared here AVCodecContext *codec; ^~~~~ .../libam7xxx/examples/am7xxx-play.c:115:2: warning: ‘codec’ is deprecated [-Wdeprecated-declarations] input_codec_ctx = input_format_ctx->streams[video_index]->codec; ^~~~~~~~~~~~~~~ In file included from /usr/include/x86_64-linux-gnu/libavdevice/avdevice.h:51:0, from .../libam7xxx/examples/am7xxx-play.c:32: /usr/include/x86_64-linux-gnu/libavformat/avformat.h:893:21: note: declared here AVCodecContext *codec; ^~~~~ --- examples/am7xxx-play.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/examples/am7xxx-play.c b/examples/am7xxx-play.c index b4356ea..b523ca6 100644 --- a/examples/am7xxx-play.c +++ b/examples/am7xxx-play.c @@ -51,6 +51,7 @@ static int video_input_init(struct video_input_ctx *input_ctx, { AVInputFormat *input_format = NULL; AVFormatContext *input_format_ctx; + AVCodecParameters *input_codec_params; AVCodecContext *input_codec_ctx; AVCodec *input_codec; int video_index; @@ -101,7 +102,7 @@ static int video_input_init(struct video_input_ctx *input_ctx, /* look for the first video_stream */ video_index = -1; for (i = 0; i < input_format_ctx->nb_streams; i++) - if (input_format_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + if (input_format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { video_index = i; break; } @@ -111,22 +112,35 @@ static int video_input_init(struct video_input_ctx *input_ctx, goto cleanup; } - /* get a pointer to the codec context for the video stream */ - input_codec_ctx = input_format_ctx->streams[video_index]->codec; + /* get a pointer to the codec parameters for the video stream */ + input_codec_params = input_format_ctx->streams[video_index]->codecpar; /* find the decoder for the video stream */ - input_codec = avcodec_find_decoder(input_codec_ctx->codec_id); + input_codec = avcodec_find_decoder(input_codec_params->codec_id); if (input_codec == NULL) { fprintf(stderr, "input_codec is NULL!\n"); ret = -EINVAL; goto cleanup; } + input_codec_ctx = avcodec_alloc_context3(input_codec); + if (input_codec_ctx == NULL) { + fprintf(stderr, "failed to allocate the input codec context\n"); + ret = -ENOMEM; + goto cleanup; + } + + ret = avcodec_parameters_to_context(input_codec_ctx, input_codec_params); + if (ret < 0) { + fprintf(stderr, "cannot copy parameters to input codec context\n"); + goto cleanup_ctx; + } + /* open the decoder */ ret = avcodec_open2(input_codec_ctx, input_codec, NULL); if (ret < 0) { fprintf(stderr, "cannot open input codec\n"); - goto cleanup; + goto cleanup_ctx; } input_ctx->format_ctx = input_format_ctx; @@ -136,6 +150,8 @@ static int video_input_init(struct video_input_ctx *input_ctx, ret = 0; goto out; +cleanup_ctx: + avcodec_free_context(&input_codec_ctx); cleanup: avformat_close_input(&input_format_ctx); out: @@ -466,6 +482,7 @@ cleanup_output: cleanup_input: avcodec_close(input_ctx.codec_ctx); + avcodec_free_context(&(input_ctx.codec_ctx)); avformat_close_input(&(input_ctx.format_ctx)); out: -- 2.1.4