Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Ramiro Polla <ramiro.polla@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] Misc mpegvideo patches
Date: Tue, 4 Mar 2025 17:30:41 +0100
Message-ID: <0ef6683d-688a-4e09-ab65-bd2131253a0d@gmail.com> (raw)
In-Reply-To: <AS8P250MB07445077099B2824F7850E288FC82@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM>


On 3/4/25 14:42, Andreas Rheinhardt wrote:
> (Mostly trivial) patches attached. A branch is at
> https://github.com/mkver/FFmpeg/tree/mpegvideo_misc


[PATCH 10/40] avcodec/mpegvideo_enc: Move default_mv_penalty to h261enc.c

> diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c
> index dabab9d80a..e33bf35a8a 100644
> --- a/libavcodec/h261enc.c
> +++ b/libavcodec/h261enc.c
> @@ -46,6 +46,7 @@ static struct VLCLUT {
>      uint16_t code;
>  } vlc_lut[H261_MAX_RUN + 1][32 /* 0..2 * H261_MAX_LEN are used */];
>  
> +static uint8_t mv_penalty[MAX_FCODE + 1][MAX_DMV * 2 + 1];
>  static uint8_t uni_h261_rl_len     [64 * 128];
>  static uint8_t uni_h261_rl_len_last[64 * 128];
>  static uint8_t h261_mv_codes[64][2];
> @@ -370,6 +371,8 @@ av_cold int ff_h261_encode_init(MpegEncContext *s)
>      s->max_qcoeff       = 127;
>      s->ac_esc_length    = H261_ESC_LEN;
>  
> +    s->me.mv_penalty = mv_penalty;
> +
>      s->intra_ac_vlc_length      = s->inter_ac_vlc_length      = uni_h261_rl_len;
>      s->intra_ac_vlc_last_length = s->inter_ac_vlc_last_length = uni_h261_rl_len_last;
>      ff_thread_once(&init_static_once, h261_encode_init_static);

This global mv_penalty doesn't seem to be ever initialized; it could be 
declared const.
But it also makes me think that whatever code is using this mv_penalty, 
which is always set to zero, might be calculating things wrong.


[PATCH 15/40] avcodec/ituh263enc: Make SVQ1+Snowenc stop calling 
ff_h263_encode_init()

> diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c
> index 02da090ba4..8313b2c2c1 100644
> --- a/libavcodec/ituh263enc.c
> +++ b/libavcodec/ituh263enc.c
> @@ -65,6 +65,127 @@ static uint8_t  uni_h263_inter_rl_len [64*64*2*2];
[...]
> +static av_cold void h263_encode_init_static(void)
> +{
> +    static uint8_t rl_intra_table[2][2 * MAX_RUN + MAX_LEVEL + 3];
> +
> +    ff_rl_init(&ff_rl_intra_aic, rl_intra_table);
> +    ff_h263_init_rl_inter();
> +
> +    init_uni_h263_rl_tab(&ff_rl_intra_aic,  uni_h263_intra_aic_rl_len);
> +    init_uni_h263_rl_tab(&ff_h263_rl_inter, uni_h263_inter_rl_len);
> +
> +    init_mv_penalty_and_fcode();
> +}
> +
> +av_cold const uint8_t (*ff_h263_get_mv_penalty(void))[MAX_DMV*2+1]
> +{
> +    static AVOnce init_static_once = AV_ONCE_INIT;
> +
> +    ff_thread_once(&init_static_once, h263_encode_init_static);
> +
> +    return mv_penalty;
> +}
> +

This approach kind of hides the rest of h263_encode_init_static() inside 
ff_h263_get_mv_penalty(), so the name is a bit misleading. I'd expect 
h263 to still call some init function and ff_h263_get_mv_penalty(), and 
SVQ1 and Snow to only call ff_h263_get_mv_penalty(), which would only 
take care of the mv_penalty table.


[PATCH 18/40] avcodec/ituh263dec: Reorder branches

> diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c
> index e0f3034e57..93349a3b0e 100644
> --- a/libavcodec/ituh263dec.c
> +++ b/libavcodec/ituh263dec.c
> @@ -543,6 +543,8 @@ static int h263_decode_block(MpegEncContext * s, int16_t * block,
>      if (s->h263_aic && s->mb_intra) {
>          rl = &ff_rl_intra_aic;
>          i = 0;
> +        if (!coded)
> +            goto not_coded;

Why not move the if before setting rl (doesn't seem to be used) and i 
(will be overwritten anyways)?

>          if (s->ac_pred) {
>              if (s->h263_aic_dir)
>                  scan_table = s->permutated_intra_v_scantable; /* left */
> @@ -587,8 +589,6 @@ static int h263_decode_block(MpegEncContext * s, int16_t * block,
>          i = 0;
>      }
>      if (!coded) {
> -        if (s->mb_intra && s->h263_aic)
> -            goto not_coded;
>          s->block_last_index[n] = i - 1;
>          return 0;
>      }


[PATCH 20/40] avcodec/mpeg4video: Split ff_mpeg4_pred_dc()

> diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
> index 64fb96a0cf..26f9b40ff7 100644
> --- a/libavcodec/mpeg4videoenc.c
> +++ b/libavcodec/mpeg4videoenc.c
> @@ -806,8 +806,14 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64],
>          const uint8_t *scan_table[6];
>          int i;
>  
> -        for (i = 0; i < 6; i++)
> -            dc_diff[i] = ff_mpeg4_pred_dc(s, i, block[i][0], &dir[i], 1);
> +        for (int i = 0; i < 6; i++) {

Redeclaring i inside for.

> +            int pred  = ff_mpeg4_pred_dc(s, i, &dir[i]);
> +            int scale = i < 4 ? s->y_dc_scale : s->c_dc_scale;
> +
> +            pred = FASTDIV((pred + (scale >> 1)), scale);
> +            dc_diff[i] = block[i][0] - pred;
> +            s->dc_val[0][s->block_index[i]] = av_clip_uintp2(block[i][0] * scale, 11);
> +        }
>  
>          if (s->avctx->flags & AV_CODEC_FLAG_AC_PRED) {
>              s->ac_pred = decide_ac_pred(s, block, dir, scan_table, zigzag_last_index);


[PATCH 35/40] avcodec/speedhqenc: Inline ff_speedhq_mb_y_order_to_mb()

Why? I'm not against this, but it doesn't seem to have a greater reason.

Ramiro

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2025-03-04 16:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-04 13:42 Andreas Rheinhardt
2025-03-04 16:30 ` Ramiro Polla [this message]
2025-03-04 17:04   ` Andreas Rheinhardt
2025-03-04 18:39     ` Ramiro Polla

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0ef6683d-688a-4e09-ab65-bd2131253a0d@gmail.com \
    --to=ramiro.polla@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git