Mercurial > libavcodec.hg
comparison h263.c @ 1670:d6f2520c0c43 libavcodec
slice structured fixes
author | michael |
---|---|
date | Tue, 09 Dec 2003 13:47:08 +0000 |
parents | 30746f429df6 |
children | a75cbb4588d1 |
comparison
equal
deleted
inserted
replaced
1669:072666f04bca | 1670:d6f2520c0c43 |
---|---|
285 | 285 |
286 put_bits(&s->pb, 5, s->qscale); | 286 put_bits(&s->pb, 5, s->qscale); |
287 } | 287 } |
288 | 288 |
289 put_bits(&s->pb, 1, 0); /* no PEI */ | 289 put_bits(&s->pb, 1, 0); /* no PEI */ |
290 | |
291 if(s->h263_slice_structured){ | |
292 put_bits(&s->pb, 1, 1); | |
293 | |
294 assert(s->mb_x == 0 && s->mb_y == 0); | |
295 ff_h263_encode_mba(s); | |
296 | |
297 put_bits(&s->pb, 1, 1); | |
298 } | |
290 | 299 |
291 if(s->h263_aic){ | 300 if(s->h263_aic){ |
292 s->y_dc_scale_table= | 301 s->y_dc_scale_table= |
293 s->c_dc_scale_table= ff_aic_dc_scale_table; | 302 s->c_dc_scale_table= ff_aic_dc_scale_table; |
294 }else{ | 303 }else{ |
2812 int ff_h263_decode_mba(MpegEncContext *s) | 2821 int ff_h263_decode_mba(MpegEncContext *s) |
2813 { | 2822 { |
2814 int i, mb_pos; | 2823 int i, mb_pos; |
2815 | 2824 |
2816 for(i=0; i<6; i++){ | 2825 for(i=0; i<6; i++){ |
2817 if(s->mb_num < ff_mba_max[i]) break; | 2826 if(s->mb_num-1 <= ff_mba_max[i]) break; |
2818 } | 2827 } |
2819 mb_pos= get_bits(&s->gb, ff_mba_length[i]); | 2828 mb_pos= get_bits(&s->gb, ff_mba_length[i]); |
2820 s->mb_x= mb_pos % s->mb_width; | 2829 s->mb_x= mb_pos % s->mb_width; |
2821 s->mb_y= mb_pos / s->mb_width; | 2830 s->mb_y= mb_pos / s->mb_width; |
2822 | 2831 |
2826 void ff_h263_encode_mba(MpegEncContext *s) | 2835 void ff_h263_encode_mba(MpegEncContext *s) |
2827 { | 2836 { |
2828 int i, mb_pos; | 2837 int i, mb_pos; |
2829 | 2838 |
2830 for(i=0; i<6; i++){ | 2839 for(i=0; i<6; i++){ |
2831 if(s->mb_num < ff_mba_max[i]) break; | 2840 if(s->mb_num-1 <= ff_mba_max[i]) break; |
2832 } | 2841 } |
2833 mb_pos= s->mb_x + s->mb_width*s->mb_y; | 2842 mb_pos= s->mb_x + s->mb_width*s->mb_y; |
2834 put_bits(&s->pb, ff_mba_length[i], mb_pos); | 2843 put_bits(&s->pb, ff_mba_length[i], mb_pos); |
2835 } | 2844 } |
2836 | 2845 |
3133 if(s->codec_id==CODEC_ID_MPEG4){ | 3142 if(s->codec_id==CODEC_ID_MPEG4){ |
3134 skip_bits1(&s->gb); | 3143 skip_bits1(&s->gb); |
3135 align_get_bits(&s->gb); | 3144 align_get_bits(&s->gb); |
3136 } | 3145 } |
3137 | 3146 |
3147 //printf("checking next 16 %X\n", show_bits(&s->gb, 24)); | |
3138 if(show_bits(&s->gb, 16)==0){ | 3148 if(show_bits(&s->gb, 16)==0){ |
3139 if(s->codec_id==CODEC_ID_MPEG4) | 3149 if(s->codec_id==CODEC_ID_MPEG4) |
3140 ret= mpeg4_decode_video_packet_header(s); | 3150 ret= mpeg4_decode_video_packet_header(s); |
3141 else | 3151 else |
3142 ret= h263_decode_gob_header(s); | 3152 ret= h263_decode_gob_header(s); |
3144 return 0; | 3154 return 0; |
3145 } | 3155 } |
3146 //ok, its not where its supposed to be ... | 3156 //ok, its not where its supposed to be ... |
3147 s->gb= s->last_resync_gb; | 3157 s->gb= s->last_resync_gb; |
3148 align_get_bits(&s->gb); | 3158 align_get_bits(&s->gb); |
3159 printf("align %X\n", show_bits(&s->gb, 24)); | |
3149 left= s->gb.size_in_bits - get_bits_count(&s->gb); | 3160 left= s->gb.size_in_bits - get_bits_count(&s->gb); |
3150 | 3161 |
3151 for(;left>16+1+5+5; left-=8){ | 3162 for(;left>16+1+5+5; left-=8){ |
3152 if(show_bits(&s->gb, 16)==0){ | 3163 if(show_bits(&s->gb, 16)==0){ |
3153 GetBitContext bak= s->gb; | 3164 GetBitContext bak= s->gb; |
3161 | 3172 |
3162 s->gb= bak; | 3173 s->gb= bak; |
3163 } | 3174 } |
3164 skip_bits(&s->gb, 8); | 3175 skip_bits(&s->gb, 8); |
3165 } | 3176 } |
3166 | 3177 printf("no resync\n"); |
3167 return -1; | 3178 return -1; |
3168 } | 3179 } |
3169 | 3180 |
3170 /** | 3181 /** |
3171 * gets the average motion vector for a GMC MB. | 3182 * gets the average motion vector for a GMC MB. |
4960 } | 4971 } |
4961 } | 4972 } |
4962 | 4973 |
4963 s->qscale = get_bits(&s->gb, 5); | 4974 s->qscale = get_bits(&s->gb, 5); |
4964 } | 4975 } |
4976 | |
4965 /* PEI */ | 4977 /* PEI */ |
4966 while (get_bits1(&s->gb) != 0) { | 4978 while (get_bits1(&s->gb) != 0) { |
4967 skip_bits(&s->gb, 8); | 4979 skip_bits(&s->gb, 8); |
4980 } | |
4981 | |
4982 if(s->h263_slice_structured){ | |
4983 if (get_bits1(&s->gb) != 1) { | |
4984 av_log(s->avctx, AV_LOG_ERROR, "SEPB1 marker missing\n"); | |
4985 return -1; | |
4986 } | |
4987 | |
4988 ff_h263_decode_mba(s); | |
4989 | |
4990 if (get_bits1(&s->gb) != 1) { | |
4991 av_log(s->avctx, AV_LOG_ERROR, "SEPB2 marker missing\n"); | |
4992 return -1; | |
4993 } | |
4968 } | 4994 } |
4969 s->f_code = 1; | 4995 s->f_code = 1; |
4970 | 4996 |
4971 if(s->h263_aic){ | 4997 if(s->h263_aic){ |
4972 s->y_dc_scale_table= | 4998 s->y_dc_scale_table= |