diff options
author | Cameron Cawley <ccawley2011@gmail.com> | 2021-05-07 17:50:48 +0100 |
---|---|---|
committer | Zane van Iperen <zane@zanevaniperen.com> | 2021-05-09 17:01:34 +1000 |
commit | bc86515c4f96a0a616c0a2d9e8019a9391c38640 (patch) | |
tree | 44a1b7f8a0f7623b3cb1055c586c7b0c23a535f5 | |
parent | 5c7313c740dbd04e1a98937ca31d2c4a30ac6b99 (diff) | |
download | ffmpeg-bc86515c4f96a0a616c0a2d9e8019a9391c38640.tar.gz |
avformat/rpl: Support files containing Replay IMA ADPCM audio
Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
-rw-r--r-- | libavformat/rpl.c | 14 |
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++) |