|
|
|
@@ -122,27 +122,27 @@ static int rsd_read_header(AVFormatContext *s) |
|
|
|
st->duration = av_get_audio_frame_duration(codec, avio_size(pb) - start); |
|
|
|
break; |
|
|
|
case AV_CODEC_ID_ADPCM_THP_LE: |
|
|
|
/* RSD3GADP is mono, so only alloc enough memory |
|
|
|
to store the coeff table for a single channel. */ |
|
|
|
/* RSD3GADP is mono, so only alloc enough memory |
|
|
|
to store the coeff table for a single channel. */ |
|
|
|
|
|
|
|
start = avio_rl32(pb); |
|
|
|
start = avio_rl32(pb); |
|
|
|
|
|
|
|
if ((ret = ff_get_extradata(codec, s->pb, 32)) < 0) |
|
|
|
return ret; |
|
|
|
if ((ret = ff_get_extradata(codec, s->pb, 32)) < 0) |
|
|
|
return ret; |
|
|
|
if (pb->seekable) |
|
|
|
st->duration = av_get_audio_frame_duration(codec, avio_size(pb) - start); |
|
|
|
break; |
|
|
|
case AV_CODEC_ID_ADPCM_THP: |
|
|
|
codec->block_align = 8 * codec->channels; |
|
|
|
avio_skip(s->pb, 0x1A4 - avio_tell(s->pb)); |
|
|
|
codec->block_align = 8 * codec->channels; |
|
|
|
avio_skip(s->pb, 0x1A4 - avio_tell(s->pb)); |
|
|
|
|
|
|
|
if ((ret = ff_alloc_extradata(st->codec, 32 * st->codec->channels)) < 0) |
|
|
|
return ret; |
|
|
|
if ((ret = ff_alloc_extradata(st->codec, 32 * st->codec->channels)) < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
for (i = 0; i < st->codec->channels; i++) { |
|
|
|
avio_read(s->pb, st->codec->extradata + 32 * i, 32); |
|
|
|
avio_skip(s->pb, 8); |
|
|
|
} |
|
|
|
for (i = 0; i < st->codec->channels; i++) { |
|
|
|
avio_read(s->pb, st->codec->extradata + 32 * i, 32); |
|
|
|
avio_skip(s->pb, 8); |
|
|
|
} |
|
|
|
if (pb->seekable) |
|
|
|
st->duration = (avio_size(pb) - start) / (8 * st->codec->channels) * 14; |
|
|
|
break; |
|
|
|
|