Commit 9fff16bc authored by Baptiste Coudurier's avatar Baptiste Coudurier Committed by Benjamin Larsson

Calculate the correct blocksize for flash adpcm. Patch by Baptiste

Coudurier.

Originally committed as revision 9742 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 1f48345a
...@@ -183,7 +183,13 @@ static int adpcm_encode_init(AVCodecContext *avctx) ...@@ -183,7 +183,13 @@ static int adpcm_encode_init(AVCodecContext *avctx)
avctx->block_align = BLKSIZE; avctx->block_align = BLKSIZE;
break; break;
case CODEC_ID_ADPCM_SWF: case CODEC_ID_ADPCM_SWF:
avctx->frame_size = 4*BLKSIZE * avctx->channels; if (avctx->sample_rate != 11025 &&
avctx->sample_rate != 22050 &&
avctx->sample_rate != 44100) {
av_log(avctx, AV_LOG_ERROR, "Sample rate must be 11025, 22050 or 44100\n");
return -1;
}
avctx->frame_size = 512 * (avctx->sample_rate / 11025);
break; break;
default: default:
return -1; return -1;
...@@ -530,13 +536,13 @@ static int adpcm_encode_frame(AVCodecContext *avctx, ...@@ -530,13 +536,13 @@ static int adpcm_encode_frame(AVCodecContext *avctx,
c->status[i].prev_sample = (signed short)samples[i]; c->status[i].prev_sample = (signed short)samples[i];
} }
for (i=0 ; i<4096 ; i++) { for (i=0; i<avctx->frame_size; i++) {
put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF); put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF);
if (avctx->channels == 2) if (avctx->channels == 2)
put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF); put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF);
} }
flush_put_bits(&pb);
dst += (3 + 2048) * avctx->channels; dst += put_bits_count(&pb)>>3;
break; break;
} }
case CODEC_ID_ADPCM_MS: case CODEC_ID_ADPCM_MS:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment