Signed-off-by: Timothy Gu <timothyg...@gmail.com> --- libavcodec/Makefile | 4 ++-- libavcodec/proresenc_anatoliy.c | 43 ++++++++++++++--------------------------- 2 files changed, 16 insertions(+), 31 deletions(-)
diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 307ad22..e3f75f5 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -369,8 +369,8 @@ OBJS-$(CONFIG_PPM_DECODER) += pnmdec.o pnm.o OBJS-$(CONFIG_PPM_ENCODER) += pnmenc.o OBJS-$(CONFIG_PRORES_DECODER) += proresdec2.o proresdsp.o proresdata.o OBJS-$(CONFIG_PRORES_LGPL_DECODER) += proresdec_lgpl.o proresdsp.o proresdata.o -OBJS-$(CONFIG_PRORES_ENCODER) += proresenc_anatoliy.o -OBJS-$(CONFIG_PRORES_AW_ENCODER) += proresenc_anatoliy.o +OBJS-$(CONFIG_PRORES_ENCODER) += proresenc_anatoliy.o proresdata.o +OBJS-$(CONFIG_PRORES_AW_ENCODER) += proresenc_anatoliy.o proresdata.o OBJS-$(CONFIG_PRORES_KS_ENCODER) += proresenc_kostya.o proresdata.o OBJS-$(CONFIG_PTX_DECODER) += ptx.o OBJS-$(CONFIG_QCELP_DECODER) += qcelpdec.o \ diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c index f471f49..b8531cd 100644 --- a/libavcodec/proresenc_anatoliy.c +++ b/libavcodec/proresenc_anatoliy.c @@ -32,6 +32,7 @@ #include "put_bits.h" #include "bytestream.h" #include "fdctdsp.h" +#include "proresdata.h" #define DEFAULT_SLICE_MB_WIDTH 8 @@ -52,17 +53,6 @@ static const int qp_start_table[4] = { 4, 1, 1, 1 }; static const int qp_end_table[4] = { 8, 9, 6, 6 }; static const int bitrate_table[5] = { 1000, 2100, 3500, 5400 }; -static const uint8_t progressive_scan[64] = { - 0, 1, 8, 9, 2, 3, 10, 11, - 16, 17, 24, 25, 18, 19, 26, 27, - 4, 5, 12, 20, 13, 6, 7, 14, - 21, 28, 29, 22, 15, 23, 30, 31, - 32, 33, 40, 48, 41, 34, 35, 42, - 49, 56, 57, 50, 43, 36, 37, 44, - 51, 58, 59, 52, 45, 38, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63 -}; - static const uint8_t QMAT_LUMA[4][64] = { { 4, 7, 9, 11, 13, 14, 15, 63, @@ -196,10 +186,6 @@ static av_always_inline int get_level(int val) return (val ^ sign) - sign; } -#define FIRST_DC_CB 0xB8 - -static const uint8_t dc_codebook[7] = { 0x04, 0x28, 0x28, 0x4D, 0x4D, 0x70, 0x70}; - static void encode_dc_coeffs(PutBitContext *pb, int16_t *in, int blocks_per_slice, int *qmat) { @@ -211,48 +197,47 @@ static void encode_dc_coeffs(PutBitContext *pb, int16_t *in, code = TO_GOLOMB(prev_dc); encode_codeword(pb, code, FIRST_DC_CB); - code = 5; sign = 0; idx = 64; + code = 3; sign = 0; idx = 64; for (i = 1; i < blocks_per_slice; i++, idx += 64) { new_dc = QSCALE(qmat, 0, in[idx] - 16384); delta = new_dc - prev_dc; diff_sign = DIFF_SIGN(delta, sign); new_code = TO_GOLOMB2(get_level(delta), diff_sign); - - encode_codeword(pb, new_code, dc_codebook[FFMIN(code, 6)]); - - code = new_code; + encode_codeword(pb, new_code, ff_prores_dc_codebook[code]); + code = (new_code + (new_code & 1)) >> 1; + code = FFMIN(code, 3); sign = delta >> 31; prev_dc = new_dc; } } -static const uint8_t run_to_cb[16] = { 0x06, 0x06, 0x05, 0x05, 0x04, 0x29, - 0x29, 0x29, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x4C }; -static const uint8_t lev_to_cb[10] = { 0x04, 0x0A, 0x05, 0x06, 0x04, 0x28, - 0x28, 0x28, 0x28, 0x4C }; - static void encode_ac_coeffs(AVCodecContext *avctx, PutBitContext *pb, int16_t *in, int blocks_per_slice, int *qmat) { int prev_run = 4; int prev_level = 2; - int run = 0, level, code, i, j; + int run = 0, level, code, i, j, run_cb, lev_cb; + run_cb = ff_prores_run_to_cb_index[4]; + lev_cb = ff_prores_lev_to_cb_index[2]; + for (i = 1; i < 64; i++) { - int indp = progressive_scan[i]; + int indp = ff_prores_progressive_scan[i]; for (j = 0; j < blocks_per_slice; j++) { int val = QSCALE(qmat, indp, in[(j << 6) + indp]); if (val) { - encode_codeword(pb, run, run_to_cb[FFMIN(prev_run, 15)]); + encode_codeword(pb, run, ff_prores_ac_codebook[run_cb]); prev_run = run; run = 0; level = get_level(val); code = level - 1; - encode_codeword(pb, code, lev_to_cb[FFMIN(prev_level, 9)]); + encode_codeword(pb, code, ff_prores_ac_codebook[lev_cb]); prev_level = level; + run_cb = ff_prores_run_to_cb_index[FFMIN(prev_run, 15)]; + lev_cb = ff_prores_lev_to_cb_index[FFMIN(prev_level, 9)]; put_bits(pb, 1, IS_NEGATIVE(val)); } else { -- 1.9.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel