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;
^~~~~
{
AVInputFormat *input_format = NULL;
AVFormatContext *input_format_ctx;
{
AVInputFormat *input_format = NULL;
AVFormatContext *input_format_ctx;
+ AVCodecParameters *input_codec_params;
AVCodecContext *input_codec_ctx;
AVCodec *input_codec;
int video_index;
AVCodecContext *input_codec_ctx;
AVCodec *input_codec;
int video_index;
/* look for the first video_stream */
video_index = -1;
for (i = 0; i < input_format_ctx->nb_streams; i++)
/* 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;
}
video_index = i;
break;
}
- /* 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 */
/* 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;
}
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");
/* open the decoder */
ret = avcodec_open2(input_codec_ctx, input_codec, NULL);
if (ret < 0) {
fprintf(stderr, "cannot open input codec\n");
}
input_ctx->format_ctx = input_format_ctx;
}
input_ctx->format_ctx = input_format_ctx;
+cleanup_ctx:
+ avcodec_free_context(&input_codec_ctx);
cleanup:
avformat_close_input(&input_format_ctx);
out:
cleanup:
avformat_close_input(&input_format_ctx);
out:
cleanup_input:
avcodec_close(input_ctx.codec_ctx);
cleanup_input:
avcodec_close(input_ctx.codec_ctx);
+ avcodec_free_context(&(input_ctx.codec_ctx));
avformat_close_input(&(input_ctx.format_ctx));
out:
avformat_close_input(&(input_ctx.format_ctx));
out: