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=