FFmpeg/libavcodec/vc2enc_dwt.h
Rostislav Pehlivanov 2b811e4605 vc2enc: halve allocated table size, refactor and optimize quantization
Since coefficients differ only in the last bit when writing to the
bitstream it was possible to remove the sign from the tables, thus
halving them. Also now all quantization is done in the unsigned domain
as the sign is completely separate, which gets rid of the need to do
quantization on 32 bit signed integers.

Overall, this slightly speeds up the encoder depending on the machine.
The commit still generates bit-identical files as before the commit.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-02-26 14:47:06 +00:00

55 lines
2.0 KiB
C

/*
* Copyright (C) 2016 Open Broadcast Systems Ltd.
* Author 2016 Rostislav Pehlivanov <atomnuker@gmail.com>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VC2ENC_DWT_H
#define AVCODEC_VC2ENC_DWT_H
#include <stddef.h>
#include <stdint.h>
typedef int16_t dwtcoef;
/* Only Deslauriers-Dubuc (9,7) and LeGall (5,3) supported! */
enum VC2TransformType {
VC2_TRANSFORM_9_7 = 0, /* Deslauriers-Dubuc (9,7) */
VC2_TRANSFORM_5_3 = 1, /* LeGall (5,3) */
VC2_TRANSFORM_13_7 = 2, /* Deslauriers-Dubuc (13,7) */
VC2_TRANSFORM_HAAR = 3, /* Haar without shift */
VC2_TRANSFORM_HAAR_S = 4, /* Haar with 1 shift/lvl */
VC2_TRANSFORM_FIDEL = 5, /* Fidelity filter */
VC2_TRANSFORM_9_7_I = 6, /* Daubechies (9,7) */
VC2_TRANSFORMS_NB
};
typedef struct VC2TransformContext {
dwtcoef *buffer;
void (*vc2_subband_dwt[VC2_TRANSFORMS_NB])(struct VC2TransformContext *t,
dwtcoef *data, ptrdiff_t stride,
int width, int height);
} VC2TransformContext;
int ff_vc2enc_init_transforms(VC2TransformContext *t, int p_width, int p_height);
void ff_vc2enc_free_transforms(VC2TransformContext *t);
#endif /* AVCODEC_VC2ENC_DWT_H */