Mercurial > libavcodec.hg
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 } |