[FFmpeg-devel] [PATCH] mjpegenc: yuvj444p support

Michael Niedermayer michaelni at gmx.at
Sat Nov 17 19:18:40 CET 2012


On Fri, Nov 16, 2012 at 01:19:25PM +0000, Paul B Mahol wrote:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  libavcodec/mjpegenc.c      | 12 ++++++--
>  libavcodec/mpegvideo.h     |  4 +--
>  libavcodec/mpegvideo_enc.c | 76 ++++++++++++++++++++++++++++++++--------------
>  3 files changed, 65 insertions(+), 27 deletions(-)
> 
> diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c
> index 1d7741b..72db5b1 100644
> --- a/libavcodec/mjpegenc.c
> +++ b/libavcodec/mjpegenc.c
> @@ -463,10 +463,18 @@ void ff_mjpeg_encode_mb(MpegEncContext *s, DCTELEM block[6][64])
>      }
>      if (s->chroma_format == CHROMA_420) {
>          encode_block(s, block[5], 5);
> -    } else {
> +    } else if (s->chroma_format == CHROMA_422) {
>          encode_block(s, block[6], 6);
>          encode_block(s, block[5], 5);
>          encode_block(s, block[7], 7);
> +    } else {
> +        encode_block(s, block[8], 6);
> +        encode_block(s, block[6], 8);
> +        encode_block(s, block[10], 10);
> +        encode_block(s, block[5], 5);
> +        encode_block(s, block[9], 7);
> +        encode_block(s, block[7], 9);
> +        encode_block(s, block[11], 11);
>      }

Iam unsure that this layout is optimal, my concern is that the
2x4 chroma blocks are layout differently from the luma blocks and
this could become an annoyance when we add 4:4:4 support to more codecs
but then maybe not ...


[...]
> @@ -1977,6 +1993,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s,
>                      s->interlaced_dct = 1;
>  
>                      dct_offset = wrap_y;
> +                    uv_dct_offset = wrap_c;
>                      wrap_y <<= 1;
>                      if (s->chroma_format == CHROMA_422)
>                          wrap_c <<= 1;
> @@ -1998,10 +2015,10 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s,
>              s->dsp.diff_pixels(s->block[4], ptr_cb, dest_cb, wrap_c);
>              s->dsp.diff_pixels(s->block[5], ptr_cr, dest_cr, wrap_c);
>              if (!s->chroma_y_shift) { /* 422 */
> -                s->dsp.diff_pixels(s->block[6], ptr_cb + (dct_offset >> 1),
> -                                   dest_cb + (dct_offset >> 1), wrap_c);
> -                s->dsp.diff_pixels(s->block[7], ptr_cr + (dct_offset >> 1),
> -                                   dest_cr + (dct_offset >> 1), wrap_c);
> +                s->dsp.diff_pixels(s->block[6], ptr_cb + uv_dct_offset,
> +                                   dest_cb + uv_dct_offset, wrap_c);
> +                s->dsp.diff_pixels(s->block[7], ptr_cr + uv_dct_offset,
> +                                   dest_cr + uv_dct_offset, wrap_c);
>              }
>          }
>          /* pre quantization */
> @@ -2028,12 +2045,12 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s,
>                                wrap_c, 8) < 20 * s->qscale)
>                  skip_dct[5] = 1;
>              if (!s->chroma_y_shift) { /* 422 */
> -                if (s->dsp.sad[1](NULL, ptr_cb + (dct_offset >> 1),
> -                                  dest_cb + (dct_offset >> 1),
> +                if (s->dsp.sad[1](NULL, ptr_cb + uv_dct_offset,
> +                                  dest_cb + uv_dct_offset,
>                                    wrap_c, 8) < 20 * s->qscale)
>                      skip_dct[6] = 1;
> -                if (s->dsp.sad[1](NULL, ptr_cr + (dct_offset >> 1),
> -                                  dest_cr + (dct_offset >> 1),
> +                if (s->dsp.sad[1](NULL, ptr_cr + uv_dct_offset,
> +                                  dest_cr + uv_dct_offset,
>                                    wrap_c, 8) < 20 * s->qscale)
>                      skip_dct[7] = 1;
>              }

above 3 hunks should not be needed for intra only codecs like jpeg

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

In fact, the RIAA has been known to suggest that students drop out
of college or go to community college in order to be able to afford
settlements. -- The RIAA
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20121117/afe6f7b4/attachment.asc>


More information about the ffmpeg-devel mailing list