comparison riff.c @ 3737:704c20dd52a4 libavformat

Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
author pross
date Tue, 19 Aug 2008 10:54:30 +0000
parents 98156a539790
children 8e7b2616e1ad
comparison
equal deleted inserted replaced
3736:441e758e1a5e 3737:704c20dd52a4
169 { CODEC_ID_PCM_S16LE, 0x0001 }, 169 { CODEC_ID_PCM_S16LE, 0x0001 },
170 { CODEC_ID_PCM_U8, 0x0001 }, /* must come after s16le in this list */ 170 { CODEC_ID_PCM_U8, 0x0001 }, /* must come after s16le in this list */
171 { CODEC_ID_PCM_S24LE, 0x0001 }, 171 { CODEC_ID_PCM_S24LE, 0x0001 },
172 { CODEC_ID_PCM_S32LE, 0x0001 }, 172 { CODEC_ID_PCM_S32LE, 0x0001 },
173 { CODEC_ID_ADPCM_MS, 0x0002 }, 173 { CODEC_ID_ADPCM_MS, 0x0002 },
174 { CODEC_ID_PCM_F32LE, 0x0003 },
175 { CODEC_ID_PCM_F64LE, 0x0003 }, /* must come after f32le in this list */
174 { CODEC_ID_PCM_ALAW, 0x0006 }, 176 { CODEC_ID_PCM_ALAW, 0x0006 },
175 { CODEC_ID_PCM_MULAW, 0x0007 }, 177 { CODEC_ID_PCM_MULAW, 0x0007 },
176 { CODEC_ID_WMAVOICE, 0x000A }, 178 { CODEC_ID_WMAVOICE, 0x000A },
177 { CODEC_ID_ADPCM_IMA_WAV, 0x0011 }, 179 { CODEC_ID_ADPCM_IMA_WAV, 0x0011 },
178 { CODEC_ID_PCM_ZORK, 0x0011 }, /* must come after adpcm_ima_wav in this list */ 180 { CODEC_ID_PCM_ZORK, 0x0011 }, /* must come after adpcm_ima_wav in this list */
250 bps = 0; 252 bps = 0;
251 } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id == CODEC_ID_ADPCM_MS || enc->codec_id == CODEC_ID_ADPCM_G726 || enc->codec_id == CODEC_ID_ADPCM_YAMAHA) { // 253 } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id == CODEC_ID_ADPCM_MS || enc->codec_id == CODEC_ID_ADPCM_G726 || enc->codec_id == CODEC_ID_ADPCM_YAMAHA) { //
252 bps = 4; 254 bps = 4;
253 } else if (enc->codec_id == CODEC_ID_PCM_S24LE) { 255 } else if (enc->codec_id == CODEC_ID_PCM_S24LE) {
254 bps = 24; 256 bps = 24;
255 } else if (enc->codec_id == CODEC_ID_PCM_S32LE) { 257 } else if (enc->codec_id == CODEC_ID_PCM_S32LE || enc->codec_id == CODEC_ID_PCM_F32LE) {
256 bps = 32; 258 bps = 32;
259 } else if (enc->codec_id == CODEC_ID_PCM_F64LE) {
260 bps = 64;
257 } else { 261 } else {
258 bps = 16; 262 bps = 16;
259 } 263 }
260 if(bps != enc->bits_per_sample && enc->bits_per_sample){ 264 if(bps != enc->bits_per_sample && enc->bits_per_sample){
261 av_log(enc, AV_LOG_WARNING, "requested bits_per_sample (%d) and actually stored (%d) differ\n", enc->bits_per_sample, bps); 265 av_log(enc, AV_LOG_WARNING, "requested bits_per_sample (%d) and actually stored (%d) differ\n", enc->bits_per_sample, bps);
271 } else 275 } else
272 blkalign = enc->channels*bps >> 3; 276 blkalign = enc->channels*bps >> 3;
273 if (enc->codec_id == CODEC_ID_PCM_U8 || 277 if (enc->codec_id == CODEC_ID_PCM_U8 ||
274 enc->codec_id == CODEC_ID_PCM_S24LE || 278 enc->codec_id == CODEC_ID_PCM_S24LE ||
275 enc->codec_id == CODEC_ID_PCM_S32LE || 279 enc->codec_id == CODEC_ID_PCM_S32LE ||
280 enc->codec_id == CODEC_ID_PCM_F32LE ||
281 enc->codec_id == CODEC_ID_PCM_F64LE ||
276 enc->codec_id == CODEC_ID_PCM_S16LE) { 282 enc->codec_id == CODEC_ID_PCM_S16LE) {
277 bytespersec = enc->sample_rate * blkalign; 283 bytespersec = enc->sample_rate * blkalign;
278 } else { 284 } else {
279 bytespersec = enc->bit_rate / 8; 285 bytespersec = enc->bit_rate / 8;
280 } 286 }
408 id = CODEC_ID_PCM_U8; 414 id = CODEC_ID_PCM_U8;
409 if (id == CODEC_ID_PCM_S16LE && bps == 24) 415 if (id == CODEC_ID_PCM_S16LE && bps == 24)
410 id = CODEC_ID_PCM_S24LE; 416 id = CODEC_ID_PCM_S24LE;
411 if (id == CODEC_ID_PCM_S16LE && bps == 32) 417 if (id == CODEC_ID_PCM_S16LE && bps == 32)
412 id = CODEC_ID_PCM_S32LE; 418 id = CODEC_ID_PCM_S32LE;
419 if (id == CODEC_ID_PCM_F32LE && bps == 64)
420 id = CODEC_ID_PCM_F64LE;
413 if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8) 421 if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8)
414 id = CODEC_ID_PCM_ZORK; 422 id = CODEC_ID_PCM_ZORK;
415 return id; 423 return id;
416 } 424 }
417 #endif // CONFIG_DEMUXERS 425 #endif // CONFIG_DEMUXERS