Mercurial > libavcodec.hg
comparison mpegaudiodec.c @ 6510:771eb7ea8b3f libavcodec
correctly set avctx->frame_size for mp3on4 and mp3adu
author | bcoudurier |
---|---|
date | Thu, 20 Mar 2008 09:36:04 +0000 |
parents | 8e63d869a904 |
children | b5e9dae2dbc6 |
comparison
equal
deleted
inserted
replaced
6509:99294a20e11c | 6510:771eb7ea8b3f |
---|---|
2299 skip_bits(&s->gb, 16); | 2299 skip_bits(&s->gb, 16); |
2300 | 2300 |
2301 dprintf(s->avctx, "frame %d:\n", s->frame_count); | 2301 dprintf(s->avctx, "frame %d:\n", s->frame_count); |
2302 switch(s->layer) { | 2302 switch(s->layer) { |
2303 case 1: | 2303 case 1: |
2304 avctx->frame_size = 384; | |
2304 nb_frames = mp_decode_layer1(s); | 2305 nb_frames = mp_decode_layer1(s); |
2305 break; | 2306 break; |
2306 case 2: | 2307 case 2: |
2308 avctx->frame_size = 1152; | |
2307 nb_frames = mp_decode_layer2(s); | 2309 nb_frames = mp_decode_layer2(s); |
2308 break; | 2310 break; |
2309 case 3: | 2311 case 3: |
2312 avctx->frame_size = s->lsf ? 576 : 1152; | |
2310 default: | 2313 default: |
2311 nb_frames = mp_decode_layer3(s); | 2314 nb_frames = mp_decode_layer3(s); |
2312 | 2315 |
2313 s->last_buf_size=0; | 2316 s->last_buf_size=0; |
2314 if(s->in_gb.buffer){ | 2317 if(s->in_gb.buffer){ |
2393 } | 2396 } |
2394 /* update codec info */ | 2397 /* update codec info */ |
2395 avctx->channels = s->nb_channels; | 2398 avctx->channels = s->nb_channels; |
2396 avctx->bit_rate = s->bit_rate; | 2399 avctx->bit_rate = s->bit_rate; |
2397 avctx->sub_id = s->layer; | 2400 avctx->sub_id = s->layer; |
2398 switch(s->layer) { | |
2399 case 1: | |
2400 avctx->frame_size = 384; | |
2401 break; | |
2402 case 2: | |
2403 avctx->frame_size = 1152; | |
2404 break; | |
2405 case 3: | |
2406 if (s->lsf) | |
2407 avctx->frame_size = 576; | |
2408 else | |
2409 avctx->frame_size = 1152; | |
2410 break; | |
2411 } | |
2412 | 2401 |
2413 if(s->frame_size<=0 || s->frame_size > buf_size){ | 2402 if(s->frame_size<=0 || s->frame_size > buf_size){ |
2414 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n"); | 2403 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n"); |
2415 return -1; | 2404 return -1; |
2416 }else if(s->frame_size < buf_size){ | 2405 }else if(s->frame_size < buf_size){ |
2470 avctx->sample_rate = s->sample_rate; | 2459 avctx->sample_rate = s->sample_rate; |
2471 avctx->channels = s->nb_channels; | 2460 avctx->channels = s->nb_channels; |
2472 avctx->bit_rate = s->bit_rate; | 2461 avctx->bit_rate = s->bit_rate; |
2473 avctx->sub_id = s->layer; | 2462 avctx->sub_id = s->layer; |
2474 | 2463 |
2475 avctx->frame_size=s->frame_size = len; | 2464 s->frame_size = len; |
2476 | 2465 |
2477 if (avctx->parse_only) { | 2466 if (avctx->parse_only) { |
2478 out_size = buf_size; | 2467 out_size = buf_size; |
2479 } else { | 2468 } else { |
2480 out_size = mp_decode_frame(s, out_samples, buf, buf_size); | 2469 out_size = mp_decode_frame(s, out_samples, buf, buf_size); |
2633 } | 2622 } |
2634 } | 2623 } |
2635 | 2624 |
2636 /* update codec info */ | 2625 /* update codec info */ |
2637 avctx->sample_rate = s->mp3decctx[0]->sample_rate; | 2626 avctx->sample_rate = s->mp3decctx[0]->sample_rate; |
2638 avctx->frame_size= buf_size; | |
2639 avctx->bit_rate = 0; | 2627 avctx->bit_rate = 0; |
2640 for (i = 0; i < s->frames; i++) | 2628 for (i = 0; i < s->frames; i++) |
2641 avctx->bit_rate += s->mp3decctx[i]->bit_rate; | 2629 avctx->bit_rate += s->mp3decctx[i]->bit_rate; |
2642 | 2630 |
2643 *data_size = out_size; | 2631 *data_size = out_size; |