comparison h263.c @ 10788:0c8f9288b5e4 libavcodec

Split flv decoding out.
author michael
date Thu, 07 Jan 2010 05:36:45 +0000
parents 3f8e40fe25c2
children 48adb5a1b47b
comparison
equal deleted inserted replaced
10787:3f8e40fe25c2 10788:0c8f9288b5e4
4426 av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y); 4426 av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y);
4427 return -1; 4427 return -1;
4428 } 4428 }
4429 if (code == rl->n) { 4429 if (code == rl->n) {
4430 /* escape */ 4430 /* escape */
4431 if (s->h263_flv > 1) { 4431 if (CONFIG_FLV_DECODER && s->h263_flv > 1) {
4432 int is11 = get_bits1(&s->gb); 4432 ff_flv2_decode_ac_esc(&s->gb, &level, &run, &last);
4433 last = get_bits1(&s->gb);
4434 run = get_bits(&s->gb, 6);
4435 if(is11){
4436 level = get_sbits(&s->gb, 11);
4437 } else {
4438 level = get_sbits(&s->gb, 7);
4439 }
4440 } else { 4433 } else {
4441 last = get_bits1(&s->gb); 4434 last = get_bits1(&s->gb);
4442 run = get_bits(&s->gb, 6); 4435 run = get_bits(&s->gb, 6);
4443 level = (int8_t)get_bits(&s->gb, 8); 4436 level = (int8_t)get_bits(&s->gb, 8);
4444 if(level == -128){ 4437 if(level == -128){
6164 if(s->avctx->debug&FF_DEBUG_PICT_INFO) 6157 if(s->avctx->debug&FF_DEBUG_PICT_INFO)
6165 show_pict_info(s); 6158 show_pict_info(s);
6166 6159
6167 return 0; 6160 return 0;
6168 } 6161 }
6169
6170 int flv_h263_decode_picture_header(MpegEncContext *s)
6171 {
6172 int format, width, height;
6173
6174 /* picture header */
6175 if (get_bits_long(&s->gb, 17) != 1) {
6176 av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
6177 return -1;
6178 }
6179 format = get_bits(&s->gb, 5);
6180 if (format != 0 && format != 1) {
6181 av_log(s->avctx, AV_LOG_ERROR, "Bad picture format\n");
6182 return -1;
6183 }
6184 s->h263_flv = format+1;
6185 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
6186 format = get_bits(&s->gb, 3);
6187 switch (format) {
6188 case 0:
6189 width = get_bits(&s->gb, 8);
6190 height = get_bits(&s->gb, 8);
6191 break;
6192 case 1:
6193 width = get_bits(&s->gb, 16);
6194 height = get_bits(&s->gb, 16);
6195 break;
6196 case 2:
6197 width = 352;
6198 height = 288;
6199 break;
6200 case 3:
6201 width = 176;
6202 height = 144;
6203 break;
6204 case 4:
6205 width = 128;
6206 height = 96;
6207 break;
6208 case 5:
6209 width = 320;
6210 height = 240;
6211 break;
6212 case 6:
6213 width = 160;
6214 height = 120;
6215 break;
6216 default:
6217 width = height = 0;
6218 break;
6219 }
6220 if(avcodec_check_dimensions(s->avctx, width, height))
6221 return -1;
6222 s->width = width;
6223 s->height = height;
6224
6225 s->pict_type = FF_I_TYPE + get_bits(&s->gb, 2);
6226 s->dropable= s->pict_type > FF_P_TYPE;
6227 if (s->dropable)
6228 s->pict_type = FF_P_TYPE;
6229
6230 skip_bits1(&s->gb); /* deblocking flag */
6231 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
6232
6233 s->h263_plus = 0;
6234
6235 s->unrestricted_mv = 1;
6236 s->h263_long_vectors = 0;
6237
6238 /* PEI */
6239 while (get_bits1(&s->gb) != 0) {
6240 skip_bits(&s->gb, 8);
6241 }
6242 s->f_code = 1;
6243
6244 if(s->avctx->debug & FF_DEBUG_PICT_INFO){
6245 av_log(s->avctx, AV_LOG_DEBUG, "%c esc_type:%d, qp:%d num:%d\n",
6246 s->dropable ? 'D' : av_get_pict_type_char(s->pict_type), s->h263_flv-1, s->qscale, s->picture_number);
6247 }
6248
6249 s->y_dc_scale_table=
6250 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
6251
6252 return 0;
6253 }