[FFmpeg-devel] Major bump

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Wed Apr 21 05:54:26 EEST 2021


Steven Liu:
> 
> 
>> 2021年4月5日 下午7:09,Anton Khirnov <anton at khirnov.net> 写道:
>>
>> Hi,
>> this patchset bumps major version of all the libraries and removes many
>> deprecated APIs, as discussed at length during past months. Patches
>> 11-16 will be squashed together on push, but are sent separately for
>> ease of review. FATE passes (here at least).
>>
>> As agreed during the last developer call, I am disabling the
>> uspp/mcdeint filters that depend on removed libavcodec APIs. They should
>> be easy to re-enable if anyone finds the motivation to update them.
>>
>> I am postponing the removal of compute_muxer_pkt_fields() in lavf, along
>> with usage of AVCodecContext.time_base for decoding, since removing them
>> without breakage requires a fair bit of additional infrastructure that
>> is not yet there. I have plans for all these and hopefully I'll get to
>> it before the next bump.
>>
>> Carl asked during the last meeting for some reasoning for the bump. The
>> general reasons are that
>> - old APIs are unable to provide all the features of the new ones
>>  (that's usually why new APIs are added)
>> - old APIs tend to be harder to use correctly, they often have obscure
>>  quirks or corner cases
>> - maintaining compatibility wrappers for them is a major obstacle to
>>  further development
>> I'm appending some notes for the specific changes further down, they
>> could be added to the wiki or the website news entry.
>>
>> Please comment,
>> -- 
>> Anton Khirnov
>>
>> Major bump notes
>> ================
>> libavcodec
>> ----------
>> * old audio/video decoding APIs avcodec_decode_video2 and
>>  avcodec_decode_audio4 were removed;
>>  they are replaced by avcodec_send_packet/avcodec_receive_frame, which
>>  decouple input and output and can return any number of output frames
>>  for a single input packet
>> * old audio/video encoding APIs avcodec_encode_video2 and
>>  avcodec_encode_audio2 were removed;
>>  they are replaced by avcodec_send_frame/avcodec_receive_packet, which
>>  decouple input and output and can return any number of output packets
>>  for a single input frame
>> * AVCodecContext.coded_frame removed without replacement
>> * AVCodecContext.side_data_only_packets removed, codecs (currently only flacenc)
>>  now always behave as if this field was set to 1
>> * AVCodecContext.vbv_delay removed, replaced by AV_PKT_DATA_CPB_PROPERTIES side data
>> * AVCodecContext.rtp_callback removed without replacement
>> * AVCodecContext.*_bits removed without replacement
>> * following AVCodecContext fields  removed, replaced by encoder-private options
>>    - coder_type and FF_CODER_TYPE*
>>    - b_frame_strategy
>>    - mpeg_quant
>>    - prediction_method and FF_PRED_*
>>    - pre_me
>>    - scenechange_threshold
>>    - noise_reduction
>>    - me_penalty_compensation
>>    - brd_scale
>>    - chromaoffset
>>    - b_sensitivity
>>    - context_model
>>    - frame_skip_*
>>    - min/max_prediction_order
>>    - timecode_frame_start
>>    - rtp_payload_size
>> * AVPacket.convergence_duration removed, use AVPacket.duration instead
>> * AVPacket API for pre-refcounted memory management were removed
>>    - av_dup_packet
>>    - av_copy_packet
>>    - av_copy_packet_side_data
>>    - av_free_packet
>>  users should use refcounted packet API instead
>> * av_packet_merge_side_data and av_packet_split_side_data removed without replacement,
>>  packets with merged side data are no longer supported
>> * AVPicture and its related APIs removed; it is replaced either by AVFrame API
>>  or imgutils in libavutil
>> * old bistream filtering API (using AVBitStreamFilterContext) removed, replaced by the API
>>  in libavcodec/bsf.h
>> * avcodec_copy_context removed, it never makes sense for users to call this function
>> * avcodec_get_context_defaults3 removed, users should allocate a new codec context
>>  instead of resettting an old one
>> * av_get_codec_tag_string replaced by av_fourcc_make_string/av_fourcc2str
>> * avcodec_get_chroma_sub_sample replaced by av_pix_fmt_get_chroma_sub_sample
>> * AVCodecContext accessors removed, AVCodecContext fields should be accessed directly
>> * AVHWAccel and its related functions removed from public API, as there was no reason
>>  for them to be user-visible
>> * AV_CODEC_CAP_INTRA_ONLY and AV_CODEC_CAP_INTRA_ONLY removed, use corresponding
>>  AVCodecDescriptor.props values instead
>> * av_lockmgr_register and AVLockOp removed, libavcodec handles locking internally
>> * codec registration APIs removed, all codecs are always registered
>>    - avcodec_register
>>    - avcodec_register_all
>> * av_codec_next replaced by av_codec_iterate
>> * AVCPBProperties.max/min/avg_bitrate types changed from int to int64_t
>> * avcodec_get_pix_fmt_loss replaced by av_get_pix_fmt_loss
>> * avcodec_find_best_pix_fmt_of_2 replaced by avcodec_find_best_pix_fmt_of_2
>> * avcodec_find_best_pix_fmt2 removed
>> * av_parser_change removed; dump_extradata, remove_extra or extract_extradata
>>  should be used instead
>> * FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS removed, ASS subtitles are always decoded without timings
>> * mpegvideo encoders' rc_strategy option removed, as it had no effect
>> * av_vdpau_get_profile removed, users should call av_vdpau_get_profile to set up
>>  VDPAU decoding
>> * libopenh264 encoder's 'slice_mode' option removed, as it is redundant with 'slices'/'max_nal_size'
>>  options
>> * libopenh264 encoder's 'cabac' option replaced with 'coder cabac'
>> * 'nvenc' encoder renamed to 'h264_nvenc'
>> * struct vaapi_context removed, AVCodecContext.hw_frames_ctx in combination with the API
>>  in libavutil/hwcontext.h should be used instead
>>
>> libavformat
>> -----------
>> * AVFormatContext.open_cb replaced by io_open/io_close
>> * AVStream.codec removed; stream information is now exported through
>>  AVStream.codecpar; for decoding/encoding the users should allocate
>>  a separate codec context
>> * HTTP and RTSP protocol's 'user-agent' option renamed to 'user_agent'
>> * HLS muxer's 'hls_wrap' option removed, users should use
>>  'hls_list_size'/'hls_flags delete_segments' instead
>> * HLS muxer's 'user_localtime'/'use_localtime_mkdir' options removed, users
>>  should use 'strftime'/'strftime_mkdir' instead
>> * AVFMT_FLAG_KEEP_SIDE_DATA removed, it has had no effect since last major bump
>> * mov muxer/demuxer no longer read/export the "rotate" tag, use
>>  AV_PKT_DATA_DISPLAYMATRIX instead
>> * AVFormatContext accessors removed, AVFormatContext fields should be accessed
>>  directly
>> * custom AVIOContext instances may no longer return 0 on EOF, they should return
>>  AVERROR_EOF or another appropriate error code
>> * APIs related to ffserver removed without replacement, as ffserver itself has been
>>  removed
>>    - AVStream.recommended_encoder_configuration
>>    - av_stream_get_recommended_encoder_configuration
>>    - av_stream_set_recommended_encoder_configuration
>> * AVFormatContext.filename replaces with AVFormatContext.url
>> * format registration APIs removed, all formats are always registered
>>    - av_register_all
>>    - av_register_input_format
>>    - av_register_output_format
> I get a problem,
> How should I register my self format dynamic if remove av_register_input_format, av_register_output_format?
> Or only one way, just add new format into ffmpeg source code and recomplie whole ffmpeg project for API user?
> 

There is no plugin-system for formats (after all,
sizeof(AVInputFormat/AVOutputFormat) is not part of the public API); if
you want to add a specific format, you either have to submit it for
inclusion into libavformat itself or maintain your own fork with it
included. Notice that removing av_register_in/output_format does not
remove said functionality, because it doesn't exist right now anyway
(said functions ignore the format argument).

>> * av_iformat_next replaced with av_demuxer_iterate
>> * av_oformat_next replaced with av_muxer_iterate
>> * DASH muxer's 'min_seg_duration' option replaced with 'seg_duration'
>> * AVFMT_FLAG_MP4A_LATM removed, as it had no effect since 2011
>> * all instances of AVOutputFormat/AVInputFormat visible through the API
>>  are now const-qualified
>>  this is only a type change, as the caller was never allowed to modify them
>> * av_demuxer_open removed, use avformat_open_input with an options dictionary
>> * AVChapter.id type changed from int to int64_t
>>
>> libavutil
>> ---------
>> * old VAAPI pixel formats
>>    - AV_PIX_FMT_VAAPI_IDCT and AV_PIX_FMT_VAAPI_MOCO were never-used - just removed
>>    - AV_PIX_FMT_VAAPI_VLD renamed to just AV_PIX_FMT_VAAPI
>> * QP tables in AVFrame were removed, as they were not flexible enough for new codecs
>>    - qscale_table
>>    - qstride
>>    - qscale_type
>>    - qp_table_buf
>>  they were replaced by the API in libavutil/video_enc_params.h
>> * AVFrame.error removed without replacement
>> * AVFrame.pkt_pts replaced with AVFrame.pts
>> * AVFrame accessors were removed, AVFrame fields should be accessed directly
>> * types of arguments/return values of the following functions changed from
>>  (unsigned) int to size_t:
>>    - av_adler32_update
>>    - av_hash_update
>>    - av_md5_update
>>    - av_md5_sum
>>    - av_murmur3_update
>>    - av_ripemd_update
>>    - av_sha_update
>>    - av_sha512_update
>>    - av_buffer_alloc
>>    - av_buffer_allocz
>>    - av_buffer_create
>>    - av_buffer_realloc
>>    - av_buffer_pool_init
>>    - av_buffer_pool_init2
>> * AVBufferRef.size changed from int to size_t
>> * "compressed" AVComponentDescriptor fields
>>    - step_minus1
>>    - depth_minus1
>>    - offset_plus1
>>  were replaced by same fields without the offset
>> * AV_PIX_FMT_FLAG_PSEUDOPAL removed, pixel formats previously flagged with it
>>  are no longer treated as paletted
>> _______________________________________________
>> 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".
> 
> Thanks
> 
> Steven Liu
> 
> 
> 
> _______________________________________________
> 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