mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
alacdec: fill in missing or guessed info about the extradata format.
Now that there is official documentation from Apple about this, we don't have to guess anymore.
This commit is contained in:
parent
490dcda6b6
commit
e76c7b856f
@ -25,27 +25,23 @@
|
|||||||
* @author 2005 David Hammerton
|
* @author 2005 David Hammerton
|
||||||
* @see http://crazney.net/programs/itunes/alac.html
|
* @see http://crazney.net/programs/itunes/alac.html
|
||||||
*
|
*
|
||||||
* Note: This decoder expects a 36- (0x24-)byte QuickTime atom to be
|
* Note: This decoder expects a 36-byte QuickTime atom to be
|
||||||
* passed through the extradata[_size] fields. This atom is tacked onto
|
* passed through the extradata[_size] fields. This atom is tacked onto
|
||||||
* the end of an 'alac' stsd atom and has the following format:
|
* the end of an 'alac' stsd atom and has the following format:
|
||||||
* bytes 0-3 atom size (0x24), big-endian
|
|
||||||
* bytes 4-7 atom type ('alac', not the 'alac' tag from start of stsd)
|
|
||||||
* bytes 8-35 data bytes needed by decoder
|
|
||||||
*
|
*
|
||||||
* Extradata:
|
* 32bit atom size
|
||||||
* 32bit size
|
* 32bit tag ("alac")
|
||||||
* 32bit tag (=alac)
|
* 32bit tag version (0)
|
||||||
* 32bit zero?
|
* 32bit samples per frame (used when not set explicitly in the frames)
|
||||||
* 32bit max sample per frame
|
* 8bit compatible version (0)
|
||||||
* 8bit ?? (zero?)
|
|
||||||
* 8bit sample size
|
* 8bit sample size
|
||||||
* 8bit history mult
|
* 8bit history mult (40)
|
||||||
* 8bit initial history
|
* 8bit initial history (14)
|
||||||
* 8bit kmodifier
|
* 8bit kmodifier (10)
|
||||||
* 8bit channels?
|
* 8bit channels
|
||||||
* 16bit ??
|
* 16bit maxRun (255)
|
||||||
* 32bit max coded frame size
|
* 32bit max coded frame size (0 means unknown)
|
||||||
* 32bit bitrate?
|
* 32bit average bitrate (0 means unknown)
|
||||||
* 32bit samplerate
|
* 32bit samplerate
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -574,7 +570,7 @@ static int alac_set_info(ALACContext *alac)
|
|||||||
|
|
||||||
ptr += 4; /* size */
|
ptr += 4; /* size */
|
||||||
ptr += 4; /* alac */
|
ptr += 4; /* alac */
|
||||||
ptr += 4; /* 0 ? */
|
ptr += 4; /* version */
|
||||||
|
|
||||||
if(AV_RB32(ptr) >= UINT_MAX/4){
|
if(AV_RB32(ptr) >= UINT_MAX/4){
|
||||||
av_log(alac->avctx, AV_LOG_ERROR, "setinfo_max_samples_per_frame too large\n");
|
av_log(alac->avctx, AV_LOG_ERROR, "setinfo_max_samples_per_frame too large\n");
|
||||||
@ -583,15 +579,15 @@ static int alac_set_info(ALACContext *alac)
|
|||||||
|
|
||||||
/* buffer size / 2 ? */
|
/* buffer size / 2 ? */
|
||||||
alac->setinfo_max_samples_per_frame = bytestream_get_be32(&ptr);
|
alac->setinfo_max_samples_per_frame = bytestream_get_be32(&ptr);
|
||||||
ptr++; /* ??? */
|
ptr++; /* compatible version */
|
||||||
alac->setinfo_sample_size = *ptr++;
|
alac->setinfo_sample_size = *ptr++;
|
||||||
alac->setinfo_rice_historymult = *ptr++;
|
alac->setinfo_rice_historymult = *ptr++;
|
||||||
alac->setinfo_rice_initialhistory = *ptr++;
|
alac->setinfo_rice_initialhistory = *ptr++;
|
||||||
alac->setinfo_rice_kmodifier = *ptr++;
|
alac->setinfo_rice_kmodifier = *ptr++;
|
||||||
alac->numchannels = *ptr++;
|
alac->numchannels = *ptr++;
|
||||||
bytestream_get_be16(&ptr); /* ??? */
|
bytestream_get_be16(&ptr); /* maxRun */
|
||||||
bytestream_get_be32(&ptr); /* max coded frame size */
|
bytestream_get_be32(&ptr); /* max coded frame size */
|
||||||
bytestream_get_be32(&ptr); /* bitrate ? */
|
bytestream_get_be32(&ptr); /* average bitrate */
|
||||||
bytestream_get_be32(&ptr); /* samplerate */
|
bytestream_get_be32(&ptr); /* samplerate */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user