[FFmpeg-devel] [PATCH] iff: support IFF MAUD
Paul B Mahol
onemda at gmail.com
Thu Nov 29 11:57:28 CET 2012
On 11/29/12, Paul B Mahol <onemda at gmail.com> wrote:
> On 11/29/12, Paul B Mahol <onemda at gmail.com> wrote:
>>> On Thu, Nov 29, 2012 at 06:06:59AM +0100, Piotr Bandurski wrote:
>>> info:
>>>
>>> http://lclevy.free.fr/amiga/MAUDINFO.TXT
>>>
>>> samples:
>>>
>>> http://www.datafilehost.com/download-e7d22dd6.html
>>>
>>> diff --git a/libavformat/iff.c b/libavformat/iff.c
>>> index c8936d3..18d8f31 100644
>>> --- a/libavformat/iff.c
>>> +++ b/libavformat/iff.c
>>> @@ -38,6 +38,9 @@
>>>
>>> #define ID_8SVX MKTAG('8','S','V','X')
>>> #define ID_16SV MKTAG('1','6','S','V')
>>> +#define ID_MAUD MKTAG('M','A','U','D')
>>> +#define ID_MHDR MKTAG('M','H','D','R')
>>> +#define ID_MDAT MKTAG('M','D','A','T')
>>> #define ID_VHDR MKTAG('V','H','D','R')
>>> #define ID_ATAK MKTAG('A','T','A','K')
>>> #define ID_RLSE MKTAG('R','L','S','E')
>>> @@ -91,6 +94,8 @@ typedef struct {
>>> uint32_t body_size;
>>> uint32_t sent_bytes;
>>> svx8_compression_type svx8_compression;
>>> + unsigned maud_bits;
>>> + unsigned maud_compression;
>>> unsigned bitmap_compression; ///< delta compression method used
>>> unsigned bpp; ///< bits per plane to decode (differs from
>>> bits_per_coded_sample if HAM)
>>> unsigned ham; ///< 0 if non-HAM or number of hold bits (6
>>> for bpp > 6, 4 otherwise)
>>> @@ -125,6 +130,7 @@ static int iff_probe(AVProbeData *p)
>>> if ( AV_RL32(d) == ID_FORM &&
>>> (AV_RL32(d+8) == ID_8SVX ||
>>> AV_RL32(d+8) == ID_16SV ||
>>> + AV_RL32(d+8) == ID_MAUD ||
>>> AV_RL32(d+8) == ID_PBM ||
>>> AV_RL32(d+8) == ID_ACBM ||
>>> AV_RL32(d+8) == ID_DEEP ||
>>> @@ -184,9 +190,42 @@ static int iff_read_header(AVFormatContext *s)
>>> }
>>> break;
>>>
>>> + case ID_MHDR:
>>> + st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
>>> +
>>> + iff->maud_bits = -1;
>>> + iff->maud_compression = -1;
>>> + if (data_size < 32)
>>> + return AVERROR_INVALIDDATA;
>>> + avio_skip(pb, 4);
>>> + iff->maud_bits = avio_rb16(pb);
>>> + avio_skip(pb, 2);
>>> + st->codec->sample_rate = avio_rb32(pb);
>>> + avio_skip(pb, 4);
>>> + st->codec->channels = avio_rb16(pb);
>>> + iff->maud_compression = avio_rb16(pb);
>>> + if (iff->maud_bits != 8 && iff->maud_bits != 16) {
>>> + av_log_ask_for_sample(s, "unsupported bit depth (%d)",
>>> iff->maud_bits);
>>> + return AVERROR_PATCHWELCOME;
>>> + }
>>> + if (st->codec->channels == 1)
>>> + st->codec->channel_layout = AV_CH_LAYOUT_MONO;
>>> + else if (st->codec->channels == 2)
>>> + st->codec->channel_layout = AV_CH_LAYOUT_STEREO;
>>> + else {
>>> + av_log_ask_for_sample(s, "unsupported number of
>>> channels
>>> (%d)", st->codec->channels);
>>> + return AVERROR_PATCHWELCOME;
>>> + }
>>> + if (iff->maud_compression != 0) {
>>> + av_log_ask_for_sample(s, "unsupported compression
>>> (%d)",
>>> st->codec->channels);
>>
>> typo. Samples?
>
> Can be created/read with sox.
I sent improved patch that adds alaw & mulaw and splits data is smaller packets.
More information about the ffmpeg-devel
mailing list