[FFmpeg-devel] [RFC] cineform CFHD encoder, and decoder speedup

James Almer jamrial at gmail.com
Thu Jul 30 20:25:03 EEST 2020


On 7/30/2020 1:32 PM, Paul B Mahol wrote:
> Hi,
> 
> patches attached.
> 
> Decoder speedup is approx %20 overall.

> From 9692daafc0c4a69ce3cf7dca5b5aa90b5737e15f Mon Sep 17 00:00:00 2001
> From: Paul B Mahol <onemda at gmail.com>
> Date: Sat, 25 Jul 2020 18:18:18 +0200
> Subject: [PATCH 1/2] avcodec: add CFHD encoder
> 
> ---
>  libavcodec/Makefile    |   1 +
>  libavcodec/allcodecs.c |   1 +
>  libavcodec/cfhd.c      |  28 --
>  libavcodec/cfhd.h      |  52 +++
>  libavcodec/cfhdenc.c   | 750 +++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 804 insertions(+), 28 deletions(-)
>  create mode 100644 libavcodec/cfhdenc.c

[...]

> +static av_cold int cfhd_encode_init(AVCodecContext *avctx)
> +{
> +    CFHDEncContext *s = avctx->priv_data;
> +    const int sign_mask = 256;
> +    const int twos_complement = -sign_mask;
> +    const int mag_mask = sign_mask - 1;
> +
> +    s->planes = av_pix_fmt_count_planes(avctx->pix_fmt);
> +    if (avctx->compression_level == FF_COMPRESSION_DEFAULT)
> +        s->compression = 2;
> +    s->compression = av_clip(avctx->compression_level, 0, 9);
> +
> +    for (int i = 0; i < s->planes; i++) {
> +        int w8, h8, w4, h4, w2, h2;
> +        int width  = avctx->width;
> +        int height = avctx->height;
> +        ptrdiff_t stride = FFALIGN(width / 8, 8) * 8;
> +
> +        s->plane[i].width  = width;
> +        s->plane[i].height = height;
> +        s->plane[i].stride = stride;

These three seem unused. For the first two you're always using the
relevant s->plane[i].band[j][k] fields instead. But for stride, you're
not even using the band one.

[...]

> +
> +    bytestream2_put_be16(pby, GroupTrailer);
> +    bytestream2_put_be16(pby, 0);
> +
> +    pkt->size   = bytestream2_tell_p(pby);

Use av_shrink_packet(), as it also zeroes the padding bytes.


More information about the ffmpeg-devel mailing list