[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