[FFmpeg-devel] [PATCH v1 1/1] avformat/amr: Return PATCHWELCOME on stereo files

Sun Zhenliang hisunzhenliang at outlook.com
Tue Sep 21 15:08:19 EEST 2021


ping. Anyone could review this ?

> On Sep 18, 2021, at 20:40, Sun Zhenliang <hisunzhenliang at outlook.com> wrote:
> 
> Ping.
> 在 2021年9月17日 +0800 15:28,Sun Zhenliang <hisunzhenliang at outlook.com>,写道:
>> 在 2021年9月17日 +0800 14:49,Paul B Mahol <onemda at gmail.com>,写道:
>>> Are stereo files available somewhere? Known way to encode?
>> Here is the stereo file,
>> https://github.com/HiSunzhenliang/patch/blob/main/ffmpeg/avformat-amr-Return-PATCHWELCOME-on-stereo-files/stereo.amr-nb
>> 
>> It’s made by our internal amr codec tool which followed 3GPP specifications.
>> 
>> FFmpeg did not recognize this audio before. With this patch, it will detect correctly and
>> show patches welcome.
>>> 
>>> On Fri, Sep 17, 2021 at 4:14 AM Sun Zhenliang <hisunzhenliang at outlook.com>
>>> wrote:
>>> 
>>>> Ping.
>>>> 
>>>> Anyone could review this patch?
>>>> 
>>>> Thx.
>>>> 在 2021年9月16日 +0800 11:24,sunzhenliang <hisunzhenliang at outlook.com>,写道:
>>>>> Signed-off-by: sunzhenliang <hisunzhenliang at outlook.com>
>>>>> ---
>>>>> libavformat/amr.c | 22 ++++++++++++++++++----
>>>>> 1 file changed, 18 insertions(+), 4 deletions(-)
>>>>> 
>>>>> diff --git a/libavformat/amr.c b/libavformat/amr.c
>>>>> index 836b276fd5..2762010ebe 100644
>>>>> --- a/libavformat/amr.c
>>>>> +++ b/libavformat/amr.c
>>>>> @@ -36,8 +36,10 @@ typedef struct {
>>>>> uint64_t block_count;
>>>>> } AMRContext;
>>>>> 
>>>>> -static const char AMR_header[] = "#!AMR\n";
>>>>> -static const char AMRWB_header[] = "#!AMR-WB\n";
>>>>> +static const char AMR_header[] = "#!AMR\n";
>>>>> +static const char AMR_MC_header[] = "#!AMR_MC1.0\n";
>>>>> +static const char AMRWB_header[] = "#!AMR-WB\n";
>>>>> +static const char AMRWB_MC_header[] = "#!AMR-WB_MC1.0\n";
>>>>> 
>>>>> static const uint8_t amrnb_packed_size[16] = {
>>>>> 13, 14, 16, 18, 20, 21, 27, 32, 6, 1, 1, 1, 1, 1, 1, 1
>>>>> @@ -82,7 +84,7 @@ static int amr_read_header(AVFormatContext *s)
>>>>> {
>>>>> AVIOContext *pb = s->pb;
>>>>> AVStream *st;
>>>>> - uint8_t header[9];
>>>>> + uint8_t header[15];
>>>>> 
>>>>> if (avio_read(pb, header, 6) != 6)
>>>>> return AVERROR_INVALIDDATA;
>>>>> @@ -94,7 +96,19 @@ static int amr_read_header(AVFormatContext *s)
>>>>> if (avio_read(pb, header + 6, 3) != 3)
>>>>> return AVERROR_INVALIDDATA;
>>>>> if (memcmp(header, AMRWB_header, 9)) {
>>>>> - return -1;
>>>>> + if (avio_read(pb, header + 6 + 3, 3) != 3)
>>>>> + return AVERROR_INVALIDDATA;
>>>>> + if (memcmp(header, AMR_MC_header, 12)) {
>>>>> + if (avio_read(pb, header + 6 + 3 + 3, 3) != 3)
>>>>> + return AVERROR_INVALIDDATA;
>>>>> + if (memcmp(header, AMRWB_MC_header, 15)) {
>>>>> + return -1;
>>>>> + }
>>>>> + avpriv_report_missing_feature(s, "multi-channel AMRWB");
>>>>> + return AVERROR_PATCHWELCOME;
>>>>> + }
>>>>> + avpriv_report_missing_feature(s, "multi-channel AMR");
>>>>> + return AVERROR_PATCHWELCOME;
>>>>> }
>>>>> 
>>>>> st->codecpar->codec_tag = MKTAG('s', 'a', 'w', 'b');
>>>>> --
>>>>> 2.25.1
>>>>> 
>>>> _______________________________________________
>>>> ffmpeg-devel mailing list
>>>> ffmpeg-devel at ffmpeg.org
>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>> 
>>>> To unsubscribe, visit link above, or email
>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>> 
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>> 
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list