|
|
|
@ -1,7 +1,7 @@ |
|
|
|
|
/*
|
|
|
|
|
* Sony OpenMG (OMA) demuxer |
|
|
|
|
* |
|
|
|
|
* Copyright (c) 2008 Maxim Poliakovski |
|
|
|
|
* Copyright (c) 2008, 2013 Maxim Poliakovski |
|
|
|
|
* 2008 Benjamin Larsson |
|
|
|
|
* 2011 David Goldwich |
|
|
|
|
* |
|
|
|
@ -284,7 +284,7 @@ static int decrypt_init(AVFormatContext *s, ID3v2ExtraMeta *em, uint8_t *header) |
|
|
|
|
static int oma_read_header(AVFormatContext *s) |
|
|
|
|
{ |
|
|
|
|
int ret, framesize, jsflag, samplerate; |
|
|
|
|
uint32_t codec_params; |
|
|
|
|
uint32_t codec_params, channel_id; |
|
|
|
|
int16_t eid; |
|
|
|
|
uint8_t buf[EA3_HEADER_SIZE]; |
|
|
|
|
uint8_t *edata; |
|
|
|
@ -364,7 +364,14 @@ static int oma_read_header(AVFormatContext *s) |
|
|
|
|
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); |
|
|
|
|
break; |
|
|
|
|
case OMA_CODECID_ATRAC3P: |
|
|
|
|
st->codec->channels = (codec_params >> 10) & 7; |
|
|
|
|
channel_id = (codec_params >> 10) & 7; |
|
|
|
|
if (!channel_id) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, |
|
|
|
|
"Invalid ATRAC-X channel id: %d\n", channel_id); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
st->codec->channel_layout = ff_oma_chid_to_native_layout[channel_id - 1]; |
|
|
|
|
st->codec->channels = ff_oma_chid_to_num_channels[channel_id - 1]; |
|
|
|
|
framesize = ((codec_params & 0x3FF) * 8) + 8; |
|
|
|
|
samplerate = ff_oma_srate_tab[(codec_params >> 13) & 7] * 100; |
|
|
|
|
if (!samplerate) { |
|
|
|
|