|
|
|
@ -32,6 +32,22 @@ |
|
|
|
|
* 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 size |
|
|
|
|
* 32bit tag (=alac) |
|
|
|
|
* 32bit zero? |
|
|
|
|
* 32bit max sample per frame |
|
|
|
|
* 8bit ?? (zero?) |
|
|
|
|
* 8bit sample size |
|
|
|
|
* 8bit history mult |
|
|
|
|
* 8bit initial history |
|
|
|
|
* 8bit kmodifier |
|
|
|
|
* 8bit channels? |
|
|
|
|
* 16bit ?? |
|
|
|
|
* 32bit max coded frame size |
|
|
|
|
* 32bit bitrate? |
|
|
|
|
* 32bit samplerate |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -99,14 +115,14 @@ static void alac_set_info(ALACContext *alac) |
|
|
|
|
alac->setinfo_rice_historymult = *ptr++; |
|
|
|
|
alac->setinfo_rice_initialhistory = *ptr++; |
|
|
|
|
alac->setinfo_rice_kmodifier = *ptr++; |
|
|
|
|
alac->setinfo_7f = *ptr++; |
|
|
|
|
alac->setinfo_7f = *ptr++; // channels?
|
|
|
|
|
alac->setinfo_80 = BE_16(ptr); |
|
|
|
|
ptr += 2; |
|
|
|
|
alac->setinfo_82 = BE_32(ptr); |
|
|
|
|
alac->setinfo_82 = BE_32(ptr); // max coded frame size
|
|
|
|
|
ptr += 4; |
|
|
|
|
alac->setinfo_86 = BE_32(ptr); |
|
|
|
|
alac->setinfo_86 = BE_32(ptr); // bitrate ?
|
|
|
|
|
ptr += 4; |
|
|
|
|
alac->setinfo_8a_rate = BE_32(ptr); |
|
|
|
|
alac->setinfo_8a_rate = BE_32(ptr); // samplerate
|
|
|
|
|
ptr += 4; |
|
|
|
|
|
|
|
|
|
allocate_buffers(alac); |
|
|
|
@ -444,7 +460,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
/* initialize from the extradata */ |
|
|
|
|
if (!alac->context_initialized) { |
|
|
|
|
if (alac->avctx->extradata_size != ALAC_EXTRADATA_SIZE) { |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "alac: expected %d extradata bytes\n", |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "alac: expected %d extradata bytes\n", |
|
|
|
|
ALAC_EXTRADATA_SIZE); |
|
|
|
|
return input_buffer_size; |
|
|
|
|
} |
|
|
|
@ -500,7 +516,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
int prediction_quantitization; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
/* skip 16 bits, not sure what they are. seem to be used in
|
|
|
|
|
/* FIXME: skip 16 bits, not sure what they are. seem to be used in
|
|
|
|
|
* two channel case */ |
|
|
|
|
get_bits(&alac->gb, 8); |
|
|
|
|
get_bits(&alac->gb, 8); |
|
|
|
@ -520,7 +536,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
/* these bytes seem to have something to do with
|
|
|
|
|
* > 2 channel files. |
|
|
|
|
*/ |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of wasted_bytes\n"); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of wasted_bytes\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bastardized_rice_decompress(alac, |
|
|
|
@ -542,7 +558,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
predictor_coef_num, |
|
|
|
|
prediction_quantitization); |
|
|
|
|
} else { |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type); |
|
|
|
|
/* i think the only other prediction type (or perhaps this is just a
|
|
|
|
|
* boolean?) runs adaptive fir twice.. like: |
|
|
|
|
* predictor_decompress_fir_adapt(predictor_error, tempout, ...) |
|
|
|
@ -594,7 +610,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
case 20: |
|
|
|
|
case 24: |
|
|
|
|
case 32: |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
@ -679,7 +695,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
/*********************/ |
|
|
|
|
if (wasted_bytes) { |
|
|
|
|
/* see mono case */ |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of wasted_bytes\n"); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of wasted_bytes\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* channel 1 */ |
|
|
|
@ -703,7 +719,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
prediction_quantitization_a); |
|
|
|
|
} else { |
|
|
|
|
/* see mono case */ |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type_a); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type_a); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* channel 2 */ |
|
|
|
@ -726,7 +742,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
predictor_coef_num_b, |
|
|
|
|
prediction_quantitization_b); |
|
|
|
|
} else { |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type_b); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type_b); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
/* not compressed, easy case */ |
|
|
|
@ -782,7 +798,7 @@ static int alac_decode_frame(AVCodecContext *avctx, |
|
|
|
|
case 20: |
|
|
|
|
case 24: |
|
|
|
|
case 32: |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|