|
|
@ -60,19 +60,16 @@ static const uint64_t leaf_table[] = { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/** map ATRAC-X channel id to internal channel layout */ |
|
|
|
/** map ATRAC-X channel id to internal channel layout */ |
|
|
|
static const uint64_t oma_chid_to_native_layout[7] = { |
|
|
|
static const AVChannelLayout oma_chid_to_native_layout[7] = { |
|
|
|
AV_CH_LAYOUT_MONO, |
|
|
|
AV_CHANNEL_LAYOUT_MONO, |
|
|
|
AV_CH_LAYOUT_STEREO, |
|
|
|
AV_CHANNEL_LAYOUT_STEREO, |
|
|
|
AV_CH_LAYOUT_SURROUND, |
|
|
|
AV_CHANNEL_LAYOUT_SURROUND, |
|
|
|
AV_CH_LAYOUT_4POINT0, |
|
|
|
AV_CHANNEL_LAYOUT_4POINT0, |
|
|
|
AV_CH_LAYOUT_5POINT1_BACK, |
|
|
|
AV_CHANNEL_LAYOUT_5POINT1_BACK, |
|
|
|
AV_CH_LAYOUT_6POINT1_BACK, |
|
|
|
AV_CHANNEL_LAYOUT_6POINT1_BACK, |
|
|
|
AV_CH_LAYOUT_7POINT1 |
|
|
|
AV_CHANNEL_LAYOUT_7POINT1 |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/** map ATRAC-X channel id to total number of channels */ |
|
|
|
|
|
|
|
static const int oma_chid_to_num_channels[7] = { 1, 2, 3, 4, 6, 7, 8 }; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct OMAContext { |
|
|
|
typedef struct OMAContext { |
|
|
|
uint64_t content_start; |
|
|
|
uint64_t content_start; |
|
|
|
int encrypted; |
|
|
|
int encrypted; |
|
|
@ -474,8 +471,7 @@ static int oma_read_header(AVFormatContext *s) |
|
|
|
/* get stereo coding mode, 1 for joint-stereo */ |
|
|
|
/* get stereo coding mode, 1 for joint-stereo */ |
|
|
|
jsflag = (codec_params >> 17) & 1; |
|
|
|
jsflag = (codec_params >> 17) & 1; |
|
|
|
|
|
|
|
|
|
|
|
st->codecpar->channels = 2; |
|
|
|
st->codecpar->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; |
|
|
|
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; |
|
|
|
|
|
|
|
st->codecpar->sample_rate = samplerate; |
|
|
|
st->codecpar->sample_rate = samplerate; |
|
|
|
st->codecpar->bit_rate = st->codecpar->sample_rate * framesize / (1024 / 8); |
|
|
|
st->codecpar->bit_rate = st->codecpar->sample_rate * framesize / (1024 / 8); |
|
|
|
|
|
|
|
|
|
|
@ -501,8 +497,8 @@ static int oma_read_header(AVFormatContext *s) |
|
|
|
"Invalid ATRAC-X channel id: %"PRIu32"\n", channel_id); |
|
|
|
"Invalid ATRAC-X channel id: %"PRIu32"\n", channel_id); |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
} |
|
|
|
st->codecpar->channel_layout = oma_chid_to_native_layout[channel_id - 1]; |
|
|
|
av_channel_layout_copy(&st->codecpar->ch_layout, |
|
|
|
st->codecpar->channels = oma_chid_to_num_channels[channel_id - 1]; |
|
|
|
&oma_chid_to_native_layout[channel_id - 1]); |
|
|
|
framesize = ((codec_params & 0x3FF) * 8) + 8; |
|
|
|
framesize = ((codec_params & 0x3FF) * 8) + 8; |
|
|
|
samplerate = ff_oma_srate_tab[(codec_params >> 13) & 7] * 100; |
|
|
|
samplerate = ff_oma_srate_tab[(codec_params >> 13) & 7] * 100; |
|
|
|
if (!samplerate) { |
|
|
|
if (!samplerate) { |
|
|
@ -519,8 +515,7 @@ static int oma_read_header(AVFormatContext *s) |
|
|
|
break; |
|
|
|
break; |
|
|
|
case OMA_CODECID_LPCM: |
|
|
|
case OMA_CODECID_LPCM: |
|
|
|
/* PCM 44.1 kHz 16 bit stereo big-endian */ |
|
|
|
/* PCM 44.1 kHz 16 bit stereo big-endian */ |
|
|
|
st->codecpar->channels = 2; |
|
|
|
st->codecpar->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; |
|
|
|
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; |
|
|
|
|
|
|
|
st->codecpar->sample_rate = 44100; |
|
|
|
st->codecpar->sample_rate = 44100; |
|
|
|
framesize = 1024; |
|
|
|
framesize = 1024; |
|
|
|
/* bit rate = sample rate x PCM block align (= 4) x 8 */ |
|
|
|
/* bit rate = sample rate x PCM block align (= 4) x 8 */ |
|
|
@ -530,16 +525,14 @@ static int oma_read_header(AVFormatContext *s) |
|
|
|
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); |
|
|
|
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case OMA_CODECID_ATRAC3AL: |
|
|
|
case OMA_CODECID_ATRAC3AL: |
|
|
|
st->codecpar->channels = 2; |
|
|
|
st->codecpar->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; |
|
|
|
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; |
|
|
|
|
|
|
|
st->codecpar->sample_rate = 44100; |
|
|
|
st->codecpar->sample_rate = 44100; |
|
|
|
avpriv_set_pts_info(st, 64, 1, 44100); |
|
|
|
avpriv_set_pts_info(st, 64, 1, 44100); |
|
|
|
oc->read_packet = aal_read_packet; |
|
|
|
oc->read_packet = aal_read_packet; |
|
|
|
framesize = 4096; |
|
|
|
framesize = 4096; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case OMA_CODECID_ATRAC3PAL: |
|
|
|
case OMA_CODECID_ATRAC3PAL: |
|
|
|
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; |
|
|
|
st->codecpar->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; |
|
|
|
st->codecpar->channels = 2; |
|
|
|
|
|
|
|
st->codecpar->sample_rate = 44100; |
|
|
|
st->codecpar->sample_rate = 44100; |
|
|
|
avpriv_set_pts_info(st, 64, 1, 44100); |
|
|
|
avpriv_set_pts_info(st, 64, 1, 44100); |
|
|
|
oc->read_packet = aal_read_packet; |
|
|
|
oc->read_packet = aal_read_packet; |
|
|
|