[FFmpeg-cvslog] hevc: Add NEON 4x4 and 8x8 IDCT
ffmpeg | branch: master | Alexandra Hájková | Mon Mar 27 09:52:55 2017 +0200| [0b9a237b2386ff84a6f99716bd58fa27a1b767e7] | committer: Martin Storsjö hevc: Add NEON 4x4 and 8x8 IDCT Optimized by Martin Storsjö . The speedup vs C code is around 3.2-4.4x. Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0b9a237b2386ff84a6f99716bd58fa27a1b767e7 --- libavcodec/arm/Makefile | 2 + libavcodec/arm/hevc_idct.S| 228 ++ libavcodec/arm/hevcdsp_init_arm.c | 47 libavcodec/hevcdsp.c | 2 + libavcodec/hevcdsp.h | 1 + 5 files changed, 280 insertions(+) diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile index 77452b126d..555de160e4 100644 --- a/libavcodec/arm/Makefile +++ b/libavcodec/arm/Makefile @@ -134,6 +134,8 @@ NEON-OBJS-$(CONFIG_AAC_DECODER)+= arm/aacpsdsp_neon.o \ NEON-OBJS-$(CONFIG_APE_DECODER)+= arm/apedsp_neon.o NEON-OBJS-$(CONFIG_DCA_DECODER)+= arm/dcadsp_neon.o \ arm/synth_filter_neon.o +NEON-OBJS-$(CONFIG_HEVC_DECODER) += arm/hevc_idct.o \ + arm/hevcdsp_init_arm.o NEON-OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_neon.o NEON-OBJS-$(CONFIG_RV40_DECODER) += arm/rv34dsp_neon.o\ arm/rv40dsp_neon.o diff --git a/libavcodec/arm/hevc_idct.S b/libavcodec/arm/hevc_idct.S new file mode 100644 index 00..4124fc8226 --- /dev/null +++ b/libavcodec/arm/hevc_idct.S @@ -0,0 +1,228 @@ +/* + * ARM NEON optimised IDCT functions for HEVC decoding + * Copyright (c) 2017 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/arm/asm.S" + +const trans, align=4 +.short 64, 83, 64, 36 +.short 89, 75, 50, 18 +.short 90, 87, 80, 70 +.short 57, 43, 25, 9 +endconst + +.macro sum_sub out, in, c, op + .ifc \op, + +vmlal.s16 \out, \in, \c + .else +vmlsl.s16 \out, \in, \c + .endif +.endm + +.macro tr_4x4 in0, in1, in2, in3, out0, out1, out2, out3, shift, tmp0, tmp1, tmp2, tmp3, tmp4 + vshll.s16 \tmp0, \in0, #6 + vmull.s16 \tmp2, \in1, d4[1] + vmov \tmp1, \tmp0 + vmull.s16 \tmp3, \in1, d4[3] + vmlal.s16 \tmp0, \in2, d4[0] @e0 + vmlsl.s16 \tmp1, \in2, d4[0] @e1 + vmlal.s16 \tmp2, \in3, d4[3] @o0 + vmlsl.s16 \tmp3, \in3, d4[1] @o1 + + vadd.s32 \tmp4, \tmp0, \tmp2 + vsub.s32 \tmp0, \tmp0, \tmp2 + vadd.s32 \tmp2, \tmp1, \tmp3 + vsub.s32 \tmp1, \tmp1, \tmp3 + vqrshrn.s32\out0, \tmp4, #\shift + vqrshrn.s32\out3, \tmp0, #\shift + vqrshrn.s32\out1, \tmp2, #\shift + vqrshrn.s32\out2, \tmp1, #\shift +.endm + +.macro tr_4x4_8 in0, in1, in2, in3, out0, out1, out2, out3, tmp0, tmp1, tmp2, tmp3 + vshll.s16 \tmp0, \in0, #6 + vld1.s16 {\in0}, [r1, :64]! + vmov \tmp1, \tmp0 + vmull.s16 \tmp2, \in1, \in0[1] + vmull.s16 \tmp3, \in1, \in0[3] + vmlal.s16 \tmp0, \in2, \in0[0] @e0 + vmlsl.s16 \tmp1, \in2, \in0[0] @e1 + vmlal.s16 \tmp2, \in3, \in0[3] @o0 + vmlsl.s16 \tmp3, \in3, \in0[1] @o1 + + vld1.s16 {\in0}, [r1, :64] + + vadd.s32 \out0, \tmp0, \tmp2 + vadd.s32 \out1, \tmp1, \tmp3 + vsub.s32 \out2, \tmp1, \tmp3 + vsub.s32 \out3, \tmp0, \tmp2 + + subr1, r1, #8 +.endm + +@ Do a 4x4 transpose, using q registers for the subtransposes that don't +@ need to address the indiviudal d registers. +@ r0,r1 == rq0, r2,r3 == rq1 +.macro transpose_4x4 rq0, rq1, r0, r1, r2, r3 +vtrn.32 \rq0, \rq1 +vtrn.16 \r0, \r1 +vtrn.16 \r2, \r3 +.endm + +.macro idct_4x4 bitdepth +function ff_hevc_idct_4x4_\bitdepth\()_neon, export=1 +@r0 - coeffs +vld1.s16{q0-q1}, [r0, :128] + +movrel
[FFmpeg-cvslog] hevc: Add NEON 16x16 IDCT
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 12 09:29:44 2017 +0200| [89d9869d2491d4209d707a8e7f29c58227ae5a4e] | committer: Martin Storsjö hevc: Add NEON 16x16 IDCT The speedup vs C code is around 6-13x. Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=89d9869d2491d4209d707a8e7f29c58227ae5a4e --- libavcodec/arm/hevc_idct.S| 197 ++ libavcodec/arm/hevcdsp_init_arm.c | 4 + 2 files changed, 201 insertions(+) diff --git a/libavcodec/arm/hevc_idct.S b/libavcodec/arm/hevc_idct.S index 4124fc8226..156d4765f0 100644 --- a/libavcodec/arm/hevc_idct.S +++ b/libavcodec/arm/hevc_idct.S @@ -222,7 +222,204 @@ function ff_hevc_idct_8x8_\bitdepth\()_neon, export=1 endfunc .endm +.macro butterfly e, o, tmp_p, tmp_m +vadd.s32\tmp_p, \e, \o +vsub.s32\tmp_m, \e, \o +.endm + +.macro tr16_8x4 in0, in1, in2, in3, in4, in5, in6, in7 +tr_4x4_8\in0, \in2, \in4, \in6, q8, q9, q10, q11, q12, q13, q14, q15 + +vmull.s16 q12, \in1, \in0[0] +vmull.s16 q13, \in1, \in0[1] +vmull.s16 q14, \in1, \in0[2] +vmull.s16 q15, \in1, \in0[3] +sum_sub q12, \in3, \in0[1], + +sum_sub q13, \in3, \in0[3], - +sum_sub q14, \in3, \in0[0], - +sum_sub q15, \in3, \in0[2], - + +sum_sub q12, \in5, \in0[2], + +sum_sub q13, \in5, \in0[0], - +sum_sub q14, \in5, \in0[3], + +sum_sub q15, \in5, \in0[1], + + +sum_sub q12, \in7, \in0[3], + +sum_sub q13, \in7, \in0[2], - +sum_sub q14, \in7, \in0[1], + +sum_sub q15, \in7, \in0[0], - + +butterfly q8, q12, q0, q7 +butterfly q9, q13, q1, q6 +butterfly q10, q14, q2, q5 +butterfly q11, q15, q3, q4 +add r4, sp, #512 +vst1.s16{q0-q1}, [r4, :128]! +vst1.s16{q2-q3}, [r4, :128]! +vst1.s16{q4-q5}, [r4, :128]! +vst1.s16{q6-q7}, [r4, :128] +.endm + +.macro load16 in0, in1, in2, in3, in4, in5, in6, in7 +vld1.s16{\in0}, [r1, :64], r2 +vld1.s16{\in1}, [r3, :64], r2 +vld1.s16{\in2}, [r1, :64], r2 +vld1.s16{\in3}, [r3, :64], r2 +vld1.s16{\in4}, [r1, :64], r2 +vld1.s16{\in5}, [r3, :64], r2 +vld1.s16{\in6}, [r1, :64], r2 +vld1.s16{\in7}, [r3, :64], r2 +.endm + +.macro add_member in, t0, t1, t2, t3, t4, t5, t6, t7, op0, op1, op2, op3, op4, op5, op6, op7 +sum_sub q5, \in, \t0, \op0 +sum_sub q6, \in, \t1, \op1 +sum_sub q7, \in, \t2, \op2 +sum_sub q8, \in, \t3, \op3 +sum_sub q9, \in, \t4, \op4 +sum_sub q10,\in, \t5, \op5 +sum_sub q11,\in, \t6, \op6 +sum_sub q12,\in, \t7, \op7 +.endm + +.macro butterfly16 in0, in1, in2, in3, in4, in5, in6, in7 +vadd.s32q4, \in0, \in1 +vsub.s32\in0, \in0, \in1 +vadd.s32\in1, \in2, \in3 +vsub.s32\in2, \in2, \in3 +vadd.s32\in3, \in4, \in5 +vsub.s32\in4, \in4, \in5 +vadd.s32\in5, \in6, \in7 +vsub.s32\in6, \in6, \in7 +.endm + +.macro store16 in0, in1, in2, in3, in4, in5, in6, in7 +vst1.s16\in0, [r1, :64], r2 +vst1.s16\in1, [r3, :64], r4 +vst1.s16\in2, [r1, :64], r2 +vst1.s16\in3, [r3, :64], r4 +vst1.s16\in4, [r1, :64], r2 +vst1.s16\in5, [r3, :64], r4 +vst1.s16\in6, [r1, :64], r2 +vst1.s16\in7, [r3, :64], r4 +.endm + +.macro scale out0, out1, out2, out3, out4, out5, out6, out7, in0, in1, in2, in3, in4, in5, in6, in7, shift +vqrshrn.s32 \out0, \in0, \shift +vqrshrn.s32 \out1, \in1, \shift +vqrshrn.s32 \out2, \in2, \shift +vqrshrn.s32 \out3, \in3, \shift +vqrshrn.s32 \out4, \in4, \shift +vqrshrn.s32 \out5, \in5, \shift +vqrshrn.s32 \out6, \in6, \shift +vqrshrn.s32 \out7, \in7, \shift +.endm + +.macro tr_16x4 name, shift +function func_tr_16x4_\name +mov r1, r5 +add r3, r5, #64 +mov r2, #128 +load16 d0, d1, d2, d3, d4, d5, d6, d7 +movrel r1, trans + +tr16_8x4d0, d1, d2, d3, d4, d5, d6, d7 + +add r1, r5, #32 +add r3, r5, #(64 + 32) +mov r2, #128 +load16 d8, d9, d2, d3, d4, d5, d6, d7 +movrel r1, trans + 16 +vld1.s16{q0}, [r1, :128] +vmull.s16 q5, d8, d0[0] +vmull.
[FFmpeg-cvslog] hevc: Add support for bitdepth 10 for IDCT DC
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 25 19:43:41 2017 +0200| [3d69dd65c6771c28d3bf4e8e53a905aa8cd01fd9] | committer: Martin Storsjö hevc: Add support for bitdepth 10 for IDCT DC Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3d69dd65c6771c28d3bf4e8e53a905aa8cd01fd9 --- libavcodec/arm/hevc_idct.S| 40 +++ libavcodec/arm/hevcdsp_init_arm.c | 9 + 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/libavcodec/arm/hevc_idct.S b/libavcodec/arm/hevc_idct.S index ceded7a45f..41b1b290bf 100644 --- a/libavcodec/arm/hevc_idct.S +++ b/libavcodec/arm/hevc_idct.S @@ -30,26 +30,29 @@ const trans, align=4 .short 57, 43, 25, 9 endconst -function ff_hevc_idct_4x4_dc_8_neon, export=1 +.macro idct_4x4_dc bitdepth +function ff_hevc_idct_4x4_dc_\bitdepth\()_neon, export=1 ldrsh r1, [r0] -ldr r2, =0x20 +ldr r2, =(1 << (13 - \bitdepth)) add r1, #1 asr r1, #1 add r1, r2 -asr r1, #6 +asr r1, #(14 - \bitdepth) vdup.16 q0, r1 vdup.16 q1, r1 vst1.16 {q0, q1}, [r0, :128] bx lr endfunc +.endm -function ff_hevc_idct_8x8_dc_8_neon, export=1 +.macro idct_8x8_dc bitdepth +function ff_hevc_idct_8x8_dc_\bitdepth\()_neon, export=1 ldrsh r1, [r0] -ldr r2, =0x20 +ldr r2, =(1 << (13 - \bitdepth)) add r1, #1 asr r1, #1 add r1, r2 -asr r1, #6 +asr r1, #(14 - \bitdepth) vdup.16 q8, r1 vdup.16 q9, r1 vmov.16 q10, q8 @@ -61,14 +64,16 @@ function ff_hevc_idct_8x8_dc_8_neon, export=1 vstmr0, {q8-q15} bx lr endfunc +.endm -function ff_hevc_idct_16x16_dc_8_neon, export=1 +.macro idct_16x16_dc bitdepth +function ff_hevc_idct_16x16_dc_\bitdepth\()_neon, export=1 ldrsh r1, [r0] -ldr r2, =0x20 +ldr r2, =(1 << (13 - \bitdepth)) add r1, #1 asr r1, #1 add r1, r2 -asr r1, #6 +asr r1, #(14 - \bitdepth) vdup.16 q8, r1 vdup.16 q9, r1 vmov.16 q10, q8 @@ -83,14 +88,16 @@ function ff_hevc_idct_16x16_dc_8_neon, export=1 vstmr0, {q8-q15} bx lr endfunc +.endm -function ff_hevc_idct_32x32_dc_8_neon, export=1 +.macro idct_32x32_dc bitdepth +function ff_hevc_idct_32x32_dc_\bitdepth\()_neon, export=1 ldrsh r1, [r0] -ldr r2, =0x20 +ldr r2, =(1 << (13 - \bitdepth)) add r1, #1 asr r1, #1 add r1, r2 -asr r1, #6 +asr r1, #(14 - \bitdepth) mov r3, #16 vdup.16 q8, r1 vdup.16 q9, r1 @@ -105,6 +112,7 @@ function ff_hevc_idct_32x32_dc_8_neon, export=1 bne 1b bx lr endfunc +.endm .macro sum_sub out, in, c, op .ifc \op, + @@ -496,8 +504,16 @@ tr_16x4 secondpass_10, 20 - 10 .ltorg idct_4x4 8 +idct_4x4_dc 8 idct_4x4 10 +idct_4x4_dc 10 idct_8x8 8 +idct_8x8_dc 8 idct_8x8 10 +idct_8x8_dc 10 idct_16x16 8 +idct_16x16_dc 8 idct_16x16 10 +idct_16x16_dc 10 +idct_32x32_dc 8 +idct_32x32_dc 10 diff --git a/libavcodec/arm/hevcdsp_init_arm.c b/libavcodec/arm/hevcdsp_init_arm.c index fa2e7ad1e1..3d8d06b136 100644 --- a/libavcodec/arm/hevcdsp_init_arm.c +++ b/libavcodec/arm/hevcdsp_init_arm.c @@ -29,6 +29,10 @@ void ff_hevc_idct_4x4_dc_8_neon(int16_t *coeffs); void ff_hevc_idct_8x8_dc_8_neon(int16_t *coeffs); void ff_hevc_idct_16x16_dc_8_neon(int16_t *coeffs); void ff_hevc_idct_32x32_dc_8_neon(int16_t *coeffs); +void ff_hevc_idct_4x4_dc_10_neon(int16_t *coeffs); +void ff_hevc_idct_8x8_dc_10_neon(int16_t *coeffs); +void ff_hevc_idct_16x16_dc_10_neon(int16_t *coeffs); +void ff_hevc_idct_32x32_dc_10_neon(int16_t *coeffs); void ff_hevc_idct_4x4_8_neon(int16_t *coeffs, int col_limit); void ff_hevc_idct_8x8_8_neon(int16_t *coeffs, int col_limit); @@ -53,6 +57,11 @@ av_cold void ff_hevc_dsp_init_arm(HEVCDSPContext *c, int bit_depth) c->idct[2] = ff_hevc_idct_16x16_8_neon; } if (bit_depth == 10) { +c->idct_dc[0] = ff_hevc_idct_4x4_dc_10_neon; +c->idct_dc[1] = ff_hevc_idct_8x8_dc_10_neon; +c->idct_dc[2] = ff_hevc_idct_16x16_dc_10_neon; +c->idct_dc[3] = ff_hevc_idct_32x32_dc_10_neon; + c->idct[0] = ff_
[FFmpeg-cvslog] hevc: Add NEON add_residual for bitdepth 10
ffmpeg | branch: master | Alexandra Hájková | Mon May 1 20:16:02 2017 +0200| [edbf0fffb15dde7a1de70b05855529d5fc769f14] | committer: Martin Storsjö hevc: Add NEON add_residual for bitdepth 10 Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=edbf0fffb15dde7a1de70b05855529d5fc769f14 --- libavcodec/arm/hevc_idct.S| 89 +++ libavcodec/arm/hevcdsp_init_arm.c | 13 ++ 2 files changed, 102 insertions(+) diff --git a/libavcodec/arm/hevc_idct.S b/libavcodec/arm/hevc_idct.S index b3ce00b7fd..fac575818b 100644 --- a/libavcodec/arm/hevc_idct.S +++ b/libavcodec/arm/hevc_idct.S @@ -30,6 +30,13 @@ const trans, align=4 .short 57, 43, 25, 9 endconst +.macro clip10 in1, in2, c1, c2 +vmax.s16\in1, \in1, \c1 +vmax.s16\in2, \in2, \c1 +vmin.s16\in1, \in1, \c2 +vmin.s16\in2, \in2, \c2 +.endm + function ff_hevc_add_residual_4x4_8_neon, export=1 vld1.16 {q0-q1}, [r1, :128] vld1.32 d4[0], [r0, :32], r2 @@ -50,6 +57,25 @@ function ff_hevc_add_residual_4x4_8_neon, export=1 bx lr endfunc +function ff_hevc_add_residual_4x4_10_neon, export=1 +mov r12, r0 +vld1.16 {q0-q1}, [r1, :128] +vld1.16 d4, [r12, :64], r2 +vld1.16 d5, [r12, :64], r2 +vld1.16 d6, [r12, :64], r2 +vqadd.s16 q0, q2 +vld1.16 d7, [r12, :64], r2 +vmov.s16q12, #0 +vqadd.s16 q1, q3 +vmvn.s16q13, #0xFC00 @ vmov.s16 #0x3FF +clip10 q0, q1, q12, q13 +vst1.16 d0, [r0, :64], r2 +vst1.16 d1, [r0, :64], r2 +vst1.16 d2, [r0, :64], r2 +vst1.16 d3, [r0, :64], r2 +bx lr +endfunc + function ff_hevc_add_residual_8x8_8_neon, export=1 add r12, r0, r2 add r2, r2, r2 @@ -70,6 +96,25 @@ function ff_hevc_add_residual_8x8_8_neon, export=1 bx lr endfunc +function ff_hevc_add_residual_8x8_10_neon, export=1 +add r12, r0, r2 +add r2, r2, r2 +mov r3, #8 +vmov.s16q12, #0 +vmvn.s16q13, #0xFC00 @ vmov.s16 #0x3FF +1: subsr3, #2 +vld1.16 {q0-q1}, [r1, :128]! +vld1.16 {q8},[r0, :128] +vqadd.s16 q0, q8 +vld1.16 {q9},[r12, :128] +vqadd.s16 q1, q9 +clip10 q0, q1, q12, q13 +vst1.16 {q0}, [r0, :128], r2 +vst1.16 {q1}, [r12, :128], r2 +bne 1b +bx lr +endfunc + function ff_hevc_add_residual_16x16_8_neon, export=1 mov r3, #16 add r12, r0, r2 @@ -97,6 +142,29 @@ function ff_hevc_add_residual_16x16_8_neon, export=1 bx lr endfunc +function ff_hevc_add_residual_16x16_10_neon, export=1 +mov r3, #16 +vmov.s16q12, #0 +vmvn.s16q13, #0xFC00 @ vmov.s16 #0x3FF +add r12, r0, r2 +add r2, r2, r2 +1: subsr3, #2 +vld1.16 {q8-q9}, [r0, :128] +vld1.16 {q0, q1}, [r1, :128]! +vqadd.s16 q0, q8 +vld1.16 {q10-q11}, [r12, :128] +vqadd.s16 q1, q9 +vld1.16 {q2, q3}, [r1, :128]! +vqadd.s16 q2, q10 +vqadd.s16 q3, q11 +clip10 q0, q1, q12, q13 +clip10 q2, q3, q12, q13 +vst1.16 {q0-q1}, [r0, :128], r2 +vst1.16 {q2-q3}, [r12, :128], r2 +bne 1b +bx lr +endfunc + function ff_hevc_add_residual_32x32_8_neon, export=1 vpush {q4-q7} add r12, r0, r2 @@ -137,6 +205,27 @@ function ff_hevc_add_residual_32x32_8_neon, export=1 bx lr endfunc +function ff_hevc_add_residual_32x32_10_neon, export=1 +mov r3, #32 +add r12, r0, #32 +vmov.s16q12, #0 +vmvn.s16q13, #0xFC00 @ vmov.s16 #0x3FF +1: subsr3, #1 +vldmr1!, {q0-q3} +vld1.16 {q8, q9}, [r0, :128] +vld1.16 {q10, q11}, [r12, :128] +vqadd.s16 q0, q8 +vqadd.s16 q1, q9 +vqadd.s16 q2, q10 +vqadd.s16 q3, q11 +clip10 q0, q1, q12, q13 +clip10 q2, q3, q12, q13 +vst1.16 {q0-q1}, [r0, :128], r2 +vst1.16 {q2-q3}, [r12, :128], r2 +bne 1b +bx lr +endfunc + .macro idct_4x4_dc bitdepth funct
[FFmpeg-cvslog] hevc: 16x16 NEON idct: Use the right element size for loads/stores
ffmpeg | branch: master | Alexandra Hájková | Thu May 4 10:49:16 2017 +0200| [118dd4a321a2d67f67c21b076abd0b4d939ab642] | committer: Martin Storsjö hevc: 16x16 NEON idct: Use the right element size for loads/stores This doesn't change the actual behaviour of the code but improves readability. Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=118dd4a321a2d67f67c21b076abd0b4d939ab642 --- libavcodec/arm/hevc_idct.S | 16 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/arm/hevc_idct.S b/libavcodec/arm/hevc_idct.S index fac575818b..eeb81e388e 100644 --- a/libavcodec/arm/hevc_idct.S +++ b/libavcodec/arm/hevc_idct.S @@ -536,10 +536,10 @@ endfunc butterfly q10, q14, q2, q5 butterfly q11, q15, q3, q4 add r4, sp, #512 -vst1.s16{q0-q1}, [r4, :128]! -vst1.s16{q2-q3}, [r4, :128]! -vst1.s16{q4-q5}, [r4, :128]! -vst1.s16{q6-q7}, [r4, :128] +vst1.s32{q0-q1}, [r4, :128]! +vst1.s32{q2-q3}, [r4, :128]! +vst1.s32{q4-q5}, [r4, :128]! +vst1.s32{q6-q7}, [r4, :128] .endm .macro load16 in0, in1, in2, in3, in4, in5, in6, in7 @@ -631,8 +631,8 @@ function func_tr_16x4_\name add_member d7, d1[3], d1[2], d1[1], d1[0], d0[3], d0[2], d0[1], d0[0], +, -, +, -, +, -, +, - add r4, sp, #512 -vld1.s16{q0-q1}, [r4, :128]! -vld1.s16{q2-q3}, [r4, :128]! +vld1.s32{q0-q1}, [r4, :128]! +vld1.s32{q2-q3}, [r4, :128]! butterfly16 q0, q5, q1, q6, q2, q7, q3, q8 scale d26, d27, d28, d29, d30, d31, d16, d17, q4, q0, q5, q1, q6, q2, q7, q3, \shift @@ -645,8 +645,8 @@ function func_tr_16x4_\name store16 d26, d27, d28, d29, d30, d31, d16, d17 add r4, sp, #576 -vld1.s16{q0-q1}, [r4, :128]! -vld1.s16{q2-q3}, [r4, :128] +vld1.s32{q0-q1}, [r4, :128]! +vld1.s32{q2-q3}, [r4, :128] butterfly16 q0, q9, q1, q10, q2, q11, q3, q12 scale d26, d27, d28, d29, d30, d31, d8, d9, q4, q0, q9, q1, q10, q2, q11, q3, \shift transpose8_4x4 d26, d28, d30, d8 ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] hevc: Add NEON 32x32 IDCT
ffmpeg | branch: master | Alexandra Hájková | Thu May 4 10:52:52 2017 +0200| [ce080f47b8b55ab3d41eb00487b138d9906d114d] | committer: Martin Storsjö hevc: Add NEON 32x32 IDCT Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ce080f47b8b55ab3d41eb00487b138d9906d114d --- libavcodec/arm/hevc_idct.S| 311 +++--- libavcodec/arm/hevcdsp_init_arm.c | 4 + 2 files changed, 294 insertions(+), 21 deletions(-) diff --git a/libavcodec/arm/hevc_idct.S b/libavcodec/arm/hevc_idct.S index eeb81e388e..79799b24ff 100644 --- a/libavcodec/arm/hevc_idct.S +++ b/libavcodec/arm/hevc_idct.S @@ -28,6 +28,10 @@ const trans, align=4 .short 89, 75, 50, 18 .short 90, 87, 80, 70 .short 57, 43, 25, 9 +.short 90, 90, 88, 85 +.short 82, 78, 73, 67 +.short 61, 54, 46, 38 +.short 31, 22, 13, 4 endconst .macro clip10 in1, in2, c1, c2 @@ -509,7 +513,7 @@ endfunc vsub.s32\tmp_m, \e, \o .endm -.macro tr16_8x4 in0, in1, in2, in3, in4, in5, in6, in7 +.macro tr16_8x4 in0, in1, in2, in3, in4, in5, in6, in7, offset tr_4x4_8\in0, \in2, \in4, \in6, q8, q9, q10, q11, q12, q13, q14, q15 vmull.s16 q12, \in1, \in0[0] @@ -535,7 +539,7 @@ endfunc butterfly q9, q13, q1, q6 butterfly q10, q14, q2, q5 butterfly q11, q15, q3, q4 -add r4, sp, #512 +add r4, sp, #\offset vst1.s32{q0-q1}, [r4, :128]! vst1.s32{q2-q3}, [r4, :128]! vst1.s32{q4-q5}, [r4, :128]! @@ -575,15 +579,15 @@ endfunc vsub.s32\in6, \in6, \in7 .endm -.macro store16 in0, in1, in2, in3, in4, in5, in6, in7 +.macro store16 in0, in1, in2, in3, in4, in5, in6, in7, rx vst1.s16\in0, [r1, :64], r2 -vst1.s16\in1, [r3, :64], r4 +vst1.s16\in1, [r3, :64], \rx vst1.s16\in2, [r1, :64], r2 -vst1.s16\in3, [r3, :64], r4 +vst1.s16\in3, [r3, :64], \rx vst1.s16\in4, [r1, :64], r2 -vst1.s16\in5, [r3, :64], r4 +vst1.s16\in5, [r3, :64], \rx vst1.s16\in6, [r1, :64], r2 -vst1.s16\in7, [r3, :64], r4 +vst1.s16\in7, [r3, :64], \rx .endm .macro scale out0, out1, out2, out3, out4, out5, out6, out7, in0, in1, in2, in3, in4, in5, in6, in7, shift @@ -597,19 +601,35 @@ endfunc vqrshrn.s32 \out7, \in7, \shift .endm -.macro tr_16x4 name, shift +@stores in1, in2, in4, in6 ascending from off1 and +@stores in1, in3, in5, in7 descending from off2 +.macro store_to_stack off1, off2, in0, in2, in4, in6, in7, in5, in3, in1 +add r1, sp, #\off1 +add r3, sp, #\off2 +mov r2, #-16 +vst1.s32{\in0}, [r1, :128]! +vst1.s32{\in1}, [r3, :128], r2 +vst1.s32{\in2}, [r1, :128]! +vst1.s32{\in3}, [r3, :128], r2 +vst1.s32{\in4}, [r1, :128]! +vst1.s32{\in5}, [r3, :128], r2 +vst1.s32{\in6}, [r1, :128] +vst1.s32{\in7}, [r3, :128] +.endm + +.macro tr_16x4 name, shift, offset, step function func_tr_16x4_\name mov r1, r5 -add r3, r5, #64 -mov r2, #128 +add r3, r5, #(\step * 64) +mov r2, #(\step * 128) load16 d0, d1, d2, d3, d4, d5, d6, d7 movrel r1, trans -tr16_8x4d0, d1, d2, d3, d4, d5, d6, d7 +tr16_8x4d0, d1, d2, d3, d4, d5, d6, d7, \offset -add r1, r5, #32 -add r3, r5, #(64 + 32) -mov r2, #128 +add r1, r5, #(\step * 32) +add r3, r5, #(\step * 3 *32) +mov r2, #(\step * 128) load16 d8, d9, d2, d3, d4, d5, d6, d7 movrel r1, trans + 16 vld1.s16{q0}, [r1, :128] @@ -630,11 +650,12 @@ function func_tr_16x4_\name add_member d6, d1[2], d0[3], d0[0], d0[2], d1[1], d1[3], d1[0], d0[1], +, -, +, -, +, +, -, + add_member d7, d1[3], d1[2], d1[1], d1[0], d0[3], d0[2], d0[1], d0[0], +, -, +, -, +, -, +, - -add r4, sp, #512 +add r4, sp, #\offset vld1.s32{q0-q1}, [r4, :128]! vld1.s32{q2-q3}, [r4, :128]! butterfly16 q0, q5, q1, q6, q2, q7, q3, q8 +.if \shift > 0 scale d26, d27, d28, d29, d30, d31, d16, d17, q4, q0, q5, q1, q6, q2, q7, q3, \shift transpose8_4x4 d26, d28, d30, d16 transpose8_4x4 d17, d31, d29, d27 @@ -642,12 +663,16 @@ function func_tr_16x4_\name add r3, r6, #(24
[FFmpeg-cvslog] flac: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 29 02:15:30 2017 +| [9c1e111406bd4cbb04d8e8611b71bebf203bec5e] | committer: Diego Biurrun flac: Convert to the new bitstream reader Signed-off-by: Diego Biurrun > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9c1e111406bd4cbb04d8e8611b71bebf203bec5e --- libavcodec/flac.c| 68 libavcodec/flac.h| 6 ++--- libavcodec/flac_parser.c | 6 ++--- libavcodec/flacdec.c | 58 - libavcodec/flacenc.c | 2 +- 5 files changed, 70 insertions(+), 70 deletions(-) diff --git a/libavcodec/flac.c b/libavcodec/flac.c index 3e51fdeb98..5062c1e0db 100644 --- a/libavcodec/flac.c +++ b/libavcodec/flac.c @@ -22,8 +22,9 @@ #include "libavutil/channel_layout.h" #include "libavutil/crc.h" #include "libavutil/log.h" + +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "flac.h" #include "flacdata.h" @@ -40,33 +41,33 @@ static const uint64_t flac_channel_layouts[8] = { AV_CH_LAYOUT_7POINT1 }; -static int64_t get_utf8(GetBitContext *gb) +static int64_t get_utf8(BitstreamContext *bc) { int64_t val; -GET_UTF8(val, get_bits(gb, 8), return -1;) +GET_UTF8(val, bitstream_read(bc, 8), return -1;) return val; } -int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, +int ff_flac_decode_frame_header(AVCodecContext *avctx, BitstreamContext *bc, FLACFrameInfo *fi, int log_level_offset) { int bs_code, sr_code, bps_code; /* frame sync code */ -if ((get_bits(gb, 15) & 0x7FFF) != 0x7FFC) { +if ((bitstream_read(bc, 15) & 0x7FFF) != 0x7FFC) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "invalid sync code\n"); return AVERROR_INVALIDDATA; } /* variable block size stream code */ -fi->is_var_size = get_bits1(gb); +fi->is_var_size = bitstream_read_bit(bc); /* block size and sample rate codes */ -bs_code = get_bits(gb, 4); -sr_code = get_bits(gb, 4); +bs_code = bitstream_read(bc, 4); +sr_code = bitstream_read(bc, 4); /* channels and decorrelation */ -fi->ch_mode = get_bits(gb, 4); +fi->ch_mode = bitstream_read(bc, 4); if (fi->ch_mode < FLAC_MAX_CHANNELS) { fi->channels = fi->ch_mode + 1; fi->ch_mode = FLAC_CHMODE_INDEPENDENT; @@ -80,7 +81,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, } /* bits per sample */ -bps_code = get_bits(gb, 3); +bps_code = bitstream_read(bc, 3); if (bps_code == 3 || bps_code == 7) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "invalid sample size code (%d)\n", @@ -90,14 +91,14 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, fi->bps = sample_size_table[bps_code]; /* reserved bit */ -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "broken stream, invalid padding\n"); return AVERROR_INVALIDDATA; } /* sample or frame count */ -fi->frame_or_sample_num = get_utf8(gb); +fi->frame_or_sample_num = get_utf8(bc); if (fi->frame_or_sample_num < 0) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "sample/frame number invalid; utf8 fscked\n"); @@ -110,9 +111,9 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, "reserved blocksize code: 0\n"); return AVERROR_INVALIDDATA; } else if (bs_code == 6) { -fi->blocksize = get_bits(gb, 8) + 1; +fi->blocksize = bitstream_read(bc, 8) + 1; } else if (bs_code == 7) { -fi->blocksize = get_bits(gb, 16) + 1; +fi->blocksize = bitstream_read(bc, 16) + 1; } else { fi->blocksize = ff_flac_blocksize_table[bs_code]; } @@ -121,11 +122,11 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, if (sr_code < 12) { fi->samplerate = ff_flac_sample_rate_table[sr_code]; } else if (sr_code == 12) { -fi->samplerate = get_bits(gb, 8) * 1000; +fi->samplerate = bitstream_read(bc, 8) * 1000; } else if (sr_code == 13) { -fi->samplerate = get_bits(gb, 16); +fi->samplerate = bitstream_read(bc, 16); } else if (sr_code == 14) { -fi->samplerate = get_bits(gb, 16) * 10; +fi->samplerate = bitstream_read(bc, 16) * 10; } else { av_log(avctx, AV_LOG_ERROR + log_level_offset, "illegal sample rate code %d\n", @@ -134,9 +135,9 @@ int ff_flac_decode_frame_header(AVCodecContext *avct
[FFmpeg-cvslog] hevc: Add hevc_get_pixel_4/8/12/16/24/32/48/64
ffmpeg | branch: master | Alexandra Hájková | Sun Dec 3 09:15:23 2017 +0100| [7993ec19af394fdc58ec64165bc0b12619543a5d] | committer: Martin Storsjö hevc: Add hevc_get_pixel_4/8/12/16/24/32/48/64 Checkasm timings: block size bitdepth C NEON 4 8 bit:146.7 48.7 10 bit:146.7 52.7 8 8 bit:430.3 84.4 10 bit:430.4 119.5 12 8 bit:812.8 141.0 10 bit:812.8 195.0 16 8 bit: 1499.1 268.0 10 bit: 1498.9 368.4 24 8 bit: 4394.2 574.8 10 bit: 3696.3 804.8 32 8 bit: 5108.6 568.9 10 bit: 4249.6 918.8 48 8 bit: 16819.6 2304.9 10 bit: 13882.0 3178.5 64 8 bit: 13490.8 1799.5 10 bit: 11018.5 2519.4 Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7993ec19af394fdc58ec64165bc0b12619543a5d --- libavcodec/arm/Makefile | 3 +- libavcodec/arm/hevc_mc.S | 395 ++ libavcodec/arm/hevcdsp_init_arm.c | 67 +++ 3 files changed, 464 insertions(+), 1 deletion(-) diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile index b48745ad40..49e17ce0df 100644 --- a/libavcodec/arm/Makefile +++ b/libavcodec/arm/Makefile @@ -135,7 +135,8 @@ NEON-OBJS-$(CONFIG_AAC_DECODER)+= arm/aacpsdsp_neon.o \ NEON-OBJS-$(CONFIG_APE_DECODER)+= arm/apedsp_neon.o NEON-OBJS-$(CONFIG_DCA_DECODER)+= arm/dcadsp_neon.o \ arm/synth_filter_neon.o -NEON-OBJS-$(CONFIG_HEVC_DECODER) += arm/hevc_idct.o +NEON-OBJS-$(CONFIG_HEVC_DECODER) += arm/hevc_idct.o \ + arm/hevc_mc.o NEON-OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_neon.o NEON-OBJS-$(CONFIG_RV40_DECODER) += arm/rv34dsp_neon.o\ arm/rv40dsp_neon.o diff --git a/libavcodec/arm/hevc_mc.S b/libavcodec/arm/hevc_mc.S new file mode 100644 index 00..f499d294b9 --- /dev/null +++ b/libavcodec/arm/hevc_mc.S @@ -0,0 +1,395 @@ +/* + * ARM NEON optimised MC functions for HEVC decoding + * + * Copyright (c) 2017 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/arm/asm.S" + +.macro get_pixels4 bitdepth +function ff_hevc_get_pixels_4_\bitdepth\()_neon, export=1 +@r0 dst, r1 dststride, r2 src, r3 srcstride +ldr r12, [sp] @height +cmp r12, #0 +it eq +bxeqlr + +1: + .if \bitdepth == 8 +vld1.32 {d0[0]}, [r2], r3 +vld1.32 {d1[0]}, [r2], r3 +vld1.32 {d2[0]}, [r2], r3 +vld1.32 {d3[0]}, [r2], r3 +vshll.u8q8, d0, #6 +vshll.u8q9, d1, #6 +vshll.u8q10, d2, #6 +vshll.u8q11, d3, #6 + .else +vld1.16 {d0}, [r2], r3 +vld1.16 {d1}, [r2], r3 +vld1.16 {d2}, [r2], r3 +vld1.16 {d3}, [r2], r3 +vshl.i16d16, d0, #4 +vshl.i16d18, d1, #4 +vshl.i16d20, d2, #4 +vshl.i16d22, d3, #4 + .endif + +vst1.16 {d16}, [r0, :64], r1 +vst1.16 {d18}, [r0, :64], r1 +vst1.16 {d20}, [r0, :64], r1 +vst1.16 {d22}, [r0, :64], r1 +subsr12, #4 +bgt 1b + +bx lr +endfunc +.endm + +.macro get_pixels8 bitdepth +function ff_hevc_get_pixels_8_\bitdepth\()_neon, export=1 +@r0 dst, r1 dststride, r2 src, r3 srcstride +ldr r12, [sp] @height +cmp r12, #0 +it eq +bxeqlr + +1: + .if \bitdepth == 8 +vld1.8 {d0}, [r2], r3 +vld1.8 {d1}, [r2], r3 +vld1.8 {d2}, [r2], r3 +vld1.8 {d3}, [r2], r3 +vshll.u8q8, d0, #6 +vshll.u8q9, d1, #6 +vshll.u8q10, d2, #6 +vshll.u8q11, d3, #6 + .else +vld1.16 {
[FFmpeg-cvslog] Remove unnecessary get_bits.h #includes and add missing headers where needed.
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 23 16:44:11 2016 +0200| [5c31eaa9998b2185e0aa04d11adff128498dc14a] | committer: Diego Biurrun Remove unnecessary get_bits.h #includes and add missing headers where needed. Signed-off-by: Diego Biurrun > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5c31eaa9998b2185e0aa04d11adff128498dc14a --- libavcodec/adpcmenc.c|1 - libavcodec/cabac.c |2 +- libavcodec/ffv1enc.c |2 +- libavcodec/huffman.c |1 - libavcodec/iff.c |2 +- libavcodec/yop.c |6 -- libavformat/mpc.c|2 +- libavformat/oggparseogm.c|4 +++- libavformat/oggparsespeex.c |4 +++- libavformat/oggparsevorbis.c |3 ++- libavformat/tta.c|5 +++-- 11 files changed, 19 insertions(+), 13 deletions(-) diff --git a/libavcodec/adpcmenc.c b/libavcodec/adpcmenc.c index 65e1f8e..3e17dbd 100644 --- a/libavcodec/adpcmenc.c +++ b/libavcodec/adpcmenc.c @@ -23,7 +23,6 @@ */ #include "avcodec.h" -#include "get_bits.h" #include "put_bits.h" #include "bytestream.h" #include "adpcm.h" diff --git a/libavcodec/cabac.c b/libavcodec/cabac.c index a96c9f5..5c59003 100644 --- a/libavcodec/cabac.c +++ b/libavcodec/cabac.c @@ -27,7 +27,7 @@ #include #include "libavutil/common.h" -#include "get_bits.h" + #include "cabac.h" #include "cabac_functions.h" diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 9c2e463..7995376 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -31,9 +31,9 @@ #include "libavutil/crc.h" #include "libavutil/opt.h" #include "libavutil/imgutils.h" + #include "avcodec.h" #include "internal.h" -#include "get_bits.h" #include "put_bits.h" #include "rangecoder.h" #include "golomb.h" diff --git a/libavcodec/huffman.c b/libavcodec/huffman.c index f13ab296..2a3db87 100644 --- a/libavcodec/huffman.c +++ b/libavcodec/huffman.c @@ -27,7 +27,6 @@ #include #include "avcodec.h" -#include "get_bits.h" #include "huffman.h" /* symbol for Huffman tree node */ diff --git a/libavcodec/iff.c b/libavcodec/iff.c index 0d56cd5..a186e31 100644 --- a/libavcodec/iff.c +++ b/libavcodec/iff.c @@ -28,9 +28,9 @@ #include #include "libavutil/imgutils.h" + #include "bytestream.h" #include "avcodec.h" -#include "get_bits.h" #include "internal.h" typedef struct IffContext { diff --git a/libavcodec/yop.c b/libavcodec/yop.c index 98ed723..5de4ac8 100644 --- a/libavcodec/yop.c +++ b/libavcodec/yop.c @@ -22,11 +22,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavutil/intreadwrite.h" +#include + #include "libavutil/imgutils.h" +#include "libavutil/internal.h" +#include "libavutil/intreadwrite.h" #include "avcodec.h" -#include "get_bits.h" #include "internal.h" typedef struct YopDecContext { diff --git a/libavformat/mpc.c b/libavformat/mpc.c index 8127996..cf8fe1e 100644 --- a/libavformat/mpc.c +++ b/libavformat/mpc.c @@ -20,7 +20,7 @@ */ #include "libavutil/channel_layout.h" -#include "libavcodec/get_bits.h" + #include "avformat.h" #include "internal.h" #include "apetag.h" diff --git a/libavformat/oggparseogm.c b/libavformat/oggparseogm.c index 3ce11bd..6278465 100644 --- a/libavformat/oggparseogm.c +++ b/libavformat/oggparseogm.c @@ -23,9 +23,11 @@ **/ #include + #include "libavutil/intreadwrite.h" -#include "libavcodec/get_bits.h" + #include "libavcodec/bytestream.h" + #include "avformat.h" #include "internal.h" #include "oggdec.h" diff --git a/libavformat/oggparsespeex.c b/libavformat/oggparsespeex.c index fa24c12..2430cd7 100644 --- a/libavformat/oggparsespeex.c +++ b/libavformat/oggparsespeex.c @@ -23,11 +23,13 @@ **/ #include + #include "libavutil/bswap.h" #include "libavutil/avstring.h" #include "libavutil/channel_layout.h" -#include "libavcodec/get_bits.h" + #include "libavcodec/bytestream.h" + #include "avformat.h" #include "internal.h" #include "oggdec.h" diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index 4cb10a1..95fe082 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -28,9 +28,10 @@ #include "libavutil/base64.h" #include "libavutil/bswap.h" #include "libavutil/dict.h" + #include "libavcodec/bytestream.h" -#include "libavcodec/get_bits.h" #include "libavcodec/vorbis_parser
[FFmpeg-cvslog] Move check_marker() from get_bits to mpeg4videodec
ffmpeg | branch: master | Alexandra Hájková | Sat May 14 11:28:18 2016 +0200| [e4b38878da6b38ef5ca54ce14be985d6ae088834] | committer: Anton Khirnov Move check_marker() from get_bits to mpeg4videodec MPEG-4 is the only decoder which uses check_marker(). Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e4b38878da6b38ef5ca54ce14be985d6ae088834 --- libavcodec/get_bits.h |9 - libavcodec/mpeg4videodec.c |9 + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h index b8debb9..ce76511 100644 --- a/libavcodec/get_bits.h +++ b/libavcodec/get_bits.h @@ -364,15 +364,6 @@ static inline unsigned int show_bits_long(GetBitContext *s, int n) } } -static inline int check_marker(GetBitContext *s, const char *msg) -{ -int bit = get_bits1(s); -if (!bit) -av_log(NULL, AV_LOG_INFO, "Marker bit missing %s\n", msg); - -return bit; -} - /** * Initialize GetBitContext. * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 40d281b..1c1a9c0 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -51,6 +51,15 @@ static const int mb_type_b_map[4] = { MB_TYPE_L0 | MB_TYPE_16x16, }; +static inline int check_marker(GetBitContext *s, const char *msg) +{ +int bit = get_bits1(s); +if (!bit) +av_log(NULL, AV_LOG_INFO, "Marker bit missing %s\n", msg); + +return bit; +} + /** * Predict the ac. * @param n block index (0-3 are luma, 4-5 are chroma) ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] mpeg4videodec: Call av_log() in check_marker() with AVCodecContext instead of NULL
ffmpeg | branch: master | Alexandra Hájková | Sat May 14 11:28:19 2016 +0200| [d338abb664febbc2c7266af7818aab1f12dbc161] | committer: Anton Khirnov mpeg4videodec: Call av_log() in check_marker() with AVCodecContext instead of NULL Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d338abb664febbc2c7266af7818aab1f12dbc161 --- libavcodec/mpeg4videodec.c | 20 ++-- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 1c1a9c0..e16d482 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -51,11 +51,11 @@ static const int mb_type_b_map[4] = { MB_TYPE_L0 | MB_TYPE_16x16, }; -static inline int check_marker(GetBitContext *s, const char *msg) +static inline int check_marker(AVCodecContext *avctx, GetBitContext *s, const char *msg) { int bit = get_bits1(s); if (!bit) -av_log(NULL, AV_LOG_INFO, "Marker bit missing %s\n", msg); +av_log(avctx, AV_LOG_INFO, "Marker bit missing %s\n", msg); return bit; } @@ -446,9 +446,9 @@ int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx) while (get_bits1(&s->gb) != 0) time_incr++; -check_marker(&s->gb, "before time_increment in video packed header"); +check_marker(s->avctx, &s->gb, "before time_increment in video packed header"); skip_bits(&s->gb, ctx->time_increment_bits); /* time_increment */ -check_marker(&s->gb, "before vop_coding_type in video packed header"); +check_marker(s->avctx, &s->gb, "before vop_coding_type in video packed header"); skip_bits(&s->gb, 2); /* vop coding type */ // FIXME not rect stuff here @@ -1731,7 +1731,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) skip_bits(gb, 4); /* video_object_layer_shape_extension */ } -check_marker(gb, "before time_increment_resolution"); +check_marker(s->avctx, gb, "before time_increment_resolution"); s->avctx->framerate.num = get_bits(gb, 16); if (!s->avctx->framerate.num) { @@ -1743,7 +1743,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) if (ctx->time_increment_bits < 1) ctx->time_increment_bits = 1; -check_marker(gb, "before fixed_vop_rate"); +check_marker(s->avctx, gb, "before fixed_vop_rate"); if (get_bits1(gb) != 0) /* fixed_vop_rate */ s->avctx->framerate.den = get_bits(gb, ctx->time_increment_bits); @@ -1909,7 +1909,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter4v_blocks */ ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* not coded blocks */ } -if (!check_marker(gb, "in complexity estimation part 1")) { +if (!check_marker(s->avctx, gb, "in complexity estimation part 1")) { skip_bits_long(gb, pos - get_bits_count(gb)); goto no_cplx_est; } @@ -1927,7 +1927,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel2 */ ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel4 */ } -if (!check_marker(gb, "in complexity estimation part 2")) { +if (!check_marker(s->avctx, gb, "in complexity estimation part 2")) { skip_bits_long(gb, pos - get_bits_count(gb)); goto no_cplx_est; } @@ -2104,7 +2104,7 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) while (get_bits1(gb) != 0) time_incr++; -check_marker(gb, "before time_increment"); +check_marker(s->avctx, gb, "before time_increment"); if (ctx->time_increment_bits == 0 || !(show_bits(gb, ctx->time_increment_bits + 1) & 1)) { @@ -2166,7 +2166,7 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) } } -check_marker(gb, "before vop_coded"); +check_marker(s->avctx, gb, "before vop_coded"); /* vop coded */ if (get_bits1(gb) != 1) { ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] Move VLC and RL_VLC_ELEM structure definitions to a separate header
ffmpeg | branch: master | Alexandra Hájková | Sat May 14 11:45:01 2016 +0200| [ffa190d0479d2370dd89c95692f822cbff2cc24c] | committer: Luca Barbato Move VLC and RL_VLC_ELEM structure definitions to a separate header Use the newly created vlc.h directly instead of including get_bits when needed. The VLC and RL_VLC_ELEM structures are independent from the bitreader. Signed-off-by: Luca Barbato > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ffa190d0479d2370dd89c95692f822cbff2cc24c --- libavcodec/bitstream.c |2 +- libavcodec/get_bits.h | 42 +-- libavcodec/huffman.c |3 +++ libavcodec/huffman.h |2 +- libavcodec/rl.c|1 + libavcodec/rl.h|3 ++- libavcodec/vlc.h | 65 7 files changed, 74 insertions(+), 44 deletions(-) diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c index a0d2a98..656ac47 100644 --- a/libavcodec/bitstream.c +++ b/libavcodec/bitstream.c @@ -31,8 +31,8 @@ #include "avcodec.h" #include "internal.h" #include "mathops.h" -#include "get_bits.h" #include "put_bits.h" +#include "vlc.h" const uint8_t ff_log2_run[41]={ 0, 0, 0, 0, 1, 1, 1, 1, diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h index ce76511..66374f5 100644 --- a/libavcodec/get_bits.h +++ b/libavcodec/get_bits.h @@ -32,6 +32,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/log.h" #include "mathops.h" +#include "vlc.h" /* * Safe bitstream reading: @@ -59,20 +60,6 @@ typedef struct GetBitContext { #endif } GetBitContext; -#define VLC_TYPE int16_t - -typedef struct VLC { -int bits; -VLC_TYPE (*table)[2]; ///< code, bits -int table_size, table_allocated; -} VLC; - -typedef struct RL_VLC_ELEM { -int16_t level; -int8_t len; -uint8_t run; -} RL_VLC_ELEM; - /* Bitstream reader API docs: * name * arbitrary name which is used as prefix for the internal variables @@ -421,33 +408,6 @@ static inline const uint8_t *align_get_bits(GetBitContext *s) return s->buffer + (s->index >> 3); } -#define init_vlc(vlc, nb_bits, nb_codes,\ - bits, bits_wrap, bits_size,\ - codes, codes_wrap, codes_size, \ - flags) \ -ff_init_vlc_sparse(vlc, nb_bits, nb_codes, \ - bits, bits_wrap, bits_size, \ - codes, codes_wrap, codes_size, \ - NULL, 0, 0, flags) - -int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, - const void *bits, int bits_wrap, int bits_size, - const void *codes, int codes_wrap, int codes_size, - const void *symbols, int symbols_wrap, int symbols_size, - int flags); -void ff_free_vlc(VLC *vlc); - -#define INIT_VLC_LE 2 -#define INIT_VLC_USE_NEW_STATIC 4 - -#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ -do { \ -static VLC_TYPE table[static_size][2]; \ -(vlc)->table = table;\ -(vlc)->table_allocated = static_size; \ -init_vlc(vlc, bits, a, b, c, d, e, f, g, INIT_VLC_USE_NEW_STATIC); \ -} while (0) - /** * If the vlc code is invalid and max_depth=1, then no bits will be removed. * If the vlc code is invalid and max_depth>1, then the number of bits removed diff --git a/libavcodec/huffman.c b/libavcodec/huffman.c index 2a3db87..3b15aa2 100644 --- a/libavcodec/huffman.c +++ b/libavcodec/huffman.c @@ -26,8 +26,11 @@ #include +#include"libavutil/common.h" + #include "avcodec.h" #include "huffman.h" +#include "vlc.h" /* symbol for Huffman tree node */ #define HNODE -1 diff --git a/libavcodec/huffman.h b/libavcodec/huffman.h index c9eeb37..87cbe4b 100644 --- a/libavcodec/huffman.h +++ b/libavcodec/huffman.h @@ -27,7 +27,7 @@ #define AVCODEC_HUFFMAN_H #include "avcodec.h" -#include "get_bits.h" +#include "vlc.h" typedef struct Node { int16_t sym; diff --git a/libavcodec/rl.c b/libavcodec/rl.c index 5bc1f91..9a9cbd9 100644 --- a/libavcodec/rl.c +++ b/libavcodec/rl.c @@ -17,6 +17,7 @@ */ #include +#include #include "libavutil/attributes.h" #include "libavutil/mem.h" diff --git a/libavcodec/rl.h b/libavcodec/rl.h index e4a622f..a5725ce 100644 --- a/libavcodec/rl.h +++ b/libavcodec/rl.h @@ -28,7 +28,8 @@ #define AVCODEC_RL_H #include -#include "get_bits.h" + +#include "vlc.h" /* run length table */ #define
[FFmpeg-cvslog] dvbsubdec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 12:29:20 2016 +0200| [9aec009f65f737c7566b2329b5cbd975665d1e02] | committer: Diego Biurrun dvbsubdec: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9aec009f65f737c7566b2329b5cbd975665d1e02 --- libavcodec/dvbsubdec.c | 68 +- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c index c3248c9919..2b9760fb35 100644 --- a/libavcodec/dvbsubdec.c +++ b/libavcodec/dvbsubdec.c @@ -20,7 +20,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "bytestream.h" #include "internal.h" #include "libavutil/colorspace.h" @@ -330,16 +330,16 @@ static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len, const uint8_t **srcbuf, int buf_size, int non_mod, uint8_t *map_table) { -GetBitContext gb; +BitstreamContext bc; int bits; int run_length; int pixels_read = 0; -init_get_bits(&gb, *srcbuf, buf_size << 3); +bitstream_init(&bc, *srcbuf, buf_size << 3); -while (get_bits_count(&gb) < buf_size << 3 && pixels_read < dbuf_len) { -bits = get_bits(&gb, 2); +while (bitstream_tell(&bc) < buf_size << 3 && pixels_read < dbuf_len) { +bits = bitstream_read(&bc, 2); if (bits) { if (non_mod != 1 || bits != 1) { @@ -350,10 +350,10 @@ static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len, } pixels_read++; } else { -bits = get_bits1(&gb); +bits = bitstream_read_bit(&bc); if (bits == 1) { -run_length = get_bits(&gb, 3) + 3; -bits = get_bits(&gb, 2); +run_length = bitstream_read(&bc, 3) + 3; +bits = bitstream_read(&bc, 2); if (non_mod == 1 && bits == 1) pixels_read += run_length; @@ -366,12 +366,12 @@ static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len, } } } else { -bits = get_bits1(&gb); +bits = bitstream_read_bit(&bc); if (bits == 0) { -bits = get_bits(&gb, 2); +bits = bitstream_read(&bc, 2); if (bits == 2) { -run_length = get_bits(&gb, 4) + 12; -bits = get_bits(&gb, 2); +run_length = bitstream_read(&bc, 4) + 12; +bits = bitstream_read(&bc, 2); if (non_mod == 1 && bits == 1) pixels_read += run_length; @@ -384,8 +384,8 @@ static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len, } } } else if (bits == 3) { -run_length = get_bits(&gb, 8) + 29; -bits = get_bits(&gb, 2); +run_length = bitstream_read(&bc, 8) + 29; +bits = bitstream_read(&bc, 2); if (non_mod == 1 && bits == 1) pixels_read += run_length; @@ -408,7 +408,7 @@ static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len, *destbuf++ = bits; } } else { -(*srcbuf) += (get_bits_count(&gb) + 7) >> 3; +*srcbuf += (bitstream_tell(&bc) + 7) >> 3; return pixels_read; } } else { @@ -423,10 +423,10 @@ static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len, } } -if (get_bits(&gb, 6)) +if (bitstream_read(&bc, 6)) av_log(NULL, AV_LOG_ERROR, "DVBSub error: line overflow\n"); -(*srcbuf) += (get_bits_count(&gb) + 7) >> 3; +*srcbuf += (bitstream_tell(&bc) + 7) >> 3; return pixels_read; } @@ -435,16 +435,16 @@ static int dvbsub_read_4bit_string(uint8_t *destbuf, int dbuf_len, const uint8_t **srcbuf, int buf_size, int non_mod, uint8_t *map_table) { -GetBitContext gb; +BitstreamContext bc; int bits; int run_length; int pixels_read = 0; -init_get_bits(&gb, *srcbuf, buf_size << 3); +bitstream_init(&bc, *srcbuf, buf_size << 3); -while (get_bits_count(&gb) <
[FFmpeg-cvslog] motionpixels: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 21:41:02 2016 +0200| [d7fe11634c1ad3433d5ea5a08604692d583fea2b] | committer: Diego Biurrun motionpixels: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d7fe11634c1ad3433d5ea5a08604692d583fea2b --- libavcodec/motionpixels.c | 77 --- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c index a18541b852..333f18fdb2 100644 --- a/libavcodec/motionpixels.c +++ b/libavcodec/motionpixels.c @@ -20,7 +20,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "bswapdsp.h" #include "internal.h" @@ -87,17 +87,18 @@ static av_cold int mp_decode_init(AVCodecContext *avctx) return 0; } -static void mp_read_changes_map(MotionPixelsContext *mp, GetBitContext *gb, int count, int bits_len, int read_color) +static void mp_read_changes_map(MotionPixelsContext *mp, BitstreamContext *bc, +int count, int bits_len, int read_color) { uint16_t *pixels; int offset, w, h, color = 0, x, y, i; while (count--) { -offset = get_bits_long(gb, mp->offset_bits_len); -w = get_bits(gb, bits_len) + 1; -h = get_bits(gb, bits_len) + 1; +offset = bitstream_read(bc, mp->offset_bits_len); +w = bitstream_read(bc, bits_len) + 1; +h = bitstream_read(bc, bits_len) + 1; if (read_color) -color = get_bits(gb, 15); +color = bitstream_read(bc, 15); x = offset % mp->avctx->width; y = offset / mp->avctx->width; if (y >= mp->avctx->height) @@ -116,16 +117,17 @@ static void mp_read_changes_map(MotionPixelsContext *mp, GetBitContext *gb, int } } -static void mp_get_code(MotionPixelsContext *mp, GetBitContext *gb, int size, int code) +static void mp_get_code(MotionPixelsContext *mp, BitstreamContext *bc, +int size, int code) { -while (get_bits1(gb)) { +while (bitstream_read_bit(bc)) { ++size; if (size > mp->max_codes_bits) { av_log(mp->avctx, AV_LOG_ERROR, "invalid code size %d/%d\n", size, mp->max_codes_bits); return; } code <<= 1; -mp_get_code(mp, gb, size, code + 1); +mp_get_code(mp, bc, size, code + 1); } if (mp->current_codes_count >= MAX_HUFF_CODES) { av_log(mp->avctx, AV_LOG_ERROR, "too many codes\n"); @@ -135,18 +137,18 @@ static void mp_get_code(MotionPixelsContext *mp, GetBitContext *gb, int size, in mp->codes[mp->current_codes_count++].size = size; } -static void mp_read_codes_table(MotionPixelsContext *mp, GetBitContext *gb) +static void mp_read_codes_table(MotionPixelsContext *mp, BitstreamContext *bc) { if (mp->codes_count == 1) { -mp->codes[0].delta = get_bits(gb, 4); +mp->codes[0].delta = bitstream_read(bc, 4); } else { int i; -mp->max_codes_bits = get_bits(gb, 4); +mp->max_codes_bits = bitstream_read(bc, 4); for (i = 0; i < mp->codes_count; ++i) -mp->codes[i].delta = get_bits(gb, 4); +mp->codes[i].delta = bitstream_read(bc, 4); mp->current_codes_count = 0; -mp_get_code(mp, gb, 0, 0); +mp_get_code(mp, bc, 0, 0); } } @@ -175,16 +177,16 @@ static void mp_set_rgb_from_yuv(MotionPixelsContext *mp, int x, int y, const Yuv *(uint16_t *)&mp->frame->data[0][y * mp->frame->linesize[0] + x * 2] = color; } -static int mp_get_vlc(MotionPixelsContext *mp, GetBitContext *gb) +static int mp_get_vlc(MotionPixelsContext *mp, BitstreamContext *bc) { int i; -i = (mp->codes_count == 1) ? 0 : get_vlc2(gb, mp->vlc.table, mp->max_codes_bits, 1); +i = (mp->codes_count == 1) ? 0 : bitstream_read_vlc(bc, mp->vlc.table, mp->max_codes_bits, 1); i = FFMIN(i, FF_ARRAY_ELEMS(mp->codes) - 1); return mp->codes[i].delta; } -static void mp_decode_line(MotionPixelsContext *mp, GetBitContext *gb, int y) +static void mp_decode_line(MotionPixelsContext *mp, BitstreamContext *bc, int y) { YuvPixel p; const int y0 = y * mp->avctx->width; @@ -211,13 +213,13 @@ static void mp_decode_line(MotionPixelsContext *mp, GetBitContext *gb, int y) memset(mp->gradient_scale, 1, sizeof(mp->gradient_scale)); p = mp_get_yuv_from_rgb(mp, x - 1, y); } else { -p.y += mp_gradient(mp, 0, mp_get_vlc(mp, gb)); +p.y += mp_gradient(mp, 0, mp_get_vlc(mp, bc)); p.y = av_clip_uintp2(p.y, 5); if ((x & 3) == 0) { if ((y & 3) == 0) { -
[FFmpeg-cvslog] adx: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 12:32:06 2016 +0200| [4e2505103146c539c6277b8d9d7e6840f6f1db07] | committer: Diego Biurrun adx: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4e2505103146c539c6277b8d9d7e6840f6f1db07 --- libavcodec/adxdec.c | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/adxdec.c b/libavcodec/adxdec.c index dc587b2733..a3344ae695 100644 --- a/libavcodec/adxdec.c +++ b/libavcodec/adxdec.c @@ -20,9 +20,10 @@ */ #include "libavutil/intreadwrite.h" + #include "avcodec.h" #include "adx.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" /** @@ -66,7 +67,7 @@ static int adx_decode(ADXContext *c, int16_t *out, int offset, const uint8_t *in, int ch) { ADXChannelState *prev = &c->prev[ch]; -GetBitContext gb; +BitstreamContext bc; int scale = AV_RB16(in); int i; int s0, s1, s2, d; @@ -75,12 +76,12 @@ static int adx_decode(ADXContext *c, int16_t *out, int offset, if (scale & 0x8000) return -1; -init_get_bits(&gb, in + 2, (BLOCK_SIZE - 2) * 8); +bitstream_init(&bc, in + 2, (BLOCK_SIZE - 2) * 8); out += offset; s1 = prev->s1; s2 = prev->s2; for (i = 0; i < BLOCK_SAMPLES; i++) { -d = get_sbits(&gb, 4); +d = bitstream_read_signed(&bc, 4); s0 = ((d << COEFF_BITS) * scale + c->coeff[0] * s1 + c->coeff[1] * s2) >> COEFF_BITS; s2 = s1; s1 = av_clip_int16(s0); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] interplayvideo: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 17:18:09 2016 +0200| [bd6496fa07e32fd09ceb79404f9af43df959bcb2] | committer: Diego Biurrun interplayvideo: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bd6496fa07e32fd09ceb79404f9af43df959bcb2 --- libavcodec/interplayvideo.c | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/interplayvideo.c b/libavcodec/interplayvideo.c index e0d1e91992..fab9f2724c 100644 --- a/libavcodec/interplayvideo.c +++ b/libavcodec/interplayvideo.c @@ -40,8 +40,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "hpeldsp.h" #include "internal.h" @@ -881,7 +881,7 @@ static void ipvideo_decode_opcodes(IpvideoContext *s, AVFrame *frame) int x, y; unsigned char opcode; int ret; -GetBitContext gb; +BitstreamContext bc; bytestream2_skip(&s->stream_ptr, 14); /* data starts 14 bytes in */ if (!s->is_16bpp) { @@ -898,10 +898,10 @@ static void ipvideo_decode_opcodes(IpvideoContext *s, AVFrame *frame) s->upper_motion_limit_offset = (s->avctx->height - 8) * frame->linesize[0] + (s->avctx->width - 8) * (1 + s->is_16bpp); -init_get_bits(&gb, s->decoding_map, s->decoding_map_size * 8); +bitstream_init(&bc, s->decoding_map, s->decoding_map_size * 8); for (y = 0; y < s->avctx->height; y += 8) { for (x = 0; x < s->avctx->width; x += 8) { -opcode = get_bits(&gb, 4); +opcode = bitstream_read(&bc, 4); ff_dlog(s->avctx, " block @ (%3d, %3d): encoding 0x%X, data ptr offset %d\n", ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] mov: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 16 12:17:24 2016 +0200| [a895292f2734b4aacd2f2c2db6c07ff5a6d535c4] | committer: Diego Biurrun mov: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a895292f2734b4aacd2f2c2db6c07ff5a6d535c4 --- libavformat/mov.c| 10 ++ libavformat/movenc.c | 41 + 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 8b38fa43b8..37afe79df0 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -39,13 +39,15 @@ #include "libavutil/pixdesc.h" #include "libavutil/spherical.h" #include "libavutil/stereo3d.h" + #include "libavcodec/ac3tab.h" +#include "libavcodec/bitstream.h" + #include "avformat.h" #include "internal.h" #include "avio_internal.h" #include "riff.h" #include "isom.h" -#include "libavcodec/get_bits.h" #include "id3v1.h" #include "mov_chan.h" #include "replaygain.h" @@ -2078,7 +2080,7 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, MOVAtom atom) AVStream *st; MOVStreamContext *sc; unsigned int i, entries, sample_size, field_size, num_bytes; -GetBitContext gb; +BitstreamContext bc; unsigned char* buf; int ret; @@ -2136,10 +2138,10 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, MOVAtom atom) return ret; } -init_get_bits(&gb, buf, 8*num_bytes); +bitstream_init(&bc, buf, 8 * num_bytes); for (i = 0; i < entries && !pb->eof_reached; i++) { -sc->sample_sizes[i] = get_bits_long(&gb, field_size); +sc->sample_sizes[i] = bitstream_read(&bc, field_size); sc->data_size += sc->sample_sizes[i]; } diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 3dd882c263..ac76dedca4 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -31,7 +31,8 @@ #include "avio.h" #include "isom.h" #include "avc.h" -#include "libavcodec/get_bits.h" + +#include "libavcodec/bitstream.h" #include "libavcodec/put_bits.h" #include "libavcodec/vc1_common.h" #include "internal.h" @@ -240,7 +241,7 @@ static int mov_write_amr_tag(AVIOContext *pb, MOVTrack *track) static int mov_write_ac3_tag(AVIOContext *pb, MOVTrack *track) { -GetBitContext gbc; +BitstreamContext bc; PutBitContext pbc; uint8_t buf[3]; int fscod, bsid, bsmod, acmod, lfeon, frmsizecod; @@ -251,21 +252,21 @@ static int mov_write_ac3_tag(AVIOContext *pb, MOVTrack *track) avio_wb32(pb, 11); ffio_wfourcc(pb, "dac3"); -init_get_bits(&gbc, track->vos_data + 4, (track->vos_len - 4) * 8); -fscod = get_bits(&gbc, 2); -frmsizecod = get_bits(&gbc, 6); -bsid = get_bits(&gbc, 5); -bsmod = get_bits(&gbc, 3); -acmod = get_bits(&gbc, 3); +bitstream_init(&bc, track->vos_data + 4, (track->vos_len - 4) * 8); +fscod = bitstream_read(&bc, 2); +frmsizecod = bitstream_read(&bc, 6); +bsid = bitstream_read(&bc, 5); +bsmod = bitstream_read(&bc, 3); +acmod = bitstream_read(&bc, 3); if (acmod == 2) { -skip_bits(&gbc, 2); // dsurmod +bitstream_skip(&bc, 2); // dsurmod } else { if ((acmod & 1) && acmod != 1) -skip_bits(&gbc, 2); // cmixlev +bitstream_skip(&bc, 2); // cmixlev if (acmod & 4) -skip_bits(&gbc, 2); // surmixlev +bitstream_skip(&bc, 2); // surmixlev } -lfeon = get_bits1(&gbc); +lfeon = bitstream_read_bit(&bc); init_put_bits(&pbc, buf, sizeof(buf)); put_bits(&pbc, 2, fscod); @@ -462,28 +463,28 @@ static int mov_write_dvc1_structs(MOVTrack *track, uint8_t *buf) return AVERROR(ENOMEM); start = find_next_marker(track->vos_data, end); for (next = start; next < end; start = next) { -GetBitContext gb; +BitstreamContext bc; int size; next = find_next_marker(start + 4, end); size = next - start - 4; if (size <= 0) continue; unescaped_size = vc1_unescape_buffer(start + 4, size, unescaped); -init_get_bits(&gb, unescaped, 8 * unescaped_size); +bitstream_init(&bc, unescaped, 8 * unescaped_size); if (AV_RB32(start) == VC1_CODE_SEQHDR) { -int profile = get_bits(&gb, 2); +int profile = bitstream_read(&bc, 2); if (profile != PROFILE_ADVANCED) { av_free(unescaped); return AVERROR(ENOSYS); }
[FFmpeg-cvslog] alac: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 7 22:04:58 2016 +0200| [4795e4f61f993940c5384044caff56cc15078698] | committer: Diego Biurrun alac: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4795e4f61f993940c5384044caff56cc15078698 --- libavcodec/alac.c | 65 --- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/libavcodec/alac.c b/libavcodec/alac.c index aef68e76a3..0f1c59e486 100644 --- a/libavcodec/alac.c +++ b/libavcodec/alac.c @@ -48,19 +48,20 @@ #include #include "libavutil/channel_layout.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "bytestream.h" #include "internal.h" #include "mathops.h" -#include "unary_legacy.h" +#include "unary.h" #include "alac_data.h" #define ALAC_EXTRADATA_SIZE 36 typedef struct ALACContext { AVCodecContext *avctx; -GetBitContext gb; +BitstreamContext bc; int channels; int32_t *predict_error_buffer[2]; @@ -77,24 +78,24 @@ typedef struct ALACContext { int nb_samples; /**< number of samples in the current frame */ } ALACContext; -static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps) +static inline unsigned int decode_scalar(BitstreamContext *bc, int k, int bps) { -unsigned int x = get_unary_0_9(gb); +unsigned int x = get_unary_0_9(bc); if (x > 8) { /* RICE THRESHOLD */ /* use alternative encoding */ -x = get_bits_long(gb, bps); +x = bitstream_read(bc, bps); } else if (k != 1) { -int extrabits = show_bits(gb, k); +int extrabits = bitstream_peek(bc, k); /* multiply x by 2^k - 1, as part of their strange algorithm */ x = (x << k) - x; if (extrabits > 1) { x += extrabits - 1; -skip_bits(gb, k); +bitstream_skip(bc, k); } else -skip_bits(gb, k - 1); +bitstream_skip(bc, k - 1); } return x; } @@ -113,7 +114,7 @@ static void rice_decompress(ALACContext *alac, int32_t *output_buffer, /* calculate rice param and decode next value */ k = av_log2((history >> 9) + 3); k = FFMIN(k, alac->rice_limit); -x = decode_scalar(&alac->gb, k, bps); +x = decode_scalar(&alac->bc, k, bps); x += sign_modifier; sign_modifier = 0; output_buffer[i] = (x >> 1) ^ -(x & 1); @@ -132,7 +133,7 @@ static void rice_decompress(ALACContext *alac, int32_t *output_buffer, /* calculate rice param and decode block size */ k = 7 - av_log2(history) + ((history + 16) >> 6); k = FFMIN(k, alac->rice_limit); -block_size = decode_scalar(&alac->gb, k, 16); +block_size = decode_scalar(&alac->bc, k, 16); if (block_size > 0) { if (block_size >= nb_samples - i) { @@ -257,13 +258,13 @@ static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, uint32_t output_samples; int i, ch; -skip_bits(&alac->gb, 4); /* element instance tag */ -skip_bits(&alac->gb, 12); /* unused header bits */ +bitstream_skip(&alac->bc, 4); /* element instance tag */ +bitstream_skip(&alac->bc, 12); /* unused header bits */ /* the number of output samples is stored in the frame */ -has_size = get_bits1(&alac->gb); +has_size = bitstream_read_bit(&alac->bc); -alac->extra_bits = get_bits(&alac->gb, 2) << 3; +alac->extra_bits = bitstream_read(&alac->bc, 2) << 3; bps = alac->sample_size - alac->extra_bits + channels - 1; if (bps > 32) { avpriv_report_missing_feature(avctx, "bps %d", bps); @@ -271,10 +272,10 @@ static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, } /* whether the frame is compressed */ -is_compressed = !get_bits1(&alac->gb); +is_compressed = !bitstream_read_bit(&alac->bc); if (has_size) -output_samples = get_bits_long(&alac->gb, 32); +output_samples = bitstream_read(&alac->bc, 32); else output_samples = alac->max_samples_per_frame; if (!output_samples || output_samples > alac->max_samples_per_frame) { @@ -313,27 +314,27 @@ static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, return AVERROR(ENOSYS); } -decorr_shift = get_bits(&alac->gb, 8); -decorr_left_weight = get_bits(&alac->gb, 8); +decorr_shift = bitstream_read(&alac->bc, 8); +decorr_left_weight = bitstream_read(&a
[FFmpeg-cvslog] rtp: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 17 16:59:24 2016 +0200| [b1e7394ea0428318c0407a6c030577196fe834a9] | committer: Diego Biurrun rtp: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b1e7394ea0428318c0407a6c030577196fe834a9 --- libavformat/rtpdec_h261.c | 19 ++- libavformat/rtpdec_h263_rfc2190.c | 19 ++- libavformat/rtpdec_latm.c | 24 +--- libavformat/rtpdec_mpeg4.c| 16 +--- libavformat/rtpdec_qt.c | 31 --- libavformat/rtpenc_h263_rfc2190.c | 29 +++-- 6 files changed, 73 insertions(+), 65 deletions(-) diff --git a/libavformat/rtpdec_h261.c b/libavformat/rtpdec_h261.c index 00086c21c5..b1bd1e0475 100644 --- a/libavformat/rtpdec_h261.c +++ b/libavformat/rtpdec_h261.c @@ -19,7 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavcodec/get_bits.h" +#include "libavcodec/bitstream.h" + #include "avformat.h" #include "avio_internal.h" #include "rtpdec_formats.h" @@ -118,18 +119,18 @@ static int h261_handle_packet(AVFormatContext *ctx, PayloadContext *rtp_h261_ctx avio_w8(rtp_h261_ctx->buf, rtp_h261_ctx->endbyte); } else { /* ebit/sbit values inconsistent, assuming packet loss */ -GetBitContext gb; -init_get_bits(&gb, buf, len*8 - ebit); -skip_bits(&gb, sbit); +BitstreamContext bc; +bitstream_init(&bc, buf, len * 8 - ebit); +bitstream_skip(&bc, sbit); if (rtp_h261_ctx->endbyte_bits) { -rtp_h261_ctx->endbyte |= get_bits(&gb, 8 - rtp_h261_ctx->endbyte_bits); +rtp_h261_ctx->endbyte |= bitstream_read(&bc, 8 - rtp_h261_ctx->endbyte_bits); avio_w8(rtp_h261_ctx->buf, rtp_h261_ctx->endbyte); } -while (get_bits_left(&gb) >= 8) -avio_w8(rtp_h261_ctx->buf, get_bits(&gb, 8)); -rtp_h261_ctx->endbyte_bits = get_bits_left(&gb); +while (bitstream_bits_left(&bc) >= 8) +avio_w8(rtp_h261_ctx->buf, bitstream_read(&bc, 8)); +rtp_h261_ctx->endbyte_bits = bitstream_bits_left(&bc); if (rtp_h261_ctx->endbyte_bits) -rtp_h261_ctx->endbyte = get_bits(&gb, rtp_h261_ctx->endbyte_bits) << +rtp_h261_ctx->endbyte = bitstream_read(&bc, rtp_h261_ctx->endbyte_bits) << (8 - rtp_h261_ctx->endbyte_bits); ebit = 0; len = 0; diff --git a/libavformat/rtpdec_h263_rfc2190.c b/libavformat/rtpdec_h263_rfc2190.c index 019eea779b..5744d71da0 100644 --- a/libavformat/rtpdec_h263_rfc2190.c +++ b/libavformat/rtpdec_h263_rfc2190.c @@ -30,7 +30,8 @@ #include "rtpdec_formats.h" #include "libavutil/attributes.h" #include "libavutil/intreadwrite.h" -#include "libavcodec/get_bits.h" + +#include "libavcodec/bitstream.h" struct PayloadContext { AVIOContext *buf; @@ -141,18 +142,18 @@ static int h263_handle_packet(AVFormatContext *ctx, PayloadContext *data, avio_w8(data->buf, data->endbyte); } else { /* Start/end skip bits not matching - missed packets? */ -GetBitContext gb; -init_get_bits(&gb, buf, len*8 - ebit); -skip_bits(&gb, sbit); +BitstreamContext bc; +bitstream_init(&bc, buf, len * 8 - ebit); +bitstream_skip(&bc, sbit); if (data->endbyte_bits) { -data->endbyte |= get_bits(&gb, 8 - data->endbyte_bits); +data->endbyte |= bitstream_read(&bc, 8 - data->endbyte_bits); avio_w8(data->buf, data->endbyte); } -while (get_bits_left(&gb) >= 8) -avio_w8(data->buf, get_bits(&gb, 8)); -data->endbyte_bits = get_bits_left(&gb); +while (bitstream_bits_left(&bc) >= 8) +avio_w8(data->buf, bitstream_read(&bc, 8)); +data->endbyte_bits = bitstream_bits_left(&bc); if (data->endbyte_bits) -data->endbyte = get_bits(&gb, data->endbyte_bits) << +data->endbyte = bitstream_read(&bc, data->endbyte_bits) << (8 - data->endbyte_bits); ebit = 0; len = 0; diff --git a/libavformat/rtpdec_latm.c b/libavformat/rtpdec_latm.c index df85ed3615..bb826269b0 100644 --- a/libavformat/rtpdec_latm.c +++ b/libavformat/
[FFmpeg-cvslog] als: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 8 19:22:46 2016 +0200| [54dcd2288546e135986338107ea87db1fcedd633] | committer: Diego Biurrun als: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=54dcd2288546e135986338107ea87db1fcedd633 --- libavcodec/alsdec.c | 232 ++-- libavcodec/bgmc.c | 16 ++-- libavcodec/bgmc.h | 16 ++-- 3 files changed, 134 insertions(+), 130 deletions(-) diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c index 9fd2827dcd..5f09a9d4b9 100644 --- a/libavcodec/alsdec.c +++ b/libavcodec/alsdec.c @@ -28,13 +28,13 @@ #include #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "mpeg4audio.h" #include "bytestream.h" #include "bgmc.h" #include "bswapdsp.h" #include "internal.h" -#include "unary_legacy.h" +#include "unary.h" #include "libavutil/samplefmt.h" #include "libavutil/crc.h" @@ -192,7 +192,7 @@ typedef struct ALSChannelData { typedef struct ALSDecContext { AVCodecContext *avctx; ALSSpecificConfig sconf; -GetBitContext gb; +BitstreamContext bc; BswapDSPContext bdsp; const AVCRC *crc_table; uint32_t crc_org; ///< CRC value of the original input data @@ -281,7 +281,7 @@ static av_cold void dprint_specific_config(ALSDecContext *ctx) */ static av_cold int read_specific_config(ALSDecContext *ctx) { -GetBitContext gb; +BitstreamContext bc; uint64_t ht_size; int i, config_offset; MPEG4AudioConfig m4ac; @@ -289,7 +289,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx) AVCodecContext *avctx= ctx->avctx; uint32_t als_id, header_size, trailer_size; -init_get_bits(&gb, avctx->extradata, avctx->extradata_size * 8); +bitstream_init8(&bc, avctx->extradata, avctx->extradata_size); config_offset = avpriv_mpeg4audio_get_config(&m4ac, avctx->extradata, avctx->extradata_size * 8, 1); @@ -297,40 +297,40 @@ static av_cold int read_specific_config(ALSDecContext *ctx) if (config_offset < 0) return AVERROR_INVALIDDATA; -skip_bits_long(&gb, config_offset); +bitstream_skip(&bc, config_offset); -if (get_bits_left(&gb) < (30 << 3)) +if (bitstream_bits_left(&bc) < (30 << 3)) return AVERROR_INVALIDDATA; // read the fixed items -als_id = get_bits_long(&gb, 32); +als_id = bitstream_read(&bc, 32); avctx->sample_rate = m4ac.sample_rate; -skip_bits_long(&gb, 32); // sample rate already known -sconf->samples = get_bits_long(&gb, 32); +bitstream_skip(&bc, 32); // sample rate already known +sconf->samples = bitstream_read(&bc, 32); avctx->channels = m4ac.channels; -skip_bits(&gb, 16); // number of channels already known -skip_bits(&gb, 3); // skip file_type -sconf->resolution = get_bits(&gb, 3); -sconf->floating = get_bits1(&gb); -sconf->msb_first= get_bits1(&gb); -sconf->frame_length = get_bits(&gb, 16) + 1; -sconf->ra_distance = get_bits(&gb, 8); -sconf->ra_flag = get_bits(&gb, 2); -sconf->adapt_order = get_bits1(&gb); -sconf->coef_table = get_bits(&gb, 2); -sconf->long_term_prediction = get_bits1(&gb); -sconf->max_order= get_bits(&gb, 10); -sconf->block_switching = get_bits(&gb, 2); -sconf->bgmc = get_bits1(&gb); -sconf->sb_part = get_bits1(&gb); -sconf->joint_stereo = get_bits1(&gb); -sconf->mc_coding= get_bits1(&gb); -sconf->chan_config = get_bits1(&gb); -sconf->chan_sort= get_bits1(&gb); -sconf->crc_enabled = get_bits1(&gb); -sconf->rlslms = get_bits1(&gb); -skip_bits(&gb, 5); // skip 5 reserved bits -skip_bits1(&gb); // skip aux_data_enabled +bitstream_skip(&bc, 16); // number of channels already known +bitstream_skip(&bc, 3); // skip file_type +sconf->resolution = bitstream_read(&bc, 3); +sconf->floating = bitstream_read_bit(&bc); +sconf->msb_first= bitstream_read_bit(&bc); +sconf->frame_length = bitstream_read(&bc, 16) + 1; +sconf->ra_distance = bitstream_read(&bc, 8); +sconf->ra_flag = bitstream_re
[FFmpeg-cvslog] apedec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 8 19:49:07 2016 +0200| [4d49a4c55054571b56d3b1b1cd9fb9ac4c2bea6a] | committer: Diego Biurrun apedec: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4d49a4c55054571b56d3b1b1cd9fb9ac4c2bea6a --- libavcodec/apedec.c | 47 --- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c index 69ded9a670..da45e85e51 100644 --- a/libavcodec/apedec.c +++ b/libavcodec/apedec.c @@ -25,13 +25,14 @@ #include "libavutil/avassert.h" #include "libavutil/channel_layout.h" #include "libavutil/opt.h" + #include "apedsp.h" #include "avcodec.h" +#include "bitstream.h" #include "bswapdsp.h" #include "bytestream.h" #include "internal.h" -#include "get_bits.h" -#include "unary_legacy.h" +#include "unary.h" /** * @file @@ -162,7 +163,7 @@ typedef struct APEContext { APERice riceX; ///< rice code parameters for the second channel APERice riceY; ///< rice code parameters for the first channel APEFilter filters[APE_FILTER_LEVELS][2]; ///< filters used for reconstruction -GetBitContext gb; +BitstreamContext bc; uint8_t *data; ///< current frame data uint8_t *data_end; ///< frame data end @@ -484,24 +485,24 @@ static inline void update_rice(APERice *rice, unsigned int x) rice->k++; } -static inline int get_rice_ook(GetBitContext *gb, int k) +static inline int get_rice_ook(BitstreamContext *bc, int k) { unsigned int x; -x = get_unary(gb, 1, get_bits_left(gb)); +x = get_unary(bc, 1, bitstream_bits_left(bc)); if (k) -x = (x << k) | get_bits(gb, k); +x = (x << k) | bitstream_read(bc, k); return x; } -static inline int ape_decode_value_3860(APEContext *ctx, GetBitContext *gb, +static inline int ape_decode_value_3860(APEContext *ctx, BitstreamContext *bc, APERice *rice) { unsigned int x, overflow; -overflow = get_unary(gb, 1, get_bits_left(gb)); +overflow = get_unary(bc, 1, bitstream_bits_left(bc)); if (ctx->fileversion > 3880) { while (overflow >= 16) { @@ -513,7 +514,7 @@ static inline int ape_decode_value_3860(APEContext *ctx, GetBitContext *gb, if (!rice->k) x = overflow; else -x = (overflow << rice->k) + get_bits(gb, rice->k); +x = (overflow << rice->k) + bitstream_read(bc, rice->k); rice->ksum += x - (rice->ksum + 8 >> 4); if (rice->ksum < (rice->k ? 1 << (rice->k + 4) : 0)) @@ -607,7 +608,7 @@ static inline int ape_decode_value_3990(APEContext *ctx, APERice *rice) return -(x >> 1); } -static void decode_array_(APEContext *ctx, GetBitContext *gb, +static void decode_array_(APEContext *ctx, BitstreamContext *bc, int32_t *out, APERice *rice, int blockstodecode) { int i; @@ -615,19 +616,19 @@ static void decode_array_(APEContext *ctx, GetBitContext *gb, rice->ksum = 0; for (i = 0; i < FFMIN(blockstodecode, 5); i++) { -out[i] = get_rice_ook(&ctx->gb, 10); +out[i] = get_rice_ook(&ctx->bc, 10); rice->ksum += out[i]; } rice->k = av_log2(rice->ksum / 10) + 1; for (; i < FFMIN(blockstodecode, 64); i++) { -out[i] = get_rice_ook(&ctx->gb, rice->k); +out[i] = get_rice_ook(&ctx->bc, rice->k); rice->ksum += out[i]; rice->k = av_log2(rice->ksum / ((i + 1) * 2)) + 1; } ksummax = 1 << rice->k + 7; ksummin = rice->k ? (1 << rice->k + 6) : 0; for (; i < blockstodecode; i++) { -out[i] = get_rice_ook(&ctx->gb, rice->k); +out[i] = get_rice_ook(&ctx->bc, rice->k); rice->ksum += out[i] - out[i - 64]; while (rice->ksum < ksummin) { rice->k--; @@ -653,15 +654,15 @@ static void decode_array_(APEContext *ctx, GetBitContext *gb, static void entropy_decode_mono_(APEContext *ctx, int blockstodecode) { -decode_array_(ctx, &ctx->gb, ctx->decoded[0], &ctx->riceY, +decode_array_(ctx, &ctx->bc, ctx->decoded[0], &ctx->riceY, blockstodecode); } static void entropy_decode_stereo_(APEContext *ctx, int blockstodecode) { -decode_array_(ctx, &ctx->gb, ctx->decoded[0], &ctx->riceY, +decode_array_(ctx, &ctx->bc, ctx->decoded[0], &ctx->riceY
[FFmpeg-cvslog] dxtory: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 19:37:46 2016 +0200| [fd8de7f2d8c31195d309247cb129c0ad787ef76e] | committer: Diego Biurrun dxtory: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fd8de7f2d8c31195d309247cb129c0ad787ef76e --- libavcodec/dxtory.c | 88 ++--- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/libavcodec/dxtory.c b/libavcodec/dxtory.c index b0fae2f5ef..05de4ac837 100644 --- a/libavcodec/dxtory.c +++ b/libavcodec/dxtory.c @@ -27,10 +27,10 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" -#include "unary_legacy.h" +#include "unary.h" static int dxtory_decode_v1_rgb(AVCodecContext *avctx, AVFrame *pic, const uint8_t *src, int src_size, @@ -176,13 +176,13 @@ static const uint8_t def_lru[8] = { 0x00, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0, 0x static const uint8_t def_lru_555[8] = { 0x00, 0x08, 0x10, 0x18, 0x1F }; static const uint8_t def_lru_565[8] = { 0x00, 0x08, 0x10, 0x20, 0x30, 0x3F }; -static inline uint8_t decode_sym(GetBitContext *gb, uint8_t lru[8]) +static inline uint8_t decode_sym(BitstreamContext *bc, uint8_t lru[8]) { uint8_t c, val; -c = get_unary(gb, 0, 8); +c = get_unary(bc, 0, 8); if (!c) { -val = get_bits(gb, 8); +val = bitstream_read(bc, 8); memmove(lru + 1, lru, sizeof(*lru) * (8 - 1)); } else { val = lru[c - 1]; @@ -243,14 +243,14 @@ static int load_buffer(AVCodecContext *avctx, return 0; } -static inline uint8_t decode_sym_565(GetBitContext *gb, uint8_t lru[8], +static inline uint8_t decode_sym_565(BitstreamContext *bc, uint8_t lru[8], int bits) { uint8_t c, val; -c = get_unary(gb, 0, bits); +c = get_unary(bc, 0, bits); if (!c) { -val = get_bits(gb, bits); +val = bitstream_read(bc, bits); memmove(lru + 1, lru, sizeof(*lru) * (6 - 1)); } else { val = lru[c - 1]; @@ -261,7 +261,7 @@ static inline uint8_t decode_sym_565(GetBitContext *gb, uint8_t lru[8], return val; } -typedef int (*decode_slice_func)(GetBitContext *gb, AVFrame *frame, +typedef int (*decode_slice_func)(BitstreamContext *bc, AVFrame *frame, int line, int height, uint8_t lru[3][8]); typedef void (*setup_lru_func)(uint8_t lru[3][8]); @@ -273,7 +273,7 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic, enum AVPixelFormat fmt) { GetByteContext gb; -GetBitContext gb2; +BitstreamContext bc; int nslices, slice, line = 0; uint32_t off, slice_size; uint8_t lru[3][8]; @@ -296,9 +296,9 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic, if (ret < 0) return ret; -init_get_bits(&gb2, src + off + 16, (slice_size - 16) * 8); +bitstream_init8(&bc, src + off + 16, slice_size - 16); -line += decode_slice(&gb2, pic, line, avctx->height - line, lru); +line += decode_slice(&bc, pic, line, avctx->height - line, lru); off += slice_size; } @@ -315,7 +315,7 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic, } av_always_inline -static int dx2_decode_slice_5x5(GetBitContext *gb, AVFrame *frame, +static int dx2_decode_slice_5x5(BitstreamContext *bc, AVFrame *frame, int line, int left, uint8_t lru[3][8], int is_565) { @@ -325,11 +325,11 @@ static int dx2_decode_slice_5x5(GetBitContext *gb, AVFrame *frame, int stride = frame->linesize[0]; uint8_t *dst = frame->data[0] + stride * line; -for (y = 0; y < left && get_bits_left(gb) > 16; y++) { +for (y = 0; y < left && bitstream_bits_left(bc) > 16; y++) { for (x = 0; x < width; x++) { -b = decode_sym_565(gb, lru[0], 5); -g = decode_sym_565(gb, lru[1], is_565 ? 6 : 5); -r = decode_sym_565(gb, lru[2], 5); +b = decode_sym_565(bc, lru[0], 5); +g = decode_sym_565(bc, lru[1], is_565 ? 6 : 5); +r = decode_sym_565(bc, lru[2], 5); dst[x * 3 + 0] = (r << 3) | (r >> 2); dst[x * 3 + 1] = is_565 ? (g << 2) | (g >> 4) : (g << 3) | (g >> 2); dst[x * 3 + 2] = (b << 3) | (b >> 2); @@ -355,16 +355,16 @@ static void setup_lru_565(uint8_t lru[3][8]) memcpy(lru[2], def_lru_555, 8 * sizeof(*def_lru)); } -static int dx2_decode_slice_555(GetBitContext *gb, AVFrame *frame, +static int dx2_decode_slice_555(BitstreamContext *bc, AVFrame *frame,
[FFmpeg-cvslog] mpc: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Mon Apr 18 10:56:03 2016 +0200| [6668bc80b5eeae16c35302cfa6325219f7ce2da7] | committer: Diego Biurrun mpc: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6668bc80b5eeae16c35302cfa6325219f7ce2da7 --- libavcodec/mpc7.c | 73 +-- libavcodec/mpc8.c | 83 +++--- libavformat/mpc8.c | 26 - 3 files changed, 94 insertions(+), 88 deletions(-) diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c index 28b51922ec..5d749106de 100644 --- a/libavcodec/mpc7.c +++ b/libavcodec/mpc7.c @@ -28,8 +28,9 @@ #include "libavutil/channel_layout.h" #include "libavutil/internal.h" #include "libavutil/lfg.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "mpegaudiodsp.h" @@ -53,7 +54,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx) { int i, j; MPCContext *c = avctx->priv_data; -GetBitContext gb; +BitstreamContext bc; LOCAL_ALIGNED_16(uint8_t, buf, [16]); static int vlc_initialized = 0; @@ -78,18 +79,18 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx) ff_mpadsp_init(&c->mpadsp); c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4); ff_mpc_init(); -init_get_bits(&gb, buf, 128); +bitstream_init(&bc, buf, 128); -c->IS = get_bits1(&gb); -c->MSS = get_bits1(&gb); -c->maxbands = get_bits(&gb, 6); +c->IS = bitstream_read_bit(&bc); +c->MSS = bitstream_read_bit(&bc); +c->maxbands = bitstream_read(&bc, 6); if(c->maxbands >= BANDS){ av_log(avctx, AV_LOG_ERROR, "Too many bands: %i\n", c->maxbands); return -1; } -skip_bits_long(&gb, 88); -c->gapless = get_bits1(&gb); -c->lastframelen = get_bits(&gb, 11); +bitstream_skip(&bc, 88); +c->gapless = bitstream_read_bit(&bc); +c->lastframelen = bitstream_read(&bc, 11); av_log(avctx, AV_LOG_DEBUG, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n", c->IS, c->MSS, c->gapless, c->lastframelen, c->maxbands); c->frames_to_skip = 0; @@ -143,7 +144,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx) /** * Fill samples for given subband */ -static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *dst) +static inline void idx_to_quant(MPCContext *c, BitstreamContext *bc, int idx, int *dst) { int i, i1, t; switch(idx){ @@ -153,43 +154,43 @@ static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int * } break; case 1: -i1 = get_bits1(gb); +i1 = bitstream_read_bit(bc); for(i = 0; i < SAMPLES_PER_BAND/3; i++){ -t = get_vlc2(gb, quant_vlc[0][i1].table, 9, 2); +t = bitstream_read_vlc(bc, quant_vlc[0][i1].table, 9, 2); *dst++ = mpc7_idx30[t]; *dst++ = mpc7_idx31[t]; *dst++ = mpc7_idx32[t]; } break; case 2: -i1 = get_bits1(gb); +i1 = bitstream_read_bit(bc); for(i = 0; i < SAMPLES_PER_BAND/2; i++){ -t = get_vlc2(gb, quant_vlc[1][i1].table, 9, 2); +t = bitstream_read_vlc(bc, quant_vlc[1][i1].table, 9, 2); *dst++ = mpc7_idx50[t]; *dst++ = mpc7_idx51[t]; } break; case 3: case 4: case 5: case 6: case 7: -i1 = get_bits1(gb); +i1 = bitstream_read_bit(bc); for(i = 0; i < SAMPLES_PER_BAND; i++) -*dst++ = get_vlc2(gb, quant_vlc[idx-1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx-1]; +*dst++ = bitstream_read_vlc(bc, quant_vlc[idx - 1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx - 1]; break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: t = (1 << (idx - 2)) - 1; for(i = 0; i < SAMPLES_PER_BAND; i++) -*dst++ = get_bits(gb, idx - 1) - t; +*dst++ = bitstream_read(bc, idx - 1) - t; break; default: // case 0 and -2..-17 return; } } -static int get_scale_idx(GetBitContext *gb, int ref) +static int get_scale_idx(BitstreamContext *bc, int ref) { -int t = get_vlc2(gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; +int t = bitstream_read_vlc(bc, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; if (t == 8) -return get_bits(gb, 6); +return bitstream_read(bc, 6); return av_clip_uintp2(ref + t, 7); } @@ -200,7 +201,7 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data, cons
[FFmpeg-cvslog] wavpack: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 15 10:45:11 2016 +0200| [e7f24c9ffc6a12a37016914859a74c3127868996] | committer: Diego Biurrun wavpack: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e7f24c9ffc6a12a37016914859a74c3127868996 --- libavcodec/wavpack.c | 92 ++-- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/libavcodec/wavpack.c b/libavcodec/wavpack.c index b8adb3d484..66430b90e3 100644 --- a/libavcodec/wavpack.c +++ b/libavcodec/wavpack.c @@ -23,10 +23,10 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" -#include "unary_legacy.h" +#include "unary.h" /** * @file @@ -109,10 +109,10 @@ typedef struct WavpackFrameContext { int stereo, stereo_in; int joint; uint32_t CRC; -GetBitContext gb; +BitstreamContext bc; int got_extra_bits; uint32_t crc_extra_bits; -GetBitContext gb_extra_bits; +BitstreamContext bc_extra_bits; int data_size; // in bits int samples; int terms; @@ -240,7 +240,7 @@ static av_always_inline int wp_log2(int32_t val) } \ } -static av_always_inline int get_tail(GetBitContext *gb, int k) +static av_always_inline int get_tail(BitstreamContext *bc, int k) { int p, e, res; @@ -248,9 +248,9 @@ static av_always_inline int get_tail(GetBitContext *gb, int k) return 0; p = av_log2(k); e = (1 << (p + 1)) - k - 1; -res = get_bitsz(gb, p); +res = bitstream_read(bc, p); if (res >= e) -res = (res << 1) - e + get_bits1(gb); +res = (res << 1) - e + bitstream_read_bit(bc); return res; } @@ -288,7 +288,7 @@ static void update_error_limit(WavpackFrameContext *ctx) } } -static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, +static int wv_get_value(WavpackFrameContext *ctx, BitstreamContext *bc, int channel, int *last) { int t, t2; @@ -306,13 +306,13 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, return 0; } } else { -t = get_unary_0_33(gb); +t = get_unary_0_33(bc); if (t >= 2) { -if (get_bits_left(gb) < t - 1) +if (bitstream_bits_left(bc) < t - 1) goto error; -t = get_bits(gb, t - 1) | (1 << (t - 1)); +t = bitstream_read(bc, t - 1) | (1 << (t - 1)); } else { -if (get_bits_left(gb) < 0) +if (bitstream_bits_left(bc) < 0) goto error; } ctx->zeroes = t; @@ -329,19 +329,19 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, t = 0; ctx->zero = 0; } else { -t = get_unary_0_33(gb); -if (get_bits_left(gb) < 0) +t = get_unary_0_33(bc); +if (bitstream_bits_left(bc) < 0) goto error; if (t == 16) { -t2 = get_unary_0_33(gb); +t2 = get_unary_0_33(bc); if (t2 < 2) { -if (get_bits_left(gb) < 0) +if (bitstream_bits_left(bc) < 0) goto error; t += t2; } else { -if (get_bits_left(gb) < t2 - 1) +if (bitstream_bits_left(bc) < t2 - 1) goto error; -t += get_bits(gb, t2 - 1) | (1 << (t2 - 1)); +t += bitstream_read(bc, t2 - 1) | (1 << (t2 - 1)); } } @@ -381,15 +381,15 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, INC_MED(2); } if (!c->error_limit) { -ret = base + get_tail(gb, add); -if (get_bits_left(gb) <= 0) +ret = base + get_tail(bc, add); +if (bitstream_bits_left(bc) <= 0) goto error; } else { int mid = (base * 2 + add + 1) >> 1; while (add > c->error_limit) { -if (get_bits_left(gb) <= 0) +if (bitstream_bits_left(bc) <= 0) goto error; -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { add -= (mid - base); base = mid; } else @@ -398,7 +398,7 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, } ret = mid; } -sign = get_bits1(gb); +sign = bitstream_read_bit(bc); if (ctx->hybrid_bitrate) c->slow_level += wp_log2(ret) - LEVEL_DECAY(c->slow_level); return sign ? ~ret : ret; @@ -417,8 +417,8 @@ static inli
[FFmpeg-cvslog] tak: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 21:00:34 2016 +0200| [381a4e31a6b801a046e38b0e2b08fb61499157a7] | committer: Diego Biurrun tak: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=381a4e31a6b801a046e38b0e2b08fb61499157a7 --- libavcodec/tak.c| 49 +++ libavcodec/tak.h| 10 +-- libavcodec/tak_parser.c | 15 ++--- libavcodec/takdec.c | 158 libavformat/takdec.c| 13 ++-- 5 files changed, 125 insertions(+), 120 deletions(-) diff --git a/libavcodec/tak.c b/libavcodec/tak.c index bd82c3d193..c90e55ad6a 100644 --- a/libavcodec/tak.c +++ b/libavcodec/tak.c @@ -24,6 +24,7 @@ #include "libavutil/intreadwrite.h" #define BITSTREAM_READER_LE +#include "bitstream.h" #include "tak.h" static const uint16_t frame_duration_type_quants[] = { @@ -85,30 +86,30 @@ int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size) return 0; } -void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s) +void avpriv_tak_parse_streaminfo(BitstreamContext *bc, TAKStreamInfo *s) { uint64_t channel_mask = 0; int frame_type, i; -s->codec = get_bits(gb, TAK_ENCODER_CODEC_BITS); -skip_bits(gb, TAK_ENCODER_PROFILE_BITS); +s->codec = bitstream_read(bc, TAK_ENCODER_CODEC_BITS); +bitstream_skip(bc, TAK_ENCODER_PROFILE_BITS); -frame_type = get_bits(gb, TAK_SIZE_FRAME_DURATION_BITS); -s->samples = get_bits64(gb, TAK_SIZE_SAMPLES_NUM_BITS); +frame_type = bitstream_read(bc, TAK_SIZE_FRAME_DURATION_BITS); +s->samples = bitstream_read_63(bc, TAK_SIZE_SAMPLES_NUM_BITS); -s->data_type = get_bits(gb, TAK_FORMAT_DATA_TYPE_BITS); -s->sample_rate = get_bits(gb, TAK_FORMAT_SAMPLE_RATE_BITS) + +s->data_type = bitstream_read(bc, TAK_FORMAT_DATA_TYPE_BITS); +s->sample_rate = bitstream_read(bc, TAK_FORMAT_SAMPLE_RATE_BITS) + TAK_SAMPLE_RATE_MIN; -s->bps = get_bits(gb, TAK_FORMAT_BPS_BITS) + +s->bps = bitstream_read(bc, TAK_FORMAT_BPS_BITS) + TAK_BPS_MIN; -s->channels= get_bits(gb, TAK_FORMAT_CHANNEL_BITS) + +s->channels= bitstream_read(bc, TAK_FORMAT_CHANNEL_BITS) + TAK_CHANNELS_MIN; -if (get_bits1(gb)) { -skip_bits(gb, TAK_FORMAT_VALID_BITS); -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { +bitstream_skip(bc, TAK_FORMAT_VALID_BITS); +if (bitstream_read_bit(bc)) { for (i = 0; i < s->channels; i++) { -int value = get_bits(gb, TAK_FORMAT_CH_LAYOUT_BITS); +int value = bitstream_read(bc, TAK_FORMAT_CH_LAYOUT_BITS); if (value > 0 && value <= 18) channel_mask |= 1 << (value - 1); @@ -120,33 +121,33 @@ void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s) s->frame_samples = tak_get_nb_samples(s->sample_rate, frame_type); } -int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, +int ff_tak_decode_frame_header(AVCodecContext *avctx, BitstreamContext *bc, TAKStreamInfo *ti, int log_level_offset) { -if (get_bits(gb, TAK_FRAME_HEADER_SYNC_ID_BITS) != TAK_FRAME_HEADER_SYNC_ID) { +if (bitstream_read(bc, TAK_FRAME_HEADER_SYNC_ID_BITS) != TAK_FRAME_HEADER_SYNC_ID) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "missing sync id\n"); return AVERROR_INVALIDDATA; } -ti->flags = get_bits(gb, TAK_FRAME_HEADER_FLAGS_BITS); -ti->frame_num = get_bits(gb, TAK_FRAME_HEADER_NO_BITS); +ti->flags = bitstream_read(bc, TAK_FRAME_HEADER_FLAGS_BITS); +ti->frame_num = bitstream_read(bc, TAK_FRAME_HEADER_NO_BITS); if (ti->flags & TAK_FRAME_FLAG_IS_LAST) { -ti->last_frame_samples = get_bits(gb, TAK_FRAME_HEADER_SAMPLE_COUNT_BITS) + 1; -skip_bits(gb, 2); +ti->last_frame_samples = bitstream_read(bc, TAK_FRAME_HEADER_SAMPLE_COUNT_BITS) + 1; +bitstream_skip(bc, 2); } else { ti->last_frame_samples = 0; } if (ti->flags & TAK_FRAME_FLAG_HAS_INFO) { -avpriv_tak_parse_streaminfo(gb, ti); +avpriv_tak_parse_streaminfo(bc, ti); -if (get_bits(gb, 6)) -skip_bits(gb, 25); -align_get_bits(gb); +if (bitstream_read(bc, 6)) +bitstream_skip(bc, 25); +bitstream_align(bc); } -skip_bits(gb, 24); +bitstream_skip(bc, 24); return 0; } diff --git a/libavcodec/tak.h b/libavcodec/tak.h index 19b1c47521..c752062521 100644 --- a/libavcodec/tak.h +++ b/libavcodec/tak.h @@ -30,7 +30,7 @@ #include #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h"
[FFmpeg-cvslog] fic: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Mar 19 17:40:55 2016 +0100| [0f94de8a092b1a9f1fe45f830c0f134699c16de1] | committer: Diego Biurrun fic: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0f94de8a092b1a9f1fe45f830c0f134699c16de1 --- libavcodec/fic.c | 18 +- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libavcodec/fic.c b/libavcodec/fic.c index 1804104916..a038af6e60 100644 --- a/libavcodec/fic.c +++ b/libavcodec/fic.c @@ -24,9 +24,9 @@ #include "libavutil/common.h" #include "avcodec.h" -#include "golomb_legacy.h" +#include "bitstream.h" +#include "golomb.h" #include "internal.h" -#include "get_bits.h" typedef struct FICThreadContext { DECLARE_ALIGNED(16, int16_t, block)[64]; @@ -129,13 +129,13 @@ static void fic_idct_put(uint8_t *dst, int stride, int16_t *block) ptr += 8; } } -static int fic_decode_block(FICContext *ctx, GetBitContext *gb, +static int fic_decode_block(FICContext *ctx, BitstreamContext *bc, uint8_t *dst, int stride, int16_t *block) { int i, num_coeff; /* Is it a skip block? */ -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { /* This is a P-frame. */ ctx->frame->key_frame = 0; ctx->frame->pict_type = AV_PICTURE_TYPE_P; @@ -145,12 +145,12 @@ static int fic_decode_block(FICContext *ctx, GetBitContext *gb, memset(block, 0, sizeof(*block) * 64); -num_coeff = get_bits(gb, 7); +num_coeff = bitstream_read(bc, 7); if (num_coeff > 64) return AVERROR_INVALIDDATA; for (i = 0; i < num_coeff; i++) -block[ff_zigzag_direct[i]] = get_se_golomb(gb) * +block[ff_zigzag_direct[i]] = get_se_golomb(bc) * ctx->qmat[ff_zigzag_direct[i]]; fic_idct_put(dst, stride, block); @@ -162,14 +162,14 @@ static int fic_decode_slice(AVCodecContext *avctx, void *tdata) { FICContext *ctx= avctx->priv_data; FICThreadContext *tctx = tdata; -GetBitContext gb; +BitstreamContext bc; uint8_t *src = tctx->src; int slice_h = tctx->slice_h; int src_size = tctx->src_size; int y_off= tctx->y_off; int x, y, p; -init_get_bits(&gb, src, src_size * 8); +bitstream_init8(&bc, src, src_size); for (p = 0; p < 3; p++) { int stride = ctx->frame->linesize[p]; @@ -179,7 +179,7 @@ static int fic_decode_slice(AVCodecContext *avctx, void *tdata) for (x = 0; x < (ctx->aligned_width >> !!p); x += 8) { int ret; -if ((ret = fic_decode_block(ctx, &gb, dst + x, stride, tctx->block)) != 0) +if ((ret = fic_decode_block(ctx, &bc, dst + x, stride, tctx->block)) != 0) return ret; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] cavs: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Mar 19 12:39:03 2016 +0100| [ffc00df0a61b656b3c2ba199c9d153b7787caefa] | committer: Diego Biurrun cavs: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ffc00df0a61b656b3c2ba199c9d153b7787caefa --- libavcodec/cavs.c| 8 +-- libavcodec/cavs.h| 4 +- libavcodec/cavsdec.c | 178 +-- 3 files changed, 95 insertions(+), 95 deletions(-) diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c index bf1a59a6f0..6959f54404 100644 --- a/libavcodec/cavs.c +++ b/libavcodec/cavs.c @@ -26,8 +26,8 @@ */ #include "avcodec.h" -#include "get_bits.h" -#include "golomb_legacy.h" +#include "bitstream.h" +#include "golomb.h" #include "h264chroma.h" #include "idctdsp.h" #include "internal.h" @@ -603,8 +603,8 @@ void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC, mv_pred_median(h, mvP, mvA, mvB, mvC); if (mode < MV_PRED_PSKIP) { -mvP->x += get_se_golomb(&h->gb); -mvP->y += get_se_golomb(&h->gb); +mvP->x += get_se_golomb(&h->bc); +mvP->y += get_se_golomb(&h->bc); } set_mvs(mvP, size); } diff --git a/libavcodec/cavs.h b/libavcodec/cavs.h index e8729d50cd..cb549f161e 100644 --- a/libavcodec/cavs.h +++ b/libavcodec/cavs.h @@ -22,11 +22,11 @@ #ifndef AVCODEC_CAVS_H #define AVCODEC_CAVS_H +#include "bitstream.h" #include "cavsdsp.h" #include "blockdsp.h" #include "h264chroma.h" #include "idctdsp.h" -#include "get_bits.h" #include "videodsp.h" #define SLICE_MAX_START_CODE0x01af @@ -167,7 +167,7 @@ typedef struct AVSContext { IDCTDSPContext idsp; VideoDSPContext vdsp; CAVSDSPContext cdsp; -GetBitContext gb; +BitstreamContext bc; AVSFrame cur; ///< currently decoded frame AVSFrame DPB[2]; ///< reference frames int dist[2]; ///< temporal distances from current frame to ref frames diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index 5a28fc04ed..7f584ac1c0 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -26,9 +26,9 @@ */ #include "avcodec.h" -#include "get_bits.h" -#include "golomb_legacy.h" +#include "bitstream.h" #include "cavs.h" +#include "golomb.h" #include "internal.h" #include "mpeg12data.h" @@ -506,13 +506,13 @@ static inline void mv_pred_sym(AVSContext *h, cavs_vector *src, / /** kth-order exponential golomb code */ -static inline int get_ue_code(GetBitContext *gb, int order) +static inline int get_ue_code(BitstreamContext *bc, int order) { if (order) { -int ret = get_ue_golomb(gb) << order; -return ret + get_bits(gb, order); +int ret = get_ue_golomb(bc) << order; +return ret + bitstream_read(bc, order); } -return get_ue_golomb(gb); +return get_ue_golomb(bc); } static inline int dequant(AVSContext *h, int16_t *level_buf, uint8_t *run_buf, @@ -545,7 +545,7 @@ static inline int dequant(AVSContext *h, int16_t *level_buf, uint8_t *run_buf, * @param dst location of sample block * @param stride line stride in frame buffer */ -static int decode_residual_block(AVSContext *h, GetBitContext *gb, +static int decode_residual_block(AVSContext *h, BitstreamContext *bc, const struct dec_2dvlc *r, int esc_golomb_order, int qp, uint8_t *dst, ptrdiff_t stride) { @@ -555,10 +555,10 @@ static int decode_residual_block(AVSContext *h, GetBitContext *gb, int16_t *block = h->block; for (i = 0;i < 65; i++) { -level_code = get_ue_code(gb, r->golomb_order); +level_code = get_ue_code(bc, r->golomb_order); if (level_code >= ESCAPE_CODE) { run = ((level_code - ESCAPE_CODE) >> 1) + 1; -esc_code = get_ue_code(gb, esc_golomb_order); +esc_code = get_ue_code(bc, esc_golomb_order); level= esc_code + (run > r->max_run ? 1 : r->level_add[run]); while (level > r->inc_limit) r++; @@ -588,10 +588,10 @@ static int decode_residual_block(AVSContext *h, GetBitContext *gb, static inline void decode_residual_chroma(AVSContext *h) { if (h->cbp & (1 << 4)) -decode_residual_block(h, &h->gb, chroma_dec, 0, +decode_residual_block(h, &h->bc, chroma_dec, 0, cavs_chroma_qp[h->qp], h->cu, h->c_stride); if (h->cbp & (1 << 5)) -decode_residual_block(h, &h->
[FFmpeg-cvslog] ffv1: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Mar 19 17:32:04 2016 +0100| [ab2539bd374fe7ddbc6e2f058b62645cd5076192] | committer: Diego Biurrun ffv1: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ab2539bd374fe7ddbc6e2f058b62645cd5076192 --- libavcodec/ffv1.h| 4 ++-- libavcodec/ffv1dec.c | 24 libavcodec/ffv1enc.c | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h index 34370fa143..7e0465abaa 100644 --- a/libavcodec/ffv1.h +++ b/libavcodec/ffv1.h @@ -26,7 +26,7 @@ #include #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "put_bits.h" #include "rangecoder.h" @@ -70,7 +70,7 @@ typedef struct FFV1Context { AVClass *class; AVCodecContext *avctx; RangeCoder c; -GetBitContext gb; +BitstreamContext bc; PutBitContext pb; uint64_t rc_stat[256][2]; uint64_t (*rc_stat2[MAX_QUANT_TABLES])[32][2]; diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index 2ebd6864a1..07e66b9dbb 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -33,9 +33,9 @@ #include "libavutil/timer.h" #include "avcodec.h" -#include "golomb_legacy.h" +#include "bitstream.h" +#include "golomb.h" #include "internal.h" -#include "get_bits.h" #include "put_bits.h" #include "rangecoder.h" #include "mathops.h" @@ -66,7 +66,7 @@ static av_noinline int get_symbol(RangeCoder *c, uint8_t *state, int is_signed) return get_symbol_inline(c, state, is_signed); } -static inline int get_vlc_symbol(GetBitContext *gb, VlcState *const state, +static inline int get_vlc_symbol(BitstreamContext *bc, VlcState *const state, int bits) { int k, i, v, ret; @@ -80,7 +80,7 @@ static inline int get_vlc_symbol(GetBitContext *gb, VlcState *const state, assert(k <= 8); -v = get_sr_golomb(gb, k, 12, bits); +v = get_sr_golomb(bc, k, 12, bits); ff_dlog(NULL, "v:%d bias:%d error:%d drift:%d count:%d k:%d", v, state->bias, state->error_sum, state->drift, state->count, k); @@ -124,13 +124,13 @@ static av_always_inline void decode_line(FFV1Context *s, int w, if (run_mode) { if (run_count == 0 && run_mode == 1) { -if (get_bits1(&s->gb)) { +if (bitstream_read_bit(&s->bc)) { run_count = 1 << ff_log2_run[run_index]; if (x + run_count <= w) run_index++; } else { if (ff_log2_run[run_index]) -run_count = get_bits(&s->gb, ff_log2_run[run_index]); +run_count = bitstream_read(&s->bc, ff_log2_run[run_index]); else run_count = 0; if (run_index) @@ -142,17 +142,17 @@ static av_always_inline void decode_line(FFV1Context *s, int w, if (run_count < 0) { run_mode = 0; run_count = 0; -diff = get_vlc_symbol(&s->gb, &p->vlc_state[context], +diff = get_vlc_symbol(&s->bc, &p->vlc_state[context], bits); if (diff >= 0) diff++; } else diff = 0; } else -diff = get_vlc_symbol(&s->gb, &p->vlc_state[context], bits); +diff = get_vlc_symbol(&s->bc, &p->vlc_state[context], bits); ff_dlog(s->avctx, "count:%d index:%d, mode:%d, x:%d pos:%d\n", -run_count, run_index, run_mode, x, get_bits_count(&s->gb)); +run_count, run_index, run_mode, x, bitstream_tell(&s->bc)); } if (sign) @@ -364,9 +364,9 @@ static int decode_slice(AVCodecContext *c, void *arg) if (f->version == 3 && f->minor_version > 1 || f->version > 3) get_rac(&fs->c, (uint8_t[]) { 129 }); fs->ac_byte_count = f->version > 2 || (!x && !y) ? fs->c.bytestream - fs->c.bytestream_start - 1 : 0; -init_get_bits(&fs->gb, fs->c.bytestream_start + fs->ac_byte_count, - (fs->c.bytestream_end - fs->c.bytestream_start - - fs->ac_byte_count) * 8); +bitstream_init8(&fs->bc, fs->c.bytestream_start + fs->ac_byte_count, +(fs->c.bytestream_end - fs-&
[FFmpeg-cvslog] aic: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 23 15:19:08 2016 +0200| [0c89ff82e9ddc68ec92316d786cd8ddc7b6c2b8c] | committer: Diego Biurrun aic: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0c89ff82e9ddc68ec92316d786cd8ddc7b6c2b8c --- libavcodec/aic.c | 30 +++--- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/libavcodec/aic.c b/libavcodec/aic.c index 405ebf12d5..368b3bcf23 100644 --- a/libavcodec/aic.c +++ b/libavcodec/aic.c @@ -23,13 +23,13 @@ #include #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" +#include "golomb.h" #include "internal.h" -#include "get_bits.h" -#include "golomb_legacy.h" #include "idctdsp.h" #include "thread.h" -#include "unary_legacy.h" +#include "unary.h" #define AIC_HDR_SIZE24 #define AIC_BAND_COEFFS (64 + 32 + 192 + 96) @@ -191,14 +191,14 @@ static int aic_decode_header(AICContext *ctx, const uint8_t *src, int size) #define GET_CODE(val, type, add_bits) \ do { \ if (type) \ -val = get_ue_golomb(gb); \ +val = get_ue_golomb(bc); \ else \ -val = get_unary(gb, 1, 31); \ +val = get_unary(bc, 1, 31); \ if (add_bits) \ -val = (val << add_bits) + get_bits(gb, add_bits); \ +val = (val << add_bits) + bitstream_read(bc, add_bits); \ } while (0) -static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst, +static int aic_decode_coeffs(BitstreamContext *bc, int16_t *dst, int band, int slice_width, int force_chroma) { int has_skips, coeff_type, coeff_bits, skip_type, skip_bits; @@ -206,13 +206,13 @@ static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst, const uint8_t *scan = aic_scan[band | force_chroma]; int mb, idx, val; -has_skips = get_bits1(gb); -coeff_type = get_bits1(gb); -coeff_bits = get_bits(gb, 3); +has_skips = bitstream_read_bit(bc); +coeff_type = bitstream_read_bit(bc); +coeff_bits = bitstream_read(bc, 3); if (has_skips) { -skip_type = get_bits1(gb); -skip_bits = get_bits(gb, 3); +skip_type = bitstream_read_bit(bc); +skip_bits = bitstream_read(bc, 3); for (mb = 0; mb < slice_width; mb++) { idx = -1; @@ -303,7 +303,7 @@ static void unquant_block(int16_t *block, int q) static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, const uint8_t *src, int src_size) { -GetBitContext gb; +BitstreamContext bc; int ret, i, mb, blk; int slice_width = FFMIN(ctx->slice_width, ctx->mb_width - mb_x); uint8_t *Y, *C[2]; @@ -318,12 +318,12 @@ static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, for (i = 0; i < 2; i++) C[i] = ctx->frame->data[i + 1] + mb_x * 8 + mb_y * 8 * ctx->frame->linesize[i + 1]; -init_get_bits(&gb, src, src_size * 8); +bitstream_init8(&bc, src, src_size); memset(ctx->slice_data, 0, sizeof(*ctx->slice_data) * slice_width * AIC_BAND_COEFFS); for (i = 0; i < NUM_BANDS; i++) -if ((ret = aic_decode_coeffs(&gb, ctx->data_ptr[i], +if ((ret = aic_decode_coeffs(&bc, ctx->data_ptr[i], i, slice_width, !ctx->interlaced)) < 0) return ret; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] shorten: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Mar 22 16:09:39 2016 +0100| [2b94ed12de7b6b7f444ed67e1a7068141af3d4ff] | committer: Diego Biurrun shorten: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2b94ed12de7b6b7f444ed67e1a7068141af3d4ff --- libavcodec/shorten.c | 49 + 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c index 82fa2ab943..e040b9cfed 100644 --- a/libavcodec/shorten.c +++ b/libavcodec/shorten.c @@ -26,10 +26,11 @@ */ #include + #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" -#include "golomb_legacy.h" +#include "golomb.h" #include "internal.h" #define MAX_CHANNELS 8 @@ -79,7 +80,7 @@ static const uint8_t is_audio_command[10] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 0 }; typedef struct ShortenContext { AVCodecContext *avctx; -GetBitContext gb; +BitstreamContext bc; int min_framesize, max_framesize; unsigned channels; @@ -154,8 +155,8 @@ static int allocate_buffers(ShortenContext *s) static inline unsigned int get_uint(ShortenContext *s, int k) { if (s->version != 0) -k = get_ur_golomb_shorten(&s->gb, ULONGSIZE); -return get_ur_golomb_shorten(&s->gb, k); +k = get_ur_golomb_shorten(&s->bc, ULONGSIZE); +return get_ur_golomb_shorten(&s->bc, k); } static void fix_bitshift(ShortenContext *s, int32_t *buffer) @@ -280,7 +281,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel, if (command == FN_QLPC) { /* read/validate prediction order */ -pred_order = get_ur_golomb_shorten(&s->gb, LPCQSIZE); +pred_order = get_ur_golomb_shorten(&s->bc, LPCQSIZE); if (pred_order > s->nwrap) { av_log(s->avctx, AV_LOG_ERROR, "invalid pred_order %d\n", pred_order); @@ -288,7 +289,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel, } /* read LPC coefficients */ for (i = 0; i < pred_order; i++) -s->coeffs[i] = get_sr_golomb_shorten(&s->gb, LPCQUANT); +s->coeffs[i] = get_sr_golomb_shorten(&s->bc, LPCQUANT); coeffs = s->coeffs; qshift = LPCQUANT; @@ -315,7 +316,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel, sum = init_sum; for (j = 0; j < pred_order; j++) sum += coeffs[j] * s->decoded[channel][i - j - 1]; -s->decoded[channel][i] = get_sr_golomb_shorten(&s->gb, residual_size) + +s->decoded[channel][i] = get_sr_golomb_shorten(&s->bc, residual_size) + (sum >> qshift); } @@ -332,7 +333,7 @@ static int read_header(ShortenContext *s) int i, ret; int maxnlpc = 0; /* shorten signature */ -if (get_bits_long(&s->gb, 32) != AV_RB32("ajkg")) { +if (bitstream_read(&s->bc, 32) != AV_RB32("ajkg")) { av_log(s->avctx, AV_LOG_ERROR, "missing shorten magic 'ajkg'\n"); return AVERROR_INVALIDDATA; } @@ -340,7 +341,7 @@ static int read_header(ShortenContext *s) s->lpcqoffset = 0; s->blocksize = DEFAULT_BLOCK_SIZE; s->nmean = -1; -s->version= get_bits(&s->gb, 8); +s->version= bitstream_read(&s->bc, 8); s->internal_ftype = get_uint(s, TYPESIZE); s->channels = get_uint(s, CHANSIZE); @@ -374,7 +375,7 @@ static int read_header(ShortenContext *s) skip_bytes = get_uint(s, NSKIPSIZE); for (i = 0; i < skip_bytes; i++) -skip_bits(&s->gb, 8); +bitstream_skip(&s->bc, 8); } s->nwrap = FFMAX(NWRAP, maxnlpc); @@ -387,13 +388,13 @@ static int read_header(ShortenContext *s) if (s->version > 1) s->lpcqoffset = V2LPCQOFFSET; -if (get_ur_golomb_shorten(&s->gb, FNSIZE) != FN_VERBATIM) { +if (get_ur_golomb_shorten(&s->bc, FNSIZE) != FN_VERBATIM) { av_log(s->avctx, AV_LOG_ERROR, "missing verbatim section at beginning of stream\n"); return AVERROR_INVALIDDATA; } -s->header_size = get_ur_golomb_shorten(&s->gb, VERBATIM_CKSIZE_SIZE); +s->header_size = get_ur_golomb_shorten(&s->bc, VERBATIM_CKSIZE_SIZE); if (s->header_size >= OUT_BUFFER_SIZE || s->header_size < CANONICAL_HEADER_SIZE) { av_log(s->avctx, AV_LOG_ERROR, "header is wrong size: %d\n", @@ -402,7 +403,7 @@ static int read_header(ShortenContext *s) }
[FFmpeg-cvslog] loco: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Mon Mar 21 20:23:36 2016 +0100| [d85b37a955317f176f3443a40859a21c15d7c3bc] | committer: Diego Biurrun loco: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d85b37a955317f176f3443a40859a21c15d7c3bc --- libavcodec/loco.c | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libavcodec/loco.c b/libavcodec/loco.c index 8624ea86ad..fa4c5edb40 100644 --- a/libavcodec/loco.c +++ b/libavcodec/loco.c @@ -25,8 +25,8 @@ */ #include "avcodec.h" -#include "get_bits.h" -#include "golomb_legacy.h" +#include "bitstream.h" +#include "golomb.h" #include "internal.h" #include "mathops.h" @@ -50,7 +50,7 @@ typedef struct LOCOContext { } LOCOContext; typedef struct RICEContext { -GetBitContext gb; +BitstreamContext bc; int save, run, run2; /* internal rice decoder state */ int sum, count; /* sum and count for getting rice parameter */ int lossy; @@ -88,11 +88,11 @@ static inline int loco_get_rice(RICEContext *r) loco_update_rice_param(r, 0); return 0; } -v = get_ur_golomb_jpegls(&r->gb, loco_get_rice_param(r), INT_MAX, 0); +v = get_ur_golomb_jpegls(&r->bc, loco_get_rice_param(r), INT_MAX, 0); loco_update_rice_param(r, (v + 1) >> 1); if (!v) { if (r->save >= 0) { -r->run = get_ur_golomb_jpegls(&r->gb, 2, INT_MAX, 0); +r->run = get_ur_golomb_jpegls(&r->bc, 2, INT_MAX, 0); if (r->run > 1) r->save += r->run + 1; else @@ -132,7 +132,7 @@ static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int heigh int val; int i, j; -init_get_bits(&rc.gb, buf, buf_size*8); +bitstream_init8(&rc.bc, buf, buf_size); rc.save = 0; rc.run = 0; rc.run2 = 0; @@ -162,7 +162,7 @@ static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int heigh data += stride; } -return (get_bits_count(&rc.gb) + 7) >> 3; +return (bitstream_tell(&rc.bc) + 7) >> 3; } static int decode_frame(AVCodecContext *avctx, ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] h261dec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 11:44:20 2016 +0200| [2d72219554adb09bc3ba044ac3e579a84550067b] | committer: Diego Biurrun h261dec: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2d72219554adb09bc3ba044ac3e579a84550067b --- libavcodec/h261dec.c | 92 ++ libavcodec/mpegvideo.h | 3 ++ libavformat/h261dec.c | 11 +++--- 3 files changed, 56 insertions(+), 50 deletions(-) diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index 9a323ec7d1..b08598ec99 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -26,12 +26,14 @@ */ #include "avcodec.h" +#include "bitstream.h" #include "mpeg_er.h" #include "mpegutils.h" #include "mpegvideo.h" #include "h263.h" #include "h261.h" #include "internal.h" +#include "vlc.h" #define H261_MBA_VLC_BITS 9 #define H261_MTYPE_VLC_BITS 6 @@ -103,18 +105,18 @@ static int h261_decode_gob_header(H261Context *h) if (!h->gob_start_code_skipped) { /* Check for GOB Start Code */ -val = show_bits(&s->gb, 15); +val = bitstream_peek(&s->bc, 15); if (val) return -1; /* We have a GBSC */ -skip_bits(&s->gb, 16); +bitstream_skip(&s->bc, 16); } h->gob_start_code_skipped = 0; -h->gob_number = get_bits(&s->gb, 4); /* GN */ -s->qscale = get_bits(&s->gb, 5); /* GQUANT */ +h->gob_number = bitstream_read(&s->bc, 4); /* GN */ +s->qscale = bitstream_read(&s->bc, 5); /* GQUANT */ /* Check if gob_number is valid */ if (s->mb_height == 18) { // CIF @@ -127,8 +129,8 @@ static int h261_decode_gob_header(H261Context *h) } /* GEI */ -while (get_bits1(&s->gb) != 0) -skip_bits(&s->gb, 8); +while (bitstream_read_bit(&s->bc) != 0) +bitstream_skip(&s->bc, 8); if (s->qscale == 0) { av_log(s->avctx, AV_LOG_ERROR, "qscale has forbidden 0 value\n"); @@ -160,27 +162,27 @@ static int h261_resync(H261Context *h) if (ret >= 0) return 0; } else { -if (show_bits(&s->gb, 15) == 0) { +if (bitstream_peek(&s->bc, 15) == 0) { ret = h261_decode_gob_header(h); if (ret >= 0) return 0; } // OK, it is not where it is supposed to be ... -s->gb = s->last_resync_gb; -align_get_bits(&s->gb); -left = get_bits_left(&s->gb); +s->bc = s->last_resync_bc; +bitstream_align(&s->bc); +left = bitstream_bits_left(&s->bc); for (; left > 15 + 1 + 4 + 5; left -= 8) { -if (show_bits(&s->gb, 15) == 0) { -GetBitContext bak = s->gb; +if (bitstream_peek(&s->bc, 15) == 0) { +BitstreamContext bak = s->bc; ret = h261_decode_gob_header(h); if (ret >= 0) return 0; -s->gb = bak; +s->bc = bak; } -skip_bits(&s->gb, 8); +bitstream_skip(&s->bc, 8); } } @@ -228,9 +230,9 @@ static const int mvmap[17] = { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16 }; -static int decode_mv_component(GetBitContext *gb, int v) +static int decode_mv_component(BitstreamContext *bc, int v) { -int mv_diff = get_vlc2(gb, h261_mv_vlc.table, H261_MV_VLC_BITS, 2); +int mv_diff = bitstream_read_vlc(bc, h261_mv_vlc.table, H261_MV_VLC_BITS, 2); /* check if mv_diff is valid */ if (mv_diff < 0) @@ -238,7 +240,7 @@ static int decode_mv_component(GetBitContext *gb, int v) mv_diff = mvmap[mv_diff]; -if (mv_diff && !get_bits1(gb)) +if (mv_diff && !bitstream_read_bit(bc)) mv_diff = -mv_diff; v += mv_diff; @@ -270,7 +272,7 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded) scan_table = s->intra_scantable.permutated; if (s->mb_intra) { /* DC coef */ -level = get_bits(&s->gb, 8); +level = bitstream_read(&s->bc, 8); // 0 (b) and -128 (1000b) are FORBIDDEN if ((level & 0x7F) == 0) { av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", @@ -288,10 +290,10 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded) // EOB Not possible for first level when cbp is available (that's why the table is different) // 01 1s // ** 0* -int check = show_bits(&
[FFmpeg-cvslog] dirac: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Mar 19 15:39:03 2016 +0100| [6b1f559f9a0667390259374c738132ad9475fd39] | committer: Diego Biurrun dirac: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6b1f559f9a0667390259374c738132ad9475fd39 --- libavcodec/dirac.c | 89 +++--- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/libavcodec/dirac.c b/libavcodec/dirac.c index cce9439d44..5faf0a384d 100644 --- a/libavcodec/dirac.c +++ b/libavcodec/dirac.c @@ -28,8 +28,9 @@ #include "libavutil/imgutils.h" #include "avcodec.h" +#include "bitstream.h" #include "dirac.h" -#include "golomb_legacy.h" +#include "golomb.h" #include "internal.h" #include "mpeg12data.h" @@ -138,7 +139,7 @@ static const enum AVPixelFormat dirac_pix_fmt[2][3] = { /* [DIRAC_STD] 10.3 Parse Source Parameters. * source_parameters(base_video_format) */ -static int parse_source_parameters(AVDiracSeqHeader *dsh, GetBitContext *gb, +static int parse_source_parameters(AVDiracSeqHeader *dsh, BitstreamContext *bc, void *log_ctx) { AVRational frame_rate = { 0, 0 }; @@ -147,17 +148,17 @@ static int parse_source_parameters(AVDiracSeqHeader *dsh, GetBitContext *gb, /* [DIRAC_STD] 10.3.2 Frame size. frame_size(video_params) */ /* [DIRAC_STD] custom_dimensions_flag */ -if (get_bits1(gb)) { -dsh->width = get_interleaved_ue_golomb(gb); /* [DIRAC_STD] FRAME_WIDTH */ -dsh->height = get_interleaved_ue_golomb(gb); /* [DIRAC_STD] FRAME_HEIGHT */ +if (bitstream_read_bit(bc)) { +dsh->width = get_interleaved_ue_golomb(bc); /* [DIRAC_STD] FRAME_WIDTH */ +dsh->height = get_interleaved_ue_golomb(bc); /* [DIRAC_STD] FRAME_HEIGHT */ } /* [DIRAC_STD] 10.3.3 Chroma Sampling Format. * chroma_sampling_format(video_params) */ /* [DIRAC_STD] custom_chroma_format_flag */ -if (get_bits1(gb)) +if (bitstream_read_bit(bc)) /* [DIRAC_STD] CHROMA_FORMAT_INDEX */ -dsh->chroma_format = get_interleaved_ue_golomb(gb); +dsh->chroma_format = get_interleaved_ue_golomb(bc); if (dsh->chroma_format > 2) { if (log_ctx) av_log(log_ctx, AV_LOG_ERROR, "Unknown chroma format %d\n", @@ -167,24 +168,24 @@ static int parse_source_parameters(AVDiracSeqHeader *dsh, GetBitContext *gb, /* [DIRAC_STD] 10.3.4 Scan Format. scan_format(video_params) */ /* [DIRAC_STD] custom_scan_format_flag */ -if (get_bits1(gb)) +if (bitstream_read_bit(bc)) /* [DIRAC_STD] SOURCE_SAMPLING */ -dsh->interlaced = get_interleaved_ue_golomb(gb); +dsh->interlaced = get_interleaved_ue_golomb(bc); if (dsh->interlaced > 1) return AVERROR_INVALIDDATA; /* [DIRAC_STD] 10.3.5 Frame Rate. frame_rate(video_params) */ -if (get_bits1(gb)) { /* [DIRAC_STD] custom_frame_rate_flag */ -dsh->frame_rate_index = get_interleaved_ue_golomb(gb); +if (bitstream_read_bit(bc)) { /* [DIRAC_STD] custom_frame_rate_flag */ +dsh->frame_rate_index = get_interleaved_ue_golomb(bc); if (dsh->frame_rate_index > 10) return AVERROR_INVALIDDATA; if (!dsh->frame_rate_index) { /* [DIRAC_STD] FRAME_RATE_NUMER */ -frame_rate.num = get_interleaved_ue_golomb(gb); +frame_rate.num = get_interleaved_ue_golomb(bc); /* [DIRAC_STD] FRAME_RATE_DENOM */ -frame_rate.den = get_interleaved_ue_golomb(gb); +frame_rate.den = get_interleaved_ue_golomb(bc); } } /* [DIRAC_STD] preset_frame_rate(video_params, index) */ @@ -199,16 +200,16 @@ static int parse_source_parameters(AVDiracSeqHeader *dsh, GetBitContext *gb, /* [DIRAC_STD] 10.3.6 Pixel Aspect Ratio. * pixel_aspect_ratio(video_params) */ -if (get_bits1(gb)) { /* [DIRAC_STD] custom_pixel_aspect_ratio_flag */ +if (bitstream_read_bit(bc)) { /* [DIRAC_STD] custom_pixel_aspect_ratio_flag */ /* [DIRAC_STD] index */ -dsh->aspect_ratio_index = get_interleaved_ue_golomb(gb); +dsh->aspect_ratio_index = get_interleaved_ue_golomb(bc); if (dsh->aspect_ratio_index > 6) return AVERROR_INVALIDDATA; if (!dsh->aspect_ratio_index) { -dsh->sample_aspect_ratio.num = get_interleaved_ue_golomb(gb); -dsh->sample_aspect_ratio.den = get_interleaved_ue_golomb(gb); +dsh->sample_aspect_ratio.num = get_interleaved_ue_golomb(bc); +dsh->sample_aspect_ratio.den = get_interleaved_ue_golomb(bc); } } /* [DIRAC_STD] Take value from Table 10.4 Available preset pixel @@ -218,33 +219,33 @@ static int parse_source_para
[FFmpeg-cvslog] ralf: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Mar 22 10:26:03 2016 +0100| [5a6da49dd0c078b7d20e130ab74f326abc4678a1] | committer: Diego Biurrun ralf: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5a6da49dd0c078b7d20e130ab74f326abc4678a1 --- libavcodec/ralf.c | 68 --- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/libavcodec/ralf.c b/libavcodec/ralf.c index 6bc0f3fa0d..1003b10c11 100644 --- a/libavcodec/ralf.c +++ b/libavcodec/ralf.c @@ -28,11 +28,13 @@ #include "libavutil/attributes.h" #include "libavutil/channel_layout.h" + #include "avcodec.h" -#include "get_bits.h" -#include "golomb_legacy.h" +#include "bitstream.h" +#include "golomb.h" #include "internal.h" -#include "unary_legacy.h" +#include "unary.h" +#include "vlc.h" #include "ralfdata.h" #define FILTER_NONE 0 @@ -210,21 +212,21 @@ static av_cold int decode_init(AVCodecContext *avctx) return 0; } -static inline int extend_code(GetBitContext *gb, int val, int range, int bits) +static inline int extend_code(BitstreamContext *bc, int val, int range, int bits) { if (val == 0) { -val = -range - get_ue_golomb(gb); +val = -range - get_ue_golomb(bc); } else if (val == range * 2) { -val = range + get_ue_golomb(gb); +val = range + get_ue_golomb(bc); } else { val -= range; } if (bits) -val = (val << bits) | get_bits(gb, bits); +val = (val << bits) | bitstream_read(bc, bits); return val; } -static int decode_channel(RALFContext *ctx, GetBitContext *gb, int ch, +static int decode_channel(RALFContext *ctx, BitstreamContext *bc, int ch, int length, int mode, int bits) { int i, t; @@ -233,19 +235,19 @@ static int decode_channel(RALFContext *ctx, GetBitContext *gb, int ch, VLC *code_vlc; int range, range2, add_bits; int *dst = ctx->channel_data[ch]; -ctx->filter_params = get_vlc2(gb, set->filter_params.table, 9, 2); +ctx->filter_params = bitstream_read_vlc(bc, set->filter_params.table, 9, 2); ctx->filter_bits = (ctx->filter_params - 2) >> 6; ctx->filter_length = ctx->filter_params - (ctx->filter_bits << 6) - 1; if (ctx->filter_params == FILTER_RAW) { for (i = 0; i < length; i++) -dst[i] = get_bits(gb, bits); +dst[i] = bitstream_read(bc, bits); ctx->bias[ch] = 0; return 0; } -ctx->bias[ch] = get_vlc2(gb, set->bias.table, 9, 2); -ctx->bias[ch] = extend_code(gb, ctx->bias[ch], 127, 4); +ctx->bias[ch] = bitstream_read_vlc(bc, set->bias.table, 9, 2); +ctx->bias[ch] = extend_code(bc, ctx->bias[ch], 127, 4); if (ctx->filter_params == FILTER_NONE) { memset(dst, 0, sizeof(*dst) * length); @@ -259,8 +261,8 @@ static int decode_channel(RALFContext *ctx, GetBitContext *gb, int ch, add_bits = ctx->filter_bits; for (i = 0; i < ctx->filter_length; i++) { -t = get_vlc2(gb, vlc[cmode].table, vlc[cmode].bits, 2); -t = extend_code(gb, t, 21, add_bits); +t = bitstream_read_vlc(bc, vlc[cmode].table, vlc[cmode].bits, 2); +t = extend_code(bc, t, 21, add_bits); if (!cmode) coeff -= 12 << add_bits; coeff = t - coeff; @@ -279,7 +281,7 @@ static int decode_channel(RALFContext *ctx, GetBitContext *gb, int ch, } } -code_params = get_vlc2(gb, set->coding_mode.table, set->coding_mode.bits, 2); +code_params = bitstream_read_vlc(bc, set->coding_mode.table, set->coding_mode.bits, 2); if (code_params >= 15) { add_bits = av_clip((code_params / 5 - 3) / 2, 0, 10); if (add_bits > 9 && (code_params % 5) != 2) @@ -297,14 +299,14 @@ static int decode_channel(RALFContext *ctx, GetBitContext *gb, int ch, for (i = 0; i < length; i += 2) { int code1, code2; -t = get_vlc2(gb, code_vlc->table, code_vlc->bits, 2); +t = bitstream_read_vlc(bc, code_vlc->table, code_vlc->bits, 2); code1 = t / range2; code2 = t % range2; -dst[i] = extend_code(gb, code1, range, 0) << add_bits; -dst[i + 1] = extend_code(gb, code2, range, 0) << add_bits; +dst[i] = extend_code(bc, code1, range, 0) << add_bits; +dst[i + 1] = extend_code(bc, code2, range, 0) << add_bits; if (add_bits) { -dst[i] |= get_bits(gb, add_bits); -dst[i + 1] |= get_bits(gb, add_bits); +dst[i] |= bitstream_read(bc, add_bits); +dst[i + 1
[FFmpeg-cvslog] svq3: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Mar 17 14:21:24 2016 +0100| [c29da01ac95ea2c8c5c4b3a312a338fb7068] | committer: Diego Biurrun svq3: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c29da01ac95ea2c8c5c4b3a312a338fb7068 --- libavcodec/svq3.c | 132 +++--- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c index 8bbd331de3..20c8f89e76 100644 --- a/libavcodec/svq3.c +++ b/libavcodec/svq3.c @@ -44,7 +44,8 @@ #include "libavutil/attributes.h" -#include "golomb_legacy.h" +#include "bitstream.h" +#include "golomb.h" #include "internal.h" #include "avcodec.h" #include "mpegutils.h" @@ -92,8 +93,8 @@ typedef struct SVQ3Context { SVQ3Frame *cur_pic; SVQ3Frame *next_pic; SVQ3Frame *last_pic; -GetBitContext gb; -GetBitContext gb_slice; +BitstreamContext bc; +BitstreamContext bc_slice; uint8_t *slice_buf; int slice_size; int halfpel_flag; @@ -292,7 +293,7 @@ static void svq3_add_idct_c(uint8_t *dst, int16_t *block, memset(block, 0, 16 * sizeof(int16_t)); } -static inline int svq3_decode_block(GetBitContext *gb, int16_t *block, +static inline int svq3_decode_block(BitstreamContext *bc, int16_t *block, int index, const int type) { static const uint8_t *const scan_patterns[4] = { @@ -305,7 +306,7 @@ static inline int svq3_decode_block(GetBitContext *gb, int16_t *block, const uint8_t *const scan = scan_patterns[type]; for (limit = (16 >> intra); index < 16; index = limit, limit += 8) { -for (; (vlc = get_interleaved_ue_golomb(gb)) != 0; index++) { +for (; (vlc = get_interleaved_ue_golomb(bc)) != 0; index++) { int sign = (vlc & 1) ? 0 : -1; vlc = vlc + 1 >> 1; @@ -542,8 +543,8 @@ static inline int svq3_mc_dir(SVQ3Context *s, int size, int mode, if (mode == PREDICT_MODE) { dx = dy = 0; } else { -dy = get_interleaved_se_golomb(&s->gb_slice); -dx = get_interleaved_se_golomb(&s->gb_slice); +dy = get_interleaved_se_golomb(&s->bc_slice); +dx = get_interleaved_se_golomb(&s->bc_slice); if (dx == INVALID_VLC || dy == INVALID_VLC) { av_log(s->avctx, AV_LOG_ERROR, "invalid MV vlc\n"); @@ -744,10 +745,10 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type) mb_type = MB_TYPE_16x16; } } else if (mb_type < 8) { /* INTER */ -if (s->thirdpel_flag && s->halfpel_flag == !get_bits1(&s->gb_slice)) +if (s->thirdpel_flag && s->halfpel_flag == !bitstream_read_bit(&s->bc_slice)) mode = THIRDPEL_MODE; else if (s->halfpel_flag && - s->thirdpel_flag == !get_bits1(&s->gb_slice)) + s->thirdpel_flag == !bitstream_read_bit(&s->bc_slice)) mode = HALFPEL_MODE; else mode = FULLPEL_MODE; @@ -849,7 +850,7 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type) /* decode prediction codes for luma blocks */ for (i = 0; i < 16; i += 2) { -vlc = get_interleaved_ue_golomb(&s->gb_slice); +vlc = get_interleaved_ue_golomb(&s->bc_slice); if (vlc >= 25) { av_log(s->avctx, AV_LOG_ERROR, @@ -927,7 +928,7 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type) if (!IS_INTRA16x16(mb_type) && (!IS_SKIP(mb_type) || s->pict_type == AV_PICTURE_TYPE_B)) { -if ((vlc = get_interleaved_ue_golomb(&s->gb_slice)) >= 48) { +if ((vlc = get_interleaved_ue_golomb(&s->bc_slice)) >= 48) { av_log(s->avctx, AV_LOG_ERROR, "cbp_vlc=%"PRIu32"\n", vlc); return -1; } @@ -937,7 +938,7 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type) } if (IS_INTRA16x16(mb_type) || (s->pict_type != AV_PICTURE_TYPE_I && s->adaptive_quant && cbp)) { -s->qscale += get_interleaved_se_golomb(&s->gb_slice); +s->qscale += get_interleaved_se_golomb(&s->bc_slice); if (s->qscale > 31u) { av_log(s->avctx, AV_LOG_ERROR, "qscale:%d\n", s->qscale); @@ -947,7 +948,7 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type) if (IS_INTRA16x16(mb_type)) { AV_ZERO128(s->mb_luma_dc[0] + 0); AV_ZERO128(s->mb_luma_dc[0] + 8);
[FFmpeg-cvslog] wma: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 15 10:46:06 2016 +0200| [f7ec7f546f0021d28da284b024416b916b61c974] | committer: Diego Biurrun wma: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f7ec7f546f0021d28da284b024416b916b61c974 --- libavcodec/wma.c| 41 +++ libavcodec/wma.h| 8 +- libavcodec/wmadec.c | 64 +-- libavcodec/wmalosslessdec.c | 188 +++ libavcodec/wmaprodec.c | 207 +- libavcodec/wmavoice.c | 262 ++-- 6 files changed, 387 insertions(+), 383 deletions(-) diff --git a/libavcodec/wma.c b/libavcodec/wma.c index 4067dff11a..697b41b0aa 100644 --- a/libavcodec/wma.c +++ b/libavcodec/wma.c @@ -22,6 +22,7 @@ #include "libavutil/attributes.h" #include "avcodec.h" +#include "bitstream.h" #include "internal.h" #include "sinewin.h" #include "wma.h" @@ -382,30 +383,30 @@ int ff_wma_end(AVCodecContext *avctx) /** * Decode an uncompressed coefficient. - * @param gb GetBitContext + * @param bc BitstreamContext * @return the decoded coefficient */ -unsigned int ff_wma_get_large_val(GetBitContext *gb) +unsigned int ff_wma_get_large_val(BitstreamContext *bc) { /** consumes up to 34 bits */ int n_bits = 8; /** decode length */ -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { n_bits += 8; -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { n_bits += 8; -if (get_bits1(gb)) +if (bitstream_read_bit(bc)) n_bits += 7; } } -return get_bits_long(gb, n_bits); +return bitstream_read(bc, n_bits); } /** * Decode run level compressed coefficients. * @param avctx codec context - * @param gb bitstream reader context - * @param vlc vlc table for get_vlc2 + * @param bc bitstream reader context + * @param vlc VLC table for bitstream_read_vlc * @param level_table level codes * @param run_table run codes * @param version 0 for wma1,2 1 for wmapro @@ -417,7 +418,7 @@ unsigned int ff_wma_get_large_val(GetBitContext *gb) * @param coef_nb_bits number of bits for escaped level codes * @return 0 on success, -1 otherwise */ -int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb, +int ff_wma_run_level_decode(AVCodecContext *avctx, BitstreamContext *bc, VLC *vlc, const float *level_table, const uint16_t *run_table, int version, WMACoef *ptr, int offset, int num_coefs, @@ -429,11 +430,11 @@ int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb, uint32_t *iptr = (uint32_t *) ptr; const unsigned int coef_mask = block_len - 1; for (; offset < num_coefs; offset++) { -code = get_vlc2(gb, vlc->table, VLCBITS, VLCMAX); +code = bitstream_read_vlc(bc, vlc->table, VLCBITS, VLCMAX); if (code > 1) { /** normal code */ offset += run_table[code]; -sign = get_bits1(gb) - 1; +sign = bitstream_read_bit(bc) - 1; iptr[offset & coef_mask] = ilvl[code] ^ sign << 31; } else if (code == 1) { /** EOB */ @@ -441,26 +442,26 @@ int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb, } else { /** escape */ if (!version) { -level = get_bits(gb, coef_nb_bits); +level = bitstream_read(bc, coef_nb_bits); /** NOTE: this is rather suboptimal. reading * block_len_bits would be better */ -offset += get_bits(gb, frame_len_bits); +offset += bitstream_read(bc, frame_len_bits); } else { -level = ff_wma_get_large_val(gb); +level = ff_wma_get_large_val(bc); /** escape decode */ -if (get_bits1(gb)) { -if (get_bits1(gb)) { -if (get_bits1(gb)) { +if (bitstream_read_bit(bc)) { +if (bitstream_read_bit(bc)) { +if (bitstream_read_bit(bc)) { av_log(avctx, AV_LOG_ERROR, "broken escape sequence\n"); return -1; } else -offset += get_bits(gb, frame_len_bits) + 4; +offset += bitstream_read(bc, frame_len_bits) + 4; } else -offset += get_bits(gb, 2) + 1; +offset += bitstream_read(bc, 2) + 1; } } -sign
[FFmpeg-cvslog] asfdec: Account for different Format Data sizes
ffmpeg | branch: master | Alexandra Hájková | Wed Feb 8 12:51:37 2017 +0100| [0539d84d985e811e5989ef27c13f7e2dda0f9b89] | committer: Diego Biurrun asfdec: Account for different Format Data sizes Some muxers may use the BMP_HEADER Format Data size instead of the ASF-specific one. Bug-Id: 1020 CC: libav-sta...@libav.org Signed-off-by: Diego Biurrun > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0539d84d985e811e5989ef27c13f7e2dda0f9b89 --- libavformat/asfdec.c | 12 +++- libavformat/avidec.c | 2 +- libavformat/riff.h| 3 ++- libavformat/riffdec.c | 6 -- libavformat/wtv.c | 2 +- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index d602af8793..34730b20aa 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -691,20 +691,22 @@ static int asf_read_properties(AVFormatContext *s, const GUIDParseTable *g) static int parse_video_info(AVIOContext *pb, AVStream *st) { -uint16_t size; +uint16_t size_asf; // ASF-specific Format Data size +uint32_t size_bmp; // BMP_HEADER-specific Format Data size unsigned int tag; st->codecpar->width = avio_rl32(pb); st->codecpar->height = avio_rl32(pb); avio_skip(pb, 1); // skip reserved flags -size = avio_rl16(pb); // size of the Format Data -tag = ff_get_bmp_header(pb, st); +size_asf = avio_rl16(pb); +tag = ff_get_bmp_header(pb, st, &size_bmp); st->codecpar->codec_tag = tag; st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag); +size_bmp = FFMAX(size_asf, size_bmp); -if (size > BMP_HEADER_SIZE) { +if (size_bmp > BMP_HEADER_SIZE) { int ret; -st->codecpar->extradata_size = size - BMP_HEADER_SIZE; +st->codecpar->extradata_size = size_bmp - BMP_HEADER_SIZE; if (!(st->codecpar->extradata = av_malloc(st->codecpar->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE))) { st->codecpar->extradata_size = 0; diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 701cccb6b0..870066eb25 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -613,7 +613,7 @@ static int avi_read_header(AVFormatContext *s) avio_skip(pb, size); break; } -tag1 = ff_get_bmp_header(pb, st); +tag1 = ff_get_bmp_header(pb, st, NULL); if (tag1 == MKTAG('D', 'X', 'S', 'B') || tag1 == MKTAG('D', 'X', 'S', 'A')) { diff --git a/libavformat/riff.h b/libavformat/riff.h index a45c7f301c..e5f4645c12 100644 --- a/libavformat/riff.h +++ b/libavformat/riff.h @@ -41,9 +41,10 @@ void ff_end_tag(AVIOContext *pb, int64_t start); /** * Read BITMAPINFOHEADER structure and set AVStream codec width, height and * bits_per_encoded_sample fields. Does not read extradata. + * Writes the size of the BMP file to *size. * @return codec tag */ -int ff_get_bmp_header(AVIOContext *pb, AVStream *st); +int ff_get_bmp_header(AVIOContext *pb, AVStream *st, uint32_t *size); void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par, const AVCodecTag *tags, int for_asf); int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par); diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c index 81248355e3..db83b3205a 100644 --- a/libavformat/riffdec.c +++ b/libavformat/riffdec.c @@ -180,10 +180,12 @@ enum AVCodecID ff_wav_codec_get_id(unsigned int tag, int bps) return id; } -int ff_get_bmp_header(AVIOContext *pb, AVStream *st) +int ff_get_bmp_header(AVIOContext *pb, AVStream *st, uint32_t *size) { int tag1; -avio_rl32(pb); /* size */ +uint32_t size_ = avio_rl32(pb); +if (size) +*size = size_; st->codecpar->width = avio_rl32(pb); st->codecpar->height = (int32_t)avio_rl32(pb); avio_rl16(pb); /* planes */ diff --git a/libavformat/wtv.c b/libavformat/wtv.c index 794dd4bb71..d750cef647 100644 --- a/libavformat/wtv.c +++ b/libavformat/wtv.c @@ -586,7 +586,7 @@ static int parse_videoinfoheader2(AVFormatContext *s, AVStream *st) AVIOContext *pb = wtv->pb; avio_skip(pb, 72); // picture aspect ratio is unreliable -ff_get_bmp_header(pb, st); +ff_get_bmp_header(pb, st, NULL); return 72 + 40; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] checkasm: add HEVC test for testing IDCT DC
ffmpeg | branch: master | Alexandra Hájková | Thu Jul 21 16:32:50 2016 +0200| [9064777dbb335ab4809ae09e3fdcc0245f925cdc] | committer: Anton Khirnov checkasm: add HEVC test for testing IDCT DC Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9064777dbb335ab4809ae09e3fdcc0245f925cdc --- tests/checkasm/Makefile| 2 +- tests/checkasm/checkasm.c | 1 + tests/checkasm/checkasm.h | 1 + tests/checkasm/hevc_idct.c | 73 ++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 7c1d0ec..d339b75 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o # decoders/encoders AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 739da61..b062197 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -85,6 +85,7 @@ static const struct { #endif #if CONFIG_HEVC_DECODER { "hevc_mc", checkasm_check_hevc_mc }, +{ "hevc_idct", checkasm_check_hevc_idct }, #endif #if CONFIG_V210_ENCODER { "v210enc", checkasm_check_v210enc }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 7f15b9c..73109c3 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -37,6 +37,7 @@ void checkasm_check_fmtconvert(void); void checkasm_check_h264dsp(void); void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); +void checkasm_check_hevc_idct(void); void checkasm_check_hevc_mc(void); void checkasm_check_synth_filter(void); void checkasm_check_v210enc(void); diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c new file mode 100644 index 000..84760b9 --- /dev/null +++ b/tests/checkasm/hevc_idct.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Libav 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with Libav; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include + +#include "libavutil/intreadwrite.h" + +#include "libavcodec/hevcdsp.h" + +#include "checkasm.h" + +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r); \ +} \ +} while (0) + +static void check_idct_dc(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); + +randomize_buffers(coeffs0, size); +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); + +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { +call_ref(coeffs0); +call_new(coeffs1); +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) +fail(); +bench_new(coeffs1); +} +} +} + +void checkasm_check_hevc_idct(void) +{ +int bit_depth; + +for (bit_depth = 8; bit_depth <= 10; bit_depth++) { +HEVCDSPContext h; + +ff_hevc_dsp_init(&h, bit_depth); +check_idct_dc(h, bit_depth); +} +report("idct_dc"); +} ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] x86util: Document SBUTTERFLY macro
ffmpeg | branch: master | Alexandra Hájková | Sat Sep 10 20:41:43 2016 +0200| [07e1f99a1bb41d1a615676140eefc85cf69fa793] | committer: Luca Barbato x86util: Document SBUTTERFLY macro Signed-off-by: Luca Barbato > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=07e1f99a1bb41d1a615676140eefc85cf69fa793 --- libavutil/x86/x86util.asm | 10 ++ 1 file changed, 10 insertions(+) diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm index 16a9bae..bba958e 100644 --- a/libavutil/x86/x86util.asm +++ b/libavutil/x86/x86util.asm @@ -29,6 +29,16 @@ %include "libavutil/x86/x86inc.asm" +; Interleave low src0 with low src1 and store in src0, +; interleave high src0 with high src1 and store in src1. +; %1 - types +; %2 - index of the register with src0 +; %3 - index of the register with src1 +; %4 - index of the register for intermediate results +; example for %1 - wd: input: src0: x0 x1 x2 x3 z0 z1 z2 z3 +; src1: y0 y1 y2 y3 q0 q1 q2 q3 +; output: src0: x0 y0 x1 y1 x2 y2 x3 y3 +; src1: z0 q0 z1 q1 z2 q2 z3 q3 %macro SBUTTERFLY 4 %if avx_enabled == 0 mova m%4, m%2 ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] checkasm: Add test for huffyuvdsp add_bytes
ffmpeg | branch: master | Alexandra Hájková | Sun Oct 2 15:20:13 2016 +0200| [22c3ab18646924ce24dc6017a9e882ff69689e40] | committer: Luca Barbato checkasm: Add test for huffyuvdsp add_bytes Signed-off-by: Luca Barbato > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=22c3ab18646924ce24dc6017a9e882ff69689e40 --- tests/checkasm/Makefile | 1 + tests/checkasm/checkasm.c | 3 ++ tests/checkasm/checkasm.h | 1 + tests/checkasm/huffyuvdsp.c | 76 + 4 files changed, 81 insertions(+) diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index f66c8b9..9b3df55 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -4,6 +4,7 @@ AVCODECOBJS-$(CONFIG_AUDIODSP) += audiodsp.o AVCODECOBJS-$(CONFIG_BLOCKDSP) += blockdsp.o AVCODECOBJS-$(CONFIG_BSWAPDSP) += bswapdsp.o AVCODECOBJS-$(CONFIG_FMTCONVERT)+= fmtconvert.o +AVCODECOBJS-$(CONFIG_HUFFYUVDSP)+= huffyuvdsp.o AVCODECOBJS-$(CONFIG_H264DSP) += h264dsp.o AVCODECOBJS-$(CONFIG_H264PRED) += h264pred.o AVCODECOBJS-$(CONFIG_H264QPEL) += h264qpel.o diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index c279ed1..040c4eb 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -93,6 +93,9 @@ static const struct { { "hevc_mc", checkasm_check_hevc_mc }, { "hevc_idct", checkasm_check_hevc_idct }, #endif +#if CONFIG_HUFFYUVDSP +{ "huffyuvdsp", checkasm_check_huffyuvdsp }, +#endif #if CONFIG_V210_ENCODER { "v210enc", checkasm_check_v210enc }, #endif diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 169aa2a..5a4c056 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -41,6 +41,7 @@ void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); void checkasm_check_hevc_idct(void); void checkasm_check_hevc_mc(void); +void checkasm_check_huffyuvdsp(void); void checkasm_check_synth_filter(void); void checkasm_check_v210enc(void); void checkasm_check_vp8dsp(void); diff --git a/tests/checkasm/huffyuvdsp.c b/tests/checkasm/huffyuvdsp.c new file mode 100644 index 000..59e0f6a --- /dev/null +++ b/tests/checkasm/huffyuvdsp.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Libav 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with Libav; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/mem.h" + +#include "libavcodec/huffyuvdsp.h" + +#include "checkasm.h" + +#define randomize_buffers(buf, size) \ +do { \ +int j; \ +for (j = 0; j < size; j++) \ +buf[j] = rnd() & 0xFF; \ +} while (0) + +static void check_add_bytes(HuffYUVDSPContext c, int width) +{ +uint8_t *src0 = av_mallocz(width); +uint8_t *src1 = av_mallocz(width); +uint8_t *dst0 = av_mallocz(width); +uint8_t *dst1 = av_mallocz(width); +declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, uint8_t *src, int w); + +if (!src0 || !src1 || !dst0 || !dst1) +fail(); + +randomize_buffers(src0, width); +memcpy(src1, src0, width); + +if (check_func(c.add_bytes, "add_bytes")) { +call_ref(dst0, src0, width); +call_new(dst1, src1, width); +if (memcmp(dst0, dst1, width)) +fail(); +bench_new(dst1, src1, width); +} + +av_free(src0); +av_free(src1); +av_free(dst0); +av_free(dst1); +} + +void checkasm_check_huffyuvdsp(void) +{ +HuffYUVDSPContext c; +int width = 16 * av_clip(rnd(), 16, 128); + +ff_huffyuvdsp_init(&c); + +check_add_bytes(c, width); + +report("add_bytes"); +} ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] checkasm: add a test for HEVC IDCT
ffmpeg | branch: master | Alexandra Hájková | Sun Sep 18 19:35:26 2016 +0200| [e3f941cb03b139b866a0ad6dc95fbe1b247d54af] | committer: Anton Khirnov checkasm: add a test for HEVC IDCT Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e3f941cb03b139b866a0ad6dc95fbe1b247d54af --- tests/checkasm/hevc_idct.c | 34 +- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c index 84760b9..dd4dc0d 100644 --- a/tests/checkasm/hevc_idct.c +++ b/tests/checkasm/hevc_idct.c @@ -35,6 +35,30 @@ } \ } while (0) +static void check_idct(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +int col_limit = block_size; +declare_func(void, int16_t *coeffs, int col_limit); + +randomize_buffers(coeffs0, size); +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); +if (check_func(h.idct[i - 2], "hevc_idct_%dx%d_%d", block_size, block_size, bit_depth)) { +call_ref(coeffs0, col_limit); +call_new(coeffs1, col_limit); +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) +fail(); +bench_new(coeffs1, col_limit); +} +} +} + static void check_idct_dc(HEVCDSPContext h, int bit_depth) { int i; @@ -49,7 +73,7 @@ static void check_idct_dc(HEVCDSPContext h, int bit_depth) randomize_buffers(coeffs0, size); memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); -if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { +if (check_func(h.idct_dc[i - 2], "hevc_idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { call_ref(coeffs0); call_new(coeffs1); if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) @@ -70,4 +94,12 @@ void checkasm_check_hevc_idct(void) check_idct_dc(h, bit_depth); } report("idct_dc"); + +for (bit_depth = 8; bit_depth <= 10; bit_depth++) { +HEVCDSPContext h; + +ff_hevc_dsp_init(&h, bit_depth); +check_idct(h, bit_depth); +} +report("idct"); } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] hevc: Add SSE2 and AVX IDCT
ffmpeg | branch: master | Alexandra Hájková | Mon Oct 10 22:23:01 2016 +0200| [112cee0241f5799edff0e4682b9e8639b046dc78] | committer: Anton Khirnov hevc: Add SSE2 and AVX IDCT Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=112cee0241f5799edff0e4682b9e8639b046dc78 --- libavcodec/x86/hevc_idct.asm | 787 -- libavcodec/x86/hevcdsp_init.c | 54 ++- 2 files changed, 811 insertions(+), 30 deletions(-) diff --git a/libavcodec/x86/hevc_idct.asm b/libavcodec/x86/hevc_idct.asm index d662aa9..f397cc1 100644 --- a/libavcodec/x86/hevc_idct.asm +++ b/libavcodec/x86/hevc_idct.asm @@ -2,6 +2,7 @@ ;* SIMD-optimized IDCT functions for HEVC decoding ;* Copyright (c) 2014 Pierre-Edouard LEPERE ;* Copyright (c) 2014 James Almer +;* Copyright (c) 2016 Alexandra Hájková ;* ;* This file is part of Libav. ;* @@ -22,6 +23,217 @@ %include "libavutil/x86/x86util.asm" +SECTION_RODATA + +pd_64: times 4 dd 64 +pd_2048: times 4 dd 2048 +pd_512: times 4 dd 512 + +; 4x4 transform coeffs +cextern pw_64 +pw_64_m64: times 4 dw 64, -64 +pw_83_36: times 4 dw 83, 36 +pw_36_m83: times 4 dw 36, -83 + +; 8x8 transform coeffs +pw_89_75: times 4 dw 89, 75 +pw_50_18: times 4 dw 50, 18 + +pw_75_m18: times 4 dw 75, -18 +pw_m89_m50: times 4 dw -89, -50 + +pw_50_m89: times 4 dw 50, -89 +pw_18_75: times 4 dw 18, 75 + +pw_18_m50: times 4 dw 18, -50 +pw_75_m89: times 4 dw 75, -89 + +; 16x16 transformation coeffs +trans_coeffs16: times 4 dw 90, 87 +times 4 dw 80, 70 +times 4 dw 57, 43 +times 4 dw 25, 9 + +times 4 dw 87, 57 +times 4 dw 9, -43 +times 4 dw -80, -90 +times 4 dw -70, -25 + +times 4 dw 80, 9 +times 4 dw -70, -87 +times 4 dw -25, 57 +times 4 dw 90, 43 + +times 4 dw 70, -43 +times 4 dw -87, 9 +times 4 dw 90, 25 +times 4 dw -80, -57 + +times 4 dw 57, -80 +times 4 dw -25, 90 +times 4 dw -9, -87 +times 4 dw 43, 70 + +times 4 dw 43, -90 +times 4 dw 57, 25 +times 4 dw -87, 70 +times 4 dw 9, -80 + +times 4 dw 25, -70 +times 4 dw 90, -80 +times 4 dw 43, 9 +times 4 dw -57, 87 + +times 4 dw 9, -25 +times 4 dw 43, -57 +times 4 dw 70, -80 +times 4 dw 87, -90 + +; 32x32 transform coeffs +trans_coeff32: times 8 dw 90 +times 4 dw 88, 85 +times 4 dw 82, 78 +times 4 dw 73, 67 +times 4 dw 61, 54 +times 4 dw 46, 38 +times 4 dw 31, 22 +times 4 dw 13, 4 + +times 4 dw 90, 82 +times 4 dw 67, 46 +times 4 dw 22, -4 +times 4 dw -31, -54 +times 4 dw -73, -85 +times 4 dw -90, -88 +times 4 dw -78, -61 +times 4 dw -38, -13 + +times 4 dw 88, 67 +times 4 dw 31, -13 +times 4 dw -54, -82 +times 4 dw -90, -78 +times 4 dw -46, -4 +times 4 dw 38, 73 +times 4 dw 90, 85 +times 4 dw 61, 22 + +times 4 dw 85, 46 +times 4 dw -13, -67 +times 4 dw -90, -73 +times 4 dw -22, 38 +times 4 dw 82, 88 +times 4 dw 54, -4 +times 4 dw -61, -90 +times 4 dw -78, -31 + +times 4 dw 82, 22 +times 4 dw -54, -90 +times 4 dw -61, 13 +times 4 dw 78, 85 +times 4 dw 31, -46 +times 4 dw -90, -67 +times 4 dw 4, 73 +times 4 dw 88, 38 + +times 4 dw 78, -4 +times 4 dw -82, -73 +times 4 dw 13, 85 +times 4 dw 67, -22 +times 4 dw -88, -61 +times 4 dw 31, 90 +times 4 dw 54, -38 +times 4 dw -90, -46 + +times 4 dw 73, -31 +times 4 dw -90, -22 +times 4 dw 78, 67 +times 4 dw -38, -90 +times 4 dw -13, 82 +times 4 dw 61, -46 +times 4 dw -88, -4 +times 4 dw 85, 54 + +times 4 dw 67, -54 +times 4 dw -78, 38 +times 4 dw 85, -22 +times 4 dw -90, 4 +times 4 dw 90, 13 +times 4 dw -88, -31 +times 4 dw 82, 46 +times 4 dw -73, -61 + +times 4 dw 61, -73 +times 4 dw -46, 82 +times 4 dw 31, -88 +times 4 dw -13, 90 +times 4 dw -4, -90 +times 4 dw 22, 85 +times 4 dw -38, -78 +times 4 dw 54, 67 + +times 4 dw 54, -85 +times 4 dw -4, 88 +times 4 dw -46, -61 +times 4 dw 82, 13 +times 4 dw -90, 38 +times 4 dw 67, -78 +times 4 dw -22, 90 +times 4 dw -31, -73 + +times 4 dw 46, -90 +times 4 dw 38, 54 +times 4 dw -90, 31 +times 4 dw 61, -88 +times 4 dw 22, 67 +times 4 dw -85, 13 +times 4 dw 73, -82 +times 4 dw 4, 78 + +times 4 dw 38, -88 +times 4 dw 73, -4 +times 4 dw -67, 90 +times 4 dw -46, -31 +times 4 dw 85, -78 +times 4 dw 13, 61 +times 4 dw -90, 54 +times 4 dw 22, -82 + +times 4 dw 31, -78 +times 4 dw 90, -61 +times 4 dw 4, 54 +times 4 dw -88, 82 +times 4 dw -38, -22 +times 4 dw 73, -90 +times 4 dw 67, -13 +times 4 dw -46, 85 + +times 4 dw 22, -61 +times 4 dw 85, -90 +times 4 dw 73, -38 +times 4 dw -4, 46 +times 4 dw -78, 90 +times 4 dw -82, 54 +times 4 dw -13, -31 +times 4 dw 67, -88 + +times 4 dw 13, -38 +times 4 dw 61, -78 +times 4 dw 88, -90 +times 4 dw 85, -73 +times 4 dw 54, -31 +times 4 dw 4, 22 +times 4 dw -46, 67 +times 4 dw -82, 90 + +times 4 dw 4, -13 +times 4 dw 22, -31 +times 4 dw 38, -46 +times 4 dw 54, -61 +times 4 dw 67, -73 +times 4 dw 78, -82 +times 4 dw 85, -88 +times 4 dw 90, -90 + section .text ; void ff_hevc_idctHxW_dc_{8,10}_(int16_t *coeffs) @@ -74,34 +286,565 @@ cglobal hevc_idct_%1x%1_dc_%2, 1, 2, 1, coeff, tmp RET %endmacro -; 8-bit -INIT_MMX mmxext -IDCT_DC_NL 4, 8 -IDCT_DC 8,
[FFmpeg-cvslog] checkasm: Add a test for HEVC add_residual
ffmpeg | branch: master | Alexandra Hájková | Tue Oct 11 10:44:19 2016 +0200| [ed48a9d8143d2575a4458589cebde69ec326afd8] | committer: Diego Biurrun checkasm: Add a test for HEVC add_residual > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ed48a9d8143d2575a4458589cebde69ec326afd8 --- tests/checkasm/Makefile | 2 +- tests/checkasm/checkasm.c | 3 +- tests/checkasm/checkasm.h | 1 + tests/checkasm/hevc_add_res.c | 85 +++ 4 files changed, 89 insertions(+), 2 deletions(-) diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 22cf3db..dbd7393 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -12,7 +12,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o # decoders/encoders AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_add_res.o hevc_idct.o hevc_mc.o AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o AVCODECOBJS-$(CONFIG_VP9_DECODER) += vp9dsp.o diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 040c4eb..5f0d8fd 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -90,8 +90,9 @@ static const struct { { "h264qpel", checkasm_check_h264qpel }, #endif #if CONFIG_HEVC_DECODER -{ "hevc_mc", checkasm_check_hevc_mc }, +{ "hevc_add_res", checkasm_check_hevc_add_res }, { "hevc_idct", checkasm_check_hevc_idct }, +{ "hevc_mc", checkasm_check_hevc_mc }, #endif #if CONFIG_HUFFYUVDSP { "huffyuvdsp", checkasm_check_huffyuvdsp }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 75aa457..462c908 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -39,6 +39,7 @@ void checkasm_check_fmtconvert(void); void checkasm_check_h264dsp(void); void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); +void checkasm_check_hevc_add_res(void); void checkasm_check_hevc_idct(void); void checkasm_check_hevc_mc(void); void checkasm_check_huffyuvdsp(void); diff --git a/tests/checkasm/hevc_add_res.c b/tests/checkasm/hevc_add_res.c new file mode 100644 index 000..2cd97ea --- /dev/null +++ b/tests/checkasm/hevc_add_res.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Libav 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with Libav; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include + +#include "libavutil/intreadwrite.h" + +#include "libavcodec/hevcdsp.h" + +#include "checkasm.h" + +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r >> 3); \ +} \ +} while (0) + +#define randomize_buffers2(buf, size) \ +do { \ +int j;\ +for (j = 0; j < size; j++)\ +AV_WN16A(buf + j * 2, rnd() & 0x3FF); \ +} while (0) + +static void check_add_res(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, res0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, res1, [32 * 32]); +LOCAL_ALIGNED(32, uint8_t, dst0, [32 * 32 * 2]); +LOCAL_ALIGNED(32, uint8_t, dst1, [32 * 32 * 2]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +ptrdiff_t stride = block_size << (bit_depth > 8); +declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t *res, ptrdiff_t stride); + +randomize_buffers(res0, size); +randomize_buffers2(dst0, size); +memcpy(res1, res0, sizeof(*res0) * size); +memcpy(dst1, dst0, size); + +if (check_func(h.add_residual[i - 2], "add_res_%dx%d_%d", block_size, block_size, bit_depth)) { +call_ref(dst0, res0, stride); +call_new(dst1, res1, stride); +if (memcmp(dst0, d
[FFmpeg-cvslog] cllc: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Feb 6 21:41:31 2016 +0100| [d182d8a6d3203f7fbab11179e88f26b8befe899e] | committer: Anton Khirnov cllc: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d182d8a6d3203f7fbab11179e88f26b8befe899e --- libavcodec/cllc.c | 88 +++ 1 file changed, 36 insertions(+), 52 deletions(-) diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c index cdbed74..bac2b73 100644 --- a/libavcodec/cllc.c +++ b/libavcodec/cllc.c @@ -23,11 +23,13 @@ #include #include "libavutil/intreadwrite.h" + +#include "bitstream.h" #include "bswapdsp.h" #include "canopus.h" -#include "get_bits.h" #include "avcodec.h" #include "internal.h" +#include "vlc.h" typedef struct CLLCContext { AVCodecContext *avctx; @@ -37,7 +39,7 @@ typedef struct CLLCContext { int swapped_buf_size; } CLLCContext; -static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc) +static int read_code_table(CLLCContext *ctx, BitstreamContext *bc, VLC *vlc) { uint8_t symbols[256]; uint8_t bits[256]; @@ -49,10 +51,10 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc) count = 0; num_codes_sum = 0; -num_lens = get_bits(gb, 5); +num_lens = bitstream_read(bc, 5); for (i = 0; i < num_lens; i++) { -num_codes = get_bits(gb, 9); +num_codes = bitstream_read(bc, 9); num_codes_sum += num_codes; if (num_codes_sum > 256) { @@ -64,7 +66,7 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc) } for (j = 0; j < num_codes; j++) { -symbols[count] = get_bits(gb, 8); +symbols[count] = bitstream_read(bc, 8); bits[count]= i + 1; codes[count] = prefix++; @@ -82,7 +84,7 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc) * Unlike the RGB24 read/restore, which reads in a component at a time, * ARGB read/restore reads in ARGB quads. */ -static int read_argb_line(CLLCContext *ctx, GetBitContext *gb, int *top_left, +static int read_argb_line(CLLCContext *ctx, BitstreamContext *bc, int *top_left, VLC *vlc, uint8_t *outbuf) { uint8_t *dst; @@ -90,8 +92,6 @@ static int read_argb_line(CLLCContext *ctx, GetBitContext *gb, int *top_left, int code; int i; -OPEN_READER(bits, gb); - dst = outbuf; pred[0] = top_left[0]; pred[1] = top_left[1]; @@ -100,8 +100,7 @@ static int read_argb_line(CLLCContext *ctx, GetBitContext *gb, int *top_left, for (i = 0; i < ctx->avctx->width; i++) { /* Always get the alpha component */ -UPDATE_CACHE(bits, gb); -GET_VLC(code, bits, gb, vlc[0].table, 7, 2); +code = bitstream_read_vlc(bc, vlc[0].table, 7, 2); pred[0] += code; dst[0] = pred[0]; @@ -109,22 +108,19 @@ static int read_argb_line(CLLCContext *ctx, GetBitContext *gb, int *top_left, /* Skip the components if they are entirely transparent */ if (dst[0]) { /* Red */ -UPDATE_CACHE(bits, gb); -GET_VLC(code, bits, gb, vlc[1].table, 7, 2); +code = bitstream_read_vlc(bc, vlc[1].table, 7, 2); pred[1] += code; dst[1] = pred[1]; /* Green */ -UPDATE_CACHE(bits, gb); -GET_VLC(code, bits, gb, vlc[2].table, 7, 2); +code = bitstream_read_vlc(bc, vlc[2].table, 7, 2); pred[2] += code; dst[2] = pred[2]; /* Blue */ -UPDATE_CACHE(bits, gb); -GET_VLC(code, bits, gb, vlc[3].table, 7, 2); +code = bitstream_read_vlc(bc, vlc[3].table, 7, 2); pred[3] += code; dst[3] = pred[3]; @@ -137,8 +133,6 @@ static int read_argb_line(CLLCContext *ctx, GetBitContext *gb, int *top_left, dst += 4; } -CLOSE_READER(bits, gb); - top_left[0] = outbuf[0]; /* Only stash components if they are not transparent */ @@ -151,65 +145,55 @@ static int read_argb_line(CLLCContext *ctx, GetBitContext *gb, int *top_left, return 0; } -static int read_rgb24_component_line(CLLCContext *ctx, GetBitContext *gb, +static int read_rgb24_component_line(CLLCContext *ctx, BitstreamContext *bc, int *top_left, VLC *vlc, uint8_t *outbuf) { uint8_t *dst; int pred, code; int i; -OPEN_READER(bits, gb); - dst = outbuf; pred = *top_left; /* Simultaneously read and restore the line */ for (i = 0; i < ctx->avctx->width; i++) { -UPDATE_CACHE(bits, gb); -GET_VLC(code, bits, gb, vlc->table,
[FFmpeg-cvslog] binkaudio: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 16:11:42 2016 +0200| [0977a7c2f6302508e5180f0f82139c8c8cf4a131] | committer: Anton Khirnov binkaudio: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0977a7c2f6302508e5180f0f82139c8c8cf4a131 --- libavcodec/binkaudio.c | 59 +- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/libavcodec/binkaudio.c b/libavcodec/binkaudio.c index 2638eb2..cf61135 100644 --- a/libavcodec/binkaudio.c +++ b/libavcodec/binkaudio.c @@ -33,8 +33,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "dct.h" -#include "get_bits.h" #include "internal.h" #include "rdft.h" #include "wma_freqs.h" @@ -45,7 +45,7 @@ static float quant_table[96]; #define BINK_BLOCK_MAX_SIZE (MAX_CHANNELS << 11) typedef struct BinkAudioContext { -GetBitContext gb; +BitstreamContext bc; int version_b; ///< Bink version 'b' int first; int channels; @@ -143,11 +143,11 @@ static av_cold int decode_init(AVCodecContext *avctx) return 0; } -static float get_float(GetBitContext *gb) +static float get_float(BitstreamContext *bc) { -int power = get_bits(gb, 5); -float f = ldexpf(get_bits_long(gb, 23), power - 23); -if (get_bits1(gb)) +int power = bitstream_read(bc, 5); +float f = ldexpf(bitstream_read(bc, 23), power - 23); +if (bitstream_read_bit(bc)) f = -f; return f; } @@ -166,30 +166,30 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) int ch, i, j, k; float q, quant[25]; int width, coeff; -GetBitContext *gb = &s->gb; +BitstreamContext *bc = &s->bc; if (use_dct) -skip_bits(gb, 2); +bitstream_skip(bc, 2); for (ch = 0; ch < s->channels; ch++) { FFTSample *coeffs = out[ch]; if (s->version_b) { -if (get_bits_left(gb) < 64) +if (bitstream_bits_left(bc) < 64) return AVERROR_INVALIDDATA; -coeffs[0] = av_int2float(get_bits_long(gb, 32)) * s->root; -coeffs[1] = av_int2float(get_bits_long(gb, 32)) * s->root; +coeffs[0] = av_int2float(bitstream_read(bc, 32)) * s->root; +coeffs[1] = av_int2float(bitstream_read(bc, 32)) * s->root; } else { -if (get_bits_left(gb) < 58) +if (bitstream_bits_left(bc) < 58) return AVERROR_INVALIDDATA; -coeffs[0] = get_float(gb) * s->root; -coeffs[1] = get_float(gb) * s->root; +coeffs[0] = get_float(bc) * s->root; +coeffs[1] = get_float(bc) * s->root; } -if (get_bits_left(gb) < s->num_bands * 8) +if (bitstream_bits_left(bc) < s->num_bands * 8) return AVERROR_INVALIDDATA; for (i = 0; i < s->num_bands; i++) { -int value = get_bits(gb, 8); +int value = bitstream_read(bc, 8); quant[i] = quant_table[FFMIN(value, 95)]; } @@ -202,9 +202,9 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) if (s->version_b) { j = i + 16; } else { -int v = get_bits1(gb); +int v = bitstream_read_bit(bc); if (v) { -v = get_bits(gb, 4); +v = bitstream_read(bc, 4); j = i + rle_length_tab[v] * 8; } else { j = i + 8; @@ -213,7 +213,7 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) j = FFMIN(j, s->frame_len); -width = get_bits(gb, 4); +width = bitstream_read(bc, 4); if (width == 0) { memset(coeffs + i, 0, (j - i) * sizeof(*coeffs)); i = j; @@ -223,10 +223,10 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) while (i < j) { if (s->bands[k] == i) q = quant[k++]; -coeff = get_bits(gb, width); +coeff = bitstream_read(bc, width); if (coeff) { int v; -v = get_bits1(gb); +v = bitstream_read_bit(bc); if (v) coeffs[i] = -q * coeff; else @@ -278,10 +278,11 @@ static av_cold int decode_end(AVCodecContext *avctx) return 0; } -static void get_bits_align32(GetBitContext *s) +static void get_bits_align32(BitstreamContext *s) { -int n = (-get_bits_count(s)) & 31; -if (n) skip_bit
[FFmpeg-cvslog] lavc: add a new bitstream reader to replace get_bits
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 22 09:43:52 2016 +0200| [dd3d7ddf2a508b15877bb978c2309f777853a228] | committer: Anton Khirnov lavc: add a new bitstream reader to replace get_bits The new bit reader features a simpler API and an implementation without stacks of nested macros. Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dd3d7ddf2a508b15877bb978c2309f777853a228 --- libavcodec/bitstream.h | 387 + 1 file changed, 387 insertions(+) diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h new file mode 100644 index 000..996e32e --- /dev/null +++ b/libavcodec/bitstream.h @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * functions for reading bits from a buffer + */ + +#ifndef AVCODEC_BITSTREAM_H +#define AVCODEC_BITSTREAM_H + +#include + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/log.h" + +#include "mathops.h" +#include "vlc.h" + +typedef struct BitstreamContext { +uint64_t bits; // stores bits read from the buffer +const uint8_t *buffer, *buffer_end; +const uint8_t *ptr; // position inside a buffer +unsigned bits_left; // number of bits left in bits field +unsigned size_in_bits; +} BitstreamContext; + +static inline void refill_64(BitstreamContext *bc) +{ +if (bc->ptr >= bc->buffer_end) +return; + +#ifdef BITSTREAM_READER_LE +bc->bits = AV_RL64(bc->ptr); +#else +bc->bits = AV_RB64(bc->ptr); +#endif +bc->ptr += 8; +bc->bits_left = 64; +} + +static inline void refill_32(BitstreamContext *bc) +{ +if (bc->ptr >= bc->buffer_end) +return; + +#ifdef BITSTREAM_READER_LE +bc->bits = (uint64_t)AV_RL32(bc->ptr) << bc->bits_left | bc->bits; +#else +bc->bits = bc->bits | (uint64_t)AV_RB32(bc->ptr) << (32 - bc->bits_left); +#endif +bc->ptr += 4; +bc->bits_left += 32; +} + +/* Initialize BitstreamContext. Input buffer must have an additional zero + * padding of AV_INPUT_BUFFER_PADDING_SIZE bytes at the end. */ +static inline int bitstream_init(BitstreamContext *bc, const uint8_t *buffer, + unsigned bit_size) +{ +unsigned buffer_size; + +if (bit_size > INT_MAX - 7 || !buffer) { +buffer= +bc->buffer= +bc->ptr = NULL; +bc->bits_left = 0; +return AVERROR_INVALIDDATA; +} + +buffer_size = (bit_size + 7) >> 3; + +bc->buffer = buffer; +bc->buffer_end = buffer + buffer_size; +bc->ptr = bc->buffer; +bc->size_in_bits = bit_size; +bc->bits_left= 0; +bc->bits = 0; + +refill_64(bc); + +return 0; +} + +/* Initialize BitstreamContext with buffer size in bytes instead of bits. */ +static inline int bitstream_init8(BitstreamContext *bc, const uint8_t *buffer, + unsigned byte_size) +{ +if (byte_size > INT_MAX / 8) +return AVERROR_INVALIDDATA; +return bitstream_init(bc, buffer, byte_size * 8); +} + +/* Return number of bits already read. */ +static inline int bitstream_tell(const BitstreamContext *bc) +{ +return (bc->ptr - bc->buffer) * 8 - bc->bits_left; +} + +/* Return buffer size in bits. */ +static inline int bitstream_tell_size(const BitstreamContext *bc) +{ +return bc->size_in_bits; +} + +/* Return the number of the bits left in a buffer. */ +static inline int bitstream_bits_left(const BitstreamContext *bc) +{ +return (bc->buffer - bc->ptr) * 8 + bc->size_in_bits + bc->bits_left; +} + +static inline uint64_t get_val(BitstreamContext *bc, unsigned n) +{ +#ifdef BITSTREAM_READER_LE +uint64_t ret = bc->bits & ((UINT64_C(1) << n) - 1); +bc->bits >>= n; +#else +uint64_t ret = bc->bits >> (64 - n); +bc->bits <<= n; +#endif +bc->bits_left -= n; + +return ret; +} + +/* Retur
[FFmpeg-cvslog] escape130: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 20:47:04 2016 +0200| [2906d8dcb39751fc16d5585f3751da3174b8e2bc] | committer: Anton Khirnov escape130: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2906d8dcb39751fc16d5585f3751da3174b8e2bc --- libavcodec/escape130.c | 46 +++--- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/libavcodec/escape130.c b/libavcodec/escape130.c index bfc1f3f..544f36d 100644 --- a/libavcodec/escape130.c +++ b/libavcodec/escape130.c @@ -24,7 +24,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" typedef struct Escape130Context { @@ -163,23 +163,23 @@ static av_cold int escape130_decode_close(AVCodecContext *avctx) return 0; } -static int decode_skip_count(GetBitContext* gb) +static int decode_skip_count(BitstreamContext *bc) { int value; -value = get_bits1(gb); +value = bitstream_read_bit(bc); if (value) return 0; -value = get_bits(gb, 3); +value = bitstream_read(bc, 3); if (value) return value; -value = get_bits(gb, 8); +value = bitstream_read(bc, 8); if (value) return value + 7; -value = get_bits(gb, 15); +value = bitstream_read(bc, 15); if (value) return value + 262; @@ -193,7 +193,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data, int buf_size= avpkt->size; Escape130Context *s = avctx->priv_data; AVFrame *pic= data; -GetBitContext gb; +BitstreamContext bc; int ret; uint8_t *old_y, *old_cb, *old_cr, @@ -216,7 +216,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; -init_get_bits(&gb, buf + 16, (buf_size - 16) * 8); +bitstream_init(&bc, buf + 16, (buf_size - 16) * 8); new_y = s->new_y; new_cb = s->new_u; @@ -235,7 +235,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data, // Note that this call will make us skip the rest of the blocks // if the frame ends prematurely. if (skip == -1) -skip = decode_skip_count(&gb); +skip = decode_skip_count(&bc); if (skip == -1) { av_log(avctx, AV_LOG_ERROR, "Error decoding skip value\n"); return AVERROR_INVALIDDATA; @@ -250,31 +250,31 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data, cb = old_cb[0]; cr = old_cr[0]; } else { -if (get_bits1(&gb)) { -unsigned sign_selector = get_bits(&gb, 6); -unsigned difference_selector = get_bits(&gb, 2); -y_avg = 2 * get_bits(&gb, 5); +if (bitstream_read_bit(&bc)) { +unsigned sign_selector = bitstream_read(&bc, 6); +unsigned difference_selector = bitstream_read(&bc, 2); +y_avg = 2 * bitstream_read(&bc, 5); for (i = 0; i < 4; i++) { y[i] = av_clip(y_avg + offset_table[difference_selector] * sign_table[sign_selector][i], 0, 63); } -} else if (get_bits1(&gb)) { -if (get_bits1(&gb)) { -y_avg = get_bits(&gb, 6); +} else if (bitstream_read_bit(&bc)) { +if (bitstream_read_bit(&bc)) { +y_avg = bitstream_read(&bc, 6); } else { -unsigned adjust_index = get_bits(&gb, 3); +unsigned adjust_index = bitstream_read(&bc, 3); y_avg = (y_avg + luma_adjust[adjust_index]) & 63; } for (i = 0; i < 4; i++) y[i] = y_avg; } -if (get_bits1(&gb)) { -if (get_bits1(&gb)) { -cb = get_bits(&gb, 5); -cr = get_bits(&gb, 5); +if (bitstream_read_bit(&bc)) { +if (bitstream_read_bit(&bc)) { +cb = bitstream_read(&bc, 5); +cr = bitstream_read(&bc, 5); } else { -unsigned adjust_index = get_bits(&gb, 3); +unsigned adjust_index = bitstream_read(&bc, 3); cb = (cb + chroma_adjust[0][adjust_index]) & 31; cr = (cr + chroma_adjust[1][adjust_index]) & 31; } @@ -333,7 +333,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data, } f
[FFmpeg-cvslog] dvdsubdec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 19:05:56 2016 +0200| [d8618570beb52001c0e8960777bab6158a60b3f9] | committer: Anton Khirnov dvdsubdec: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d8618570beb52001c0e8960777bab6158a60b3f9 --- libavcodec/dvdsubdec.c | 34 +- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c index 86c2873..b02bb6b 100644 --- a/libavcodec/dvdsubdec.c +++ b/libavcodec/dvdsubdec.c @@ -20,7 +20,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "libavutil/attributes.h" @@ -50,13 +50,13 @@ static void yuv_a_to_rgba(const uint8_t *ycbcr, const uint8_t *alpha, uint32_t * } } -static int decode_run_2bit(GetBitContext *gb, int *color) +static int decode_run_2bit(BitstreamContext *bc, int *color) { unsigned int v, t; v = 0; for (t = 1; v < t && t <= 0x40; t <<= 2) -v = (v << 4) | get_bits(gb, 4); +v = (v << 4) | bitstream_read(bc, 4); *color = v & 3; if (v < 4) { /* Code for fill rest of line */ return INT_MAX; @@ -64,23 +64,23 @@ static int decode_run_2bit(GetBitContext *gb, int *color) return v >> 2; } -static int decode_run_8bit(GetBitContext *gb, int *color) +static int decode_run_8bit(BitstreamContext *bc, int *color) { int len; -int has_run = get_bits1(gb); -if (get_bits1(gb)) -*color = get_bits(gb, 8); +int has_run = bitstream_read_bit(bc); +if (bitstream_read_bit(bc)) +*color = bitstream_read(bc, 8); else -*color = get_bits(gb, 2); +*color = bitstream_read(bc, 2); if (has_run) { -if (get_bits1(gb)) { -len = get_bits(gb, 7); +if (bitstream_read_bit(bc)) { +len = bitstream_read(bc, 7); if (len == 0) len = INT_MAX; else len += 9; } else -len = get_bits(gb, 3) + 2; +len = bitstream_read(bc, 3) + 2; } else len = 1; return len; @@ -89,24 +89,24 @@ static int decode_run_8bit(GetBitContext *gb, int *color) static int decode_rle(uint8_t *bitmap, int linesize, int w, int h, const uint8_t *buf, int start, int buf_size, int is_8bit) { -GetBitContext gb; +BitstreamContext bc; int bit_len; int x, y, len, color; uint8_t *d; bit_len = (buf_size - start) * 8; -init_get_bits(&gb, buf + start, bit_len); +bitstream_init(&bc, buf + start, bit_len); x = 0; y = 0; d = bitmap; for(;;) { -if (get_bits_count(&gb) > bit_len) +if (bitstream_tell(&bc) > bit_len) return -1; if (is_8bit) -len = decode_run_8bit(&gb, &color); +len = decode_run_8bit(&bc, &color); else -len = decode_run_2bit(&gb, &color); +len = decode_run_2bit(&bc, &color); len = FFMIN(len, w - x); memset(d + x, color, len); x += len; @@ -117,7 +117,7 @@ static int decode_rle(uint8_t *bitmap, int linesize, int w, int h, d += linesize; x = 0; /* byte align */ -align_get_bits(&gb); +bitstream_align(&bc); } } return 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] eamad: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Feb 17 18:16:06 2016 +0100| [adb1ebb36cdfa787e97eb705a73aa551caed39b9] | committer: Anton Khirnov eamad: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=adb1ebb36cdfa787e97eb705a73aa551caed39b9 --- libavcodec/eamad.c | 42 +++--- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c index 070cfdb..7509c2d 100644 --- a/libavcodec/eamad.c +++ b/libavcodec/eamad.c @@ -29,16 +29,17 @@ */ #include "avcodec.h" +#include "bitstream.h" #include "blockdsp.h" #include "bytestream.h" #include "bswapdsp.h" -#include "get_bits.h" #include "aandcttab.h" #include "eaidct.h" #include "idctdsp.h" #include "internal.h" #include "mpeg12data.h" #include "mpeg12vlc.h" +#include "vlc.h" #define EA_PREAMBLE_SIZE8 #define MADk_TAG MKTAG('M', 'A', 'D', 'k')/* MAD I-frame */ @@ -51,7 +52,7 @@ typedef struct MadContext { BswapDSPContext bbdsp; IDCTDSPContext idsp; AVFrame *last_frame; -GetBitContext gb; +BitstreamContext bc; void *bitstream_buf; unsigned int bitstream_buf_size; DECLARE_ALIGNED(16, int16_t, block)[64]; @@ -129,17 +130,15 @@ static inline void decode_block_intra(MadContext *s, int16_t * block) const uint8_t *scantable = s->scantable.permutated; int16_t *quant_matrix = s->quant_matrix; -block[0] = (128 + get_sbits(&s->gb, 8)) * quant_matrix[0]; +block[0] = (128 + bitstream_read_signed(&s->bc, 8)) * quant_matrix[0]; /* The RL decoder is derived from mpeg1_decode_block_intra; Escaped level and run values a decoded differently */ i = 0; { -OPEN_READER(re, &s->gb); /* now quantify & encode AC coefficients */ for (;;) { -UPDATE_CACHE(re, &s->gb); -GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0); +BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2); if (level == 127) { break; @@ -153,15 +152,12 @@ static inline void decode_block_intra(MadContext *s, int16_t * block) j = scantable[i]; level = (level*quant_matrix[j]) >> 4; level = (level-1)|1; -level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); -LAST_SKIP_BITS(re, &s->gb, 1); +level = bitstream_apply_sign(&s->bc, level); } else { /* escape */ -UPDATE_CACHE(re, &s->gb); -level = SHOW_SBITS(re, &s->gb, 10); SKIP_BITS(re, &s->gb, 10); +level = bitstream_read_signed(&s->bc, 10); -UPDATE_CACHE(re, &s->gb); -run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6); +run = bitstream_read(&s->bc, 6) + 1; i += run; if (i > 63) { @@ -183,17 +179,17 @@ static inline void decode_block_intra(MadContext *s, int16_t * block) block[j] = level; } -CLOSE_READER(re, &s->gb); } } -static int decode_motion(GetBitContext *gb) +static int decode_motion(BitstreamContext *bc) { int value = 0; -if (get_bits1(gb)) { -if (get_bits1(gb)) + +if (bitstream_read_bit(bc)) { +if (bitstream_read_bit(bc)) value = -17; -value += get_bits(gb, 4) + 1; +value += bitstream_read(bc, 4) + 1; } return value; } @@ -205,11 +201,11 @@ static void decode_mb(MadContext *s, AVFrame *frame, int inter) int j; if (inter) { -int v = decode210(&s->gb); +int v = bitstream_decode210(&s->bc); if (v < 2) { -mv_map = v ? get_bits(&s->gb, 6) : 63; -mv_x = decode_motion(&s->gb); -mv_y = decode_motion(&s->gb); +mv_map = v ? bitstream_read(&s->bc, 6) : 63; +mv_x = decode_motion(&s->bc); +mv_y = decode_motion(&s->bc); } else { mv_map = 0; } @@ -217,7 +213,7 @@ static void decode_mb(MadContext *s, AVFrame *frame, int inter) for (j=0; j<6; j++) { if (mv_map & (1<gb); +int add = 2 * decode_motion(&s->bc); comp_block(s, frame, s->mb_x, s->mb_y, j, mv_x, mv_y, add); } else { s->bdsp.clear_block(s->block); @@ -299,7 +295,7 @@ static int decode_frame(AVCodecContext *avctx,
[FFmpeg-cvslog] cdxl: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 16:20:13 2016 +0200| [b4c0daa83c0c5e7505703af65de95fb22d6cbe72] | committer: Anton Khirnov cdxl: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b4c0daa83c0c5e7505703af65de95fb22d6cbe72 --- libavcodec/cdxl.c | 19 ++- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libavcodec/cdxl.c b/libavcodec/cdxl.c index 99e96eb..4c0410d 100644 --- a/libavcodec/cdxl.c +++ b/libavcodec/cdxl.c @@ -21,8 +21,9 @@ #include "libavutil/intreadwrite.h" #include "libavutil/imgutils.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #define BIT_PLANAR 0x00 @@ -69,30 +70,30 @@ static void import_palette(CDXLVideoContext *c, uint32_t *new_palette) static void bitplanar2chunky(CDXLVideoContext *c, int linesize, uint8_t *out) { -GetBitContext gb; +BitstreamContext bc; int x, y, plane; -init_get_bits(&gb, c->video, c->video_size * 8); +bitstream_init(&bc, c->video, c->video_size * 8); for (plane = 0; plane < c->bpp; plane++) { for (y = 0; y < c->avctx->height; y++) { for (x = 0; x < c->avctx->width; x++) -out[linesize * y + x] |= get_bits1(&gb) << plane; -skip_bits(&gb, c->padded_bits); +out[linesize * y + x] |= bitstream_read_bit(&bc) << plane; +bitstream_skip(&bc, c->padded_bits); } } } static void bitline2chunky(CDXLVideoContext *c, int linesize, uint8_t *out) { -GetBitContext gb; +BitstreamContext bc; int x, y, plane; -init_get_bits(&gb, c->video, c->video_size * 8); +bitstream_init(&bc, c->video, c->video_size * 8); for (y = 0; y < c->avctx->height; y++) { for (plane = 0; plane < c->bpp; plane++) { for (x = 0; x < c->avctx->width; x++) -out[linesize * y + x] |= get_bits1(&gb) << plane; -skip_bits(&gb, c->padded_bits); +out[linesize * y + x] |= bitstream_read_bit(&bc) << plane; +bitstream_skip(&bc, c->padded_bits); } } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] escape124: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 20:36:57 2016 +0200| [c43eb731721ac1009c2b4ca13f90ef00280119c9] | committer: Anton Khirnov escape124: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c43eb731721ac1009c2b4ca13f90ef00280119c9 --- libavcodec/escape124.c | 85 -- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/libavcodec/escape124.c b/libavcodec/escape124.c index 6d1b487..879f00a 100644 --- a/libavcodec/escape124.c +++ b/libavcodec/escape124.c @@ -21,7 +21,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" typedef union MacroBlock { @@ -48,8 +48,9 @@ typedef struct Escape124Context { CodeBook codebooks[3]; } Escape124Context; -static int can_safely_read(GetBitContext* gb, int bits) { -return get_bits_left(gb) >= bits; +static int can_safely_read(BitstreamContext *bc, int bits) +{ +return bitstream_bits_left(bc) >= bits; } /** @@ -86,13 +87,13 @@ static av_cold int escape124_decode_close(AVCodecContext *avctx) return 0; } -static CodeBook unpack_codebook(GetBitContext* gb, unsigned depth, +static CodeBook unpack_codebook(BitstreamContext *bc, unsigned depth, unsigned size) { unsigned i, j; CodeBook cb = { 0 }; -if (!can_safely_read(gb, size * 34)) +if (!can_safely_read(bc, size * 34)) return cb; if (size >= INT_MAX / sizeof(MacroBlock)) @@ -104,9 +105,9 @@ static CodeBook unpack_codebook(GetBitContext* gb, unsigned depth, cb.depth = depth; cb.size = size; for (i = 0; i < size; i++) { -unsigned mask_bits = get_bits(gb, 4); -unsigned color0 = get_bits(gb, 15); -unsigned color1 = get_bits(gb, 15); +unsigned mask_bits = bitstream_read(bc, 4); +unsigned color0= bitstream_read(bc, 15); +unsigned color1= bitstream_read(bc, 15); for (j = 0; j < 4; j++) { if (mask_bits & (1 << j)) @@ -118,47 +119,43 @@ static CodeBook unpack_codebook(GetBitContext* gb, unsigned depth, return cb; } -static unsigned decode_skip_count(GetBitContext* gb) +static unsigned decode_skip_count(BitstreamContext *bc) { unsigned value; // This function reads a maximum of 23 bits, // which is within the padding space -if (!can_safely_read(gb, 1)) +if (!can_safely_read(bc, 1)) return -1; -value = get_bits1(gb); +value = bitstream_read_bit(bc); if (!value) return value; -value += get_bits(gb, 3); +value += bitstream_read(bc, 3); if (value != (1 + ((1 << 3) - 1))) return value; -value += get_bits(gb, 7); +value += bitstream_read(bc, 7); if (value != (1 + ((1 << 3) - 1)) + ((1 << 7) - 1)) return value; -return value + get_bits(gb, 12); +return value + bitstream_read(bc, 12); } -static MacroBlock decode_macroblock(Escape124Context* s, GetBitContext* gb, -int* codebook_index, int superblock_index) +static MacroBlock decode_macroblock(Escape124Context *s, BitstreamContext *bc, +int *codebook_index, int superblock_index) { // This function reads a maximum of 22 bits; the callers // guard this function appropriately unsigned block_index, depth; -int value = get_bits1(gb); +int value = bitstream_read_bit(bc); if (value) { static const char transitions[3][2] = { {2, 1}, {0, 2}, {1, 0} }; -value = get_bits1(gb); +value = bitstream_read_bit(bc); *codebook_index = transitions[*codebook_index][value]; } depth = s->codebooks[*codebook_index].depth; - -// depth = 0 means that this shouldn't read any bits; -// in theory, this is the same as get_bits(gb, 0), but -// that doesn't actually work. -block_index = get_bitsz(gb, depth); +block_index = bitstream_read(bc, depth); if (*codebook_index == 1) { block_index += superblock_index << s->codebooks[1].depth; @@ -208,7 +205,7 @@ static int escape124_decode_frame(AVCodecContext *avctx, Escape124Context *s = avctx->priv_data; AVFrame *frame = data; -GetBitContext gb; +BitstreamContext bc; unsigned frame_flags, frame_size; unsigned i; @@ -220,15 +217,15 @@ static int escape124_decode_frame(AVCodecContext *avctx, unsigned old_stride, new_stride; int ret; -init_get_bits(&gb, buf, buf_size * 8); +bitstream_init(&bc, buf, buf_size * 8); // This call also guards the potential depth reads for the // codebook unpacking. -if (!can_safely_read(&gb, 64)) +if (!can_safely_read(&bc, 64
[FFmpeg-cvslog] faxcompr: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 21:04:29 2016 +0200| [418ccdd7034e4cbbb991a4fb47753d76286998f3] | committer: Anton Khirnov faxcompr: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=418ccdd7034e4cbbb991a4fb47753d76286998f3 --- libavcodec/faxcompr.c | 34 +- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/libavcodec/faxcompr.c b/libavcodec/faxcompr.c index 4cbda3f..8a9010d 100644 --- a/libavcodec/faxcompr.c +++ b/libavcodec/faxcompr.c @@ -25,7 +25,7 @@ * @author Konstantin Shishkov */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "put_bits.h" #include "faxcompr.h" @@ -123,7 +123,7 @@ av_cold void ff_ccitt_unpack_init(void) } -static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb, +static int decode_group3_1d_line(AVCodecContext *avctx, BitstreamContext *bc, unsigned int pix_left, int *runs, const int *runend) { @@ -131,7 +131,7 @@ static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int run = 0; unsigned int t; for (;;) { -t= get_vlc2(gb, ccitt_vlc[mode].table, 9, 2); +t= bitstream_read_vlc(bc, ccitt_vlc[mode].table, 9, 2); run += t; if (t < 64) { *runs++ = run; @@ -157,7 +157,7 @@ static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb, return 0; } -static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb, +static int decode_group3_2d_line(AVCodecContext *avctx, BitstreamContext *bc, unsigned int width, int *runs, const int *runend, const int *ref) { @@ -168,7 +168,7 @@ static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb, runend--; // for the last written 0 while (offs < width) { -int cmode = get_vlc2(gb, ccitt_group3_2d_vlc.table, 9, 1); +int cmode = bitstream_read_vlc(bc, ccitt_group3_2d_vlc.table, 9, 1); if (cmode == -1) { av_log(avctx, AV_LOG_ERROR, "Incorrect mode VLC\n"); return AVERROR_INVALIDDATA; @@ -188,7 +188,7 @@ static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb, for (k = 0; k < 2; k++) { run = 0; for (;;) { -t = get_vlc2(gb, ccitt_vlc[mode].table, 9, 2); +t = bitstream_read_vlc(bc, ccitt_vlc[mode].table, 9, 2); if (t == -1) { av_log(avctx, AV_LOG_ERROR, "Incorrect code\n"); return AVERROR_INVALIDDATA; @@ -258,12 +258,12 @@ static void put_line(uint8_t *dst, int size, int width, const int *runs) flush_put_bits(&pb); } -static int find_group3_syncmarker(GetBitContext *gb, int srcsize) +static int find_group3_syncmarker(BitstreamContext *bc, int srcsize) { unsigned int state = -1; -srcsize -= get_bits_count(gb); +srcsize -= bitstream_tell(bc); while (srcsize-- > 0) { -state += state + get_bits1(gb); +state += state + bitstream_read_bit(bc); if ((state & 0xFFF) == 1) return 0; } @@ -275,7 +275,7 @@ int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize, enum TiffCompr compr, int opts) { int j; -GetBitContext gb; +BitstreamContext bc; int *runs, *ref = NULL, *runend; int ret; int runsize = avctx->width + 2; @@ -289,27 +289,27 @@ int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize, ref[0] = avctx->width; ref[1] = 0; ref[2] = 0; -init_get_bits(&gb, src, srcsize * 8); +bitstream_init(&bc, src, srcsize * 8); for (j = 0; j < height; j++) { runend = runs + runsize; if (compr == TIFF_G4) { -ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend, +ret = decode_group3_2d_line(avctx, &bc, avctx->width, runs, runend, ref); if (ret < 0) goto fail; } else { int g3d1 = (compr == TIFF_G3) && !(opts & 1); if (compr != TIFF_CCITT_RLE && -find_group3_syncmarker(&gb, srcsize * 8) < 0) +find_group3_syncmarker(&bc, srcsize * 8) < 0) break; -if (compr == TIFF_CCITT_RLE || g3d1 || get_bits1(&gb)) -ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs, +if (compr == TIFF_CCITT_RLE || g3d1 || bitstream_read_bit(&bc)) +ret = decod
[FFmpeg-cvslog] exr: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 21:00:43 2016 +0200| [8df1ac6b785a1a159cdffed1eec1ab2a8df66460] | committer: Anton Khirnov exr: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8df1ac6b785a1a159cdffed1eec1ab2a8df66460 --- libavcodec/exr.c | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/exr.c b/libavcodec/exr.c index d10841d..28cee84 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -39,8 +39,8 @@ #include "libavutil/opt.h" #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #include "mathops.h" #include "thread.h" @@ -379,16 +379,16 @@ static void huf_canonical_code_table(uint64_t *hcode) static int huf_unpack_enc_table(GetByteContext *gb, int32_t im, int32_t iM, uint64_t *hcode) { -GetBitContext gbit; -int ret = init_get_bits8(&gbit, gb->buffer, bytestream2_get_bytes_left(gb)); +BitstreamContext bc; +int ret = bitstream_init8(&bc, gb->buffer, bytestream2_get_bytes_left(gb)); if (ret < 0) return ret; for (; im <= iM; im++) { -uint64_t l = hcode[im] = get_bits(&gbit, 6); +uint64_t l = hcode[im] = bitstream_read(&bc, 6); if (l == LONG_ZEROCODE_RUN) { -int zerun = get_bits(&gbit, 8) + SHORTEST_LONG_RUN; +int zerun = bitstream_read(&bc, 8) + SHORTEST_LONG_RUN; if (im + zerun > iM + 1) return AVERROR_INVALIDDATA; @@ -410,7 +410,7 @@ static int huf_unpack_enc_table(GetByteContext *gb, } } -bytestream2_skip(gb, (get_bits_count(&gbit) + 7) / 8); +bytestream2_skip(gb, (bitstream_tell(&bc) + 7) / 8); huf_canonical_code_table(hcode); return 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] hqx: Convert to the new bitstream header
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 12:09:58 2016 +0200| [1df549bfa2bacceb6f119f2aa1146c22ac841243] | committer: Anton Khirnov hqx: Convert to the new bitstream header Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1df549bfa2bacceb6f119f2aa1146c22ac841243 --- libavcodec/hqx.c | 64 libavcodec/hqx.h | 5 +++-- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c index 7411d3f..3c359e3 100644 --- a/libavcodec/hqx.c +++ b/libavcodec/hqx.c @@ -24,8 +24,8 @@ #include "libavutil/intreadwrite.h" #include "avcodec.h" +#include "bitstream.h" #include "canopus.h" -#include "get_bits.h" #include "internal.h" #include "hqx.h" @@ -95,23 +95,23 @@ static inline void put_blocks(HQXContext *ctx, int plane, lsize * fields, block1, quant); } -static inline void hqx_get_ac(GetBitContext *gb, const HQXAC *ac, +static inline void hqx_get_ac(BitstreamContext *bc, const HQXAC *ac, int *run, int *lev) { int val; -val = show_bits(gb, ac->lut_bits); +val = bitstream_peek(bc, ac->lut_bits); if (ac->lut[val].bits == -1) { -GetBitContext gb2 = *gb; -skip_bits(&gb2, ac->lut_bits); -val = ac->lut[val].lev + show_bits(&gb2, ac->extra_bits); +BitstreamContext bc2 = *bc; +bitstream_skip(&bc2, ac->lut_bits); +val = ac->lut[val].lev + bitstream_peek(&bc2, ac->extra_bits); } *run = ac->lut[val].run; *lev = ac->lut[val].lev; -skip_bits(gb, ac->lut[val].bits); +bitstream_skip(bc, ac->lut[val].bits); } -static int decode_block(GetBitContext *gb, VLC *vlc, +static int decode_block(BitstreamContext *bc, VLC *vlc, const int *quants, int dcb, int16_t block[64], int *last_dc) { @@ -120,14 +120,14 @@ static int decode_block(GetBitContext *gb, VLC *vlc, int run, lev, pos = 1; memset(block, 0, 64 * sizeof(*block)); -dc = get_vlc2(gb, vlc->table, HQX_DC_VLC_BITS, 2); +dc = bitstream_read_vlc(bc, vlc->table, HQX_DC_VLC_BITS, 2); if (dc < 0) return AVERROR_INVALIDDATA; *last_dc += dc; block[0] = sign_extend(*last_dc << (12 - dcb), 12); -q = quants[get_bits(gb, 2)]; +q = quants[bitstream_read(bc, 2)]; if (q >= 128) ac_idx = HQX_AC_Q128; else if (q >= 64) @@ -142,7 +142,7 @@ static int decode_block(GetBitContext *gb, VLC *vlc, ac_idx = HQX_AC_Q0; do { -hqx_get_ac(gb, &ff_hqx_ac[ac_idx], &run, &lev); +hqx_get_ac(bc, &ff_hqx_ac[ac_idx], &run, &lev); pos += run; if (pos >= 64) break; @@ -155,24 +155,24 @@ static int decode_block(GetBitContext *gb, VLC *vlc, static int hqx_decode_422(HQXContext *ctx, int slice_no, int x, int y) { HQXSlice *slice = &ctx->slice[slice_no]; -GetBitContext *gb = &slice->gb; +BitstreamContext *bc = &slice->bc; const int *quants; int flag; int last_dc; int i, ret; if (ctx->interlaced) -flag = get_bits1(gb); +flag = bitstream_read_bit(bc); else flag = 0; -quants = hqx_quants[get_bits(gb, 4)]; +quants = hqx_quants[bitstream_read(bc, 4)]; for (i = 0; i < 8; i++) { int vlc_index = ctx->dcb - 9; if (i == 0 || i == 4 || i == 6) last_dc = 0; -ret = decode_block(gb, &ctx->dc_vlc[vlc_index], quants, +ret = decode_block(bc, &ctx->dc_vlc[vlc_index], quants, ctx->dcb, slice->block[i], &last_dc); if (ret < 0) return ret; @@ -189,14 +189,14 @@ static int hqx_decode_422(HQXContext *ctx, int slice_no, int x, int y) static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y) { HQXSlice *slice = &ctx->slice[slice_no]; -GetBitContext *gb = &slice->gb; +BitstreamContext *bc = &slice->bc; const int *quants; int flag = 0; int last_dc; int i, ret; int cbp; -cbp = get_vlc2(gb, ctx->cbp_vlc.table, ctx->cbp_vlc.bits, 1); +cbp = bitstream_read_vlc(bc, ctx->cbp_vlc.table, ctx->cbp_vlc.bits, 1); for (i = 0; i < 12; i++) memset(slice->block[i], 0, sizeof(**slice->block) * 64); @@ -204,9 +204,9 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y) slice->block[i][0] = -0x800; if (cbp) { if (ctx->interlaced) -flag = get_bits1(gb); +flag = bitstream_read_bit(bc); -quants = hqx_quants[get_bits(gb, 4)]; +qua
[FFmpeg-cvslog] fraps: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 11:12:27 2016 +0200| [b37b681f7734533dd6dc2ede8aa9d5c2607e0c23] | committer: Anton Khirnov fraps: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b37b681f7734533dd6dc2ede8aa9d5c2607e0c23 --- libavcodec/fraps.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c index 55051ff..2237991 100644 --- a/libavcodec/fraps.c +++ b/libavcodec/fraps.c @@ -32,7 +32,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "huffman.h" #include "bytestream.h" #include "bswapdsp.h" @@ -94,7 +94,7 @@ static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w, const int step) { int i, j, ret; -GetBitContext gb; +BitstreamContext bc; VLC vlc; Node nodes[512]; @@ -111,10 +111,10 @@ static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w, s->bdsp.bswap_buf((uint32_t *) s->tmpbuf, (const uint32_t *) src, size >> 2); -init_get_bits(&gb, s->tmpbuf, size * 8); +bitstream_init(&bc, s->tmpbuf, size * 8); for (j = 0; j < h; j++) { for (i = 0; i < w*step; i += step) { -dst[i] = get_vlc2(&gb, vlc.table, VLC_BITS, 3); +dst[i] = bitstream_read_vlc(&bc, vlc.table, VLC_BITS, 3); /* lines are stored as deltas between previous lines * and we need to add 0x80 to the first lines of chroma planes */ @@ -122,7 +122,7 @@ static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w, dst[i] += dst[i - stride]; else if (Uoff) dst[i] += 0x80; -if (get_bits_left(&gb) < 0) { +if (bitstream_bits_left(&bc) < 0) { ff_free_vlc(&vlc); return AVERROR_INVALIDDATA; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] cook: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 18:00:37 2016 +0200| [942e84d2a3c41a9392743ea6b1cb24ca8163d678] | committer: Anton Khirnov cook: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=942e84d2a3c41a9392743ea6b1cb24ca8163d678 --- libavcodec/cook.c | 53 +++-- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/libavcodec/cook.c b/libavcodec/cook.c index c990333..c3304ea 100644 --- a/libavcodec/cook.c +++ b/libavcodec/cook.c @@ -47,7 +47,7 @@ #include "audiodsp.h" #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "bytestream.h" #include "fft.h" #include "internal.h" @@ -124,7 +124,7 @@ typedef struct cook { AVCodecContext* avctx; AudioDSPContext adsp; -GetBitContext gb; +BitstreamContextbc; /* stream data */ int num_vectors; int samples_per_channel; @@ -325,23 +325,23 @@ static av_cold int cook_decode_close(AVCodecContext *avctx) /** * Fill the gain array for the timedomain quantization. * - * @param gb pointer to the GetBitContext + * @param bc pointer to the BitstreamContext * @param gaininfoarray[9] of gain indexes */ -static void decode_gain_info(GetBitContext *gb, int *gaininfo) +static void decode_gain_info(BitstreamContext *bc, int *gaininfo) { int i, n; -while (get_bits1(gb)) { +while (bitstream_read_bit(bc)) { /* NOTHING */ } -n = get_bits_count(gb) - 1; // amount of elements*2 to update +n = bitstream_tell(bc) - 1; // amount of elements * 2 to update i = 0; while (n--) { -int index = get_bits(gb, 3); -int gain = get_bits1(gb) ? get_bits(gb, 4) - 7 : -1; +int index = bitstream_read(bc, 3); +int gain = bitstream_read_bit(bc) ? bitstream_read(bc, 4) - 7 : -1; while (i <= index) gaininfo[i++] = gain; @@ -361,7 +361,7 @@ static int decode_envelope(COOKContext *q, COOKSubpacket *p, { int i, j, vlc_index; -quant_index_table[0] = get_bits(&q->gb, 6) - 6; // This is used later in categorize +quant_index_table[0] = bitstream_read(&q->bc, 6) - 6; // This is used later in categorize for (i = 1; i < p->total_subbands; i++) { vlc_index = i; @@ -375,8 +375,8 @@ static int decode_envelope(COOKContext *q, COOKSubpacket *p, if (vlc_index > 13) vlc_index = 13; // the VLC tables >13 are identical to No. 13 -j = get_vlc2(&q->gb, q->envelope_quant_index[vlc_index - 1].table, - q->envelope_quant_index[vlc_index - 1].bits, 2); +j = bitstream_read_vlc(&q->bc, q->envelope_quant_index[vlc_index - 1].table, + q->envelope_quant_index[vlc_index - 1].bits, 2); quant_index_table[i] = quant_index_table[i - 1] + j - 12; // differential encoding if (quant_index_table[i] > 63 || quant_index_table[i] < -63) { av_log(q->avctx, AV_LOG_ERROR, @@ -408,7 +408,7 @@ static void categorize(COOKContext *q, COOKSubpacket *p, int *quant_index_table, int tmp_categorize_array1_idx = p->numvector_size; int tmp_categorize_array2_idx = p->numvector_size; -bits_left = p->bits_per_subpacket - get_bits_count(&q->gb); +bits_left = p->bits_per_subpacket - bitstream_tell(&q->bc); if (bits_left > q->samples_per_channel) bits_left = q->samples_per_channel + @@ -554,8 +554,8 @@ static int unpack_SQVH(COOKContext *q, COOKSubpacket *p, int category, vd = vd_tab[category]; result = 0; for (i = 0; i < vpr_tab[category]; i++) { -vlc = get_vlc2(&q->gb, q->sqvh[category].table, q->sqvh[category].bits, 3); -if (p->bits_per_subpacket < get_bits_count(&q->gb)) { +vlc = bitstream_read_vlc(&q->bc, q->sqvh[category].table, q->sqvh[category].bits, 3); +if (p->bits_per_subpacket < bitstream_tell(&q->bc)) { vlc = 0; result = 1; } @@ -566,8 +566,8 @@ static int unpack_SQVH(COOKContext *q, COOKSubpacket *p, int category, } for (j = 0; j < vd; j++) { if (subband_coef_index[i * vd + j]) { -if (get_bits_count(&q->gb) < p->bits_per_subpacket) { -subband_coef_sign[i * vd + j] = get_bits1(&q->gb); +if (bitstream_tell(&q->bc) < p->bits_per_subpacket) { +subband_coef_sign[i * vd + j] = bitstream_read_bit(&q->bc); } else { result = 1; subband_coef_sign[
[FFmpeg-cvslog] dss_sp: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 18:58:25 2016 +0200| [928f8c7ce360f464f1c5d3a363b2d4b1eb7c471f] | committer: Anton Khirnov dss_sp: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=928f8c7ce360f464f1c5d3a363b2d4b1eb7c471f --- libavcodec/dss_sp.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/libavcodec/dss_sp.c b/libavcodec/dss_sp.c index 20b0528..44d98d8 100644 --- a/libavcodec/dss_sp.c +++ b/libavcodec/dss_sp.c @@ -25,7 +25,7 @@ #include "libavutil/opt.h" #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #define SUBFRAMES 4 @@ -302,7 +302,7 @@ static av_cold int dss_sp_decode_init(AVCodecContext *avctx) static void dss_sp_unpack_coeffs(DssSpContext *p, const uint8_t *src) { -GetBitContext gb; +BitstreamContext bc; DssSpFrame *fparam = &p->fparam; int i; int subframe_idx; @@ -315,24 +315,24 @@ static void dss_sp_unpack_coeffs(DssSpContext *p, const uint8_t *src) p->bits[i + 1] = src[i]; } -init_get_bits(&gb, p->bits, DSS_SP_FRAME_SIZE * 8); +bitstream_init(&bc, p->bits, DSS_SP_FRAME_SIZE * 8); for (i = 0; i < 2; i++) -fparam->filter_idx[i] = get_bits(&gb, 5); +fparam->filter_idx[i] = bitstream_read(&bc, 5); for (; i < 8; i++) -fparam->filter_idx[i] = get_bits(&gb, 4); +fparam->filter_idx[i] = bitstream_read(&bc, 4); for (; i < 14; i++) -fparam->filter_idx[i] = get_bits(&gb, 3); +fparam->filter_idx[i] = bitstream_read(&bc, 3); for (subframe_idx = 0; subframe_idx < 4; subframe_idx++) { -fparam->sf_adaptive_gain[subframe_idx] = get_bits(&gb, 5); +fparam->sf_adaptive_gain[subframe_idx] = bitstream_read(&bc, 5); -fparam->sf[subframe_idx].combined_pulse_pos = get_bits_long(&gb, 31); +fparam->sf[subframe_idx].combined_pulse_pos = bitstream_read(&bc, 31); -fparam->sf[subframe_idx].gain = get_bits(&gb, 6); +fparam->sf[subframe_idx].gain = bitstream_read(&bc, 6); for (i = 0; i < 7; i++) -fparam->sf[subframe_idx].pulse_val[i] = get_bits(&gb, 3); +fparam->sf[subframe_idx].pulse_val[i] = bitstream_read(&bc, 3); } for (subframe_idx = 0; subframe_idx < 4; subframe_idx++) { @@ -394,7 +394,7 @@ static void dss_sp_unpack_coeffs(DssSpContext *p, const uint8_t *src) } } -combined_pitch = get_bits(&gb, 24); +combined_pitch = bitstream_read(&bc, 24); fparam->pitch_lag[0] = (combined_pitch % 151) + 36; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] cljrdec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 17:34:03 2016 +0200| [e561146611f5cf410df78b53a4ca5cded2272fd3] | committer: Anton Khirnov cljrdec: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e561146611f5cf410df78b53a4ca5cded2272fd3 --- libavcodec/cljrdec.c | 18 +- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libavcodec/cljrdec.c b/libavcodec/cljrdec.c index 33d8023..833707b 100644 --- a/libavcodec/cljrdec.c +++ b/libavcodec/cljrdec.c @@ -25,7 +25,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" static int decode_frame(AVCodecContext *avctx, @@ -34,7 +34,7 @@ static int decode_frame(AVCodecContext *avctx, { const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; -GetBitContext gb; +BitstreamContext bc; AVFrame * const p = data; int x, y, ret; @@ -56,20 +56,20 @@ static int decode_frame(AVCodecContext *avctx, p->pict_type = AV_PICTURE_TYPE_I; p->key_frame = 1; -init_get_bits(&gb, buf, buf_size * 8); +bitstream_init(&bc, buf, buf_size * 8); for (y = 0; y < avctx->height; y++) { uint8_t *luma = &p->data[0][y * p->linesize[0]]; uint8_t *cb = &p->data[1][y * p->linesize[1]]; uint8_t *cr = &p->data[2][y * p->linesize[2]]; for (x = 0; x < avctx->width; x += 4) { -luma[3] = get_bits(&gb, 5) << 3; -luma[2] = get_bits(&gb, 5) << 3; -luma[1] = get_bits(&gb, 5) << 3; -luma[0] = get_bits(&gb, 5) << 3; +luma[3] = bitstream_read(&bc, 5) << 3; +luma[2] = bitstream_read(&bc, 5) << 3; +luma[1] = bitstream_read(&bc, 5) << 3; +luma[0] = bitstream_read(&bc, 5) << 3; luma += 4; -*(cb++) = get_bits(&gb, 6) << 2; -*(cr++) = get_bits(&gb, 6) << 2; +*(cb++) = bitstream_read(&bc, 6) << 2; +*(cr++) = bitstream_read(&bc, 6) << 2; } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] g2meet: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 11:16:15 2016 +0200| [799703c3ea3d20c2bdf0f7d8b5015bd3069b2801] | committer: Anton Khirnov g2meet: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=799703c3ea3d20c2bdf0f7d8b5015bd3069b2801 --- libavcodec/g2meet.c | 30 +++--- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/libavcodec/g2meet.c b/libavcodec/g2meet.c index 7e90916..4a7f5a3 100644 --- a/libavcodec/g2meet.c +++ b/libavcodec/g2meet.c @@ -31,10 +31,10 @@ #include "libavutil/intreadwrite.h" #include "avcodec.h" +#include "bitstream.h" #include "blockdsp.h" #include "bytestream.h" #include "elsdec.h" -#include "get_bits.h" #include "idctdsp.h" #include "internal.h" #include "jpegtables.h" @@ -236,7 +236,7 @@ static void jpg_unescape(const uint8_t *src, int src_size, *dst_size = dst - dst_start; } -static int jpg_decode_block(JPGContext *c, GetBitContext *gb, +static int jpg_decode_block(JPGContext *c, BitstreamContext *bc, int plane, int16_t *block) { int dc, val, pos; @@ -244,18 +244,18 @@ static int jpg_decode_block(JPGContext *c, GetBitContext *gb, const uint8_t *qmat = is_chroma ? chroma_quant : luma_quant; c->bdsp.clear_block(block); -dc = get_vlc2(gb, c->dc_vlc[is_chroma].table, 9, 3); +dc = bitstream_read_vlc(bc, c->dc_vlc[is_chroma].table, 9, 3); if (dc < 0) return AVERROR_INVALIDDATA; if (dc) -dc = get_xbits(gb, dc); +dc = bitstream_read_xbits(bc, dc); dc= dc * qmat[0] + c->prev_dc[plane]; block[0] = dc; c->prev_dc[plane] = dc; pos = 0; while (pos < 63) { -val = get_vlc2(gb, c->ac_vlc[is_chroma].table, 9, 3); +val = bitstream_read_vlc(bc, c->ac_vlc[is_chroma].table, 9, 3); if (val < 0) return AVERROR_INVALIDDATA; pos += val >> 4; @@ -265,7 +265,7 @@ static int jpg_decode_block(JPGContext *c, GetBitContext *gb, if (val) { int nbits = val; -val = get_xbits(gb, nbits); +val = bitstream_read_xbits(bc, nbits); val*= qmat[ff_zigzag_direct[pos]]; block[c->scantable.permutated[pos]] = val; } @@ -286,7 +286,7 @@ static int jpg_decode_data(JPGContext *c, int width, int height, const uint8_t *mask, int mask_stride, int num_mbs, int swapuv) { -GetBitContext gb; +BitstreamContext bc; int mb_w, mb_h, mb_x, mb_y, i, j; int bx, by; int unesc_size; @@ -298,7 +298,7 @@ static int jpg_decode_data(JPGContext *c, int width, int height, return ret; jpg_unescape(src, src_size, c->buf, &unesc_size); memset(c->buf + unesc_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); -init_get_bits(&gb, c->buf, unesc_size * 8); +bitstream_init(&bc, c->buf, unesc_size * 8); width = FFALIGN(width, 16); mb_w = width>> 4; @@ -325,14 +325,14 @@ static int jpg_decode_data(JPGContext *c, int width, int height, if (mask && !mask[mb_x * 2 + i + j * mask_stride]) continue; num_mbs--; -if ((ret = jpg_decode_block(c, &gb, 0, +if ((ret = jpg_decode_block(c, &bc, 0, c->block[i + j * 2])) != 0) return ret; c->idsp.idct(c->block[i + j * 2]); } } for (i = 1; i < 3; i++) { -if ((ret = jpg_decode_block(c, &gb, i, c->block[i + 3])) != 0) +if ((ret = jpg_decode_block(c, &bc, i, c->block[i + 3])) != 0) return ret; c->idsp.idct(c->block[i + 3]); } @@ -1011,11 +1011,11 @@ static void kempf_restore_buf(const uint8_t *src, int len, int width, int height, const uint8_t *pal, int npal, int tidx) { -GetBitContext gb; +BitstreamContext bc; int i, j, nb, col; int align_width = FFALIGN(width, 16); -init_get_bits(&gb, src, len * 8); +bitstream_init(&bc, src, len * 8); if (npal <= 2) nb = 1; else if (npal <= 4) nb = 2; @@ -1023,16 +1023,16 @@ static void kempf_restore_buf(const uint8_t *src, int len, else nb = 8; for (j = 0; j < height; j++, dst += stride, jpeg_tile += tile_stride) { -if (get_bits(&gb, 8)) +if (bitstre
[FFmpeg-cvslog] hq_hqa: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 12:00:56 2016 +0200| [c5e01d91702b082ac1b5c2101f1d84dd5017e4ad] | committer: Anton Khirnov hq_hqa: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c5e01d91702b082ac1b5c2101f1d84dd5017e4ad --- libavcodec/hq_hqa.c | 48 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c index 98bd596..0d03e59 100644 --- a/libavcodec/hq_hqa.c +++ b/libavcodec/hq_hqa.c @@ -24,8 +24,8 @@ #include "libavutil/intreadwrite.h" #include "avcodec.h" +#include "bitstream.h" #include "canopus.h" -#include "get_bits.h" #include "internal.h" #include "hq_hqa.h" @@ -59,7 +59,7 @@ static inline void put_blocks(HQContext *c, AVFrame *pic, pic->linesize[plane] << ilace, block1); } -static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64], +static int hq_decode_block(HQContext *c, BitstreamContext *bc, int16_t block[64], int qsel, int is_chroma, int is_hqa) { const int32_t *q; @@ -68,15 +68,15 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64], memset(block, 0, 64 * sizeof(*block)); if (!is_hqa) { -block[0] = get_sbits(gb, 9) << 6; -q = ff_hq_quants[qsel][is_chroma][get_bits(gb, 2)]; +block[0] = bitstream_read_signed(bc, 9) << 6; +q = ff_hq_quants[qsel][is_chroma][bitstream_read(bc, 2)]; } else { -q = ff_hq_quants[qsel][is_chroma][get_bits(gb, 2)]; -block[0] = get_sbits(gb, 9) << 6; +q = ff_hq_quants[qsel][is_chroma][bitstream_read(bc, 2)]; +block[0] = bitstream_read_signed(bc, 9) << 6; } for (;;) { -val = get_vlc2(gb, c->hq_ac_vlc.table, 9, 2); +val = bitstream_read_vlc(bc, c->hq_ac_vlc.table, 9, 2); if (val < 0) return AVERROR_INVALIDDATA; @@ -91,16 +91,16 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64], } static int hq_decode_mb(HQContext *c, AVFrame *pic, -GetBitContext *gb, int x, int y) +BitstreamContext *bc, int x, int y) { int qgroup, flag; int i, ret; -qgroup = get_bits(gb, 4); -flag = get_bits1(gb); +qgroup = bitstream_read(bc, 4); +flag = bitstream_read_bit(bc); for (i = 0; i < 8; i++) { -ret = hq_decode_block(c, gb, c->block[i], qgroup, i >= 4, 0); +ret = hq_decode_block(c, bc, c->block[i], qgroup, i >= 4, 0); if (ret < 0) return ret; } @@ -117,7 +117,7 @@ static int hq_decode_frame(HQContext *ctx, AVFrame *pic, int prof_num, size_t data_size) { const HQProfile *profile; -GetBitContext gb; +BitstreamContext bc; const uint8_t *perm, *src = ctx->gbc.buffer; uint32_t slice_off[21]; int slice, start_off, next_off, i, ret; @@ -160,11 +160,11 @@ static int hq_decode_frame(HQContext *ctx, AVFrame *pic, "Invalid slice size %zu.\n", data_size); break; } -init_get_bits(&gb, src + slice_off[slice], - (slice_off[slice + 1] - slice_off[slice]) * 8); +bitstream_init(&bc, src + slice_off[slice], + (slice_off[slice + 1] - slice_off[slice]) * 8); for (i = 0; i < (next_off - start_off) * profile->tab_w; i++) { -ret = hq_decode_mb(ctx, pic, &gb, perm[0] * 16, perm[1] * 16); +ret = hq_decode_mb(ctx, pic, &bc, perm[0] * 16, perm[1] * 16); if (ret < 0) { av_log(ctx->avctx, AV_LOG_ERROR, "Error decoding macroblock %d at slice %d.\n", i, slice); @@ -178,12 +178,12 @@ static int hq_decode_frame(HQContext *ctx, AVFrame *pic, } static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup, - GetBitContext *gb, int x, int y) + BitstreamContext *bc, int x, int y) { int flag = 0; int i, ret, cbp; -cbp = get_vlc2(gb, c->hqa_cbp_vlc.table, 5, 1); +cbp = bitstream_read_vlc(bc, c->hqa_cbp_vlc.table, 5, 1); for (i = 0; i < 12; i++) memset(c->block[i], 0, sizeof(*c->block)); @@ -191,7 +191,7 @@ static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup, c->block[i][0] = -128 * (1 << 6); if (cbp) { -flag = get_bits1(gb); +flag = bitstream_read_bit(bc); cbp |= cbp << 4; if (cbp & 0x3) @@ -201,7 +201,7 @@ static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup, for (i = 0; i <
[FFmpeg-cvslog] 4xm: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 7 12:32:52 2016 +0200| [ed006ae4e2534084552a791a6fe9ebce1fa27a23] | committer: Anton Khirnov 4xm: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ed006ae4e2534084552a791a6fe9ebce1fa27a23 --- libavcodec/4xm.c | 27 ++- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c index b2d4db2..ee9d020 100644 --- a/libavcodec/4xm.c +++ b/libavcodec/4xm.c @@ -29,11 +29,12 @@ #include "libavutil/frame.h" #include "libavutil/imgutils.h" #include "libavutil/intreadwrite.h" + #include "avcodec.h" +#include "bitstream.h" #include "blockdsp.h" #include "bswapdsp.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #define BLOCK_TYPE_VLC_BITS 5 @@ -136,8 +137,8 @@ typedef struct FourXContext { BswapDSPContext bbdsp; uint16_t *frame_buffer; uint16_t *last_frame_buffer; -GetBitContext pre_gb; ///< ac/dc prefix -GetBitContext gb; +BitstreamContext pre_bc;// ac/dc prefix +BitstreamContext bc; GetByteContext g; GetByteContext g2; int mv[256]; @@ -352,8 +353,8 @@ static int decode_p_block(FourXContext *f, uint16_t *dst, uint16_t *src, return AVERROR_INVALIDDATA; h = 1 << log2h; -code = get_vlc2(&f->gb, block_type_vlc[1 - (f->version > 1)][index].table, - BLOCK_TYPE_VLC_BITS, 1); +code = bitstream_read_vlc(&f->bc, block_type_vlc[1 - (f->version > 1)][index].table, + BLOCK_TYPE_VLC_BITS, 1); if (code < 0 || code > 6) return AVERROR_INVALIDDATA; @@ -453,7 +454,7 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length) bitstream_size / 4); memset((uint8_t*)f->bitstream_buffer + bitstream_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); -init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size); +bitstream_init(&f->bc, f->bitstream_buffer, 8 * bitstream_size); wordstream_offset = extra + bitstream_size; bytestream_offset = extra + bitstream_size + wordstream_size; @@ -484,19 +485,19 @@ static int decode_i_block(FourXContext *f, int16_t *block) int code, i, j, level, val; /* DC coef */ -val = get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3); +val = bitstream_read_vlc(&f->pre_bc, f->pre_vlc.table, ACDC_VLC_BITS, 3); if (val >> 4) av_log(f->avctx, AV_LOG_ERROR, "error dc run != 0\n"); if (val) -val = get_xbits(&f->gb, val); +val = bitstream_read_xbits(&f->bc, val); val= val * dequant_table[0] + f->last_dc; f->last_dc = block[0] = val; /* AC coefs */ i = 1; for (;;) { -code = get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3); +code = bitstream_read_vlc(&f->pre_bc, f->pre_vlc.table, ACDC_VLC_BITS, 3); /* EOB */ if (code == 0) @@ -504,7 +505,7 @@ static int decode_i_block(FourXContext *f, int16_t *block) if (code == 0xf0) { i += 16; } else { -level = get_xbits(&f->gb, code & 0xf); +level = bitstream_read_xbits(&f->bc, code & 0xf); i+= code >> 4; if (i >= 64) { av_log(f->avctx, AV_LOG_ERROR, "run %d oveflow\n", i); @@ -764,7 +765,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length) return AVERROR_INVALIDDATA; } -init_get_bits(&f->gb, buf + 4, 8 * bitstream_size); +bitstream_init(&f->bc, buf + 4, 8 * bitstream_size); prestream_size = length + buf - prestream; @@ -776,7 +777,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length) prestream_size / 4); memset((uint8_t*)f->bitstream_buffer + prestream_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); -init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size); +bitstream_init(&f->pre_bc, f->bitstream_buffer, 8 * prestream_size); f->last_dc = 0 * 128 * 8 * 8; @@ -789,7 +790,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length) } } -if (get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3) != 256) +if (bitstream_read_vlc(&f->pre_bc, f->pre_vlc.table, ACDC_VLC_BITS, 3) != 256) av_log(f->avctx, AV_LOG_ERROR, "end mismatch\n"); return 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] g72x: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Mon Apr 18 10:38:43 2016 +0200| [2188d53906015ea5dd5b2e446f8e5374beacbffe] | committer: Anton Khirnov g72x: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2188d53906015ea5dd5b2e446f8e5374beacbffe --- libavcodec/g722dec.c | 13 - libavcodec/g723_1dec.c | 72 +- libavcodec/g726.c | 11 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/libavcodec/g722dec.c b/libavcodec/g722dec.c index c4c0ec8..bfd4b42 100644 --- a/libavcodec/g722dec.c +++ b/libavcodec/g722dec.c @@ -36,8 +36,9 @@ #include "libavutil/channel_layout.h" #include "libavutil/opt.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "g722.h" #include "internal.h" @@ -92,7 +93,7 @@ static int g722_decode_frame(AVCodecContext *avctx, void *data, int j, ret; const int skip = 8 - c->bits_per_codeword; const int16_t *quantizer_table = low_inv_quants[skip]; -GetBitContext gb; +BitstreamContext bc; /* get output buffer */ frame->nb_samples = avpkt->size * 2; @@ -102,15 +103,15 @@ static int g722_decode_frame(AVCodecContext *avctx, void *data, } out_buf = (int16_t *)frame->data[0]; -init_get_bits(&gb, avpkt->data, avpkt->size * 8); +bitstream_init(&bc, avpkt->data, avpkt->size * 8); for (j = 0; j < avpkt->size; j++) { int ilow, ihigh, rlow, rhigh, dhigh; int xout[2]; -ihigh = get_bits(&gb, 2); -ilow = get_bits(&gb, 6 - skip); -skip_bits(&gb, skip); +ihigh = bitstream_read(&bc, 2); +ilow = bitstream_read(&bc, 6 - skip); +bitstream_skip(&bc, skip); rlow = av_clip_intp2((c->band[0].scale_factor * quantizer_table[ilow] >> 10) + c->band[0].s_predictor, 14); diff --git a/libavcodec/g723_1dec.c b/libavcodec/g723_1dec.c index f50bed1..2ea3bbf 100644 --- a/libavcodec/g723_1dec.c +++ b/libavcodec/g723_1dec.c @@ -32,8 +32,8 @@ #define BITSTREAM_READER_LE #include "acelp_vectors.h" #include "avcodec.h" +#include "bitstream.h" #include "celp_filters.h" -#include "get_bits.h" #include "internal.h" #include "g723_1.h" @@ -68,14 +68,14 @@ static av_cold int g723_1_decode_init(AVCodecContext *avctx) static int unpack_bitstream(G723_1_Context *p, const uint8_t *buf, int buf_size) { -GetBitContext gb; +BitstreamContext bc; int ad_cb_len; int temp, info_bits, i; -init_get_bits(&gb, buf, buf_size * 8); +bitstream_init(&bc, buf, buf_size * 8); /* Extract frame type and rate info */ -info_bits = get_bits(&gb, 2); +info_bits = bitstream_read(&bc, 2); if (info_bits == 3) { p->cur_frame_type = UNTRANSMITTED_FRAME; @@ -83,13 +83,13 @@ static int unpack_bitstream(G723_1_Context *p, const uint8_t *buf, } /* Extract 24 bit lsp indices, 8 bit for each band */ -p->lsp_index[2] = get_bits(&gb, 8); -p->lsp_index[1] = get_bits(&gb, 8); -p->lsp_index[0] = get_bits(&gb, 8); +p->lsp_index[2] = bitstream_read(&bc, 8); +p->lsp_index[1] = bitstream_read(&bc, 8); +p->lsp_index[0] = bitstream_read(&bc, 8); if (info_bits == 2) { p->cur_frame_type = SID_FRAME; -p->subframe[0].amp_index = get_bits(&gb, 6); +p->subframe[0].amp_index = bitstream_read(&bc, 6); return 0; } @@ -97,23 +97,23 @@ static int unpack_bitstream(G723_1_Context *p, const uint8_t *buf, p->cur_rate = info_bits ? RATE_5300 : RATE_6300; p->cur_frame_type = ACTIVE_FRAME; -p->pitch_lag[0] = get_bits(&gb, 7); +p->pitch_lag[0] = bitstream_read(&bc, 7); if (p->pitch_lag[0] > 123) /* test if forbidden code */ return -1; p->pitch_lag[0] += PITCH_MIN; -p->subframe[1].ad_cb_lag = get_bits(&gb, 2); +p->subframe[1].ad_cb_lag = bitstream_read(&bc, 2); -p->pitch_lag[1] = get_bits(&gb, 7); +p->pitch_lag[1] = bitstream_read(&bc, 7); if (p->pitch_lag[1] > 123) return -1; p->pitch_lag[1] += PITCH_MIN; -p->subframe[3].ad_cb_lag = get_bits(&gb, 2); +p->subframe[3].ad_cb_lag = bitstream_read(&bc, 2); p->subframe[0].ad_cb_lag = 1; p->subframe[2].ad_cb_lag = 1; for (i = 0; i < SUBFRAMES; i++) { /* Extract combined gain */ -temp = get_bits(&gb, 12); +temp = bitstream_read(&bc, 12); ad_cb_len = 170; p->subframe[i].
[FFmpeg-cvslog] flashsv: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 11:08:09 2016 +0200| [692ba4fe6445581cee4d414ee29538f1dce7fd8e] | committer: Anton Khirnov flashsv: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=692ba4fe6445581cee4d414ee29538f1dce7fd8e --- libavcodec/flashsv.c | 57 ++-- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c index 2cf8f3f..20fa7bc 100644 --- a/libavcodec/flashsv.c +++ b/libavcodec/flashsv.c @@ -38,9 +38,10 @@ #include #include "libavutil/intreadwrite.h" + #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" typedef struct BlockInfo { @@ -175,7 +176,7 @@ static int flashsv2_prime(FlashSVContext *s, uint8_t *src, int size) } static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, -GetBitContext *gb, int block_size, +BitstreamContext *bc, int block_size, int width, int height, int x_pos, int y_pos, int blk_idx) { @@ -194,7 +195,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, if (ret < 0) return ret; } -s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8; +s->zstream.next_in = avpkt->data + bitstream_tell(bc) / 8; s->zstream.avail_in = block_size; s->zstream.next_out = s->tmpblock; s->zstream.avail_out = s->block_size * 3; @@ -210,7 +211,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, } if (s->is_keyframe) { -s->blocks[blk_idx].pos = s->keyframedata + (get_bits_count(gb) / 8); +s->blocks[blk_idx].pos = s->keyframedata + (bitstream_tell(bc) / 8); s->blocks[blk_idx].size = block_size; } @@ -233,7 +234,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, x_pos, s->diff_height, width, s->frame->linesize[0], s->pal); } -skip_bits_long(gb, 8 * block_size); /* skip the consumed bits */ +bitstream_skip(bc, 8 * block_size); /* skip the consumed bits */ return 0; } @@ -259,7 +260,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int buf_size = avpkt->size; FlashSVContext *s = avctx->priv_data; int h_blocks, v_blocks, h_part, v_part, i, j, ret; -GetBitContext gb; +BitstreamContext bc; /* no supplementary picture */ if (buf_size == 0) @@ -267,21 +268,21 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, if (buf_size < 4) return -1; -init_get_bits(&gb, avpkt->data, buf_size * 8); +bitstream_init(&bc, avpkt->data, buf_size * 8); /* start to parse the bitstream */ -s->block_width = 16 * (get_bits(&gb, 4) + 1); -s->image_width = get_bits(&gb, 12); -s->block_height = 16 * (get_bits(&gb, 4) + 1); -s->image_height = get_bits(&gb, 12); +s->block_width = 16 * (bitstream_read(&bc, 4) + 1); +s->image_width = bitstream_read(&bc, 12); +s->block_height = 16 * (bitstream_read(&bc, 4) + 1); +s->image_height = bitstream_read(&bc, 12); if (s->ver == 2) { -skip_bits(&gb, 6); -if (get_bits1(&gb)) { +bitstream_skip(&bc, 6); +if (bitstream_read_bit(&bc)) { avpriv_request_sample(avctx, "iframe"); return AVERROR_PATCHWELCOME; } -if (get_bits1(&gb)) { +if (bitstream_read_bit(&bc)) { avpriv_request_sample(avctx, "Custom palette"); return AVERROR_PATCHWELCOME; } @@ -371,7 +372,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int has_diff = 0; /* get the size of the compressed zlib chunk */ -int size = get_bits(&gb, 16); +int size = bitstream_read(&bc, 16); s->color_depth= 0; s->zlibprime_curr = 0; @@ -379,17 +380,17 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, s->diff_start = 0; s->diff_height= cur_blk_height; -if (8 * size > get_bits_left(&gb)) { +if (8 * size > bitstream_bits_left(&bc)) { av_frame_unref(s->frame); return AVERROR_INVALIDDATA; } if (s->ver == 2 && size) { -skip_bits(&gb, 3); -s->color_depth=
[FFmpeg-cvslog] jvdec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 17:24:55 2016 +0200| [15d4dbfd4ade51eb55737f33236f142f88206d1e] | committer: Anton Khirnov jvdec: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=15d4dbfd4ade51eb55737f33236f142f88206d1e --- libavcodec/jvdec.c | 52 ++-- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/libavcodec/jvdec.c b/libavcodec/jvdec.c index c532b75..37a2770 100644 --- a/libavcodec/jvdec.c +++ b/libavcodec/jvdec.c @@ -28,8 +28,8 @@ #include "libavutil/intreadwrite.h" #include "avcodec.h" +#include "bitstream.h" #include "blockdsp.h" -#include "get_bits.h" #include "internal.h" typedef struct JvContext { @@ -62,84 +62,84 @@ static av_cold int decode_init(AVCodecContext *avctx) /** * Decode 2x2 block */ -static inline void decode2x2(GetBitContext *gb, uint8_t *dst, int linesize) +static inline void decode2x2(BitstreamContext *bc, uint8_t *dst, int linesize) { int i, j, v[2]; -switch (get_bits(gb, 2)) { +switch (bitstream_read(bc, 2)) { case 1: -v[0] = get_bits(gb, 8); +v[0] = bitstream_read(bc, 8); for (j = 0; j < 2; j++) memset(dst + j * linesize, v[0], 2); break; case 2: -v[0] = get_bits(gb, 8); -v[1] = get_bits(gb, 8); +v[0] = bitstream_read(bc, 8); +v[1] = bitstream_read(bc, 8); for (j = 0; j < 2; j++) for (i = 0; i < 2; i++) -dst[j * linesize + i] = v[get_bits1(gb)]; +dst[j * linesize + i] = v[bitstream_read_bit(bc)]; break; case 3: for (j = 0; j < 2; j++) for (i = 0; i < 2; i++) -dst[j * linesize + i] = get_bits(gb, 8); +dst[j * linesize + i] = bitstream_read(bc, 8); } } /** * Decode 4x4 block */ -static inline void decode4x4(GetBitContext *gb, uint8_t *dst, int linesize) +static inline void decode4x4(BitstreamContext *bc, uint8_t *dst, int linesize) { int i, j, v[2]; -switch (get_bits(gb, 2)) { +switch (bitstream_read(bc, 2)) { case 1: -v[0] = get_bits(gb, 8); +v[0] = bitstream_read(bc, 8); for (j = 0; j < 4; j++) memset(dst + j * linesize, v[0], 4); break; case 2: -v[0] = get_bits(gb, 8); -v[1] = get_bits(gb, 8); +v[0] = bitstream_read(bc, 8); +v[1] = bitstream_read(bc, 8); for (j = 2; j >= 0; j -= 2) { for (i = 0; i < 4; i++) -dst[j * linesize + i] = v[get_bits1(gb)]; +dst[j * linesize + i] = v[bitstream_read_bit(bc)]; for (i = 0; i < 4; i++) -dst[(j + 1) * linesize + i] = v[get_bits1(gb)]; +dst[(j + 1) * linesize + i] = v[bitstream_read_bit(bc)]; } break; case 3: for (j = 0; j < 4; j += 2) for (i = 0; i < 4; i += 2) -decode2x2(gb, dst + j * linesize + i, linesize); +decode2x2(bc, dst + j * linesize + i, linesize); } } /** * Decode 8x8 block */ -static inline void decode8x8(GetBitContext *gb, uint8_t *dst, int linesize, +static inline void decode8x8(BitstreamContext *bc, uint8_t *dst, int linesize, BlockDSPContext *bdsp) { int i, j, v[2]; -switch (get_bits(gb, 2)) { +switch (bitstream_read(bc, 2)) { case 1: -v[0] = get_bits(gb, 8); +v[0] = bitstream_read(bc, 8); bdsp->fill_block_tab[1](dst, v[0], linesize, 8); break; case 2: -v[0] = get_bits(gb, 8); -v[1] = get_bits(gb, 8); +v[0] = bitstream_read(bc, 8); +v[1] = bitstream_read(bc, 8); for (j = 7; j >= 0; j--) for (i = 0; i < 8; i++) -dst[j * linesize + i] = v[get_bits1(gb)]; +dst[j * linesize + i] = v[bitstream_read_bit(bc)]; break; case 3: for (j = 0; j < 8; j += 4) for (i = 0; i < 8; i += 4) -decode4x4(gb, dst + j * linesize + i, linesize); +decode4x4(bc, dst + j * linesize + i, linesize); } } @@ -163,12 +163,12 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, } if (video_type == 0 || video_type == 1) { -GetBitContext gb; -init_get_bits(&gb, buf, 8 * FFMIN(video_size, buf_end - buf)); +BitstreamContext bc; +bitstream_init(&bc, buf, 8 * FFMIN(video_size, buf_end - buf)); for (j = 0; j < avctx->height; j += 8) for (i = 0; i < avctx->width; i += 8) -decode8x8(&gb, +decode8x8(&bc,
[FFmpeg-cvslog] on2avc: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Mon Mar 21 20:46:58 2016 +0100| [b25180801bd0a544e5c49efb92dbe78904289a8a] | committer: Anton Khirnov on2avc: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b25180801bd0a544e5c49efb92dbe78904289a8a --- libavcodec/on2avc.c | 64 +++-- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c index 2a528c6..1b81980 100644 --- a/libavcodec/on2avc.c +++ b/libavcodec/on2avc.c @@ -22,11 +22,13 @@ #include "libavutil/channel_layout.h" #include "libavutil/float_dsp.h" + #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" #include "fft.h" -#include "get_bits.h" #include "internal.h" +#include "vlc.h" #include "on2avcdata.h" @@ -84,11 +86,11 @@ typedef struct On2AVCContext { DECLARE_ALIGNED(32, float, short_win)[ON2AVC_SUBFRAME_SIZE / 8]; } On2AVCContext; -static void on2avc_read_ms_info(On2AVCContext *c, GetBitContext *gb) +static void on2avc_read_ms_info(On2AVCContext *c, BitstreamContext *bc) { int w, b, band_off = 0; -c->ms_present = get_bits1(gb); +c->ms_present = bitstream_read_bit(bc); if (!c->ms_present) return; for (w = 0; w < c->num_windows; w++) { @@ -100,12 +102,12 @@ static void on2avc_read_ms_info(On2AVCContext *c, GetBitContext *gb) continue; } for (b = 0; b < c->num_bands; b++) -c->ms_info[band_off++] = get_bits1(gb); +c->ms_info[band_off++] = bitstream_read_bit(bc); } } // do not see Table 17 in ISO/IEC 13818-7 -static int on2avc_decode_band_types(On2AVCContext *c, GetBitContext *gb) +static int on2avc_decode_band_types(On2AVCContext *c, BitstreamContext *bc) { int bits_per_sect = c->is_long ? 5 : 3; int esc_val = (1 << bits_per_sect) - 1; @@ -113,10 +115,10 @@ static int on2avc_decode_band_types(On2AVCContext *c, GetBitContext *gb) int band = 0, i, band_type, run_len, run; while (band < num_bands) { -band_type = get_bits(gb, 4); +band_type = bitstream_read(bc, 4); run_len = 1; do { -run = get_bits(gb, bits_per_sect); +run = bitstream_read(bc, bits_per_sect); run_len += run; } while (run == esc_val); if (band + run_len > num_bands) { @@ -135,7 +137,7 @@ static int on2avc_decode_band_types(On2AVCContext *c, GetBitContext *gb) // completely not like Table 18 in ISO/IEC 13818-7 // (no intensity stereo, different coding for the first coefficient) -static int on2avc_decode_band_scales(On2AVCContext *c, GetBitContext *gb) +static int on2avc_decode_band_scales(On2AVCContext *c, BitstreamContext *bc) { int w, w2, b, scale, first = 1; int band_off = 0; @@ -165,10 +167,10 @@ static int on2avc_decode_band_scales(On2AVCContext *c, GetBitContext *gb) } } if (first) { -scale = get_bits(gb, 7); +scale = bitstream_read(bc, 7); first = 0; } else { -scale += get_vlc2(gb, c->scale_diff.table, 9, 3) - 60; +scale += bitstream_read_vlc(bc, c->scale_diff.table, 9, 3) - 60; } if (scale < 0 || scale > 127) { av_log(c->avctx, AV_LOG_ERROR, "Invalid scale value %d\n", @@ -188,13 +190,13 @@ static inline float on2avc_scale(int v, float scale) } // spectral data is coded completely differently - there are no unsigned codebooks -static int on2avc_decode_quads(On2AVCContext *c, GetBitContext *gb, float *dst, +static int on2avc_decode_quads(On2AVCContext *c, BitstreamContext *bc, float *dst, int dst_size, int type, float band_scale) { int i, j, val, val1; for (i = 0; i < dst_size; i += 4) { -val = get_vlc2(gb, c->cb_vlc[type].table, 9, 3); +val = bitstream_read_vlc(bc, c->cb_vlc[type].table, 9, 3); for (j = 0; j < 4; j++) { val1 = sign_extend((val >> (12 - j * 4)) & 0xF, 4); @@ -205,11 +207,11 @@ static int on2avc_decode_quads(On2AVCContext *c, GetBitContext *gb, float *dst, return 0; } -static inline int get_egolomb(GetBitContext *gb) +static inline int get_egolomb(BitstreamContext *bc) { int v = 4; -while (get_bits1(gb)) { +while (bitstream_read_bit(bc)) { v++; if (v > 30) { av_log(NULL, AV_LOG_WARNING, "Too large golomb code in get_egolomb.\n"); @@ -218,27 +220,27 @@ static inline int get_egolomb(GetBitContext *gb) } } -return (1 << v) + get_bits_long(gb, v); +
[FFmpeg-cvslog] gsm: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 11:34:09 2016 +0200| [b2c56301f9458207cfd16c66dc2f3ce15a336651] | committer: Anton Khirnov gsm: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b2c56301f9458207cfd16c66dc2f3ce15a336651 --- libavcodec/gsmdec.c | 11 ++- libavcodec/gsmdec_template.c | 34 +- libavcodec/msgsmdec.c| 9 + 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/libavcodec/gsmdec.c b/libavcodec/gsmdec.c index a333e58..d727cf9 100644 --- a/libavcodec/gsmdec.c +++ b/libavcodec/gsmdec.c @@ -25,8 +25,9 @@ */ #include "libavutil/channel_layout.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "msgsmdec.h" @@ -67,7 +68,7 @@ static int gsm_decode_frame(AVCodecContext *avctx, void *data, { AVFrame *frame = data; int res; -GetBitContext gb; +BitstreamContext bc; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; int16_t *samples; @@ -87,10 +88,10 @@ static int gsm_decode_frame(AVCodecContext *avctx, void *data, switch (avctx->codec_id) { case AV_CODEC_ID_GSM: -init_get_bits(&gb, buf, buf_size * 8); -if (get_bits(&gb, 4) != 0xd) +bitstream_init(&bc, buf, buf_size * 8); +if (bitstream_read(&bc, 4) != 0xd) av_log(avctx, AV_LOG_WARNING, "Missing GSM magic!\n"); -res = gsm_decode_block(avctx, samples, &gb, GSM_13000); +res = gsm_decode_block(avctx, samples, &bc, GSM_13000); if (res < 0) return res; break; diff --git a/libavcodec/gsmdec_template.c b/libavcodec/gsmdec_template.c index 2794bd1..7437908 100644 --- a/libavcodec/gsmdec_template.c +++ b/libavcodec/gsmdec_template.c @@ -24,17 +24,17 @@ * GSM decoder */ -#include "get_bits.h" +#include "bitstream.h" #include "gsm.h" #include "gsmdec_data.h" -static void apcm_dequant_add(GetBitContext *gb, int16_t *dst, const int *frame_bits) +static void apcm_dequant_add(BitstreamContext *bc, int16_t *dst, const int *frame_bits) { int i, val; -int maxidx = get_bits(gb, 6); +int maxidx = bitstream_read(bc, 6); const int16_t *tab = ff_gsm_dequant_tab[maxidx]; for (i = 0; i < 13; i++) { -val = get_bits(gb, frame_bits[i]); +val = bitstream_read(bc, frame_bits[i]); dst[3 * i] += tab[ff_gsm_requant_tab[frame_bits[i]][val]]; } } @@ -120,28 +120,28 @@ static int postprocess(int16_t *data, int msr) } static int gsm_decode_block(AVCodecContext *avctx, int16_t *samples, -GetBitContext *gb, int mode) +BitstreamContext *bc, int mode) { GSMContext *ctx = avctx->priv_data; int i; int16_t *ref_dst = ctx->ref_buf + 120; int *lar = ctx->lar[ctx->lar_idx]; -lar[0] = decode_log_area(get_bits(gb, 6), 13107, 1 << 15); -lar[1] = decode_log_area(get_bits(gb, 6), 13107, 1 << 15); -lar[2] = decode_log_area(get_bits(gb, 5), 13107, (1 << 14) + 2048*2); -lar[3] = decode_log_area(get_bits(gb, 5), 13107, (1 << 14) - 2560*2); -lar[4] = decode_log_area(get_bits(gb, 4), 19223, (1 << 13) + 94*2); -lar[5] = decode_log_area(get_bits(gb, 4), 17476, (1 << 13) - 1792*2); -lar[6] = decode_log_area(get_bits(gb, 3), 31454, (1 << 12) - 341*2); -lar[7] = decode_log_area(get_bits(gb, 3), 29708, (1 << 12) - 1144*2); +lar[0] = decode_log_area(bitstream_read(bc, 6), 13107, 1 << 15); +lar[1] = decode_log_area(bitstream_read(bc, 6), 13107, 1 << 15); +lar[2] = decode_log_area(bitstream_read(bc, 5), 13107, (1 << 14) + 2048 * 2); +lar[3] = decode_log_area(bitstream_read(bc, 5), 13107, (1 << 14) - 2560 * 2); +lar[4] = decode_log_area(bitstream_read(bc, 4), 19223, (1 << 13) + 94 * 2); +lar[5] = decode_log_area(bitstream_read(bc, 4), 17476, (1 << 13) - 1792 * 2); +lar[6] = decode_log_area(bitstream_read(bc, 3), 31454, (1 << 12) - 341 * 2); +lar[7] = decode_log_area(bitstream_read(bc, 3), 29708, (1 << 12) - 1144 * 2); for (i = 0; i < 4; i++) { -int lag = get_bits(gb, 7); -int gain_idx = get_bits(gb, 2); -int offset = get_bits(gb, 2); +int lag = bitstream_read(bc, 7); +int gain_idx = bitstream_read(bc, 2); +int offset = bitstream_read(bc, 2); lag = av_clip(lag, 40, 120); long_term_synth(ref_dst, lag, gain_idx); -apcm_dequant_add(gb, ref_dst + offset, ff_gsm_apcm_bits[mode][i]); +apcm_dequant_add(bc, ref_dst + offset, ff_gsm_apcm_bits[mode][i]);
[FFmpeg-cvslog] opus: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 18:28:14 2016 +0200| [b3441350fadee0703eb935262c77dfb5c6269c38] | committer: Anton Khirnov opus: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b3441350fadee0703eb935262c77dfb5c6269c38 --- libavcodec/opus.h| 6 +++--- libavcodec/opusdec.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/opus.h b/libavcodec/opus.h index 55c91fa..fbf67c9 100644 --- a/libavcodec/opus.h +++ b/libavcodec/opus.h @@ -32,7 +32,7 @@ #include "libavresample/avresample.h" #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #define MAX_FRAME_SIZE 1275 #define MAX_FRAMES 48 @@ -92,7 +92,7 @@ typedef struct RawBitsContext { } RawBitsContext; typedef struct OpusRangeCoder { -GetBitContext gb; +BitstreamContext bc; RawBitsContext rb; unsigned int range; unsigned int value; @@ -196,7 +196,7 @@ typedef struct OpusContext { static av_always_inline void opus_rc_normalize(OpusRangeCoder *rc) { while (rc->range <= 1<<23) { -rc->value = ((rc->value << 8) | (get_bits(&rc->gb, 8) ^ 0xFF)) & ((1u << 31) - 1); +rc->value = ((rc->value << 8) | (bitstream_read(&rc->bc, 8) ^ 0xFF)) & ((1u << 31) - 1); rc->range <<= 8; rc->total_read_bits += 8; } diff --git a/libavcodec/opusdec.c b/libavcodec/opusdec.c index 92e651c..163f0d5 100644 --- a/libavcodec/opusdec.c +++ b/libavcodec/opusdec.c @@ -43,9 +43,9 @@ #include "libavresample/avresample.h" #include "avcodec.h" +#include "bitstream.h" #include "celp_filters.h" #include "fft.h" -#include "get_bits.h" #include "internal.h" #include "mathops.h" #include "opus.h" @@ -80,12 +80,12 @@ static int get_silk_samplerate(int config) */ static int opus_rc_init(OpusRangeCoder *rc, const uint8_t *data, int size) { -int ret = init_get_bits8(&rc->gb, data, size); +int ret = bitstream_init8(&rc->bc, data, size); if (ret < 0) return ret; rc->range = 128; -rc->value = 127 - get_bits(&rc->gb, 7); +rc->value = 127 - bitstream_read(&rc->bc, 7); rc->total_read_bits = 9; opus_rc_normalize(rc); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] atrac3plus: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 14:47:04 2016 +0200| [edd4c19a781124cbdb3598f94ec3a0d9ff7058cd] | committer: Anton Khirnov atrac3plus: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=edd4c19a781124cbdb3598f94ec3a0d9ff7058cd --- libavcodec/atrac3plus.c| 525 +++-- libavcodec/atrac3plus.h| 7 +- libavcodec/atrac3plusdec.c | 15 +- 3 files changed, 275 insertions(+), 272 deletions(-) diff --git a/libavcodec/atrac3plus.c b/libavcodec/atrac3plus.c index 076fb84..2731a80 100644 --- a/libavcodec/atrac3plus.c +++ b/libavcodec/atrac3plus.c @@ -26,8 +26,9 @@ */ #include "libavutil/avassert.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "atrac3plus.h" #include "atrac3plus_data.h" @@ -212,20 +213,20 @@ av_cold void ff_atrac3p_init_vlcs(AVCodec *codec) /** * Decode number of coded quantization units. * - * @param[in] gbthe GetBit context + * @param[in] bcthe Bitstream context * @param[in,out] chan ptr to the channel parameters * @param[in,out] ctx ptr to the channel unit context * @param[in] avctx ptr to the AVCodecContext * @return result code: 0 = OK, otherwise - error code */ -static int num_coded_units(GetBitContext *gb, Atrac3pChanParams *chan, +static int num_coded_units(BitstreamContext *bc, Atrac3pChanParams *chan, Atrac3pChanUnitCtx *ctx, AVCodecContext *avctx) { -chan->fill_mode = get_bits(gb, 2); +chan->fill_mode = bitstream_read(bc, 2); if (!chan->fill_mode) { chan->num_coded_vals = ctx->num_quant_units; } else { -chan->num_coded_vals = get_bits(gb, 5); +chan->num_coded_vals = bitstream_read(bc, 5); if (chan->num_coded_vals > ctx->num_quant_units) { av_log(avctx, AV_LOG_ERROR, "Invalid number of transmitted units!\n"); @@ -233,7 +234,7 @@ static int num_coded_units(GetBitContext *gb, Atrac3pChanParams *chan, } if (chan->fill_mode == 3) -chan->split_point = get_bits(gb, 2) + (chan->ch_num << 1) + 1; +chan->split_point = bitstream_read(bc, 2) + (chan->ch_num << 1) + 1; } return 0; @@ -318,21 +319,21 @@ static inline void unpack_vq_shape(int start_val, const int8_t *shape_vec, } } -#define UNPACK_SF_VQ_SHAPE(gb, dst, num_vals)\ -start_val = get_bits((gb), 6); \ -unpack_vq_shape(start_val, &atrac3p_sf_shapes[get_bits((gb), 6)][0], \ +#define UNPACK_SF_VQ_SHAPE(bc, dst, num_vals) \ +start_val = bitstream_read((bc), 6); \ +unpack_vq_shape(start_val, &atrac3p_sf_shapes[bitstream_read((bc), 6)][0], \ (dst), (num_vals)) /** * Decode word length for each quantization unit of a channel. * - * @param[in] gbthe GetBit context + * @param[in] bcthe Bitstream context * @param[in,out] ctx ptr to the channel unit context * @param[in] ch_numchannel to process * @param[in] avctx ptr to the AVCodecContext * @return result code: 0 = OK, otherwise - error code */ -static int decode_channel_wordlen(GetBitContext *gb, Atrac3pChanUnitCtx *ctx, +static int decode_channel_wordlen(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx, int ch_num, AVCodecContext *avctx) { int i, weight_idx = 0, delta, diff, pos, delta_bits, min_val, flag, @@ -343,107 +344,107 @@ static int decode_channel_wordlen(GetBitContext *gb, Atrac3pChanUnitCtx *ctx, chan->fill_mode = 0; -switch (get_bits(gb, 2)) { /* switch according to coding mode */ +switch (bitstream_read(bc, 2)) { /* switch according to coding mode */ case 0: /* coded using constant number of bits */ for (i = 0; i < ctx->num_quant_units; i++) -chan->qu_wordlen[i] = get_bits(gb, 3); +chan->qu_wordlen[i] = bitstream_read(bc, 3); break; case 1: if (ch_num) { -if ((ret = num_coded_units(gb, chan, ctx, avctx)) < 0) +if ((ret = num_coded_units(bc, chan, ctx, avctx)) < 0) return ret; if (chan->num_coded_vals) { -vlc_tab = &wl_vlc_tabs[get_bits(gb, 2)]; +vlc_tab = &wl_vlc_tabs[bitstream_read(bc, 2)]; for (i = 0; i < chan->num_coded_vals; i++) { -delta = get_vlc2(gb, vlc_tab->table, vlc_tab->bits, 1); +delta = bitstream_read_vlc(bc, vlc_tab->
[FFmpeg-cvslog] avs: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 15:51:58 2016 +0200| [dae9b0b9c6dbe3349b6350fd02d60810660e7bf6] | committer: Anton Khirnov avs: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dae9b0b9c6dbe3349b6350fd02d60810660e7bf6 --- libavcodec/avs.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/avs.c b/libavcodec/avs.c index 0d127f8..bea01a2 100644 --- a/libavcodec/avs.c +++ b/libavcodec/avs.c @@ -20,7 +20,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" typedef struct AvsContext { @@ -57,7 +57,7 @@ avs_decode_frame(AVCodecContext * avctx, int i, j, x, y, stride, ret, vect_w = 3, vect_h = 3; AvsVideoSubType sub_type; AvsBlockType type; -GetBitContext change_map; +BitstreamContext change_map; if ((ret = ff_reget_buffer(avctx, p)) < 0) { av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n"); @@ -125,13 +125,13 @@ avs_decode_frame(AVCodecContext * avctx, int map_size = ((318 / vect_w + 7) / 8) * (198 / vect_h); if (buf_end - table < map_size) return AVERROR_INVALIDDATA; -init_get_bits(&change_map, table, map_size * 8); +bitstream_init(&change_map, table, map_size * 8); table += map_size; } for (y=0; y<198; y+=vect_h) { for (x=0; x<318; x+=vect_w) { -if (sub_type == AVS_I_FRAME || get_bits1(&change_map)) { +if (sub_type == AVS_I_FRAME || bitstream_read_bit(&change_map)) { if (buf_end - table < 1) return AVERROR_INVALIDDATA; vect = &buf[*table++ * (vect_w * vect_h)]; @@ -145,7 +145,7 @@ avs_decode_frame(AVCodecContext * avctx, } } if (sub_type != AVS_I_FRAME) -align_get_bits(&change_map); +bitstream_align(&change_map); } if ((ret = av_frame_ref(picture, p)) < 0) ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] nellymoser: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 18:24:27 2016 +0200| [6f94a64bd6ae14d592835369a954e1378b79d786] | committer: Anton Khirnov nellymoser: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6f94a64bd6ae14d592835369a954e1378b79d786 --- libavcodec/nellymoserdec.c | 16 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/nellymoserdec.c b/libavcodec/nellymoserdec.c index 355935f..390872c 100644 --- a/libavcodec/nellymoserdec.c +++ b/libavcodec/nellymoserdec.c @@ -38,8 +38,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "fft.h" -#include "get_bits.h" #include "internal.h" #include "nellymoser.h" #include "sinewin.h" @@ -48,7 +48,7 @@ typedef struct NellyMoserDecodeContext { AVCodecContext* avctx; AVLFG random_state; -GetBitContext gb; +BitstreamContext bc; float scale_bias; AVFloatDSPContext fdsp; FFTContext imdct_ctx; @@ -67,14 +67,14 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, int bits[NELLY_BUF_LEN]; unsigned char v; -init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8); +bitstream_init(&s->bc, block, NELLY_BLOCK_LEN * 8); bptr = buf; pptr = pows; -val = ff_nelly_init_table[get_bits(&s->gb, 6)]; +val = ff_nelly_init_table[bitstream_read(&s->bc, 6)]; for (i=0 ; i 0) -val += ff_nelly_delta_table[get_bits(&s->gb, 5)]; +val += ff_nelly_delta_table[bitstream_read(&s->bc, 5)]; pval = -pow(2, val/2048) * s->scale_bias; for (j = 0; j < ff_nelly_band_sizes_table[i]; j++) { *bptr++ = val; @@ -88,8 +88,8 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, for (i = 0; i < 2; i++) { aptr = audio + i * NELLY_BUF_LEN; -init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8); -skip_bits_long(&s->gb, NELLY_HEADER_BITS + i*NELLY_DETAIL_BITS); +bitstream_init(&s->bc, block, NELLY_BLOCK_LEN * 8); +bitstream_skip(&s->bc, NELLY_HEADER_BITS + i * NELLY_DETAIL_BITS); for (j = 0; j < NELLY_FILL_LEN; j++) { if (bits[j] <= 0) { @@ -97,7 +97,7 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, if (av_lfg_get(&s->random_state) & 1) aptr[j] *= -1.0; } else { -v = get_bits(&s->gb, bits[j]); +v = bitstream_read(&s->bc, bits[j]); aptr[j] = ff_nelly_dequantization_table[(1<http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] adpcm: Convert to the new bitstream header
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 7 21:38:52 2016 +0200| [012c4511539f9f8e252c49d08c7e528973a22193] | committer: Anton Khirnov adpcm: Convert to the new bitstream header Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=012c4511539f9f8e252c49d08c7e528973a22193 --- libavcodec/adpcm.c | 20 +++- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 3ab16dd..fe51c0d 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -29,8 +29,9 @@ * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "put_bits.h" #include "bytestream.h" #include "adpcm.h" @@ -366,32 +367,33 @@ static int xa_decode(AVCodecContext *avctx, int16_t *out0, int16_t *out1, static void adpcm_swf_decode(AVCodecContext *avctx, const uint8_t *buf, int buf_size, int16_t *samples) { ADPCMDecodeContext *c = avctx->priv_data; -GetBitContext gb; +BitstreamContext bc; const int *table; int k0, signmask, nb_bits, count; int size = buf_size*8; int i; -init_get_bits(&gb, buf, size); +bitstream_init(&bc, buf, size); //read bits & initial values -nb_bits = get_bits(&gb, 2)+2; +nb_bits = bitstream_read(&bc, 2)+2; table = swf_index_tables[nb_bits-2]; k0 = 1 << (nb_bits-2); signmask = 1 << (nb_bits-1); -while (get_bits_count(&gb) <= size - 22*avctx->channels) { +while (bitstream_tell(&bc) <= size - 22 * avctx->channels) { for (i = 0; i < avctx->channels; i++) { -*samples++ = c->status[i].predictor = get_sbits(&gb, 16); -c->status[i].step_index = get_bits(&gb, 6); +*samples++ = +c->status[i].predictor = bitstream_read_signed(&bc, 16); +c->status[i].step_index = bitstream_read(&bc, 6); } -for (count = 0; get_bits_count(&gb) <= size - nb_bits*avctx->channels && count < 4095; count++) { +for (count = 0; bitstream_tell(&bc) <= size - nb_bits * avctx->channels && count < 4095; count++) { int i; for (i = 0; i < avctx->channels; i++) { // similar to IMA adpcm -int delta = get_bits(&gb, nb_bits); +int delta = bitstream_read(&bc, nb_bits); int step = ff_adpcm_step_table[c->status[i].step_index]; long vpdiff = 0; // vpdiff = (delta+0.5)*step/4 int k = k0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] asvdec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 8 20:13:19 2016 +0200| [41679be1a2d82847a834a839356dfddc162bbb3e] | committer: Anton Khirnov asvdec: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=41679be1a2d82847a834a839356dfddc162bbb3e --- libavcodec/asv.h| 4 ++-- libavcodec/asvdec.c | 54 ++--- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/libavcodec/asv.h b/libavcodec/asv.h index 18f7a95..7c4e4fd 100644 --- a/libavcodec/asv.h +++ b/libavcodec/asv.h @@ -31,11 +31,11 @@ #include "libavutil/mem.h" #include "avcodec.h" +#include "bitstream.h" #include "blockdsp.h" #include "bswapdsp.h" #include "fdctdsp.h" #include "idctdsp.h" -#include "get_bits.h" #include "pixblockdsp.h" #include "put_bits.h" @@ -47,7 +47,7 @@ typedef struct ASV1Context { IDCTDSPContext idsp; PixblockDSPContext pdsp; PutBitContext pb; -GetBitContext gb; +BitstreamContext bc; ScanTable scantable; int inv_qscale; int mb_width; diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c index f17f064..cbda63d 100644 --- a/libavcodec/asvdec.c +++ b/libavcodec/asvdec.c @@ -70,27 +70,27 @@ static av_cold void init_vlcs(ASV1Context *a) } // FIXME write a reversed bitstream reader to avoid the double reverse -static inline int asv2_get_bits(GetBitContext *gb, int n) +static inline int asv2_get_bits(BitstreamContext *bc, int n) { -return ff_reverse[get_bits(gb, n) << (8 - n)]; +return ff_reverse[bitstream_read(bc, n) << (8 - n)]; } -static inline int asv1_get_level(GetBitContext *gb) +static inline int asv1_get_level(BitstreamContext *bc) { -int code = get_vlc2(gb, level_vlc.table, VLC_BITS, 1); +int code = bitstream_read_vlc(bc, level_vlc.table, VLC_BITS, 1); if (code == 3) -return get_sbits(gb, 8); +return bitstream_read_signed(bc, 8); else return code - 3; } -static inline int asv2_get_level(GetBitContext *gb) +static inline int asv2_get_level(BitstreamContext *bc) { -int code = get_vlc2(gb, asv2_level_vlc.table, ASV2_LEVEL_VLC_BITS, 1); +int code = bitstream_read_vlc(bc, asv2_level_vlc.table, ASV2_LEVEL_VLC_BITS, 1); if (code == 31) -return (int8_t) asv2_get_bits(gb, 8); +return (int8_t) asv2_get_bits(bc, 8); else return code - 31; } @@ -99,10 +99,10 @@ static inline int asv1_decode_block(ASV1Context *a, int16_t block[64]) { int i; -block[0] = 8 * get_bits(&a->gb, 8); +block[0] = 8 * bitstream_read(&a->bc, 8); for (i = 0; i < 11; i++) { -const int ccp = get_vlc2(&a->gb, ccp_vlc.table, VLC_BITS, 1); +const int ccp = bitstream_read_vlc(&a->bc, ccp_vlc.table, VLC_BITS, 1); if (ccp) { if (ccp == 16) @@ -113,13 +113,13 @@ static inline int asv1_decode_block(ASV1Context *a, int16_t block[64]) } if (ccp & 8) -block[a->scantable.permutated[4 * i + 0]] = (asv1_get_level(&a->gb) * a->intra_matrix[4 * i + 0]) >> 4; +block[a->scantable.permutated[4 * i + 0]] = (asv1_get_level(&a->bc) * a->intra_matrix[4 * i + 0]) >> 4; if (ccp & 4) -block[a->scantable.permutated[4 * i + 1]] = (asv1_get_level(&a->gb) * a->intra_matrix[4 * i + 1]) >> 4; +block[a->scantable.permutated[4 * i + 1]] = (asv1_get_level(&a->bc) * a->intra_matrix[4 * i + 1]) >> 4; if (ccp & 2) -block[a->scantable.permutated[4 * i + 2]] = (asv1_get_level(&a->gb) * a->intra_matrix[4 * i + 2]) >> 4; +block[a->scantable.permutated[4 * i + 2]] = (asv1_get_level(&a->bc) * a->intra_matrix[4 * i + 2]) >> 4; if (ccp & 1) -block[a->scantable.permutated[4 * i + 3]] = (asv1_get_level(&a->gb) * a->intra_matrix[4 * i + 3]) >> 4; +block[a->scantable.permutated[4 * i + 3]] = (asv1_get_level(&a->bc) * a->intra_matrix[4 * i + 3]) >> 4; } } @@ -130,32 +130,32 @@ static inline int asv2_decode_block(ASV1Context *a, int16_t block[64]) { int i, count, ccp; -count = asv2_get_bits(&a->gb, 4); +count = asv2_get_bits(&a->bc, 4); -block[0] = 8 * asv2_get_bits(&a->gb, 8); +block[0] = 8 * asv2_get_bits(&a->bc, 8); -ccp = get_vlc2(&a->gb, dc_ccp_vlc.table, VLC_BITS, 1); +ccp = bitstream_read_vlc(&a->bc, dc_ccp_vlc.table, VLC_BITS, 1); if (ccp) { if (ccp & 4) -block[a->scantable.permutated[1]] = (asv2_get_level(
[FFmpeg-cvslog] ea: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 20:31:47 2016 +0200| [7d957b3f477a8cb333f8ef2697c9aa5363ad0c9f] | committer: Anton Khirnov ea: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7d957b3f477a8cb333f8ef2697c9aa5363ad0c9f --- libavcodec/eatgq.c | 34 +- libavcodec/eatgv.c | 22 +++--- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/libavcodec/eatgq.c b/libavcodec/eatgq.c index 8355471..9abedcc 100644 --- a/libavcodec/eatgq.c +++ b/libavcodec/eatgq.c @@ -31,9 +31,9 @@ #define BITSTREAM_READER_LE #include "aandcttab.h" #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" #include "eaidct.h" -#include "get_bits.h" #include "idctdsp.h" #include "internal.h" @@ -58,44 +58,44 @@ static av_cold int tgq_decode_init(AVCodecContext *avctx) return 0; } -static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb) +static void tgq_decode_block(TgqContext *s, int16_t block[64], BitstreamContext *bc) { uint8_t *perm = s->scantable.permutated; int i, j, value; -block[0] = get_sbits(gb, 8) * s->qtable[0]; +block[0] = bitstream_read_signed(bc, 8) * s->qtable[0]; for (i = 1; i < 64;) { -switch (show_bits(gb, 3)) { +switch (bitstream_peek(bc, 3)) { case 4: block[perm[i++]] = 0; case 0: block[perm[i++]] = 0; -skip_bits(gb, 3); +bitstream_skip(bc, 3); break; case 5: case 1: -skip_bits(gb, 2); -value = get_bits(gb, 6); +bitstream_skip(bc, 2); +value = bitstream_read(bc, 6); for (j = 0; j < value; j++) block[perm[i++]] = 0; break; case 6: -skip_bits(gb, 3); +bitstream_skip(bc, 3); block[perm[i]] = -s->qtable[perm[i]]; i++; break; case 2: -skip_bits(gb, 3); +bitstream_skip(bc, 3); block[perm[i]] = s->qtable[perm[i]]; i++; break; case 7: // 111b case 3: // 011b -skip_bits(gb, 2); -if (show_bits(gb, 6) == 0x3F) { -skip_bits(gb, 6); -block[perm[i]] = get_sbits(gb, 8) * s->qtable[perm[i]]; +bitstream_skip(bc, 2); +if (bitstream_peek(bc, 6) == 0x3F) { +bitstream_skip(bc, 6); +block[perm[i]] = bitstream_read_signed(bc, 8) * s->qtable[perm[i]]; } else { -block[perm[i]] = get_sbits(gb, 6) * s->qtable[perm[i]]; +block[perm[i]] = bitstream_read_signed(bc, 6) * s->qtable[perm[i]]; } i++; break; @@ -156,10 +156,10 @@ static void tgq_decode_mb(TgqContext *s, AVFrame *frame, int mb_y, int mb_x) mode = bytestream2_get_byte(&s->gb); if (mode > 12) { -GetBitContext gb; -init_get_bits(&gb, s->gb.buffer, FFMIN(s->gb.buffer_end - s->gb.buffer, mode) * 8); +BitstreamContext bc; +bitstream_init(&bc, s->gb.buffer, FFMIN(s->gb.buffer_end - s->gb.buffer, mode) * 8); for (i = 0; i < 6; i++) -tgq_decode_block(s, s->block[i], &gb); +tgq_decode_block(s, s->block[i], &bc); tgq_idct_put_mb(s, s->block, frame, mb_x, mb_y); bytestream2_skip(&s->gb, mode); } else { diff --git a/libavcodec/eatgv.c b/libavcodec/eatgv.c index 7a50d01..549b5b6 100644 --- a/libavcodec/eatgv.c +++ b/libavcodec/eatgv.c @@ -33,7 +33,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #define EA_PREAMBLE_SIZE8 @@ -153,7 +153,7 @@ static int tgv_decode_inter(TgvContext *s, AVFrame *frame, int num_blocks_packed; int vector_bits; int i,j,x,y; -GetBitContext gb; +BitstreamContext bc; int mvbits; const uint8_t *blocks_raw; @@ -166,7 +166,7 @@ static int tgv_decode_inter(TgvContext *s, AVFrame *frame, vector_bits = AV_RL16(&buf[6]); buf += 12; -if (vector_bits > MIN_CACHE_BITS || !vector_bits) { +if (vector_bits > 32 || !vector_bits) { av_log(s->avctx, AV_LOG_ERROR, "Invalid value for motion vector bits: %d\n", vector_bits); return AVERROR_INVALIDDATA; @@ -195,10 +195,10 @@ static int tgv_decode_inter(TgvContext *s, AVFrame *frame, if (buf + (mvbits >> 3) + 16 * num_blocks_raw + 8 * num_blocks_packed > buf_end) return AVERROR_INVALIDDAT
[FFmpeg-cvslog] qdm2: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 18:50:57 2016 +0200| [0b5a26e8bcd219efe5da3a6d39b588fabf91f2b9] | committer: Anton Khirnov qdm2: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0b5a26e8bcd219efe5da3a6d39b588fabf91f2b9 --- libavcodec/qdm2.c | 200 +++--- 1 file changed, 100 insertions(+), 100 deletions(-) diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c index 7a7c149..781999a 100644 --- a/libavcodec/qdm2.c +++ b/libavcodec/qdm2.c @@ -39,7 +39,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "mpegaudio.h" #include "mpegaudiodsp.h" @@ -361,31 +361,31 @@ static av_cold void qdm2_init_vlc(void) INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE); } -static int qdm2_get_vlc(GetBitContext *gb, VLC *vlc, int flag, int depth) +static int qdm2_get_vlc(BitstreamContext *bc, VLC *vlc, int flag, int depth) { int value; -value = get_vlc2(gb, vlc->table, vlc->bits, depth); +value = bitstream_read_vlc(bc, vlc->table, vlc->bits, depth); /* stage-2, 3 bits exponent escape sequence */ if (value-- == 0) -value = get_bits(gb, get_bits(gb, 3) + 1); +value = bitstream_read(bc, bitstream_read(bc, 3) + 1); /* stage-3, optional */ if (flag) { int tmp = vlc_stage3_values[value]; if ((value & ~3) > 0) -tmp += get_bits(gb, (value >> 2)); +tmp += bitstream_read(bc, value >> 2); value = tmp; } return value; } -static int qdm2_get_se_vlc(VLC *vlc, GetBitContext *gb, int depth) +static int qdm2_get_se_vlc(VLC *vlc, BitstreamContext *bc, int depth) { -int value = qdm2_get_vlc(gb, vlc, 0, depth); +int value = qdm2_get_vlc(bc, vlc, 0, depth); return (value & 1) ? ((value + 1) >> 1) : -(value >> 1); } @@ -412,35 +412,35 @@ static uint16_t qdm2_packet_checksum(const uint8_t *data, int length, int value) /** * Fill a QDM2SubPacket structure with packet type, size, and data pointer. * - * @param gbbitreader context + * @param bcbitreader context * @param sub_packetpacket under analysis */ -static void qdm2_decode_sub_packet_header(GetBitContext *gb, +static void qdm2_decode_sub_packet_header(BitstreamContext *bc, QDM2SubPacket *sub_packet) { -sub_packet->type = get_bits(gb, 8); +sub_packet->type = bitstream_read(bc, 8); if (sub_packet->type == 0) { sub_packet->size = 0; sub_packet->data = NULL; } else { -sub_packet->size = get_bits(gb, 8); +sub_packet->size = bitstream_read(bc, 8); if (sub_packet->type & 0x80) { sub_packet->size <<= 8; -sub_packet->size |= get_bits(gb, 8); +sub_packet->size |= bitstream_read(bc, 8); sub_packet->type &= 0x7f; } if (sub_packet->type == 0x7f) -sub_packet->type |= (get_bits(gb, 8) << 8); +sub_packet->type |= bitstream_read(bc, 8) << 8; // FIXME: this depends on bitreader-internal data -sub_packet->data = &gb->buffer[get_bits_count(gb) / 8]; +sub_packet->data = &bc->buffer[bitstream_tell(bc) / 8]; } av_log(NULL, AV_LOG_DEBUG, "Subpacket: type=%d size=%d start_offs=%x\n", - sub_packet->type, sub_packet->size, get_bits_count(gb) / 8); + sub_packet->type, sub_packet->size, bitstream_tell(bc) / 8); } /** @@ -799,12 +799,12 @@ static void fill_coding_method_array(sb_int8_array tone_level_idx, * sb 8-sb_used. * * @param q context - * @param gbbitreader context + * @param bcbitreader context * @param lengthpacket length in bits * @param sb_minlower subband processed (sb_min included) * @param sb_maxhigher subband processed (sb_max excluded) */ -static void synthfilt_build_sb_samples(QDM2Context *q, GetBitContext *gb, +static void synthfilt_build_sb_samples(QDM2Context *q, BitstreamContext *bc, int length, int sb_min, int sb_max) { int sb, j, k, n, ch, run, channels; @@ -830,12 +830,12 @@ static void synthfilt_build_sb_samples(QDM2Context *q, GetBitContext *gb, else if (sb >= 24) joined_stereo = 1; else -joined_stereo = (get_bits_left(gb) >= 1) ? get_bits1(gb) : 0; +joined_stereo = (bitstream_bits_left(bc) >= 1) ? bitstream_read_bit(bc) : 0; if (joined_stereo) { -if (get_bits_left(gb) >= 16) +if (bitstream_b
[FFmpeg-cvslog] atrac: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 17 17:06:09 2016 +0200| [027211920222b2b63ca07d712b3771a14add9aab] | committer: Anton Khirnov atrac: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=027211920222b2b63ca07d712b3771a14add9aab --- libavcodec/atrac1.c | 34 ++- libavcodec/atrac3.c | 97 +++-- 2 files changed, 67 insertions(+), 64 deletions(-) diff --git a/libavcodec/atrac1.c b/libavcodec/atrac1.c index e938976..60be853 100644 --- a/libavcodec/atrac1.c +++ b/libavcodec/atrac1.c @@ -33,8 +33,9 @@ #include #include "libavutil/float_dsp.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "fft.h" #include "internal.h" #include "sinewin.h" @@ -164,30 +165,31 @@ static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q) * Parse the block size mode byte */ -static int at1_parse_bsm(GetBitContext* gb, int log2_block_cnt[AT1_QMF_BANDS]) +static int at1_parse_bsm(BitstreamContext *bc, + int log2_block_cnt[AT1_QMF_BANDS]) { int log2_block_count_tmp, i; for (i = 0; i < 2; i++) { /* low and mid band */ -log2_block_count_tmp = get_bits(gb, 2); +log2_block_count_tmp = bitstream_read(bc, 2); if (log2_block_count_tmp & 1) return AVERROR_INVALIDDATA; log2_block_cnt[i] = 2 - log2_block_count_tmp; } /* high band */ -log2_block_count_tmp = get_bits(gb, 2); +log2_block_count_tmp = bitstream_read(bc, 2); if (log2_block_count_tmp != 0 && log2_block_count_tmp != 3) return AVERROR_INVALIDDATA; log2_block_cnt[IDX_HIGH_BAND] = 3 - log2_block_count_tmp; -skip_bits(gb, 2); +bitstream_skip(bc, 2); return 0; } -static int at1_unpack_dequant(GetBitContext* gb, AT1SUCtx* su, +static int at1_unpack_dequant(BitstreamContext *bc, AT1SUCtx *su, float spec[AT1_SU_SAMPLES]) { int bits_used, band_num, bfu_num, i; @@ -195,22 +197,22 @@ static int at1_unpack_dequant(GetBitContext* gb, AT1SUCtx* su, uint8_t idsfs[AT1_MAX_BFU]; ///< the scalefactor indexes for each BFU /* parse the info byte (2nd byte) telling how much BFUs were coded */ -su->num_bfus = bfu_amount_tab1[get_bits(gb, 3)]; +su->num_bfus = bfu_amount_tab1[bitstream_read(bc, 3)]; /* calc number of consumed bits: num_BFUs * (idwl(4bits) + idsf(6bits)) + log2_block_count(8bits) + info_byte(8bits) + info_byte_copy(8bits) + log2_block_count_copy(8bits) */ bits_used = su->num_bfus * 10 + 32 + -bfu_amount_tab2[get_bits(gb, 2)] + -(bfu_amount_tab3[get_bits(gb, 3)] << 1); +bfu_amount_tab2[bitstream_read(bc, 2)] + +(bfu_amount_tab3[bitstream_read(bc, 3)] << 1); /* get word length index (idwl) for each BFU */ for (i = 0; i < su->num_bfus; i++) -idwls[i] = get_bits(gb, 4); +idwls[i] = bitstream_read(bc, 4); /* get scalefactor index (idsf) for each BFU */ for (i = 0; i < su->num_bfus; i++) -idsfs[i] = get_bits(gb, 6); +idsfs[i] = bitstream_read(bc, 6); /* zero idwl/idsf for empty BFUs */ for (i = su->num_bfus; i < AT1_MAX_BFU; i++) @@ -240,7 +242,7 @@ static int at1_unpack_dequant(GetBitContext* gb, AT1SUCtx* su, /* read in a quantized spec and convert it to * signed int and then inverse quantization */ -spec[pos+i] = get_sbits(gb, word_len) * scale_factor * max_quant; +spec[pos+i] = bitstream_read_signed(bc, word_len) * scale_factor * max_quant; } } else { /* word_len = 0 -> empty BFU, zero all specs in the emty BFU */ memset(&spec[pos], 0, num_specs * sizeof(float)); @@ -277,7 +279,7 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, int buf_size = avpkt->size; AT1Ctx *q = avctx->priv_data; int ch, ret; -GetBitContext gb; +BitstreamContext bc; if (buf_size < 212 * avctx->channels) { @@ -295,14 +297,14 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, for (ch = 0; ch < avctx->channels; ch++) { AT1SUCtx* su = &q->SUs[ch]; -init_get_bits(&gb, &buf[212 * ch], 212 * 8); +bitstream_init(&bc, &buf[212 * ch], 212 * 8); /* parse block_size_mode, 1st byte */ -ret = at1_parse_bsm(&gb, su->log2_block_count); +ret = at1_parse_bsm(&bc, su->log2_block_count); if (ret < 0) return ret; -ret = at1_unpack_de
[FFmpeg-cvslog] bink: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 9 15:59:51 2016 +0200| [9a23b599431cf24ebf976a30d8c7a070ce57c3e0] | committer: Anton Khirnov bink: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9a23b599431cf24ebf976a30d8c7a070ce57c3e0 --- libavcodec/bink.c | 264 ++ 1 file changed, 128 insertions(+), 136 deletions(-) diff --git a/libavcodec/bink.c b/libavcodec/bink.c index 7433697..74db80a 100644 --- a/libavcodec/bink.c +++ b/libavcodec/bink.c @@ -28,8 +28,8 @@ #include "avcodec.h" #include "binkdata.h" #include "binkdsp.h" +#include "bitstream.h" #include "blockdsp.h" -#include "get_bits.h" #include "hpeldsp.h" #include "internal.h" #include "mathops.h" @@ -93,8 +93,9 @@ typedef struct Tree { uint8_t syms[16]; ///< leaf value to symbol mapping } Tree; -#define GET_HUFF(gb, tree) (tree).syms[get_vlc2(gb, bink_trees[(tree).vlc_num].table,\ - bink_trees[(tree).vlc_num].bits, 1)] +#define GET_HUFF(bc, tree)\ +(tree).syms[bitstream_read_vlc(bc, bink_trees[(tree).vlc_num].table, \ + bink_trees[(tree).vlc_num].bits, 1)] /** * data structure used for decoding single Bink data type @@ -204,18 +205,18 @@ static av_cold void free_bundles(BinkContext *c) /** * Merge two consequent lists of equal size depending on bits read. * - * @param gb context for reading bits + * @param bc context for reading bits * @param dst buffer where merged list will be written to * @param src pointer to the head of the first list (the second lists starts at src+size) * @param size input lists size */ -static void merge(GetBitContext *gb, uint8_t *dst, uint8_t *src, int size) +static void merge(BitstreamContext *bc, uint8_t *dst, uint8_t *src, int size) { uint8_t *src2 = src + size; int size2 = size; do { -if (!get_bits1(gb)) { +if (!bitstream_read_bit(bc)) { *dst++ = *src++; size--; } else { @@ -233,37 +234,37 @@ static void merge(GetBitContext *gb, uint8_t *dst, uint8_t *src, int size) /** * Read information about Huffman tree used to decode data. * - * @param gb context for reading bits + * @param bc context for reading bits * @param tree pointer for storing tree data */ -static void read_tree(GetBitContext *gb, Tree *tree) +static void read_tree(BitstreamContext *bc, Tree *tree) { uint8_t tmp1[16] = { 0 }, tmp2[16], *in = tmp1, *out = tmp2; int i, t, len; -tree->vlc_num = get_bits(gb, 4); +tree->vlc_num = bitstream_read(bc, 4); if (!tree->vlc_num) { for (i = 0; i < 16; i++) tree->syms[i] = i; return; } -if (get_bits1(gb)) { -len = get_bits(gb, 3); +if (bitstream_read_bit(bc)) { +len = bitstream_read(bc, 3); for (i = 0; i <= len; i++) { -tree->syms[i] = get_bits(gb, 4); +tree->syms[i] = bitstream_read(bc, 4); tmp1[tree->syms[i]] = 1; } for (i = 0; i < 16 && len < 16 - 1; i++) if (!tmp1[i]) tree->syms[++len] = i; } else { -len = get_bits(gb, 2); +len = bitstream_read(bc, 2); for (i = 0; i < 16; i++) in[i] = i; for (i = 0; i <= len; i++) { int size = 1 << i; for (t = 0; t < 16; t += size << 1) -merge(gb, out + t, in + t, size); +merge(bc, out + t, in + t, size); FFSWAP(uint8_t*, in, out); } memcpy(tree->syms, in, 16); @@ -273,21 +274,21 @@ static void read_tree(GetBitContext *gb, Tree *tree) /** * Prepare bundle for decoding data. * - * @param gb context for reading bits + * @param bc context for reading bits * @param c decoder context * @param bundle_num number of the bundle to initialize */ -static void read_bundle(GetBitContext *gb, BinkContext *c, int bundle_num) +static void read_bundle(BitstreamContext *bc, BinkContext *c, int bundle_num) { int i; if (bundle_num == BINK_SRC_COLORS) { for (i = 0; i < 16; i++) -read_tree(gb, &c->col_high[i]); +read_tree(bc, &c->col_high[i]); c->col_lastval = 0; } if (bundle_num != BINK_SRC_INTRA_DC && bundle_num != BINK_SRC_INTER_DC) -read_tree(gb, &c->bundle[bundle_num].tree); +read_tree(bc, &c->bundle[bundle_num].tree); c->bundle[bundle_num].cur_dec = c->bundle[bundle_num].cur_ptr = c->bundle[bundle_num].data; } @@ -295,66 +296,64 @@ s
[FFmpeg-cvslog] qcelp: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 18:39:16 2016 +0200| [0dabd329e84a6a7b074fa55da844fc827a47aa01] | committer: Anton Khirnov qcelp: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0dabd329e84a6a7b074fa55da844fc827a47aa01 --- libavcodec/qcelpdec.c | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/qcelpdec.c b/libavcodec/qcelpdec.c index e9e7347..9d5e13a 100644 --- a/libavcodec/qcelpdec.c +++ b/libavcodec/qcelpdec.c @@ -31,9 +31,10 @@ #include "libavutil/channel_layout.h" #include "libavutil/float_dsp.h" + #include "avcodec.h" +#include "bitstream.h" #include "internal.h" -#include "get_bits.h" #include "qcelpdata.h" #include "celp_filters.h" #include "acelp_filters.h" @@ -53,7 +54,7 @@ typedef enum { } qcelp_packet_rate; typedef struct QCELPContext { -GetBitContext gb; +BitstreamContext bc; qcelp_packet_rate bitrate; QCELPFrameframe;/**< unpacked data frame */ @@ -718,12 +719,12 @@ static int qcelp_decode_frame(AVCodecContext *avctx, void *data, qcelp_unpacking_bitmaps_lengths[q->bitrate]; uint8_t *unpacked_data = (uint8_t *)&q->frame; -init_get_bits(&q->gb, buf, 8 * buf_size); +bitstream_init(&q->bc, buf, 8 * buf_size); memset(&q->frame, 0, sizeof(QCELPFrame)); for (; bitmaps < bitmaps_end; bitmaps++) -unpacked_data[bitmaps->index] |= get_bits(&q->gb, bitmaps->bitlen) << bitmaps->bitpos; +unpacked_data[bitmaps->index] |= bitstream_read(&q->bc, bitmaps->bitlen) << bitmaps->bitpos; // Check for erasures/blanks on rates 1, 1/4 and 1/8. if (q->frame.reserved) { ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] pcx: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Tue Apr 12 18:32:50 2016 +0200| [770406d1e8291dbfd846210d08c1b322d30c8142] | committer: Anton Khirnov pcx: Convert to the new bitstream reader Signed-off-by: Anton Khirnov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=770406d1e8291dbfd846210d08c1b322d30c8142 --- libavcodec/pcx.c | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/pcx.c b/libavcodec/pcx.c index a2d49b4..ece885e 100644 --- a/libavcodec/pcx.c +++ b/libavcodec/pcx.c @@ -23,9 +23,10 @@ */ #include "libavutil/imgutils.h" + #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #define PCX_HEADER_SIZE 128 @@ -179,15 +180,15 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, goto end; } } else if (nplanes == 1) { /* all packed formats, max. 16 colors */ -GetBitContext s; +BitstreamContext s; for (y = 0; y < h; y++) { -init_get_bits(&s, scanline, bytes_per_scanline << 3); +bitstream_init(&s, scanline, bytes_per_scanline << 3); pcx_rle_decode(&gb, scanline, bytes_per_scanline, compressed); for (x = 0; x < w; x++) -ptr[x] = get_bits(&s, bits_per_pixel); +ptr[x] = bitstream_read(&s, bits_per_pixel); ptr += stride; } } else {/* planar, 4, 8 or 16 colors */ ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] sipr: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 19:49:21 2016 +0200| [087bc8d70415b3b50db4dbf5adf49cf071281874] | committer: Diego Biurrun sipr: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=087bc8d70415b3b50db4dbf5adf49cf071281874 --- libavcodec/sipr.c | 24 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/libavcodec/sipr.c b/libavcodec/sipr.c index 686b3e2..cf29d3b 100644 --- a/libavcodec/sipr.c +++ b/libavcodec/sipr.c @@ -31,7 +31,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "lsp.h" #include "acelp_vectors.h" @@ -188,28 +188,28 @@ static void pitch_sharpening(int pitch_lag_int, float beta, /** * Extract decoding parameters from the input bitstream. * @param parms parameters structure - * @param pgbpointer to initialized GetBitContext structure + * @param bc pointer to initialized BitstreamContext structure */ -static void decode_parameters(SiprParameters* parms, GetBitContext *pgb, +static void decode_parameters(SiprParameters* parms, BitstreamContext *bc, const SiprModeParam *p) { int i, j; if (p->ma_predictor_bits) -parms->ma_pred_switch = get_bits(pgb, p->ma_predictor_bits); +parms->ma_pred_switch = bitstream_read(bc, p->ma_predictor_bits); for (i = 0; i < 5; i++) -parms->vq_indexes[i]= get_bits(pgb, p->vq_indexes_bits[i]); +parms->vq_indexes[i] = bitstream_read(bc, p->vq_indexes_bits[i]); for (i = 0; i < p->subframe_count; i++) { -parms->pitch_delay[i] = get_bits(pgb, p->pitch_delay_bits[i]); +parms->pitch_delay[i] = bitstream_read(bc, p->pitch_delay_bits[i]); if (p->gp_index_bits) -parms->gp_index[i] = get_bits(pgb, p->gp_index_bits); +parms->gp_index[i] = bitstream_read(bc, p->gp_index_bits); for (j = 0; j < p->number_of_fc_indexes; j++) -parms->fc_indexes[i][j] = get_bits(pgb, p->fc_index_bits[j]); +parms->fc_indexes[i][j] = bitstream_read(bc, p->fc_index_bits[j]); -parms->gc_index[i] = get_bits(pgb, p->gc_index_bits); +parms->gc_index[i] = bitstream_read(bc, p->gc_index_bits); } } @@ -527,7 +527,7 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *data, const uint8_t *buf=avpkt->data; SiprParameters parm; const SiprModeParam *mode_par = &modes[ctx->mode]; -GetBitContext gb; +BitstreamContext bc; float *samples; int subframe_size = ctx->mode == MODE_16k ? L_SUBFR_16k : SUBFR_SIZE; int i, ret; @@ -549,10 +549,10 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *data, } samples = (float *)frame->data[0]; -init_get_bits(&gb, buf, mode_par->bits_per_frame); +bitstream_init(&bc, buf, mode_par->bits_per_frame); for (i = 0; i < mode_par->frames_per_packet; i++) { -decode_parameters(&parm, &gb, mode_par); +decode_parameters(&parm, &bc, mode_par); ctx->decode_frame(ctx, &parm, samples); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] vima: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 14 11:59:21 2016 +0200| [0536e7d78248d8c563f21271fa5ace0b4f38c727] | committer: Diego Biurrun vima: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0536e7d78248d8c563f21271fa5ace0b4f38c727 --- libavcodec/vima.c | 24 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/libavcodec/vima.c b/libavcodec/vima.c index 6f539a8..0db1897 100644 --- a/libavcodec/vima.c +++ b/libavcodec/vima.c @@ -29,7 +29,7 @@ #include "adpcm_data.h" #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" static int predict_table_init = 0; @@ -118,7 +118,7 @@ static av_cold int decode_init(AVCodecContext *avctx) static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *pkt) { -GetBitContext gb; +BitstreamContext bc; AVFrame *frame = data; int16_t pcm_data[2]; uint32_t samples; @@ -129,19 +129,19 @@ static int decode_frame(AVCodecContext *avctx, void *data, if (pkt->size < 13) return AVERROR_INVALIDDATA; -if ((ret = init_get_bits8(&gb, pkt->data, pkt->size)) < 0) +if ((ret = bitstream_init8(&bc, pkt->data, pkt->size)) < 0) return ret; -samples = get_bits_long(&gb, 32); +samples = bitstream_read(&bc, 32); if (samples == 0x) { -skip_bits_long(&gb, 32); -samples = get_bits_long(&gb, 32); +bitstream_skip(&bc, 32); +samples = bitstream_read(&bc, 32); } if (samples > pkt->size * 2) return AVERROR_INVALIDDATA; -channel_hint[0] = get_sbits(&gb, 8); +channel_hint[0] = bitstream_read_signed(&bc, 8); if (channel_hint[0] & 0x80) { channel_hint[0] = ~channel_hint[0]; channels = 2; @@ -149,10 +149,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, avctx->channels = channels; avctx->channel_layout = (channels == 2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO; -pcm_data[0] = get_sbits(&gb, 16); +pcm_data[0] = bitstream_read_signed(&bc, 16); if (channels > 1) { -channel_hint[1] = get_sbits(&gb, 8); -pcm_data[1] = get_sbits(&gb, 16); +channel_hint[1] = bitstream_read_signed(&bc, 8); +pcm_data[1] = bitstream_read_signed(&bc, 16); } frame->nb_samples = samples; @@ -170,7 +170,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, step_index = av_clip(step_index, 0, 88); lookup_size = size_table[step_index]; -lookup = get_bits(&gb, lookup_size); +lookup = bitstream_read(&bc, lookup_size); highbit = 1 << (lookup_size - 1); lowbits = highbit - 1; @@ -180,7 +180,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, highbit = 0; if (lookup == lowbits) { -output = get_sbits(&gb, 16); +output = bitstream_read_signed(&bc, 16); } else { int predict_index, diff; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] xan: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 15 10:57:22 2016 +0200| [be35ef92a418916f0fceaf18af5f5b768c44117f] | committer: Diego Biurrun xan: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=be35ef92a418916f0fceaf18af5f5b768c44117f --- libavcodec/xan.c | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/xan.c b/libavcodec/xan.c index c16c651..33149e5 100644 --- a/libavcodec/xan.c +++ b/libavcodec/xan.c @@ -37,8 +37,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #define RUNTIME_GAMMA 0 @@ -124,15 +124,15 @@ static int xan_huffman_decode(unsigned char *dest, int dest_len, unsigned char val = ival; unsigned char *dest_end = dest + dest_len; unsigned char *dest_start = dest; -GetBitContext gb; +BitstreamContext bc; if (ptr_len < 0) return AVERROR_INVALIDDATA; -init_get_bits(&gb, ptr, ptr_len * 8); +bitstream_init(&bc, ptr, ptr_len * 8); while (val != 0x16) { -unsigned idx = val - 0x17 + get_bits1(&gb) * byte; +unsigned idx = val - 0x17 + bitstream_read_bit(&bc) * byte; if (idx >= 2 * byte) return AVERROR_INVALIDDATA; val = src[idx]; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] wnv1: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 15 10:50:38 2016 +0200| [f9c59f26c852cec4dd7e5c04d26ec284a796a919] | committer: Diego Biurrun wnv1: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f9c59f26c852cec4dd7e5c04d26ec284a796a919 --- libavcodec/wnv1.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/wnv1.c b/libavcodec/wnv1.c index d0304c9..80d66ae 100644 --- a/libavcodec/wnv1.c +++ b/libavcodec/wnv1.c @@ -25,7 +25,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "mathops.h" @@ -34,7 +34,7 @@ typedef struct WNV1Context { AVCodecContext *avctx; int shift; -GetBitContext gb; +BitstreamContext bc; } WNV1Context; static const uint16_t code_tab[16][2] = { @@ -49,10 +49,10 @@ static VLC code_vlc; /* returns modified base_value */ static inline int wnv1_get_code(WNV1Context *w, int base_value) { -int v = get_vlc2(&w->gb, code_vlc.table, CODE_VLC_BITS, 1); +int v = bitstream_read_vlc(&w->bc, code_vlc.table, CODE_VLC_BITS, 1); if (v == 15) -return ff_reverse[get_bits(&w->gb, 8 - w->shift)]; +return ff_reverse[bitstream_read(&w->bc, 8 - w->shift)]; else return base_value + ((v - 7) << w->shift); } @@ -90,7 +90,7 @@ static int decode_frame(AVCodecContext *avctx, for (i = 8; i < buf_size; i++) rbuf[i] = ff_reverse[buf[i]]; -init_get_bits(&l->gb, rbuf + 8, (buf_size - 8) * 8); +bitstream_init(&l->bc, rbuf + 8, (buf_size - 8) * 8); if (buf[2] >> 4 == 6) l->shift = 2; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] mpegts: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 16 17:46:29 2016 +0200| [8d1997add6220b7d956dcfdcc9f711efb56ca30d] | committer: Diego Biurrun mpegts: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8d1997add6220b7d956dcfdcc9f711efb56ca30d --- libavformat/mpegts.c | 48 +--- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 28b6d37..5024404 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -26,9 +26,11 @@ #include "libavutil/dict.h" #include "libavutil/mathematics.h" #include "libavutil/opt.h" + +#include "libavcodec/bitstream.h" #include "libavcodec/bytestream.h" -#include "libavcodec/get_bits.h" #include "libavcodec/opus.h" + #include "avformat.h" #include "mpegts.h" #include "internal.h" @@ -735,56 +737,56 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt) static int read_sl_header(PESContext *pes, SLConfigDescr *sl, const uint8_t *buf, int buf_size) { -GetBitContext gb; +BitstreamContext bc; int au_start_flag = 0, au_end_flag = 0, ocr_flag = 0, idle_flag = 0; int padding_flag = 0, padding_bits = 0, inst_bitrate_flag = 0; int dts_flag = -1, cts_flag = -1; int64_t dts = AV_NOPTS_VALUE, cts = AV_NOPTS_VALUE; -init_get_bits(&gb, buf, buf_size * 8); +bitstream_init(&bc, buf, buf_size * 8); if (sl->use_au_start) -au_start_flag = get_bits1(&gb); +au_start_flag = bitstream_read_bit(&bc); if (sl->use_au_end) -au_end_flag = get_bits1(&gb); +au_end_flag = bitstream_read_bit(&bc); if (!sl->use_au_start && !sl->use_au_end) au_start_flag = au_end_flag = 1; if (sl->ocr_len > 0) -ocr_flag = get_bits1(&gb); +ocr_flag = bitstream_read_bit(&bc); if (sl->use_idle) -idle_flag = get_bits1(&gb); +idle_flag = bitstream_read_bit(&bc); if (sl->use_padding) -padding_flag = get_bits1(&gb); +padding_flag = bitstream_read_bit(&bc); if (padding_flag) -padding_bits = get_bits(&gb, 3); +padding_bits = bitstream_read(&bc, 3); if (!idle_flag && (!padding_flag || padding_bits != 0)) { if (sl->packet_seq_num_len) -skip_bits_long(&gb, sl->packet_seq_num_len); +bitstream_skip(&bc, sl->packet_seq_num_len); if (sl->degr_prior_len) -if (get_bits1(&gb)) -skip_bits(&gb, sl->degr_prior_len); +if (bitstream_read_bit(&bc)) +bitstream_skip(&bc, sl->degr_prior_len); if (ocr_flag) -skip_bits_long(&gb, sl->ocr_len); +bitstream_skip(&bc, sl->ocr_len); if (au_start_flag) { if (sl->use_rand_acc_pt) -get_bits1(&gb); +bitstream_read_bit(&bc); if (sl->au_seq_num_len > 0) -skip_bits_long(&gb, sl->au_seq_num_len); +bitstream_skip(&bc, sl->au_seq_num_len); if (sl->use_timestamps) { -dts_flag = get_bits1(&gb); -cts_flag = get_bits1(&gb); +dts_flag = bitstream_read_bit(&bc); +cts_flag = bitstream_read_bit(&bc); } } if (sl->inst_bitrate_len) -inst_bitrate_flag = get_bits1(&gb); +inst_bitrate_flag = bitstream_read_bit(&bc); if (dts_flag == 1) -dts = get_bits64(&gb, sl->timestamp_len); +dts = bitstream_read_63(&bc, sl->timestamp_len); if (cts_flag == 1) -cts = get_bits64(&gb, sl->timestamp_len); +cts = bitstream_read_63(&bc, sl->timestamp_len); if (sl->au_len > 0) -skip_bits_long(&gb, sl->au_len); +bitstream_skip(&bc, sl->au_len); if (inst_bitrate_flag) -skip_bits_long(&gb, sl->inst_bitrate_len); +bitstream_skip(&bc, sl->inst_bitrate_len); } if (dts != AV_NOPTS_VALUE) @@ -795,7 +797,7 @@ static int read_sl_header(PESContext *pes, SLConfigDescr *sl, if (sl->timestamp_len && sl->timestamp_res) avpriv_set_pts_info(pes->st, sl->timestamp_len, 1, sl->timestamp_res); -return (get_bits_count(&gb) + 7) >> 3; +return (bitstream_tell(&bc) + 7) >> 3; } /* return non zero if a packet could be constructed */ ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] truespeech: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 14 10:32:31 2016 +0200| [8e4cadea5d20e463e9d6cf00fc58841f17c811e0] | committer: Diego Biurrun truespeech: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8e4cadea5d20e463e9d6cf00fc58841f17c811e0 --- libavcodec/truespeech.c | 88 + 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c index b2195ba..48e2126 100644 --- a/libavcodec/truespeech.c +++ b/libavcodec/truespeech.c @@ -21,12 +21,14 @@ #include "libavutil/channel_layout.h" #include "libavutil/intreadwrite.h" + #include "avcodec.h" +#include "bitstream.h" #include "bswapdsp.h" -#include "get_bits.h" #include "internal.h" #include "truespeech_data.h" + /** * @file * TrueSpeech decoder. @@ -77,50 +79,50 @@ static av_cold int truespeech_decode_init(AVCodecContext * avctx) static void truespeech_read_frame(TSContext *dec, const uint8_t *input) { -GetBitContext gb; +BitstreamContext bc; dec->bdsp.bswap_buf((uint32_t *) dec->buffer, (const uint32_t *) input, 8); -init_get_bits(&gb, dec->buffer, 32 * 8); - -dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)]; -dec->vector[6] = ts_codebook[6][get_bits(&gb, 3)]; -dec->vector[5] = ts_codebook[5][get_bits(&gb, 3)]; -dec->vector[4] = ts_codebook[4][get_bits(&gb, 4)]; -dec->vector[3] = ts_codebook[3][get_bits(&gb, 4)]; -dec->vector[2] = ts_codebook[2][get_bits(&gb, 4)]; -dec->vector[1] = ts_codebook[1][get_bits(&gb, 5)]; -dec->vector[0] = ts_codebook[0][get_bits(&gb, 5)]; -dec->flag = get_bits1(&gb); - -dec->offset1[0] = get_bits(&gb, 4) << 4; -dec->offset2[3] = get_bits(&gb, 7); -dec->offset2[2] = get_bits(&gb, 7); -dec->offset2[1] = get_bits(&gb, 7); -dec->offset2[0] = get_bits(&gb, 7); - -dec->offset1[1] = get_bits(&gb, 4); -dec->pulseval[1] = get_bits(&gb, 14); -dec->pulseval[0] = get_bits(&gb, 14); - -dec->offset1[1] |= get_bits(&gb, 4) << 4; -dec->pulseval[3] = get_bits(&gb, 14); -dec->pulseval[2] = get_bits(&gb, 14); - -dec->offset1[0] |= get_bits1(&gb); -dec->pulsepos[0] = get_bits_long(&gb, 27); -dec->pulseoff[0] = get_bits(&gb, 4); - -dec->offset1[0] |= get_bits1(&gb) << 1; -dec->pulsepos[1] = get_bits_long(&gb, 27); -dec->pulseoff[1] = get_bits(&gb, 4); - -dec->offset1[0] |= get_bits1(&gb) << 2; -dec->pulsepos[2] = get_bits_long(&gb, 27); -dec->pulseoff[2] = get_bits(&gb, 4); - -dec->offset1[0] |= get_bits1(&gb) << 3; -dec->pulsepos[3] = get_bits_long(&gb, 27); -dec->pulseoff[3] = get_bits(&gb, 4); +bitstream_init(&bc, dec->buffer, 32 * 8); + +dec->vector[7] = ts_codebook[7][bitstream_read(&bc, 3)]; +dec->vector[6] = ts_codebook[6][bitstream_read(&bc, 3)]; +dec->vector[5] = ts_codebook[5][bitstream_read(&bc, 3)]; +dec->vector[4] = ts_codebook[4][bitstream_read(&bc, 4)]; +dec->vector[3] = ts_codebook[3][bitstream_read(&bc, 4)]; +dec->vector[2] = ts_codebook[2][bitstream_read(&bc, 4)]; +dec->vector[1] = ts_codebook[1][bitstream_read(&bc, 5)]; +dec->vector[0] = ts_codebook[0][bitstream_read(&bc, 5)]; +dec->flag = bitstream_read_bit(&bc); + +dec->offset1[0] = bitstream_read(&bc, 4) << 4; +dec->offset2[3] = bitstream_read(&bc, 7); +dec->offset2[2] = bitstream_read(&bc, 7); +dec->offset2[1] = bitstream_read(&bc, 7); +dec->offset2[0] = bitstream_read(&bc, 7); + +dec->offset1[1] = bitstream_read(&bc, 4); +dec->pulseval[1] = bitstream_read(&bc, 14); +dec->pulseval[0] = bitstream_read(&bc, 14); + +dec->offset1[1] |= bitstream_read(&bc, 4) << 4; +dec->pulseval[3] = bitstream_read(&bc, 14); +dec->pulseval[2] = bitstream_read(&bc, 14); + +dec->offset1[0] |= bitstream_read_bit(&bc); +dec->pulsepos[0] = bitstream_read(&bc, 27); +dec->pulseoff[0] = bitstream_read(&bc, 4); + +dec->offset1[0] |= bitstream_read_bit(&bc) << 1; +dec->pulsepos[1] = bitstream_read(&bc, 27); +dec->pulseoff[1] = bitstream_read(&bc, 4); + +dec->offset1[0] |= bitstream_read_bit(&bc) << 2; +dec->pulsepos[2] = bitstream_read(&bc, 27); +dec->pulseoff[2] = bitstream_read(&bc, 4); + +dec->offset1[0] |= bitstream_read_bit(&bc) << 3; +dec->pulsepos[3] = bitstream_read(&bc, 27); +dec->pulseoff[3] = bitstream_read(&bc, 4); } static void truespeech_correlate_filter(TSContext *dec) ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] ogg: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 16 17:51:16 2016 +0200| [2cef81a87cd88cf7904ef815ee109e3611fe3fa4] | committer: Diego Biurrun ogg: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2cef81a87cd88cf7904ef815ee109e3611fe3fa4 --- libavformat/oggparseflac.c | 22 -- libavformat/oggparsetheora.c | 39 +-- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/libavformat/oggparseflac.c b/libavformat/oggparseflac.c index dab1040..90b1495 100644 --- a/libavformat/oggparseflac.c +++ b/libavformat/oggparseflac.c @@ -19,8 +19,10 @@ */ #include -#include "libavcodec/get_bits.h" + +#include "libavcodec/bitstream.h" #include "libavcodec/flac.h" + #include "avformat.h" #include "internal.h" #include "oggdec.h" @@ -33,28 +35,28 @@ flac_header (AVFormatContext * s, int idx) struct ogg *ogg = s->priv_data; struct ogg_stream *os = ogg->streams + idx; AVStream *st = s->streams[idx]; -GetBitContext gb; +BitstreamContext bc; int mdt; if (os->buf[os->pstart] == 0xff) return 0; -init_get_bits(&gb, os->buf + os->pstart, os->psize*8); -skip_bits1(&gb); /* metadata_last */ -mdt = get_bits(&gb, 7); +bitstream_init(&bc, os->buf + os->pstart, os->psize * 8); +bitstream_skip(&bc, 1); /* metadata_last */ +mdt = bitstream_read(&bc, 7); if (mdt == OGG_FLAC_METADATA_TYPE_STREAMINFO) { uint8_t *streaminfo_start = os->buf + os->pstart + 5 + 4 + 4 + 4; uint32_t samplerate; -skip_bits_long(&gb, 4*8); /* "FLAC" */ -if(get_bits(&gb, 8) != 1) /* unsupported major version */ +bitstream_skip(&bc, 4 * 8); /* "FLAC" */ +if (bitstream_read(&bc, 8) != 1) /* unsupported major version */ return -1; -skip_bits_long(&gb, 8 + 16); /* minor version + header count */ -skip_bits_long(&gb, 4*8); /* "fLaC" */ +bitstream_skip(&bc, 8 + 16); /* minor version + header count */ +bitstream_skip(&bc, 4 * 8); /* "fLaC" */ /* METADATA_BLOCK_HEADER */ -if (get_bits_long(&gb, 32) != FLAC_STREAMINFO_SIZE) +if (bitstream_read(&bc, 32) != FLAC_STREAMINFO_SIZE) return -1; st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; diff --git a/libavformat/oggparsetheora.c b/libavformat/oggparsetheora.c index 1e7a776..da47a0c 100644 --- a/libavformat/oggparsetheora.c +++ b/libavformat/oggparsetheora.c @@ -23,8 +23,11 @@ **/ #include + #include "libavutil/bswap.h" -#include "libavcodec/get_bits.h" + +#include "libavcodec/bitstream.h" + #include "avformat.h" #include "internal.h" #include "oggdec.h" @@ -57,41 +60,41 @@ static int theora_header(AVFormatContext *s, int idx) switch (os->buf[os->pstart]) { case 0x80: { -GetBitContext gb; +BitstreamContext bc; AVRational timebase; -init_get_bits(&gb, os->buf + os->pstart, os->psize * 8); +bitstream_init(&bc, os->buf + os->pstart, os->psize * 8); /* 0x80"theora" */ -skip_bits_long(&gb, 7 * 8); +bitstream_skip(&bc, 7 * 8); -thp->version = get_bits_long(&gb, 24); +thp->version = bitstream_read(&bc, 24); if (thp->version < 0x030100) { av_log(s, AV_LOG_ERROR, "Too old or unsupported Theora (%x)\n", thp->version); return AVERROR(ENOSYS); } -st->codecpar->width = get_bits(&gb, 16) << 4; -st->codecpar->height = get_bits(&gb, 16) << 4; +st->codecpar->width = bitstream_read(&bc, 16) << 4; +st->codecpar->height = bitstream_read(&bc, 16) << 4; if (thp->version >= 0x030400) -skip_bits(&gb, 100); +bitstream_skip(&bc, 100); if (thp->version >= 0x030200) { -int width = get_bits_long(&gb, 24); -int height = get_bits_long(&gb, 24); +int width = bitstream_read(&bc, 24); +int height = bitstream_read(&bc, 24); if (width <= st->codecpar->width && width > st->codecpar->width - 16 && height <= st->codecpar->height && height > st->codecpar->height - 16) { st->codecpar->width = width; st->codecpar->height = height; } -skip_bits(&gb, 16); +bitstream_skip(&bc, 16);
[FFmpeg-cvslog] tscc2: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 14 10:42:27 2016 +0200| [0bea79afa6cc71e38d58350d05cdeb33e97f6234] | committer: Diego Biurrun tscc2: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0bea79afa6cc71e38d58350d05cdeb33e97f6234 --- libavcodec/tscc2.c | 30 +++--- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/libavcodec/tscc2.c b/libavcodec/tscc2.c index d3d45e4..d86428a 100644 --- a/libavcodec/tscc2.c +++ b/libavcodec/tscc2.c @@ -28,8 +28,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #include "mathops.h" #include "tscc2data.h" @@ -41,7 +41,7 @@ typedef struct TSCC2Context { uint8_t*slice_quants; intquant[2]; intq[2][3]; -GetBitContext gb; +BitstreamContext bc; VLCdc_vlc, nc_vlc[NUM_VLC_SETS], ac_vlc[NUM_VLC_SETS]; intblock[16]; @@ -127,21 +127,21 @@ static void tscc2_idct4_put(int *in, int q[3], uint8_t *dst, int stride) static int tscc2_decode_mb(TSCC2Context *c, int *q, int vlc_set, uint8_t *dst, int stride, int plane) { -GetBitContext *gb = &c->gb; +BitstreamContext *bc = &c->bc; int prev_dc, dc, nc, ac, bpos, val; int i, j, k, l; -if (get_bits1(gb)) { -if (get_bits1(gb)) { -val = get_bits(gb, 8); +if (bitstream_read_bit(bc)) { +if (bitstream_read_bit(bc)) { +val = bitstream_read(bc, 8); for (i = 0; i < 8; i++, dst += stride) memset(dst, val, 16); } else { -if (get_bits_left(gb) < 16 * 8 * 8) +if (bitstream_bits_left(bc) < 16 * 8 * 8) return AVERROR_INVALIDDATA; for (i = 0; i < 8; i++) { for (j = 0; j < 16; j++) -dst[j] = get_bits(gb, 8); +dst[j] = bitstream_read(bc, 8); dst += stride; } } @@ -152,30 +152,30 @@ static int tscc2_decode_mb(TSCC2Context *c, int *q, int vlc_set, for (j = 0; j < 2; j++) { for (k = 0; k < 4; k++) { if (!(j | k)) { -dc = get_bits(gb, 8); +dc = bitstream_read(bc, 8); } else { -dc = get_vlc2(gb, c->dc_vlc.table, 9, 2); +dc = bitstream_read_vlc(bc, c->dc_vlc.table, 9, 2); if (dc == -1) return AVERROR_INVALIDDATA; if (dc == 0x100) -dc = get_bits(gb, 8); +dc = bitstream_read(bc, 8); } dc = (dc + prev_dc) & 0xFF; prev_dc = dc; c->block[0] = dc; -nc = get_vlc2(gb, c->nc_vlc[vlc_set].table, 9, 1); +nc = bitstream_read_vlc(bc, c->nc_vlc[vlc_set].table, 9, 1); if (nc == -1) return AVERROR_INVALIDDATA; bpos = 1; memset(c->block + 1, 0, 15 * sizeof(*c->block)); for (l = 0; l < nc; l++) { -ac = get_vlc2(gb, c->ac_vlc[vlc_set].table, 9, 2); +ac = bitstream_read_vlc(bc, c->ac_vlc[vlc_set].table, 9, 2); if (ac == -1) return AVERROR_INVALIDDATA; if (ac == 0x1000) -ac = get_bits(gb, 12); +ac = bitstream_read(bc, 12); bpos += ac & 0xF; if (bpos >= 16) return AVERROR_INVALIDDATA; @@ -195,7 +195,7 @@ static int tscc2_decode_slice(TSCC2Context *c, int mb_y, int i, mb_x, q, ret; int off; -init_get_bits(&c->gb, buf, buf_size * 8); +bitstream_init(&c->bc, buf, buf_size * 8); for (mb_x = 0; mb_x < c->mb_width; mb_x++) { q = c->slice_quants[mb_x + c->mb_width * mb_y]; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] tiertex: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 23 15:13:41 2016 +0200| [0ac07d0b8d75cce10a139c868d415284a9d2ca48] | committer: Diego Biurrun tiertex: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0ac07d0b8d75cce10a139c868d415284a9d2ca48 --- libavcodec/tiertexseqv.c | 26 ++ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/libavcodec/tiertexseqv.c b/libavcodec/tiertexseqv.c index 8ca7edf..d952266 100644 --- a/libavcodec/tiertexseqv.c +++ b/libavcodec/tiertexseqv.c @@ -26,7 +26,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" @@ -41,18 +41,18 @@ static const unsigned char *seq_unpack_rle_block(const unsigned char *src, unsigned char *dst, int dst_size) { int i, len, sz; -GetBitContext gb; +BitstreamContext bc; int code_table[64]; /* get the rle codes */ -init_get_bits(&gb, src, (src_end - src) * 8); +bitstream_init(&bc, src, (src_end - src) * 8); for (i = 0, sz = 0; i < 64 && sz < dst_size; i++) { -if (get_bits_left(&gb) < 4) +if (bitstream_bits_left(&bc) < 4) return NULL; -code_table[i] = get_sbits(&gb, 4); +code_table[i] = bitstream_read_signed(&bc, 4); sz += FFABS(code_table[i]); } -src += (get_bits_count(&gb) + 7) / 8; +src += (bitstream_tell(&bc) + 7) / 8; /* do the rle unpacking */ for (i = 0; i < 64 && dst_size > 0; i++) { @@ -81,7 +81,7 @@ static const unsigned char *seq_decode_op1(SeqVideoContext *seq, { const unsigned char *color_table; int b, i, len, bits; -GetBitContext gb; +BitstreamContext bc; unsigned char block[8 * 8]; if (src_end - src < 1) @@ -113,10 +113,11 @@ static const unsigned char *seq_decode_op1(SeqVideoContext *seq, return NULL; color_table = src; src += len; -init_get_bits(&gb, src, bits * 8 * 8); src += bits * 8; +bitstream_init(&bc, src, bits * 8 * 8); +src += bits * 8; for (b = 0; b < 8; b++) { for (i = 0; i < 8; i++) -dst[i] = color_table[get_bits(&gb, bits)]; +dst[i] = color_table[bitstream_read(&bc, bits)]; dst += seq->frame->linesize[0]; } } @@ -164,7 +165,7 @@ static const unsigned char *seq_decode_op3(SeqVideoContext *seq, static int seqvideo_decode(SeqVideoContext *seq, const unsigned char *data, int data_size) { const unsigned char *data_end = data + data_size; -GetBitContext gb; +BitstreamContext bc; int flags, i, j, x, y, op; unsigned char c[3]; unsigned char *dst; @@ -187,11 +188,12 @@ static int seqvideo_decode(SeqVideoContext *seq, const unsigned char *data, int if (flags & 2) { if (data_end - data < 128) return AVERROR_INVALIDDATA; -init_get_bits(&gb, data, 128 * 8); data += 128; +bitstream_init(&bc, data, 128 * 8); +data += 128; for (y = 0; y < 128; y += 8) for (x = 0; x < 256; x += 8) { dst = &seq->frame->data[0][y * seq->frame->linesize[0] + x]; -op = get_bits(&gb, 2); +op = bitstream_read(&bc, 2); switch (op) { case 1: data = seq_decode_op1(seq, data, data_end, dst); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] rtjpeg: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 19:41:09 2016 +0200| [f26cbb555b9547b7a532c7a0d883579a52815b1d] | committer: Diego Biurrun rtjpeg: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f26cbb555b9547b7a532c7a0d883579a52815b1d --- libavcodec/rtjpeg.c | 42 +++--- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/libavcodec/rtjpeg.c b/libavcodec/rtjpeg.c index 67eeff8..baa1f78 100644 --- a/libavcodec/rtjpeg.c +++ b/libavcodec/rtjpeg.c @@ -18,8 +18,10 @@ * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + #include "libavutil/common.h" -#include "get_bits.h" + +#include "bitstream.h" #include "rtjpeg.h" #define PUT_COEFF(c) \ @@ -28,34 +30,36 @@ /// aligns the bitstream to the given power of two #define ALIGN(a) \ -n = (-get_bits_count(gb)) & (a - 1); \ -if (n) {skip_bits(gb, n);} +n = (-bitstream_tell(bc)) & (a - 1); \ +if (n) \ +bitstream_skip(bc, n); /** * @brief read one block from stream - * @param gb contains stream data + * @param bc contains stream data * @param block where data is written to * @param scan array containing the mapping stream address -> block position * @param quant quantization factors * @return 0 means the block is not coded, < 0 means an error occurred. * - * Note: GetBitContext is used to make the code simpler, since all data is + * Note: BitstreamContext is used to make the code simpler, since all data is * aligned this could be done faster in a different way, e.g. as it is done * in MPlayer libmpcodecs/native/rtjpegn.c. */ -static inline int get_block(GetBitContext *gb, int16_t *block, const uint8_t *scan, -const uint32_t *quant) { +static inline int get_block(BitstreamContext *bc, int16_t *block, +const uint8_t *scan, const uint32_t *quant) +{ int coeff, i, n; int8_t ac; -uint8_t dc = get_bits(gb, 8); +uint8_t dc = bitstream_read(bc, 8); // block not coded if (dc == 255) return 0; // number of non-zero coefficients -coeff = get_bits(gb, 6); -if (get_bits_left(gb) < (coeff << 1)) +coeff = bitstream_read(bc, 6); +if (bitstream_bits_left(bc) < (coeff << 1)) return AVERROR_INVALIDDATA; // normally we would only need to clear the (63 - coeff) last values, @@ -64,7 +68,7 @@ static inline int get_block(GetBitContext *gb, int16_t *block, const uint8_t *sc // 2 bits per coefficient while (coeff) { -ac = get_sbits(gb, 2); +ac = bitstream_read_signed(bc, 2); if (ac == -2) break; // continue with more bits PUT_COEFF(ac); @@ -72,10 +76,10 @@ static inline int get_block(GetBitContext *gb, int16_t *block, const uint8_t *sc // 4 bits per coefficient ALIGN(4); -if (get_bits_left(gb) < (coeff << 2)) +if (bitstream_bits_left(bc) < (coeff << 2)) return AVERROR_INVALIDDATA; while (coeff) { -ac = get_sbits(gb, 4); +ac = bitstream_read_signed(bc, 4); if (ac == -8) break; // continue with more bits PUT_COEFF(ac); @@ -83,10 +87,10 @@ static inline int get_block(GetBitContext *gb, int16_t *block, const uint8_t *sc // 8 bits per coefficient ALIGN(8); -if (get_bits_left(gb) < (coeff << 3)) +if (bitstream_bits_left(bc) < (coeff << 3)) return AVERROR_INVALIDDATA; while (coeff) { -ac = get_sbits(gb, 8); +ac = bitstream_read_signed(bc, 8); PUT_COEFF(ac); } @@ -105,19 +109,19 @@ static inline int get_block(GetBitContext *gb, int16_t *block, const uint8_t *sc */ int ff_rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f, const uint8_t *buf, int buf_size) { -GetBitContext gb; +BitstreamContext bc; int w = c->w / 16, h = c->h / 16; int x, y, ret; uint8_t *y1 = f->data[0], *y2 = f->data[0] + 8 * f->linesize[0]; uint8_t *u = f->data[1], *v = f->data[2]; -if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) +if ((ret = bitstream_init8(&bc, buf, buf_size)) < 0) return ret; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { #define BLOCK(quant, dst, stride) do { \ -int res = get_block(&gb, block, c->scan, quant); \ +int res = get_block(&bc, block, c->scan, quant); \ if (res < 0) \ return res; \ if (res > 0) \ @@ -142,7 +146,7 @@ int ff_rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f, u += 8 * (f->linesize[1] - w); v += 8 * (f->linesize[2] - w);
[FFmpeg-cvslog] ra144: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 11:53:47 2016 +0200| [7d8075cf471459dee372595c74b7f28cb4e9a05d] | committer: Diego Biurrun ra144: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7d8075cf471459dee372595c74b7f28cb4e9a05d --- libavcodec/ra144dec.c | 23 --- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libavcodec/ra144dec.c b/libavcodec/ra144dec.c index 2895357..35ee697 100644 --- a/libavcodec/ra144dec.c +++ b/libavcodec/ra144dec.c @@ -23,8 +23,9 @@ */ #include "libavutil/channel_layout.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "ra144.h" @@ -46,12 +47,12 @@ static av_cold int ra144_decode_init(AVCodecContext * avctx) } static void do_output_subblock(RA144Context *ractx, const uint16_t *lpc_coefs, - int gval, GetBitContext *gb) + int gval, BitstreamContext *bc) { -int cba_idx = get_bits(gb, 7); // index of the adaptive CB, 0 if none -int gain= get_bits(gb, 8); -int cb1_idx = get_bits(gb, 7); -int cb2_idx = get_bits(gb, 7); +int cba_idx = bitstream_read(bc, 7); // index of the adaptive CB, 0 if none +int gain= bitstream_read(bc, 8); +int cb1_idx = bitstream_read(bc, 7); +int cb2_idx = bitstream_read(bc, 7); ff_subblock_synthesis(ractx, lpc_coefs, cba_idx, cb1_idx, cb2_idx, gval, gain); @@ -74,7 +75,7 @@ static int ra144_decode_frame(AVCodecContext * avctx, void *data, unsigned int energy; RA144Context *ractx = avctx->priv_data; -GetBitContext gb; +BitstreamContext bc; if (buf_size < FRAMESIZE) { av_log(avctx, AV_LOG_ERROR, @@ -91,15 +92,15 @@ static int ra144_decode_frame(AVCodecContext * avctx, void *data, } samples = (int16_t *)frame->data[0]; -init_get_bits(&gb, buf, FRAMESIZE * 8); +bitstream_init(&bc, buf, FRAMESIZE * 8); for (i = 0; i < LPC_ORDER; i++) -lpc_refl[i] = ff_lpc_refl_cb[i][get_bits(&gb, sizes[i])]; +lpc_refl[i] = ff_lpc_refl_cb[i][bitstream_read(&bc, sizes[i])]; ff_eval_coefs(ractx->lpc_coef[0], lpc_refl); ractx->lpc_refl_rms[0] = ff_rms(lpc_refl); -energy = ff_energy_tab[get_bits(&gb, 5)]; +energy = ff_energy_tab[bitstream_read(&bc, 5)]; refl_rms[0] = ff_interp(ractx, block_coefs[0], 1, 1, ractx->old_energy); refl_rms[1] = ff_interp(ractx, block_coefs[1], 2, @@ -111,7 +112,7 @@ static int ra144_decode_frame(AVCodecContext * avctx, void *data, ff_int_to_int16(block_coefs[3], ractx->lpc_coef[0]); for (i=0; i < NBLOCKS; i++) { -do_output_subblock(ractx, block_coefs[i], refl_rms[i], &gb); +do_output_subblock(ractx, block_coefs[i], refl_rms[i], &bc); for (j=0; j < BLOCKSIZE; j++) *samples++ = av_clip_int16(ractx->curr_sblock[j + 10] << 2); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] twinvq: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 14 10:59:22 2016 +0200| [85f760fedd49816f3a197da22f4c8e33d1b3dda7] | committer: Diego Biurrun twinvq: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=85f760fedd49816f3a197da22f4c8e33d1b3dda7 --- libavcodec/twinvq_data.h | 2 +- libavcodec/twinvqdec.c | 42 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/libavcodec/twinvq_data.h b/libavcodec/twinvq_data.h index 01a54a5..cc7ba59 100644 --- a/libavcodec/twinvq_data.h +++ b/libavcodec/twinvq_data.h @@ -130,7 +130,7 @@ static const uint16_t bark_tab_s44_128[] = { /** * TwinVQ codebooks. They are coded in a struct so we can use code such as * - * float val = tab.fcb0808l[get_bits(gb, 12)]; + * float val = tab.fcb0808l[bitstream_read(bc, 12)]; * * without risking a segfault on malformed files. */ diff --git a/libavcodec/twinvqdec.c b/libavcodec/twinvqdec.c index 56df105..6355ad4 100644 --- a/libavcodec/twinvqdec.c +++ b/libavcodec/twinvqdec.c @@ -23,8 +23,9 @@ #include #include "libavutil/channel_layout.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "internal.h" #include "twinvq.h" #include "twinvq_data.h" @@ -235,7 +236,7 @@ static void dec_bark_env(TwinVQContext *tctx, const uint8_t *in, int use_hist, } } -static void read_cb_data(TwinVQContext *tctx, GetBitContext *gb, +static void read_cb_data(TwinVQContext *tctx, BitstreamContext *bc, uint8_t *dst, enum TwinVQFrameType ftype) { int i; @@ -243,8 +244,8 @@ static void read_cb_data(TwinVQContext *tctx, GetBitContext *gb, for (i = 0; i < tctx->n_div[ftype]; i++) { int bs_second_part = (i >= tctx->bits_main_spec_change[ftype]); -*dst++ = get_bits(gb, tctx->bits_main_spec[0][ftype][bs_second_part]); -*dst++ = get_bits(gb, tctx->bits_main_spec[1][ftype][bs_second_part]); +*dst++ = bitstream_read(bc, tctx->bits_main_spec[0][ftype][bs_second_part]); +*dst++ = bitstream_read(bc, tctx->bits_main_spec[1][ftype][bs_second_part]); } } @@ -255,13 +256,13 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx, const TwinVQModeTab *mtab = tctx->mtab; int channels = tctx->avctx->channels; int sub; -GetBitContext gb; +BitstreamContext bc; int i, j, k; -init_get_bits(&gb, buf, buf_size * 8); -skip_bits(&gb, get_bits(&gb, 8)); +bitstream_init(&bc, buf, buf_size * 8); +bitstream_skip(&bc, bitstream_read(&bc, 8)); -bits->window_type = get_bits(&gb, TWINVQ_WINDOW_TYPE_BITS); +bits->window_type = bitstream_read(&bc, TWINVQ_WINDOW_TYPE_BITS); if (bits->window_type > 8) { av_log(avctx, AV_LOG_ERROR, "Invalid window type, broken sample?\n"); @@ -272,43 +273,42 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx, sub = mtab->fmode[bits->ftype].sub; -read_cb_data(tctx, &gb, bits->main_coeffs, bits->ftype); +read_cb_data(tctx, &bc, bits->main_coeffs, bits->ftype); for (i = 0; i < channels; i++) for (j = 0; j < sub; j++) for (k = 0; k < mtab->fmode[bits->ftype].bark_n_coef; k++) bits->bark1[i][j][k] = -get_bits(&gb, mtab->fmode[bits->ftype].bark_n_bit); +bitstream_read(&bc, mtab->fmode[bits->ftype].bark_n_bit); for (i = 0; i < channels; i++) for (j = 0; j < sub; j++) -bits->bark_use_hist[i][j] = get_bits1(&gb); +bits->bark_use_hist[i][j] = bitstream_read_bit(&bc); if (bits->ftype == TWINVQ_FT_LONG) { for (i = 0; i < channels; i++) -bits->gain_bits[i] = get_bits(&gb, TWINVQ_GAIN_BITS); +bits->gain_bits[i] = bitstream_read(&bc, TWINVQ_GAIN_BITS); } else { for (i = 0; i < channels; i++) { -bits->gain_bits[i] = get_bits(&gb, TWINVQ_GAIN_BITS); +bits->gain_bits[i] = bitstream_read(&bc, TWINVQ_GAIN_BITS); for (j = 0; j < sub; j++) -bits->sub_gain_bits[i * sub + j] = get_bits(&gb, - TWINVQ_SUB_GAIN_BITS); +bits->sub_gain_bits[i * sub + j] = bitstream_read(&bc, TWINVQ_SUB_GAIN_BITS); } } for (i = 0; i < channels; i++) { -bits->lpc_hist_idx[i] = get_bits(&gb, mtab->lsp_bit0); -bits->lpc_idx1[i] = get_bits(&gb, mtab->lsp_bit1); +bits->lpc_hist_idx[i] = bitstream_read(&bc, mtab->lsp_bit0); +b
[FFmpeg-cvslog] utvideodec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 14 11:07:15 2016 +0200| [104a4289f925c600c13035de6c282fe656510a27] | committer: Diego Biurrun utvideodec: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=104a4289f925c600c13035de6c282fe656510a27 --- libavcodec/utvideodec.c | 15 --- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c index 3a58156..29de815 100644 --- a/libavcodec/utvideodec.c +++ b/libavcodec/utvideodec.c @@ -28,10 +28,11 @@ #include #include "libavutil/intreadwrite.h" + #include "avcodec.h" +#include "bitstream.h" #include "bswapdsp.h" #include "bytestream.h" -#include "get_bits.h" #include "thread.h" #include "utvideo.h" @@ -85,7 +86,7 @@ static int decode_plane(UtvideoContext *c, int plane_no, int i, j, slice, pix; int sstart, send; VLC vlc; -GetBitContext gb; +BitstreamContext bc; int prev, fsym; const int cmask = ~(!plane_no && c->avctx->pix_fmt == AV_PIX_FMT_YUV420P); @@ -146,17 +147,17 @@ static int decode_plane(UtvideoContext *c, int plane_no, c->bdsp.bswap_buf((uint32_t *) c->slice_bits, (uint32_t *) c->slice_bits, (slice_data_end - slice_data_start + 3) >> 2); -init_get_bits(&gb, c->slice_bits, slice_size * 8); +bitstream_init(&bc, c->slice_bits, slice_size * 8); prev = 0x80; for (j = sstart; j < send; j++) { for (i = 0; i < width * step; i += step) { -if (get_bits_left(&gb) <= 0) { +if (bitstream_bits_left(&bc) <= 0) { av_log(c->avctx, AV_LOG_ERROR, "Slice decoding ran out of bits\n"); goto fail; } -pix = get_vlc2(&gb, vlc.table, vlc.bits, 4); +pix = bitstream_read_vlc(&bc, vlc.table, vlc.bits, 4); if (pix < 0) { av_log(c->avctx, AV_LOG_ERROR, "Decoding error\n"); goto fail; @@ -169,9 +170,9 @@ static int decode_plane(UtvideoContext *c, int plane_no, } dest += stride; } -if (get_bits_left(&gb) > 32) +if (bitstream_bits_left(&bc) > 32) av_log(c->avctx, AV_LOG_WARNING, - "%d bits left after decoding slice\n", get_bits_left(&gb)); + "%d bits left after decoding slice\n", bitstream_bits_left(&bc)); } ff_free_vlc(&vlc); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] svq1dec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 20:25:22 2016 +0200| [9f78e3a46d15abbdc900d755818ef235ae5e886c] | committer: Diego Biurrun svq1dec: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9f78e3a46d15abbdc900d755818ef235ae5e886c --- libavcodec/svq1dec.c | 120 +-- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c index cc43f14..2ab0f23 100644 --- a/libavcodec/svq1dec.c +++ b/libavcodec/svq1dec.c @@ -33,7 +33,7 @@ */ #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "h263.h" #include "hpeldsp.h" #include "internal.h" @@ -55,7 +55,7 @@ typedef struct svq1_pmv_s { typedef struct SVQ1Context { HpelDSPContext hdsp; -GetBitContext gb; +BitstreamContext bc; AVFrame *prev; uint8_t *pkt_swapped; @@ -111,7 +111,7 @@ static const uint8_t string_table[256] = { break; \ } \ /* divide block if next bit set */ \ -if (get_bits1(bitbuf) == 0) \ +if (bitstream_read_bit(bc) == 0)\ break; \ /* add child nodes */ \ list[n++] = list[i];\ @@ -145,7 +145,7 @@ static const uint8_t string_table[256] = { #define SVQ1_CALC_CODEBOOK_ENTRIES(cbook) \ codebook = (const uint32_t *)cbook[level]; \ if (stages > 0) \ -bit_cache = get_bits(bitbuf, 4 * stages); \ +bit_cache = bitstream_read(bc, 4 * stages); \ /* calculate codebook entries for this vector */\ for (j = 0; j < stages; j++) { \ entries[j] = (((bit_cache >> (4 * (stages - j - 1))) & 0xF) + \ @@ -154,7 +154,7 @@ static const uint8_t string_table[256] = { mean -= stages * 128; \ n4= mean + (mean >> 31) << 16 | (mean & 0x); -static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, +static int svq1_decode_block_intra(BitstreamContext *bc, uint8_t *pixels, ptrdiff_t pitch) { uint32_t bit_cache; @@ -180,7 +180,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, height = 1 << ((3 + level) / 2); /* get number of stages (-1 skips vector, 0 for mean only) */ -stages = get_vlc2(bitbuf, svq1_intra_multistage[level].table, 3, 3) - 1; +stages = bitstream_read_vlc(bc, svq1_intra_multistage[level].table, 3, 3) - 1; if (stages == -1) { for (y = 0; y < height; y++) @@ -195,7 +195,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, return AVERROR_INVALIDDATA; /* invalid vector */ } -mean = get_vlc2(bitbuf, svq1_intra_mean.table, 8, 3); +mean = bitstream_read_vlc(bc, svq1_intra_mean.table, 8, 3); if (stages == 0) { for (y = 0; y < height; y++) @@ -219,7 +219,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, return 0; } -static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, +static int svq1_decode_block_non_intra(BitstreamContext *bc, uint8_t *pixels, ptrdiff_t pitch) { uint32_t bit_cache; @@ -245,7 +245,7 @@ static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, height = 1 << ((3 + level) / 2); /* get number of stages (-1 skips vector, 0 for mean only) */ -stages = get_vlc2(bitbuf, svq1_inter_multistage[level].table, 3, 2) - 1; +stages = bitstream_read_vlc(bc, svq1_inter_multistage[level].table, 3, 2) - 1; if (stages == -1) continue; /* skip vector */ @@ -257,7 +257,7 @@ static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, return AVERROR_INVALIDDATA; /* invalid vector */ } -mean = get_vlc2(bitbuf, svq1_inter_mean.table, 9, 3) - 256; +mean = bitstream_read_vlc(bc, svq1_inter_mean.table, 9, 3) - 256; SVQ1_CALC_CODEBOOK_ENTRIES(ff_svq1_inter_codebooks); @@ -277,7 +277,7 @@ static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, return 0; } -static int svq1_dec
[FFmpeg-cvslog] rdt: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 16 17:58:30 2016 +0200| [2dbe2aa2c2d4f02d2669feae45dee4fc45414813] | committer: Diego Biurrun rdt: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2dbe2aa2c2d4f02d2669feae45dee4fc45414813 --- libavformat/rdt.c | 35 ++- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/libavformat/rdt.c b/libavformat/rdt.c index eb718cf..da5ff59 100644 --- a/libavformat/rdt.c +++ b/libavformat/rdt.c @@ -25,6 +25,8 @@ * @author Ronald S. Bultje */ +#include "libavcodec/bitstream.h" + #include "avformat.h" #include "libavutil/avstring.h" #include "rtpdec.h" @@ -34,7 +36,6 @@ #include "rm.h" #include "internal.h" #include "avio_internal.h" -#include "libavcodec/get_bits.h" struct RDTDemuxContext { AVFormatContext *ic; /**< the containing (RTSP) demux context */ @@ -191,7 +192,7 @@ ff_rdt_parse_header(const uint8_t *buf, int len, int *pset_id, int *pseq_no, int *pstream_id, int *pis_keyframe, uint32_t *ptimestamp) { -GetBitContext gb; +BitstreamContext bc; int consumed = 0, set_id, seq_no, stream_id, is_keyframe, len_included, need_reliable; uint32_t timestamp; @@ -261,24 +262,24 @@ ff_rdt_parse_header(const uint8_t *buf, int len, * [2] http://www.wireshark.org/docs/dfref/r/rdt.html and * http://anonsvn.wireshark.org/viewvc/trunk/epan/dissectors/packet-rdt.c */ -init_get_bits(&gb, buf, len << 3); -len_included = get_bits1(&gb); -need_reliable = get_bits1(&gb); -set_id= get_bits(&gb, 5); -skip_bits(&gb, 1); -seq_no= get_bits(&gb, 16); +bitstream_init(&bc, buf, len << 3); +len_included = bitstream_read_bit(&bc); +need_reliable = bitstream_read_bit(&bc); +set_id= bitstream_read(&bc, 5); +bitstream_skip(&bc, 1); +seq_no= bitstream_read(&bc, 16); if (len_included) -skip_bits(&gb, 16); -skip_bits(&gb, 2); -stream_id = get_bits(&gb, 5); -is_keyframe = !get_bits1(&gb); -timestamp = get_bits_long(&gb, 32); +bitstream_skip(&bc, 16); +bitstream_skip(&bc, 2); +stream_id = bitstream_read(&bc, 5); +is_keyframe = !bitstream_read_bit(&bc); +timestamp = bitstream_read(&bc, 32); if (set_id == 0x1f) -set_id= get_bits(&gb, 16); +set_id= bitstream_read(&bc, 16); if (need_reliable) -skip_bits(&gb, 16); +bitstream_skip(&bc, 16); if (stream_id == 0x1f) -stream_id = get_bits(&gb, 16); +stream_id = bitstream_read(&bc, 16); if (pset_id) *pset_id = set_id; if (pseq_no) *pseq_no = seq_no; @@ -286,7 +287,7 @@ ff_rdt_parse_header(const uint8_t *buf, int len, if (pis_keyframe) *pis_keyframe = is_keyframe; if (ptimestamp) *ptimestamp = timestamp; -return consumed + (get_bits_count(&gb) >> 3); +return consumed + (bitstream_tell(&bc) >> 3); } /**< return 0 on packet, no more left, 1 on packet, 1 on partial packet... */ ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] xsubdec: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Fri Apr 15 11:03:55 2016 +0200| [178b4ea5f9a43009781311af2737284fdca48a5c] | committer: Diego Biurrun xsubdec: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=178b4ea5f9a43009781311af2737284fdca48a5c --- libavcodec/xsubdec.c | 15 --- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavcodec/xsubdec.c b/libavcodec/xsubdec.c index 3af300c..a07f94c 100644 --- a/libavcodec/xsubdec.c +++ b/libavcodec/xsubdec.c @@ -21,8 +21,9 @@ #include "libavutil/mathematics.h" #include "libavutil/imgutils.h" + #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "bytestream.h" static av_cold int decode_init(AVCodecContext *avctx) { @@ -55,7 +56,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *bitmap; int w, h, x, y, i; int64_t packet_time = 0; -GetBitContext gb; +BitstreamContext bc; int has_alpha = avctx->codec_tag == MKTAG('D','X','S','A'); memset(sub, 0, sizeof(*sub)); @@ -146,15 +147,15 @@ FF_ENABLE_DEPRECATION_WARNINGS #endif // process RLE-compressed data -init_get_bits(&gb, buf, (buf_end - buf) * 8); +bitstream_init(&bc, buf, (buf_end - buf) * 8); bitmap = sub->rects[0]->data[0]; for (y = 0; y < h; y++) { // interlaced: do odd lines if (y == (h + 1) / 2) bitmap = sub->rects[0]->data[0] + w; for (x = 0; x < w; ) { -int log2 = ff_log2_tab[show_bits(&gb, 8)]; -int run = get_bits(&gb, 14 - 4 * (log2 >> 1)); -int color = get_bits(&gb, 2); +int log2 = ff_log2_tab[bitstream_peek(&bc, 8)]; +int run = bitstream_read(&bc, 14 - 4 * (log2 >> 1)); +int color = bitstream_read(&bc, 2); run = FFMIN(run, w - x); // run length 0 means till end of row if (!run) run = w - x; @@ -164,7 +165,7 @@ FF_ENABLE_DEPRECATION_WARNINGS } // interlaced, skip every second line bitmap += w; -align_get_bits(&gb); +bitstream_align(&bc); } *data_size = 1; return buf_size; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] vble: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Thu Apr 14 11:52:48 2016 +0200| [e5bdfc679004199c4a1837e256046331e5e4e713] | committer: Diego Biurrun vble: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e5bdfc679004199c4a1837e256046331e5e4e713 --- libavcodec/vble.c | 26 +- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/libavcodec/vble.c b/libavcodec/vble.c index 1a78036..fef1090 100644 --- a/libavcodec/vble.c +++ b/libavcodec/vble.c @@ -28,7 +28,7 @@ #define BITSTREAM_READER_LE #include "avcodec.h" -#include "get_bits.h" +#include "bitstream.h" #include "huffyuvdsp.h" #include "internal.h" #include "mathops.h" @@ -41,18 +41,18 @@ typedef struct VBLEContext { uint8_t*val; /* First holds the lengths of vlc symbols and then their values */ } VBLEContext; -static uint8_t vble_read_reverse_unary(GetBitContext *gb) +static uint8_t vble_read_reverse_unary(BitstreamContext *bc) { /* At most we need to read 9 bits total to get indices up to 8 */ -uint8_t val = show_bits(gb, 8); +uint8_t val = bitstream_peek(bc, 8); if (val) { val = 7 - av_log2_16bit(ff_reverse[val]); -skip_bits(gb, val + 1); +bitstream_skip(bc, val + 1); return val; } else { -skip_bits(gb, 8); -if (get_bits1(gb)) +bitstream_skip(bc, 8); +if (bitstream_read_bit(bc)) return 8; } @@ -60,13 +60,13 @@ static uint8_t vble_read_reverse_unary(GetBitContext *gb) return UINT8_MAX; } -static int vble_unpack(VBLEContext *ctx, GetBitContext *gb) +static int vble_unpack(VBLEContext *ctx, BitstreamContext *bc) { int i; /* Read all the lengths in first */ for (i = 0; i < ctx->size; i++) { -ctx->val[i] = vble_read_reverse_unary(gb); +ctx->val[i] = vble_read_reverse_unary(bc); if (ctx->val[i] == UINT8_MAX) return -1; @@ -74,12 +74,12 @@ static int vble_unpack(VBLEContext *ctx, GetBitContext *gb) for (i = 0; i < ctx->size; i++) { /* Check we have enough bits left */ -if (get_bits_left(gb) < ctx->val[i]) +if (bitstream_bits_left(bc) < ctx->val[i]) return -1; /* get_bits can't take a length of 0 */ if (ctx->val[i]) -ctx->val[i] = (1 << ctx->val[i]) + get_bits(gb, ctx->val[i]) - 1; +ctx->val[i] = (1 << ctx->val[i]) + bitstream_read(bc, ctx->val[i]) - 1; } return 0; @@ -118,7 +118,7 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, { VBLEContext *ctx = avctx->priv_data; AVFrame *pic = data; -GetBitContext gb; +BitstreamContext bc; const uint8_t *src = avpkt->data; int version; int offset = 0; @@ -140,10 +140,10 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, if (version != 1) av_log(avctx, AV_LOG_WARNING, "Unsupported VBLE Version: %d\n", version); -init_get_bits(&gb, src + 4, (avpkt->size - 4) * 8); +bitstream_init(&bc, src + 4, (avpkt->size - 4) * 8); /* Unpack */ -if (vble_unpack(ctx, &gb) < 0) { +if (vble_unpack(ctx, &bc) < 0) { av_log(avctx, AV_LOG_ERROR, "Invalid Code\n"); return AVERROR_INVALIDDATA; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] truemotion2: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sat Apr 23 15:11:27 2016 +0200| [9ab1a3e28371f599afe05aea9f7ca75fd8eb3c3f] | committer: Diego Biurrun truemotion2: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9ab1a3e28371f599afe05aea9f7ca75fd8eb3c3f --- libavcodec/truemotion2.c | 40 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c index 1726440..99884be 100644 --- a/libavcodec/truemotion2.c +++ b/libavcodec/truemotion2.c @@ -27,9 +27,9 @@ #include #include "avcodec.h" +#include "bitstream.h" #include "bswapdsp.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #define TM2_ESCAPE 0x8000 @@ -62,7 +62,7 @@ typedef struct TM2Context { AVCodecContext *avctx; AVFrame *pic; -GetBitContext gb; +BitstreamContext bc; BswapDSPContext bdsp; /* TM2 streams */ @@ -117,7 +117,7 @@ static int tm2_read_tree(TM2Context *ctx, uint32_t prefix, int length, TM2Huff * return AVERROR_INVALIDDATA; } -if (!get_bits1(&ctx->gb)) { /* literal */ +if (!bitstream_read_bit(&ctx->bc)) { /* literal */ if (length == 0) { length = 1; } @@ -125,7 +125,7 @@ static int tm2_read_tree(TM2Context *ctx, uint32_t prefix, int length, TM2Huff * av_log(ctx->avctx, AV_LOG_DEBUG, "Too many literals\n"); return AVERROR_INVALIDDATA; } -huff->nums[huff->num] = get_bits_long(&ctx->gb, huff->val_bits); +huff->nums[huff->num] = bitstream_read(&ctx->bc, huff->val_bits); huff->bits[huff->num] = prefix; huff->lens[huff->num] = length; huff->num++; @@ -144,10 +144,10 @@ static int tm2_build_huff_table(TM2Context *ctx, TM2Codes *code) TM2Huff huff; int res = 0; -huff.val_bits = get_bits(&ctx->gb, 5); -huff.max_bits = get_bits(&ctx->gb, 5); -huff.min_bits = get_bits(&ctx->gb, 5); -huff.nodes= get_bits_long(&ctx->gb, 17); +huff.val_bits = bitstream_read(&ctx->bc, 5); +huff.max_bits = bitstream_read(&ctx->bc, 5); +huff.min_bits = bitstream_read(&ctx->bc, 5); +huff.nodes= bitstream_read(&ctx->bc, 17); huff.num = 0; /* check for correct codes parameters */ @@ -222,10 +222,10 @@ static void tm2_free_codes(TM2Codes *code) ff_free_vlc(&code->vlc); } -static inline int tm2_get_token(GetBitContext *gb, TM2Codes *code) +static inline int tm2_get_token(BitstreamContext *bc, TM2Codes *code) { int val; -val = get_vlc2(gb, code->vlc.table, code->bits, 1); +val = bitstream_read_vlc(bc, code->vlc.table, code->bits, 1); return code->recode[val]; } @@ -254,8 +254,8 @@ static int tm2_read_deltas(TM2Context *ctx, int stream_id) int d, mb; int i, v; -d = get_bits(&ctx->gb, 9); -mb = get_bits(&ctx->gb, 5); +d = bitstream_read(&ctx->bc, 9); +mb = bitstream_read(&ctx->bc, 5); if ((d < 1) || (d > TM2_DELTAS) || (mb < 1) || (mb > 32)) { av_log(ctx->avctx, AV_LOG_ERROR, "Incorrect delta table: %i deltas x %i bits\n", d, mb); @@ -263,7 +263,7 @@ static int tm2_read_deltas(TM2Context *ctx, int stream_id) } for (i = 0; i < d; i++) { -v = get_bits_long(&ctx->gb, mb); +v = bitstream_read(&ctx->bc, mb); if (v & (1 << (mb - 1))) ctx->deltas[stream_id][i] = v - (1 << mb); else @@ -306,10 +306,10 @@ static int tm2_read_stream(TM2Context *ctx, const uint8_t *buf, int stream_id, i pos = bytestream2_tell(&gb); if (skip <= pos) return AVERROR_INVALIDDATA; -init_get_bits(&ctx->gb, buf + pos, (skip - pos) * 8); +bitstream_init(&ctx->bc, buf + pos, (skip - pos) * 8); if ((ret = tm2_read_deltas(ctx, stream_id)) < 0) return ret; -bytestream2_skip(&gb, ((get_bits_count(&ctx->gb) + 31) >> 5) << 2); +bytestream2_skip(&gb, ((bitstream_tell(&ctx->bc) + 31) >> 5) << 2); } } /* skip unused fields */ @@ -323,10 +323,10 @@ static int tm2_read_stream(TM2Context *ctx, const uint8_t *buf, int stream_id, i pos = bytestream2_tell(&gb); if (skip <= pos) return AVERROR_INVALIDDATA; -init_get_bits(&ctx->gb, buf + pos, (skip - pos) * 8); +bitstream_init(&ctx->bc, buf + pos, (skip - pos) * 8); if ((ret = tm2_build_huff_table(ctx, &codes)) < 0) return ret; -bytestream2_ski
[FFmpeg-cvslog] ra288: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 19:34:49 2016 +0200| [c60cda7cb476315fd7f6d28715316b1aff2e080a] | committer: Diego Biurrun ra288: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c60cda7cb476315fd7f6d28715316b1aff2e080a --- libavcodec/ra288.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/ra288.c b/libavcodec/ra288.c index 96d8d1e..bc3fe29 100644 --- a/libavcodec/ra288.c +++ b/libavcodec/ra288.c @@ -25,8 +25,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "celp_filters.h" -#include "get_bits.h" #include "internal.h" #include "lpc.h" #include "ra288.h" @@ -181,7 +181,7 @@ static int ra288_decode_frame(AVCodecContext * avctx, void *data, float *out; int i, ret; RA288Context *ractx = avctx->priv_data; -GetBitContext gb; +BitstreamContext bc; if (buf_size < avctx->block_align) { av_log(avctx, AV_LOG_ERROR, @@ -198,11 +198,11 @@ static int ra288_decode_frame(AVCodecContext * avctx, void *data, } out = (float *)frame->data[0]; -init_get_bits(&gb, buf, avctx->block_align * 8); +bitstream_init(&bc, buf, avctx->block_align * 8); for (i=0; i < RA288_BLOCKS_PER_FRAME; i++) { -float gain = amptable[get_bits(&gb, 3)]; -int cb_coef = get_bits(&gb, 6 + (i&1)); +float gain = amptable[bitstream_read(&bc, 3)]; +int cb_coef = bitstream_read(&bc, 6 + (i & 1)); decode(ractx, gain, cb_coef); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] smacker: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 13 19:56:53 2016 +0200| [6efbc88a5cf40c8e6f3c4f7897caf83165920d3b] | committer: Diego Biurrun smacker: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6efbc88a5cf40c8e6f3c4f7897caf83165920d3b --- libavcodec/smacker.c | 143 +++ 1 file changed, 75 insertions(+), 68 deletions(-) diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index e3e5475..027728e 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -35,8 +35,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #include "mathops.h" @@ -93,9 +93,10 @@ enum SmkBlockTypes { /** * Decode local frame tree */ -static int smacker_decode_tree(GetBitContext *gb, HuffContext *hc, uint32_t prefix, int length) +static int smacker_decode_tree(BitstreamContext *bc, HuffContext *hc, + uint32_t prefix, int length) { -if(!get_bits1(gb)){ //Leaf +if (!bitstream_read_bit(bc)) { // Leaf if(hc->current >= 256){ av_log(NULL, AV_LOG_ERROR, "Tree size exceeded!\n"); return -1; @@ -107,7 +108,7 @@ static int smacker_decode_tree(GetBitContext *gb, HuffContext *hc, uint32_t pref hc->bits[hc->current] = 0; hc->lengths[hc->current] = 0; } -hc->values[hc->current] = get_bits(gb, 8); +hc->values[hc->current] = bitstream_read(bc, 8); hc->current++; if(hc->maxlength < length) hc->maxlength = length; @@ -115,26 +116,27 @@ static int smacker_decode_tree(GetBitContext *gb, HuffContext *hc, uint32_t pref } else { //Node int r; length++; -r = smacker_decode_tree(gb, hc, prefix, length); +r = smacker_decode_tree(bc, hc, prefix, length); if(r) return r; -return smacker_decode_tree(gb, hc, prefix | (1 << (length - 1)), length); +return smacker_decode_tree(bc, hc, prefix | (1 << (length - 1)), length); } } /** * Decode header tree */ -static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx) +static int smacker_decode_bigtree(BitstreamContext *bc, HuffContext *hc, + DBCtx *ctx) { if (hc->current + 1 >= hc->length) { av_log(NULL, AV_LOG_ERROR, "Tree size exceeded!\n"); return -1; } -if(!get_bits1(gb)){ //Leaf +if (!bitstream_read_bit(bc)) { // Leaf int val, i1, i2; -i1 = ctx->v1->table ? get_vlc2(gb, ctx->v1->table, SMKTREE_BITS, 3) : 0; -i2 = ctx->v2->table ? get_vlc2(gb, ctx->v2->table, SMKTREE_BITS, 3) : 0; +i1 = ctx->v1->table ? bitstream_read_vlc(bc, ctx->v1->table, SMKTREE_BITS, 3) : 0; +i2 = ctx->v2->table ? bitstream_read_vlc(bc, ctx->v2->table, SMKTREE_BITS, 3) : 0; if (i1 < 0 || i2 < 0) return -1; val = ctx->recode1[i1] | (ctx->recode2[i2] << 8); @@ -155,12 +157,12 @@ static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx int r = 0, r_new, t; t = hc->current++; -r = smacker_decode_bigtree(gb, hc, ctx); +r = smacker_decode_bigtree(bc, hc, ctx); if(r < 0) return r; hc->values[t] = SMK_NODE | r; r++; -r_new = smacker_decode_bigtree(gb, hc, ctx); +r_new = smacker_decode_bigtree(bc, hc, ctx); if (r_new < 0) return r_new; return r + r_new; @@ -170,7 +172,8 @@ static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx /** * Store large tree as Libav's vlc codes */ -static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int **recodes, int *last, int size) +static int smacker_decode_header_tree(SmackVContext *smk, BitstreamContext *bc, + int **recodes, int *last, int size) { int res; HuffContext huff; @@ -204,9 +207,9 @@ static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int goto error; } -if(get_bits1(gb)) { -smacker_decode_tree(gb, &tmp1, 0, 0); -skip_bits1(gb); +if (bitstream_read_bit(bc)) { +smacker_decode_tree(bc, &tmp1, 0, 0); +bitstream_skip(bc, 1); res = init_vlc(&vlc[0], SMKTREE_BITS, tmp1.length, tmp1.lengths, sizeof(int), sizeof(int), tmp1.bits, sizeof(uint32_t), sizeof(uint32_t), INIT_VLC_LE); @@ -218,9 +221,9 @@ static int smacker_decode_header_tree(SmackVContext *smk, G
[FFmpeg-cvslog] webp: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Wed Apr 6 20:26:48 2016 +0200| [39ecf0588fb2ea4ff9b22c89e836b07f9fe2d24f] | committer: Diego Biurrun webp: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=39ecf0588fb2ea4ff9b22c89e836b07f9fe2d24f --- libavcodec/webp.c | 106 ++ 1 file changed, 50 insertions(+), 56 deletions(-) diff --git a/libavcodec/webp.c b/libavcodec/webp.c index b26399c504..a6ab52bf83 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -41,8 +41,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "bytestream.h" -#include "get_bits.h" #include "internal.h" #include "thread.h" #include "vp8.h" @@ -183,7 +183,7 @@ typedef struct ImageContext { typedef struct WebPContext { VP8Context v; /* VP8 Context used for lossy decoding */ -GetBitContext gb; /* bitstream reader for main image chunk */ +BitstreamContext bc;/* bitstream reader for main image chunk */ AVFrame *alpha_frame; /* AVFrame for alpha data decompressed from VP8L */ AVCodecContext *avctx; /* parent AVCodecContext */ int initialized;/* set once the VP8 context is initialized */ @@ -232,47 +232,41 @@ static void image_ctx_free(ImageContext *img) * - assumes 8-bit table to make reversal simpler * - assumes max depth of 2 since the max code length for WebP is 15 */ -static av_always_inline int webp_get_vlc(GetBitContext *gb, VLC_TYPE (*table)[2]) +static av_always_inline int webp_get_vlc(BitstreamContext *bc, VLC_TYPE (*table)[2]) { int n, nb_bits; unsigned int index; int code; -OPEN_READER(re, gb); -UPDATE_CACHE(re, gb); - -index = SHOW_UBITS(re, gb, 8); +index = bitstream_peek(bc, 8); index = ff_reverse[index]; code = table[index][0]; n = table[index][1]; if (n < 0) { -LAST_SKIP_BITS(re, gb, 8); -UPDATE_CACHE(re, gb); +bitstream_skip(bc, 8); nb_bits = -n; -index = SHOW_UBITS(re, gb, nb_bits); +index = bitstream_peek(bc, nb_bits); index = (ff_reverse[index] >> (8 - nb_bits)) + code; code = table[index][0]; n = table[index][1]; } -SKIP_BITS(re, gb, n); - -CLOSE_READER(re, gb); +bitstream_skip(bc, n); return code; } -static int huff_reader_get_symbol(HuffReader *r, GetBitContext *gb) +static int huff_reader_get_symbol(HuffReader *r, BitstreamContext *bc) { if (r->simple) { if (r->nb_symbols == 1) return r->simple_symbols[0]; else -return r->simple_symbols[get_bits1(gb)]; +return r->simple_symbols[bitstream_read_bit(bc)]; } else -return webp_get_vlc(gb, r->vlc.table); +return webp_get_vlc(bc, r->vlc.table); } static int huff_reader_build_canonical(HuffReader *r, int *code_lengths, @@ -339,15 +333,15 @@ static int huff_reader_build_canonical(HuffReader *r, int *code_lengths, static void read_huffman_code_simple(WebPContext *s, HuffReader *hc) { -hc->nb_symbols = get_bits1(&s->gb) + 1; +hc->nb_symbols = bitstream_read_bit(&s->bc) + 1; -if (get_bits1(&s->gb)) -hc->simple_symbols[0] = get_bits(&s->gb, 8); +if (bitstream_read_bit(&s->bc)) +hc->simple_symbols[0] = bitstream_read(&s->bc, 8); else -hc->simple_symbols[0] = get_bits1(&s->gb); +hc->simple_symbols[0] = bitstream_read_bit(&s->bc); if (hc->nb_symbols == 2) -hc->simple_symbols[1] = get_bits(&s->gb, 8); +hc->simple_symbols[1] = bitstream_read(&s->bc, 8); hc->simple = 1; } @@ -359,13 +353,13 @@ static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, int *code_lengths = NULL; int code_length_code_lengths[NUM_CODE_LENGTH_CODES] = { 0 }; int i, symbol, max_symbol, prev_code_len, ret; -int num_codes = 4 + get_bits(&s->gb, 4); +int num_codes = 4 + bitstream_read(&s->bc, 4); if (num_codes > NUM_CODE_LENGTH_CODES) return AVERROR_INVALIDDATA; for (i = 0; i < num_codes; i++) -code_length_code_lengths[code_length_code_order[i]] = get_bits(&s->gb, 3); +code_length_code_lengths[code_length_code_order[i]] = bitstream_read(&s->bc, 3); ret = huff_reader_build_canonical(&code_len_hc, code_length_code_lengths, NUM_CODE_LENGTH_CODES); @@ -378,9 +372,9 @@ static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, goto finish; } -if (get_bits1(&s->gb)) { -
[FFmpeg-cvslog] imc: Convert to the new bitstream reader
ffmpeg | branch: master | Alexandra Hájková | Sun Apr 10 12:24:42 2016 +0200| [f5b7bd2a7c3f3498119f7c4484962e15e8f2ad26] | committer: Diego Biurrun imc: Convert to the new bitstream reader > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f5b7bd2a7c3f3498119f7c4484962e15e8f2ad26 --- libavcodec/imc.c | 45 +++-- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/libavcodec/imc.c b/libavcodec/imc.c index 9a6912dc13..01ab0125f2 100644 --- a/libavcodec/imc.c +++ b/libavcodec/imc.c @@ -37,9 +37,10 @@ #include "libavutil/channel_layout.h" #include "libavutil/float_dsp.h" #include "libavutil/internal.h" + #include "avcodec.h" +#include "bitstream.h" #include "bswapdsp.h" -#include "get_bits.h" #include "fft.h" #include "internal.h" #include "sinewin.h" @@ -91,7 +92,7 @@ typedef struct IMCContext { //@} float sqrt_tab[30]; -GetBitContext gb; +BitstreamContext bc; BswapDSPContext bdsp; AVFloatDSPContext fdsp; @@ -328,12 +329,12 @@ static void imc_read_level_coeffs(IMCContext *q, int stream_format_code, if (stream_format_code & 4) start = 1; if (start) -levlCoeffs[0] = get_bits(&q->gb, 7); +levlCoeffs[0] = bitstream_read(&q->bc, 7); for (i = start; i < BANDS; i++) { -levlCoeffs[i] = get_vlc2(&q->gb, hufftab[cb_sel[i]]->table, - hufftab[cb_sel[i]]->bits, 2); +levlCoeffs[i] = bitstream_read_vlc(&q->bc, hufftab[cb_sel[i]]->table, + hufftab[cb_sel[i]]->bits, 2); if (levlCoeffs[i] == 17) -levlCoeffs[i] += get_bits(&q->gb, 4); +levlCoeffs[i] += bitstream_read(&q->bc, 4); } } @@ -342,10 +343,10 @@ static void imc_read_level_coeffs_raw(IMCContext *q, int stream_format_code, { int i; -q->coef0_pos = get_bits(&q->gb, 5); -levlCoeffs[0] = get_bits(&q->gb, 7); +q->coef0_pos = bitstream_read(&q->bc, 5); +levlCoeffs[0] = bitstream_read(&q->bc, 7); for (i = 1; i < BANDS; i++) -levlCoeffs[i] = get_bits(&q->gb, 4); +levlCoeffs[i] = bitstream_read(&q->bc, 4); } static void imc_decode_level_coefficients(IMCContext *q, int *levlCoeffBuf, @@ -612,19 +613,19 @@ static void imc_get_skip_coeff(IMCContext *q, IMCChannel *chctx) chctx->skipFlagBits[i] = band_tab[i + 1] - band_tab[i]; for (j = band_tab[i]; j < band_tab[i + 1]; j++) { -chctx->skipFlags[j] = get_bits1(&q->gb); +chctx->skipFlags[j] = bitstream_read_bit(&q->bc); if (chctx->skipFlags[j]) chctx->skipFlagCount[i]++; } } else { for (j = band_tab[i]; j < band_tab[i + 1] - 1; j += 2) { -if (!get_bits1(&q->gb)) { // 0 +if (!bitstream_read_bit(&q->bc)) { // 0 chctx->skipFlagBits[i]++; chctx->skipFlags[j] = 1; chctx->skipFlags[j + 1] = 1; chctx->skipFlagCount[i] += 2; } else { -if (get_bits1(&q->gb)) { // 11 +if (bitstream_read_bit(&q->bc)) { // 11 chctx->skipFlagBits[i] += 2; chctx->skipFlags[j] = 0; chctx->skipFlags[j + 1] = 1; @@ -632,7 +633,7 @@ static void imc_get_skip_coeff(IMCContext *q, IMCChannel *chctx) } else { chctx->skipFlagBits[i] += 3; chctx->skipFlags[j + 1] = 0; -if (!get_bits1(&q->gb)) { // 100 +if (!bitstream_read_bit(&q->bc)) { // 100 chctx->skipFlags[j] = 1; chctx->skipFlagCount[i]++; } else { // 101 @@ -644,7 +645,7 @@ static void imc_get_skip_coeff(IMCContext *q, IMCChannel *chctx) if (j < band_tab[i + 1]) { chctx->skipFlagBits[i]++; -if ((chctx->skipFlags[j] = get_bits1(&q->gb))) +if ((chctx->skipFlags[j] = bitstream_read_bit(&q->bc))) chctx->skipFlagCount[i]++; } } @@ -781,13 +782,13 @@ static int imc_get_coeffs(IMCContext *q, IMCChannel *chctx) cw_len = chctx->CWlengthT[j]; cw = 0; -if (get_bits_count(&q->gb) + cw_len > 512) { +if (bitstream_tell(&q->bc) + cw_len > 512) {