[FFmpeg-devel] [PATCH 82/87] avformat: remove deprecated AVStream.codec

James Almer jamrial at gmail.com
Sun Apr 25 17:14:55 EEST 2021


On 4/24/2021 9:52 AM, Andreas Rheinhardt wrote:
> James Almer:
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>>   fftools/ffmpeg_opt.c      |  13 ---
>>   libavformat/avformat.h    |   8 +-
>>   libavformat/dump.c        |  24 ------
>>   libavformat/isom.c        |  12 +--
>>   libavformat/mov.c         |  17 ----
>>   libavformat/movenc.c      |  38 +--------
>>   libavformat/mux.c         |  27 -------
>>   libavformat/sdp.c         |  18 -----
>>   libavformat/segment.c     |   6 --
>>   libavformat/utils.c       | 164 +-------------------------------------
>>   libavformat/version.h     |   3 -
>>   libavformat/yuv4mpegenc.c |   7 --
>>   12 files changed, 7 insertions(+), 330 deletions(-)
>>
>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>> index 28069d45dc..3e307efb16 100644
>> --- a/libavformat/avformat.h
>> +++ b/libavformat/avformat.h
>> @@ -839,13 +839,7 @@ typedef struct AVStream {
>>        * encoding: set by the user, replaced by libavformat if left unset
>>        */
>>       int id;
>> -#if FF_API_LAVF_AVCTX
>> -    /**
>> -     * @deprecated use the codecpar struct instead
>> -     */
>> -    attribute_deprecated
>> -    AVCodecContext *codec;
>> -#endif
> 
> The documentation of avformat_new_stream() must also be updated. E.g.:
> "User is required to call avcodec_close() and avformat_free_context() to
> clean up the allocation by avformat_new_stream()."

Will do.

> Furthermore, the AVCodec parameter is currently only used for the public
> AVCodecContext that is about to be removed and not the private
> AVCodecContext, so I wonder whether this should be changed or if we
> should add a avformat_new_stream2() without this useless parameter.

Adding a new public API function just to remove a unused parameter is 
not a good idea. It's forcing library users to migrate for no gain. And 
i really dislike functions with a 2 suffix.

Any reason it's not being used for the private AVCodecContext, for that 
matter?

> 
>> +
>>       void *priv_data;
>>   
>>       /**
>> diff --git a/libavformat/utils.c b/libavformat/utils.c
>> index 2f66f539a6..49bf19b2b0 100644
>> --- a/libavformat/utils.c
>> +++ b/libavformat/utils.c
>> @@ -158,13 +158,6 @@ int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
>>   
>>   static const AVCodec *find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
>>   {
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    if (st->codec->codec)
>> -        return st->codec->codec;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>       switch (st->codecpar->codec_type) {
>>       case AVMEDIA_TYPE_VIDEO:
>>           if (s->video_codec)    return s->video_codec;
>> @@ -354,12 +347,6 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st,
>>                   st->codecpar->codec_id   = fmt_id_type[i].id;
>>                   st->codecpar->codec_type = fmt_id_type[i].type;
>>                   st->internal->need_context_update = 1;
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -                st->codec->codec_type = st->codecpar->codec_type;
>> -                st->codec->codec_id   = st->codecpar->codec_id;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>>                   return score;
>>               }
>>           }
>> @@ -480,15 +467,6 @@ static int update_stream_avctx(AVFormatContext *s)
>>           if (ret < 0)
>>               return ret;
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -        /* update deprecated public codec context */
>> -        ret = avcodec_parameters_to_context(st->codec, st->codecpar);
>> -        if (ret < 0)
>> -            return ret;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>           st->internal->need_context_update = 0;
>>       }
>>       return 0;
>> @@ -920,13 +898,6 @@ void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStrea
>>                                                 av_mul_q(av_inv_q(st->internal->avctx->time_base), (AVRational){1, st->internal->avctx->ticks_per_frame});
>>       int frame_size, sample_rate;
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    if ((!codec_framerate.den || !codec_framerate.num) && st->codec->time_base.den && st->codec->time_base.num)
>> -        codec_framerate = av_mul_q(av_inv_q(st->codec->time_base), (AVRational){1, st->codec->ticks_per_frame});
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>       *pnum = 0;
>>       *pden = 0;
>>       switch (st->codecpar->codec_type) {
>> @@ -1547,17 +1518,6 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
>>                   return ret;
>>               }
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -            /* update deprecated public codec context */
>> -            ret = avcodec_parameters_to_context(st->codec, st->codecpar);
>> -            if (ret < 0) {
>> -                av_packet_unref(pkt);
>> -                return ret;
>> -            }
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>               st->internal->need_context_update = 0;
>>           }
>>   
>> @@ -1680,10 +1640,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>           av_opt_set_dict_val(s, "metadata", NULL, AV_OPT_SEARCH_CHILDREN);
>>       }
>>   
>> -#if FF_API_LAVF_AVCTX
>> -    update_stream_avctx(s);
>> -#endif
>> -
>>       if (s->debug & FF_FDEBUG_TS)
>>           av_log(s, AV_LOG_DEBUG,
>>                  "read_frame_internal stream=%d, pts=%s, dts=%s, "
>> @@ -3632,15 +3588,6 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
>>           }
>>   
>>           /* check if the caller has overridden the codec id */
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -        if (st->codec->codec_id != st->internal->orig_codec_id) {
>> -            st->codecpar->codec_id   = st->codec->codec_id;
>> -            st->codecpar->codec_type = st->codec->codec_type;
>> -            st->internal->orig_codec_id = st->codec->codec_id;
>> -        }
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>>           // only for the split stuff
>>           if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->internal->request_probe <= 0) {
>>               st->parser = av_parser_init(st->codecpar->codec_id);
>> @@ -4123,42 +4070,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>                   goto find_stream_info_err;
>>           }
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -        ret = avcodec_parameters_to_context(st->codec, st->codecpar);
>> -        if (ret < 0)
>> -            goto find_stream_info_err;
>> -
>> -        // The old API (AVStream.codec) "requires" the resolution to be adjusted
>> -        // by the lowres factor.
>> -        if (st->internal->avctx->lowres && st->internal->avctx->width) {
>> -            st->codec->lowres = st->internal->avctx->lowres;
>> -            st->codec->width = st->internal->avctx->width;
>> -            st->codec->height = st->internal->avctx->height;
>> -        }
>> -
>> -        if (st->codec->codec_tag != MKTAG('t','m','c','d')) {
>> -            st->codec->time_base = st->internal->avctx->time_base;
>> -            st->codec->ticks_per_frame = st->internal->avctx->ticks_per_frame;
>> -        }
>> -        st->codec->framerate = st->avg_frame_rate;
>> -
>> -        if (st->internal->avctx->subtitle_header) {
>> -            st->codec->subtitle_header = av_malloc(st->internal->avctx->subtitle_header_size);
>> -            if (!st->codec->subtitle_header)
>> -                goto find_stream_info_err;
>> -            st->codec->subtitle_header_size = st->internal->avctx->subtitle_header_size;
>> -            memcpy(st->codec->subtitle_header, st->internal->avctx->subtitle_header,
>> -                   st->codec->subtitle_header_size);
>> -        }
>> -
>> -        // Fields unavailable in AVCodecParameters
>> -        st->codec->coded_width = st->internal->avctx->coded_width;
>> -        st->codec->coded_height = st->internal->avctx->coded_height;
>> -        st->codec->properties = st->internal->avctx->properties;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>           st->internal->avctx_inited = 0;
>>       }
>>   
>> @@ -4368,11 +4279,6 @@ static void free_stream(AVStream **pst)
>>   
>>       av_dict_free(&st->metadata);
>>       avcodec_parameters_free(&st->codecpar);
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    avcodec_free_context(&st->codec);
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>>       av_freep(&st->priv_data);
>>   
>>       av_freep(pst);
>> @@ -4480,16 +4386,6 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
>>       if (!st)
>>           return NULL;
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    st->codec = avcodec_alloc_context3(c);
>> -    if (!st->codec) {
>> -        av_free(st);
>> -        return NULL;
>> -    }
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>       st->internal = av_mallocz(sizeof(*st->internal));
>>       if (!st->internal)
>>           goto fail;
>> @@ -4508,13 +4404,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>           goto fail;
>>   
>>       if (s->iformat) {
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -        /* no default bitrate if decoding */
>> -        st->codec->bit_rate = 0;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> -
>>           /* default pts setting is MPEG-like */
>>           avpriv_set_pts_info(st, 33, 1, 90000);
>>           /* we set the current DTS to 0 so that formats without any timestamps
>> @@ -4922,11 +4811,6 @@ void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits,
>>           return;
>>       }
>>       s->time_base     = new_tb;
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    s->codec->pkt_timebase = new_tb;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>>       s->internal->avctx->pkt_timebase = new_tb;
>>       s->pts_wrap_bits = pts_wrap_bits;
>>   }
>> @@ -5154,16 +5038,8 @@ static int match_stream_specifier(AVFormatContext *s, AVStream *st,
>>               if (*spec && *spec++ != ':')         /* If we are not at the end, then another specifier must follow. */
>>                   return AVERROR(EINVAL);
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -            if (type != st->codecpar->codec_type
>> -               && (st->codecpar->codec_type != AVMEDIA_TYPE_UNKNOWN || st->codec->codec_type != type))
>> -                match = 0;
>> -    FF_ENABLE_DEPRECATION_WARNINGS
>> -#else
>>               if (type != st->codecpar->codec_type)
>>                   match = 0;
>> -#endif
>>               if (nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC))
>>                   match = 0;
>>           } else if (*spec == 'p' && *(spec + 1) == ':') {
>> @@ -5230,35 +5106,16 @@ FF_DISABLE_DEPRECATION_WARNINGS
>>               return match && ret;
>>           } else if (*spec == 'u' && *(spec + 1) == '\0') {
>>               AVCodecParameters *par = st->codecpar;
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -            AVCodecContext *codec = st->codec;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>>               int val;
>>               switch (par->codec_type) {
>>               case AVMEDIA_TYPE_AUDIO:
>>                   val = par->sample_rate && par->channels;
>> -#if FF_API_LAVF_AVCTX
>> -                val = val || (codec->sample_rate && codec->channels);
>> -#endif
>> -                if (par->format == AV_SAMPLE_FMT_NONE
>> -#if FF_API_LAVF_AVCTX
>> -                    && codec->sample_fmt == AV_SAMPLE_FMT_NONE
>> -#endif
>> -                    )
>> +                if (par->format == AV_SAMPLE_FMT_NONE)
>>                       return 0;
>>                   break;
>>               case AVMEDIA_TYPE_VIDEO:
>>                   val = par->width && par->height;
>> -#if FF_API_LAVF_AVCTX
>> -                val = val || (codec->width && codec->height);
>> -#endif
>> -                if (par->format == AV_PIX_FMT_NONE
>> -#if FF_API_LAVF_AVCTX
>> -                    && codec->pix_fmt == AV_PIX_FMT_NONE
>> -#endif
>> -                    )
>> +                if (par->format == AV_PIX_FMT_NONE)
>>                       return 0;
>>                   break;
>>               case AVMEDIA_TYPE_UNKNOWN:
>> @@ -5268,11 +5125,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>                   val = 1;
>>                   break;
>>               }
>> -#if FF_API_LAVF_AVCTX
>> -            return match && ((par->codec_id != AV_CODEC_ID_NONE || codec->codec_id != AV_CODEC_ID_NONE) && val != 0);
>> -#else
>>               return match && (par->codec_id != AV_CODEC_ID_NONE && val != 0);
>> -#endif
>>           } else {
>>               return AVERROR(EINVAL);
>>           }
>> @@ -5684,15 +5537,8 @@ int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
>>       const AVCodecContext *dec_ctx;
>>       AVCodecContext       *enc_ctx;
>>   
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    dec_ctx = ist->codec;
>> -    enc_ctx = ost->codec;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#else
>>       dec_ctx = ist->internal->avctx;
>>       enc_ctx = ost->internal->avctx;
>> -#endif
>>   
>>       enc_ctx->time_base = ist->time_base;
>>       /*
>> @@ -5748,13 +5594,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>   AVRational av_stream_get_codec_timebase(const AVStream *st)
>>   {
>>       // See avformat_transfer_internal_stream_timing_info() TODO.
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> -    return st->codec->time_base;
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#else
>>       return st->internal->avctx->time_base;
>> -#endif
>>   }
>>   
>>   void ff_format_set_url(AVFormatContext *s, char *url)
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> 



More information about the ffmpeg-devel mailing list