ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | Wed Mar 19 08:11:01 2025 +0100| [a064d34a32a860d237d31f014002c6134a286656] | committer: Andreas Rheinhardt
avcodec/mpegvideoenc: Add MPVEncContext Many of the fields of MpegEncContext (which is also used by decoders) are actually only used by encoders. Therefore this commit adds a new encoder-only structure and moves all of the encoder-only fields to it except for those which require more explicit synchronisation between the main slice context and the other slice contexts. This synchronisation is currently mainly provided by ff_update_thread_context() which simply copies most of the main slice context over the other slice contexts. Fields which are moved to the new MPVEncContext no longer participate in this (which is desired, because it is horrible and for the fields b) below wasteful) which means that some fields can only be moved when explicit synchronisation code is added in later commits. More explicitly, this commit moves the following fields: a) Fields not copied by ff_update_duplicate_context(): dct_error_sum and dct_count; the former does not need synchronisation, the latter is synchronised in merge_context_after_encode(). b) Fields which do not change after initialisation (these fields could also be put into MPVMainEncContext at the cost of an indirection to access them): lambda_table, adaptive_quant, {luma,chroma}_elim_threshold, new_pic, fdsp, mpvencdsp, pdsp, {p,b_forw,b_back,b_bidir_forw,b_bidir_back,b_direct,b_field}_mv_table, [pb]_field_select_table, mb_{type,var,mean}, mc_mb_var, {min,max}_qcoeff, {inter,intra}_quant_bias, ac_esc_length, the *_vlc_length fields, the q_{intra,inter,chroma_intra}_matrix{,16}, dct_offset, mb_info, mjpeg_ctx, rtp_mode, rtp_payload_size, encode_mb, all function pointers, mpv_flags, quantizer_noise_shaping, frame_reconstruction_bitfield, error_rate and intra_penalty. c) Fields which are already (re)set explicitly: The PutBitContexts pb, tex_pb, pb2; dquant, skipdct, encoding_error, the statistics fields {mv,i_tex,p_tex,misc,last}_bits and i_count; last_mv_dir, esc_pos (reset when writing the header). d) Fields which are only used by encoders not supporting slice threading for which synchronisation doesn't matter: esc3_level_length and the remaining mb_info fields. e) coded_score: This field is only really used when FF_MPV_FLAG_CBP_RD is set (which implies trellis) and even then it is only used for non-intra blocks. For these blocks dct_quantize_trellis_c() either sets coded_score[n] or returns a last_non_zero value of -1 in which case coded_score will be reset in encode_mb_internal(). Therefore no old values are ever used. The MotionEstContext has not been moved yet. Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a064d34a32a860d237d31f014002c6134a286656 --- libavcodec/aarch64/me_cmp_init_aarch64.c | 58 +- libavcodec/arm/me_cmp_init_arm.c | 11 +- libavcodec/dnxhdenc.c | 283 ++-- libavcodec/dnxhdenc.h | 4 +- libavcodec/flvenc.c | 32 +- libavcodec/h261enc.c | 104 +- libavcodec/h261enc.h | 4 +- libavcodec/h263enc.h | 26 +- libavcodec/ituh263enc.c | 248 ++-- libavcodec/me_cmp.c | 100 +- libavcodec/me_cmp.h | 6 +- libavcodec/mips/me_cmp_mips.h | 32 +- libavcodec/mips/me_cmp_msa.c | 28 +- libavcodec/mips/mpegvideo_mips.h | 3 +- libavcodec/mips/mpegvideoenc_init_mips.c | 2 +- libavcodec/mips/mpegvideoenc_mmi.c | 4 +- libavcodec/mips/mpegvideoencdsp_init_mips.c | 1 + libavcodec/mips/pixblockdsp_init_mips.c | 1 + libavcodec/mips/pixblockdsp_mips.h | 3 +- libavcodec/mjpegenc.c | 86 +- libavcodec/mjpegenc.h | 8 +- libavcodec/motion_est.c | 499 +++---- libavcodec/motion_est.h | 20 +- libavcodec/motion_est_template.c | 104 +- libavcodec/mpeg12enc.c | 460 +++--- libavcodec/mpeg12enc.h | 10 +- libavcodec/mpeg4videoenc.c | 505 ++++--- libavcodec/mpeg4videoenc.h | 12 +- libavcodec/mpegvideo.c | 3 - libavcodec/mpegvideo.h | 123 +- libavcodec/mpegvideo_dec.c | 2 +- libavcodec/mpegvideo_enc.c | 2113 ++++++++++++++------------- libavcodec/mpegvideoenc.h | 154 +- libavcodec/msmpeg4enc.c | 157 +- libavcodec/msmpeg4enc.h | 8 +- libavcodec/ppc/me_cmp.c | 20 +- libavcodec/ratecontrol.c | 261 ++-- libavcodec/riscv/me_cmp_init.c | 44 +- libavcodec/rv10enc.c | 16 +- libavcodec/rv20enc.c | 36 +- libavcodec/snow_dwt.c | 14 +- libavcodec/snow_dwt.h | 6 +- libavcodec/snowenc.c | 128 +- libavcodec/speedhqenc.c | 28 +- libavcodec/speedhqenc.h | 6 +- libavcodec/svq1enc.c | 126 +- libavcodec/wmv2enc.c | 66 +- libavcodec/x86/me_cmp.asm | 16 +- libavcodec/x86/me_cmp_init.c | 62 +- libavcodec/x86/mpegvideoenc.c | 9 +- libavcodec/x86/mpegvideoenc_template.c | 40 +- tests/checkasm/motion.c | 2 +- 52 files changed, 3053 insertions(+), 3041 deletions(-) Diff: http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commitdiff;h=a064d34a32a860d237d31f014002c6134a286656 _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".