[FFmpeg-devel] Major bump
Steven Liu
lq at chinaffmpeg.org
Wed Apr 21 05:44:08 EEST 2021
> 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?
> * 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
More information about the ffmpeg-devel
mailing list