From 8aa04859fc68aeab28d08a1c7d97ef5a0f7ce050 Mon Sep 17 00:00:00 2001
From: Antonio Ospite <ao2@ao2.it>
Date: Wed, 28 Feb 2018 12:48:31 +0100
Subject: [PATCH 1/1] 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