[FFmpeg-devel] [PATCH 1/4] avcodec/bitpacked_enc: add support for uyvy422 encoding

Lance Wang lance.lmwang at gmail.com
Sun May 7 10:00:21 EEST 2023


On Sun, May 7, 2023 at 1:38 AM James Almer <jamrial at gmail.com> wrote:

> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>  libavcodec/bitpacked_enc.c | 27 ++++++++++++++++++++++++++-
>  1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/bitpacked_enc.c b/libavcodec/bitpacked_enc.c
> index 3c4e11293d..cbca38006b 100644
> --- a/libavcodec/bitpacked_enc.c
> +++ b/libavcodec/bitpacked_enc.c
> @@ -25,12 +25,36 @@
>  #include "encode.h"
>  #include "internal.h"
>  #include "put_bits.h"
> +#include "libavutil/imgutils.h"
>  #include "libavutil/pixdesc.h"
>
>  struct BitpackedContext {
>      int (*encode)(AVCodecContext *avctx, AVPacket *pkt, const AVFrame
> *frame);
>  };
>
> +static int encode_uyvy422(AVCodecContext *avctx, AVPacket *pkt, const
> AVFrame *frame)
> +{
> +    int ret = av_image_get_buffer_size(frame->format,
> +                                       frame->width, frame->height, 1);
> +
> +    if (ret < 0)
> +        return ret;
> +
> +    ret = ff_get_encode_buffer(avctx, pkt, ret, 0);
> +    if (ret < 0)
> +        return ret;
> +
> +    ret = av_image_copy_to_buffer(pkt->data, pkt->size,
> +                                  (const uint8_t **)frame->data,
> frame->linesize,
> +                                  frame->format,
> +                                  frame->width, frame->height, 1);
> +
> +    if (ret < 0)
> +        return ret;
> +
> +    return 0;
> +}
> +
>


I prefer to bitpack will used for 10-bit 4:2:2 packed format.  uyvy422
should use rawvideo as it'll passthrough directly.


 static int encode_yuv422p10(AVCodecContext *avctx, AVPacket *pkt, const
> AVFrame *frame)
>  {
>      const int buf_size = avctx->height * avctx->width *
> avctx->bits_per_coded_sample / 8;
> @@ -85,7 +109,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
>      if (avctx->pix_fmt == AV_PIX_FMT_YUV422P10)
>          s->encode = encode_yuv422p10;
>      else
> -        return AVERROR(EINVAL);
> +        s->encode = encode_uyvy422;
>
>      return 0;
>  }
> @@ -115,5 +139,6 @@ const FFCodec ff_bitpacked_encoder = {
>      .init           = encode_init,
>      FF_CODEC_ENCODE_CB(encode_frame),
>      .p.pix_fmts     = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV422P10,
> +                                                    AV_PIX_FMT_UYVY422,
>                                                      AV_PIX_FMT_NONE },
>  };
> --
> 2.40.1
>
> _______________________________________________
> 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