summaryrefslogtreecommitdiff
path: root/libavformat/rpl.c
diff options
context:
space:
mode:
authorCameron Cawley <ccawley2011@gmail.com>2021-05-07 17:50:48 +0100
committerZane van Iperen <zane@zanevaniperen.com>2021-05-09 17:01:34 +1000
commitbc86515c4f96a0a616c0a2d9e8019a9391c38640 (patch)
tree44a1b7f8a0f7623b3cb1055c586c7b0c23a535f5 /libavformat/rpl.c
parent5c7313c740dbd04e1a98937ca31d2c4a30ac6b99 (diff)
downloadffmpeg-bc86515c4f96a0a616c0a2d9e8019a9391c38640.tar.gz
avformat/rpl: Support files containing Replay IMA ADPCM audio
Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
Diffstat (limited to 'libavformat/rpl.c')
-rw-r--r--libavformat/rpl.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/libavformat/rpl.c b/libavformat/rpl.c
index 367e80b2c4..d495734e8e 100644
--- a/libavformat/rpl.c
+++ b/libavformat/rpl.c
@@ -121,6 +121,7 @@ static int rpl_read_header(AVFormatContext *s)
int error = 0;
const char *endptr;
char audio_type[RPL_LINE_LENGTH];
+ char audio_codec[RPL_LINE_LENGTH];
uint32_t i;
@@ -189,7 +190,9 @@ static int rpl_read_header(AVFormatContext *s)
// ARMovie supports multiple audio tracks; I don't have any
// samples, though. This code will ignore additional tracks.
- audio_format = read_line_and_int(pb, &error); // audio format ID
+ error |= read_line(pb, line, sizeof(line));
+ audio_format = read_int(line, &endptr, &error); // audio format ID
+ av_strlcpy(audio_codec, endptr, RPL_LINE_LENGTH);
if (audio_format) {
ast = avformat_new_stream(s, NULL);
if (!ast)
@@ -227,6 +230,11 @@ static int rpl_read_header(AVFormatContext *s)
// There are some other formats listed as legal per the spec;
// samples needed.
break;
+ case 2:
+ if (av_stristr(audio_codec, "adpcm") != NULL) {
+ ast->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_ACORN;
+ }
+ break;
case 101:
if (ast->codecpar->bits_per_coded_sample == 8) {
// The samples with this kind of audio that I have
@@ -238,8 +246,8 @@ static int rpl_read_header(AVFormatContext *s)
break;
}
if (ast->codecpar->codec_id == AV_CODEC_ID_NONE)
- avpriv_request_sample(s, "Audio format %"PRId32,
- audio_format);
+ avpriv_request_sample(s, "Audio format %"PRId32" (%s)",
+ audio_format, audio_codec);
avpriv_set_pts_info(ast, 32, 1, ast->codecpar->bit_rate);
} else {
for (i = 0; i < 3; i++)