summaryrefslogtreecommitdiff
path: root/multimedia/xine-lib/patches/patch-da
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia/xine-lib/patches/patch-da')
-rw-r--r--multimedia/xine-lib/patches/patch-da848
1 files changed, 0 insertions, 848 deletions
diff --git a/multimedia/xine-lib/patches/patch-da b/multimedia/xine-lib/patches/patch-da
deleted file mode 100644
index b73ce23ac91..00000000000
--- a/multimedia/xine-lib/patches/patch-da
+++ /dev/null
@@ -1,848 +0,0 @@
-$NetBSD: patch-da,v 1.3 2007/02/07 20:04:00 drochner Exp $
-
-Move some inlined functions to a place before they are used,
-otherwise GCC barfs when -fno-unit-a-time is active.
-
---- src/libffmpeg/libavcodec/h263.c.orig 2007-01-28 19:38:33.000000000 +0100
-+++ src/libffmpeg/libavcodec/h263.c
-@@ -3459,6 +3459,53 @@ static inline int get_amv(MpegEncContext
- }
-
- /**
-+ * decodes the dc value.
-+ * @param n block index (0-3 are luma, 4-5 are chroma)
-+ * @param dir_ptr the prediction direction will be stored here
-+ * @return the quantized dc
-+ */
-+static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
-+{
-+ int level, code;
-+
-+ if (n < 4)
-+ code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1);
-+ else
-+ code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1);
-+ if (code < 0 || code > 9 /* && s->nbit<9 */){
-+ av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
-+ return -1;
-+ }
-+ if (code == 0) {
-+ level = 0;
-+ } else {
-+ if(IS_3IV1){
-+ if(code==1)
-+ level= 2*get_bits1(&s->gb)-1;
-+ else{
-+ if(get_bits1(&s->gb))
-+ level = get_bits(&s->gb, code-1) + (1<<(code-1));
-+ else
-+ level = -get_bits(&s->gb, code-1) - (1<<(code-1));
-+ }
-+ }else{
-+ level = get_xbits(&s->gb, code);
-+ }
-+
-+ if (code > 8){
-+ if(get_bits1(&s->gb)==0){ /* marker */
-+ if(s->error_resilience>=2){
-+ av_log(s->avctx, AV_LOG_ERROR, "dc marker bit missing\n");
-+ return -1;
-+ }
-+ }
-+ }
-+ }
-+
-+ return ff_mpeg4_pred_dc(s, n, level, dir_ptr, 0);
-+}
-+
-+/**
- * decodes first partition.
- * @return number of MBs decoded or <0 if an error occured
- */
-@@ -3764,124 +3811,380 @@ int ff_mpeg4_decode_partitions(MpegEncCo
- }
-
- /**
-- * decode partition C of one MB.
-+ * decodes a block.
- * @return <0 if an error occured
- */
--static int mpeg4_decode_partitioned_mb(MpegEncContext *s, DCTELEM block[6][64])
-+static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
-+ int n, int coded, int intra, int rvlc)
- {
-- int cbp, mb_type;
-- const int xy= s->mb_x + s->mb_y*s->mb_stride;
--
-- mb_type= s->current_picture.mb_type[xy];
-- cbp = s->cbp_table[xy];
-+ int level, i, last, run;
-+ int dc_pred_dir;
-+ RLTable * rl;
-+ RL_VLC_ELEM * rl_vlc;
-+ const uint8_t * scan_table;
-+ int qmul, qadd;
-
-- s->use_intra_dc_vlc= s->qscale < s->intra_dc_threshold;
-+ //Note intra & rvlc should be optimized away if this is inlined
-
-- if(s->current_picture.qscale_table[xy] != s->qscale){
-- ff_set_qscale(s, s->current_picture.qscale_table[xy] );
-- }
-+ if(intra) {
-+ if(s->use_intra_dc_vlc){
-+ /* DC coef */
-+ if(s->partitioned_frame){
-+ level = s->dc_val[0][ s->block_index[n] ];
-+ if(n<4) level= FASTDIV((level + (s->y_dc_scale>>1)), s->y_dc_scale);
-+ else level= FASTDIV((level + (s->c_dc_scale>>1)), s->c_dc_scale);
-+ dc_pred_dir= (s->pred_dir_table[s->mb_x + s->mb_y*s->mb_stride]<<n)&32;
-+ }else{
-+ level = mpeg4_decode_dc(s, n, &dc_pred_dir);
-+ if (level < 0)
-+ return -1;
-+ }
-+ block[0] = level;
-+ i = 0;
-+ }else{
-+ i = -1;
-+ ff_mpeg4_pred_dc(s, n, 0, &dc_pred_dir, 0);
-+ }
-+ if (!coded)
-+ goto not_coded;
-
-- if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
-- int i;
-- for(i=0; i<4; i++){
-- s->mv[0][i][0] = s->current_picture.motion_val[0][ s->block_index[i] ][0];
-- s->mv[0][i][1] = s->current_picture.motion_val[0][ s->block_index[i] ][1];
-+ if(rvlc){
-+ rl = &rvlc_rl_intra;
-+ rl_vlc = rvlc_rl_intra.rl_vlc[0];
-+ }else{
-+ rl = &rl_intra;
-+ rl_vlc = rl_intra.rl_vlc[0];
- }
-- s->mb_intra = IS_INTRA(mb_type);
-+ if (s->ac_pred) {
-+ if (dc_pred_dir == 0)
-+ scan_table = s->intra_v_scantable.permutated; /* left */
-+ else
-+ scan_table = s->intra_h_scantable.permutated; /* top */
-+ } else {
-+ scan_table = s->intra_scantable.permutated;
-+ }
-+ qmul=1;
-+ qadd=0;
-+ } else {
-+ i = -1;
-+ if (!coded) {
-+ s->block_last_index[n] = i;
-+ return 0;
-+ }
-+ if(rvlc) rl = &rvlc_rl_inter;
-+ else rl = &rl_inter;
-
-- if (IS_SKIP(mb_type)) {
-- /* skip mb */
-- for(i=0;i<6;i++)
-- s->block_last_index[i] = -1;
-- s->mv_dir = MV_DIR_FORWARD;
-- s->mv_type = MV_TYPE_16X16;
-- if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
-- s->mcsel=1;
-- s->mb_skipped = 0;
-+ scan_table = s->intra_scantable.permutated;
-+
-+ if(s->mpeg_quant){
-+ qmul=1;
-+ qadd=0;
-+ if(rvlc){
-+ rl_vlc = rvlc_rl_inter.rl_vlc[0];
- }else{
-- s->mcsel=0;
-- s->mb_skipped = 1;
-+ rl_vlc = rl_inter.rl_vlc[0];
- }
-- }else if(s->mb_intra){
-- s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
-- }else if(!s->mb_intra){
--// s->mcsel= 0; //FIXME do we need to init that
--
-- s->mv_dir = MV_DIR_FORWARD;
-- if (IS_8X8(mb_type)) {
-- s->mv_type = MV_TYPE_8X8;
-- } else {
-- s->mv_type = MV_TYPE_16X16;
-+ }else{
-+ qmul = s->qscale << 1;
-+ qadd = (s->qscale - 1) | 1;
-+ if(rvlc){
-+ rl_vlc = rvlc_rl_inter.rl_vlc[s->qscale];
-+ }else{
-+ rl_vlc = rl_inter.rl_vlc[s->qscale];
- }
- }
-- } else { /* I-Frame */
-- s->mb_intra = 1;
-- s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
- }
-+ {
-+ OPEN_READER(re, &s->gb);
-+ for(;;) {
-+ UPDATE_CACHE(re, &s->gb);
-+ GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
-+ if (level==0) {
-+ /* escape */
-+ if(rvlc){
-+ if(SHOW_UBITS(re, &s->gb, 1)==0){
-+ av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in rvlc esc\n");
-+ return -1;
-+ }; SKIP_CACHE(re, &s->gb, 1);
-
-- if (!IS_SKIP(mb_type)) {
-- int i;
-- s->dsp.clear_blocks(s->block[0]);
-- /* decode each block */
-- for (i = 0; i < 6; i++) {
-- if(mpeg4_decode_block(s, block[i], i, cbp&32, s->mb_intra, s->rvlc) < 0){
-- av_log(s->avctx, AV_LOG_ERROR, "texture corrupted at %d %d %d\n", s->mb_x, s->mb_y, s->mb_intra);
-- return -1;
-- }
-- cbp+=cbp;
-- }
-- }
-+ last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
-+ run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
-+ SKIP_COUNTER(re, &s->gb, 1+1+6);
-+ UPDATE_CACHE(re, &s->gb);
-
-- /* per-MB end of slice check */
-+ if(SHOW_UBITS(re, &s->gb, 1)==0){
-+ av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in rvlc esc\n");
-+ return -1;
-+ }; SKIP_CACHE(re, &s->gb, 1);
-
-- if(--s->mb_num_left <= 0){
--//printf("%06X %d\n", show_bits(&s->gb, 24), s->gb.size_in_bits - get_bits_count(&s->gb));
-- if(mpeg4_is_resync(s))
-- return SLICE_END;
-- else
-- return SLICE_NOEND;
-- }else{
-- if(mpeg4_is_resync(s)){
-- const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
-- if(s->cbp_table[xy+delta])
-- return SLICE_END;
-- }
-- return SLICE_OK;
-- }
--}
-+ level= SHOW_UBITS(re, &s->gb, 11); SKIP_CACHE(re, &s->gb, 11);
-
--/**
-- * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
-- */
--static void preview_obmc(MpegEncContext *s){
-- GetBitContext gb= s->gb;
-+ if(SHOW_UBITS(re, &s->gb, 5)!=0x10){
-+ av_log(s->avctx, AV_LOG_ERROR, "reverse esc missing\n");
-+ return -1;
-+ }; SKIP_CACHE(re, &s->gb, 5);
-
-- int cbpc, i, pred_x, pred_y, mx, my;
-- int16_t *mot_val;
-- const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
-- const int stride= s->b8_stride*2;
-+ level= level * qmul + qadd;
-+ level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1);
-+ SKIP_COUNTER(re, &s->gb, 1+11+5+1);
-
-- for(i=0; i<4; i++)
-- s->block_index[i]+= 2;
-- for(i=4; i<6; i++)
-- s->block_index[i]+= 1;
-- s->mb_x++;
-+ i+= run + 1;
-+ if(last) i+=192;
-+ }else{
-+ int cache;
-+ cache= GET_CACHE(re, &s->gb);
-
-- assert(s->pict_type == P_TYPE);
-+ if(IS_3IV1)
-+ cache ^= 0xC0000000;
-
-- do{
-- if (get_bits1(&s->gb)) {
-- /* skip mb */
-- mot_val = s->current_picture.motion_val[0][ s->block_index[0] ];
-- mot_val[0 ]= mot_val[2 ]=
-- mot_val[0+stride]= mot_val[2+stride]= 0;
-- mot_val[1 ]= mot_val[3 ]=
-- mot_val[1+stride]= mot_val[3+stride]= 0;
-+ if (cache&0x80000000) {
-+ if (cache&0x40000000) {
-+ /* third escape */
-+ SKIP_CACHE(re, &s->gb, 2);
-+ last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
-+ run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
-+ SKIP_COUNTER(re, &s->gb, 2+1+6);
-+ UPDATE_CACHE(re, &s->gb);
-
-- s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
-- goto end;
-- }
-- cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
-+ if(IS_3IV1){
-+ level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12);
-+ }else{
-+ if(SHOW_UBITS(re, &s->gb, 1)==0){
-+ av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in 3. esc\n");
-+ return -1;
-+ }; SKIP_CACHE(re, &s->gb, 1);
-+
-+ level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12);
-+
-+ if(SHOW_UBITS(re, &s->gb, 1)==0){
-+ av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n");
-+ return -1;
-+ }; LAST_SKIP_CACHE(re, &s->gb, 1);
-+
-+ SKIP_COUNTER(re, &s->gb, 1+12+1);
-+ }
-+
-+#if 0
-+ if(s->error_resilience >= FF_ER_COMPLIANT){
-+ const int abs_level= FFABS(level);
-+ if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
-+ const int run1= run - rl->max_run[last][abs_level] - 1;
-+ if(abs_level <= rl->max_level[last][run]){
-+ av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
-+ return -1;
-+ }
-+ if(s->error_resilience > FF_ER_COMPLIANT){
-+ if(abs_level <= rl->max_level[last][run]*2){
-+ av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
-+ return -1;
-+ }
-+ if(run1 >= 0 && abs_level <= rl->max_level[last][run1]){
-+ av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
-+ return -1;
-+ }
-+ }
-+ }
-+ }
-+#endif
-+ if (level>0) level= level * qmul + qadd;
-+ else level= level * qmul - qadd;
-+
-+ if((unsigned)(level + 2048) > 4095){
-+ if(s->error_resilience > FF_ER_COMPLIANT){
-+ if(level > 2560 || level<-2560){
-+ av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
-+ return -1;
-+ }
-+ }
-+ level= level<0 ? -2048 : 2047;
-+ }
-+
-+ i+= run + 1;
-+ if(last) i+=192;
-+ } else {
-+ /* second escape */
-+#if MIN_CACHE_BITS < 20
-+ LAST_SKIP_BITS(re, &s->gb, 2);
-+ UPDATE_CACHE(re, &s->gb);
-+#else
-+ SKIP_BITS(re, &s->gb, 2);
-+#endif
-+ GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
-+ i+= run + rl->max_run[run>>7][level/qmul] +1; //FIXME opt indexing
-+ level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
-+ LAST_SKIP_BITS(re, &s->gb, 1);
-+ }
-+ } else {
-+ /* first escape */
-+#if MIN_CACHE_BITS < 19
-+ LAST_SKIP_BITS(re, &s->gb, 1);
-+ UPDATE_CACHE(re, &s->gb);
-+#else
-+ SKIP_BITS(re, &s->gb, 1);
-+#endif
-+ GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
-+ i+= run;
-+ level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
-+ level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
-+ LAST_SKIP_BITS(re, &s->gb, 1);
-+ }
-+ }
-+ } else {
-+ i+= run;
-+ level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
-+ LAST_SKIP_BITS(re, &s->gb, 1);
-+ }
-+ if (i > 62){
-+ i-= 192;
-+ if(i&(~63)){
-+ av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
-+ return -1;
-+ }
-+
-+ block[scan_table[i]] = level;
-+ break;
-+ }
-+
-+ block[scan_table[i]] = level;
-+ }
-+ CLOSE_READER(re, &s->gb);
-+ }
-+ not_coded:
-+ if (intra) {
-+ if(!s->use_intra_dc_vlc){
-+ block[0] = ff_mpeg4_pred_dc(s, n, block[0], &dc_pred_dir, 0);
-+
-+ i -= i>>31; //if(i == -1) i=0;
-+ }
-+
-+ mpeg4_pred_ac(s, block, n, dc_pred_dir);
-+ if (s->ac_pred) {
-+ i = 63; /* XXX: not optimal */
-+ }
-+ }
-+ s->block_last_index[n] = i;
-+ return 0;
-+}
-+
-+/**
-+ * decode partition C of one MB.
-+ * @return <0 if an error occured
-+ */
-+static int mpeg4_decode_partitioned_mb(MpegEncContext *s, DCTELEM block[6][64])
-+{
-+ int cbp, mb_type;
-+ const int xy= s->mb_x + s->mb_y*s->mb_stride;
-+
-+ mb_type= s->current_picture.mb_type[xy];
-+ cbp = s->cbp_table[xy];
-+
-+ s->use_intra_dc_vlc= s->qscale < s->intra_dc_threshold;
-+
-+ if(s->current_picture.qscale_table[xy] != s->qscale){
-+ ff_set_qscale(s, s->current_picture.qscale_table[xy] );
-+ }
-+
-+ if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
-+ int i;
-+ for(i=0; i<4; i++){
-+ s->mv[0][i][0] = s->current_picture.motion_val[0][ s->block_index[i] ][0];
-+ s->mv[0][i][1] = s->current_picture.motion_val[0][ s->block_index[i] ][1];
-+ }
-+ s->mb_intra = IS_INTRA(mb_type);
-+
-+ if (IS_SKIP(mb_type)) {
-+ /* skip mb */
-+ for(i=0;i<6;i++)
-+ s->block_last_index[i] = -1;
-+ s->mv_dir = MV_DIR_FORWARD;
-+ s->mv_type = MV_TYPE_16X16;
-+ if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
-+ s->mcsel=1;
-+ s->mb_skipped = 0;
-+ }else{
-+ s->mcsel=0;
-+ s->mb_skipped = 1;
-+ }
-+ }else if(s->mb_intra){
-+ s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
-+ }else if(!s->mb_intra){
-+// s->mcsel= 0; //FIXME do we need to init that
-+
-+ s->mv_dir = MV_DIR_FORWARD;
-+ if (IS_8X8(mb_type)) {
-+ s->mv_type = MV_TYPE_8X8;
-+ } else {
-+ s->mv_type = MV_TYPE_16X16;
-+ }
-+ }
-+ } else { /* I-Frame */
-+ s->mb_intra = 1;
-+ s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
-+ }
-+
-+ if (!IS_SKIP(mb_type)) {
-+ int i;
-+ s->dsp.clear_blocks(s->block[0]);
-+ /* decode each block */
-+ for (i = 0; i < 6; i++) {
-+ if(mpeg4_decode_block(s, block[i], i, cbp&32, s->mb_intra, s->rvlc) < 0){
-+ av_log(s->avctx, AV_LOG_ERROR, "texture corrupted at %d %d %d\n", s->mb_x, s->mb_y, s->mb_intra);
-+ return -1;
-+ }
-+ cbp+=cbp;
-+ }
-+ }
-+
-+ /* per-MB end of slice check */
-+
-+ if(--s->mb_num_left <= 0){
-+//printf("%06X %d\n", show_bits(&s->gb, 24), s->gb.size_in_bits - get_bits_count(&s->gb));
-+ if(mpeg4_is_resync(s))
-+ return SLICE_END;
-+ else
-+ return SLICE_NOEND;
-+ }else{
-+ if(mpeg4_is_resync(s)){
-+ const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
-+ if(s->cbp_table[xy+delta])
-+ return SLICE_END;
-+ }
-+ return SLICE_OK;
-+ }
-+}
-+
-+/**
-+ * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
-+ */
-+static void preview_obmc(MpegEncContext *s){
-+ GetBitContext gb= s->gb;
-+
-+ int cbpc, i, pred_x, pred_y, mx, my;
-+ int16_t *mot_val;
-+ const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
-+ const int stride= s->b8_stride*2;
-+
-+ for(i=0; i<4; i++)
-+ s->block_index[i]+= 2;
-+ for(i=4; i<6; i++)
-+ s->block_index[i]+= 1;
-+ s->mb_x++;
-+
-+ assert(s->pict_type == P_TYPE);
-+
-+ do{
-+ if (get_bits1(&s->gb)) {
-+ /* skip mb */
-+ mot_val = s->current_picture.motion_val[0][ s->block_index[0] ];
-+ mot_val[0 ]= mot_val[2 ]=
-+ mot_val[0+stride]= mot_val[2+stride]= 0;
-+ mot_val[1 ]= mot_val[3 ]=
-+ mot_val[1+stride]= mot_val[3+stride]= 0;
-+
-+ s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
-+ goto end;
-+ }
-+ cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
- }while(cbpc == 20);
-
- if(cbpc & 4){
-@@ -4747,309 +5050,6 @@ not_coded:
- return 0;
- }
-
--/**
-- * decodes the dc value.
-- * @param n block index (0-3 are luma, 4-5 are chroma)
-- * @param dir_ptr the prediction direction will be stored here
-- * @return the quantized dc
-- */
--static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
--{
-- int level, code;
--
-- if (n < 4)
-- code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1);
-- else
-- code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1);
-- if (code < 0 || code > 9 /* && s->nbit<9 */){
-- av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
-- return -1;
-- }
-- if (code == 0) {
-- level = 0;
-- } else {
-- if(IS_3IV1){
-- if(code==1)
-- level= 2*get_bits1(&s->gb)-1;
-- else{
-- if(get_bits1(&s->gb))
-- level = get_bits(&s->gb, code-1) + (1<<(code-1));
-- else
-- level = -get_bits(&s->gb, code-1) - (1<<(code-1));
-- }
-- }else{
-- level = get_xbits(&s->gb, code);
-- }
--
-- if (code > 8){
-- if(get_bits1(&s->gb)==0){ /* marker */
-- if(s->error_resilience>=2){
-- av_log(s->avctx, AV_LOG_ERROR, "dc marker bit missing\n");
-- return -1;
-- }
-- }
-- }
-- }
--
-- return ff_mpeg4_pred_dc(s, n, level, dir_ptr, 0);
--}
--
--/**
-- * decodes a block.
-- * @return <0 if an error occured
-- */
--static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
-- int n, int coded, int intra, int rvlc)
--{
-- int level, i, last, run;
-- int dc_pred_dir;
-- RLTable * rl;
-- RL_VLC_ELEM * rl_vlc;
-- const uint8_t * scan_table;
-- int qmul, qadd;
--
-- //Note intra & rvlc should be optimized away if this is inlined
--
-- if(intra) {
-- if(s->use_intra_dc_vlc){
-- /* DC coef */
-- if(s->partitioned_frame){
-- level = s->dc_val[0][ s->block_index[n] ];
-- if(n<4) level= FASTDIV((level + (s->y_dc_scale>>1)), s->y_dc_scale);
-- else level= FASTDIV((level + (s->c_dc_scale>>1)), s->c_dc_scale);
-- dc_pred_dir= (s->pred_dir_table[s->mb_x + s->mb_y*s->mb_stride]<<n)&32;
-- }else{
-- level = mpeg4_decode_dc(s, n, &dc_pred_dir);
-- if (level < 0)
-- return -1;
-- }
-- block[0] = level;
-- i = 0;
-- }else{
-- i = -1;
-- ff_mpeg4_pred_dc(s, n, 0, &dc_pred_dir, 0);
-- }
-- if (!coded)
-- goto not_coded;
--
-- if(rvlc){
-- rl = &rvlc_rl_intra;
-- rl_vlc = rvlc_rl_intra.rl_vlc[0];
-- }else{
-- rl = &rl_intra;
-- rl_vlc = rl_intra.rl_vlc[0];
-- }
-- if (s->ac_pred) {
-- if (dc_pred_dir == 0)
-- scan_table = s->intra_v_scantable.permutated; /* left */
-- else
-- scan_table = s->intra_h_scantable.permutated; /* top */
-- } else {
-- scan_table = s->intra_scantable.permutated;
-- }
-- qmul=1;
-- qadd=0;
-- } else {
-- i = -1;
-- if (!coded) {
-- s->block_last_index[n] = i;
-- return 0;
-- }
-- if(rvlc) rl = &rvlc_rl_inter;
-- else rl = &rl_inter;
--
-- scan_table = s->intra_scantable.permutated;
--
-- if(s->mpeg_quant){
-- qmul=1;
-- qadd=0;
-- if(rvlc){
-- rl_vlc = rvlc_rl_inter.rl_vlc[0];
-- }else{
-- rl_vlc = rl_inter.rl_vlc[0];
-- }
-- }else{
-- qmul = s->qscale << 1;
-- qadd = (s->qscale - 1) | 1;
-- if(rvlc){
-- rl_vlc = rvlc_rl_inter.rl_vlc[s->qscale];
-- }else{
-- rl_vlc = rl_inter.rl_vlc[s->qscale];
-- }
-- }
-- }
-- {
-- OPEN_READER(re, &s->gb);
-- for(;;) {
-- UPDATE_CACHE(re, &s->gb);
-- GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
-- if (level==0) {
-- /* escape */
-- if(rvlc){
-- if(SHOW_UBITS(re, &s->gb, 1)==0){
-- av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in rvlc esc\n");
-- return -1;
-- }; SKIP_CACHE(re, &s->gb, 1);
--
-- last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
-- run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
-- SKIP_COUNTER(re, &s->gb, 1+1+6);
-- UPDATE_CACHE(re, &s->gb);
--
-- if(SHOW_UBITS(re, &s->gb, 1)==0){
-- av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in rvlc esc\n");
-- return -1;
-- }; SKIP_CACHE(re, &s->gb, 1);
--
-- level= SHOW_UBITS(re, &s->gb, 11); SKIP_CACHE(re, &s->gb, 11);
--
-- if(SHOW_UBITS(re, &s->gb, 5)!=0x10){
-- av_log(s->avctx, AV_LOG_ERROR, "reverse esc missing\n");
-- return -1;
-- }; SKIP_CACHE(re, &s->gb, 5);
--
-- level= level * qmul + qadd;
-- level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1);
-- SKIP_COUNTER(re, &s->gb, 1+11+5+1);
--
-- i+= run + 1;
-- if(last) i+=192;
-- }else{
-- int cache;
-- cache= GET_CACHE(re, &s->gb);
--
-- if(IS_3IV1)
-- cache ^= 0xC0000000;
--
-- if (cache&0x80000000) {
-- if (cache&0x40000000) {
-- /* third escape */
-- SKIP_CACHE(re, &s->gb, 2);
-- last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
-- run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
-- SKIP_COUNTER(re, &s->gb, 2+1+6);
-- UPDATE_CACHE(re, &s->gb);
--
-- if(IS_3IV1){
-- level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12);
-- }else{
-- if(SHOW_UBITS(re, &s->gb, 1)==0){
-- av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in 3. esc\n");
-- return -1;
-- }; SKIP_CACHE(re, &s->gb, 1);
--
-- level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12);
--
-- if(SHOW_UBITS(re, &s->gb, 1)==0){
-- av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n");
-- return -1;
-- }; LAST_SKIP_CACHE(re, &s->gb, 1);
--
-- SKIP_COUNTER(re, &s->gb, 1+12+1);
-- }
--
--#if 0
-- if(s->error_resilience >= FF_ER_COMPLIANT){
-- const int abs_level= FFABS(level);
-- if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
-- const int run1= run - rl->max_run[last][abs_level] - 1;
-- if(abs_level <= rl->max_level[last][run]){
-- av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
-- return -1;
-- }
-- if(s->error_resilience > FF_ER_COMPLIANT){
-- if(abs_level <= rl->max_level[last][run]*2){
-- av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
-- return -1;
-- }
-- if(run1 >= 0 && abs_level <= rl->max_level[last][run1]){
-- av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
-- return -1;
-- }
-- }
-- }
-- }
--#endif
-- if (level>0) level= level * qmul + qadd;
-- else level= level * qmul - qadd;
--
-- if((unsigned)(level + 2048) > 4095){
-- if(s->error_resilience > FF_ER_COMPLIANT){
-- if(level > 2560 || level<-2560){
-- av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
-- return -1;
-- }
-- }
-- level= level<0 ? -2048 : 2047;
-- }
--
-- i+= run + 1;
-- if(last) i+=192;
-- } else {
-- /* second escape */
--#if MIN_CACHE_BITS < 20
-- LAST_SKIP_BITS(re, &s->gb, 2);
-- UPDATE_CACHE(re, &s->gb);
--#else
-- SKIP_BITS(re, &s->gb, 2);
--#endif
-- GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
-- i+= run + rl->max_run[run>>7][level/qmul] +1; //FIXME opt indexing
-- level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
-- LAST_SKIP_BITS(re, &s->gb, 1);
-- }
-- } else {
-- /* first escape */
--#if MIN_CACHE_BITS < 19
-- LAST_SKIP_BITS(re, &s->gb, 1);
-- UPDATE_CACHE(re, &s->gb);
--#else
-- SKIP_BITS(re, &s->gb, 1);
--#endif
-- GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
-- i+= run;
-- level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
-- level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
-- LAST_SKIP_BITS(re, &s->gb, 1);
-- }
-- }
-- } else {
-- i+= run;
-- level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
-- LAST_SKIP_BITS(re, &s->gb, 1);
-- }
-- if (i > 62){
-- i-= 192;
-- if(i&(~63)){
-- av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
-- return -1;
-- }
--
-- block[scan_table[i]] = level;
-- break;
-- }
--
-- block[scan_table[i]] = level;
-- }
-- CLOSE_READER(re, &s->gb);
-- }
-- not_coded:
-- if (intra) {
-- if(!s->use_intra_dc_vlc){
-- block[0] = ff_mpeg4_pred_dc(s, n, block[0], &dc_pred_dir, 0);
--
-- i -= i>>31; //if(i == -1) i=0;
-- }
--
-- mpeg4_pred_ac(s, block, n, dc_pred_dir);
-- if (s->ac_pred) {
-- i = 63; /* XXX: not optimal */
-- }
-- }
-- s->block_last_index[n] = i;
-- return 0;
--}
--
- /* most is hardcoded. should extend to handle all h263 streams */
- int h263_decode_picture_header(MpegEncContext *s)
- {