[FFmpeg-devel] [PATCH] oma demuxer

Benjamin Larsson banan
Sun Jun 8 18:08:23 CEST 2008


Michael Niedermayer wrote:
> On Sat, Jun 07, 2008 at 11:31:03PM +0200, Benjamin Larsson wrote:
>> Michael Niedermayer wrote:
> [...]
>> The code has some declarations that I think should be moved to
>> avformat.h. They are duplicated from riff.h.
> 
> no they do not belong in avformat.h, they are not part of the public API!
> if they should be in riff.h or not is debateable but they definitly do not
> belong in avformat.h
> 

My bad, it just felt stupid to include riff.h.

> 
> [...]
> 
>> #include "libavformat/avformat.h"
> 
> #include "avformat.h"
> 

Fixed.

> 
>> #include "libavutil/intreadwrite.h"
>> #include "raw.h"
>>
>> #define EA3_HEADER_SIZE 96
>>
> 
>> typedef struct AVCodecTag {
>>     int id;
>>     unsigned int tag;
>> } AVCodecTag;
>>
>> enum CodecID codec_get_id(const AVCodecTag *tags, unsigned int tag);
> 
> duplicate ...
> 

Removed.

> 
> [...]
>> const AVCodecTag codec_oma_tags[] = {
> 
> static const
> 
> 
>>     { CODEC_ID_ATRAC3,  OMA_CODECID_ATRAC3 },
>>     { CODEC_ID_ATRAC3P, OMA_CODECID_ATRAC3P },
>> };
>>

Fixed.

> 
>> static int oma_read_header(AVFormatContext *s,
>>                            AVFormatParameters *ap)
>> {
> 
>>     uint16_t srate_tab[6] = {320,441,480,882,960,0};
> 
> static const
> 

Fixed.

> 
> [...]
>>     /* check the EA3 header */
>>     if (memcmp(buf, (uint8_t[]){'E', 'A', '3'},3) || buf[4] != 0 || buf[5] != EA3_HEADER_SIZE) {
>>         av_log(s, AV_LOG_INFO, "Couldn't find the EA3 header !\n");
>>         return -1;
>>     }
>>
>>     /* check for encrypted content */
>>     eid = AV_RB16(&buf[6]);
>>     if (eid != -1 && eid != -128) {
>>         av_log(s, AV_LOG_INFO, "Encrypted file! Eid: %d\n", eid);
>>         return -1;
>>     }
> 
> These should be AV_LOG_ERROR or FATAL not INFO
> 

Fixed.

> 
>>     /* Get generic codec parameters */
>>     info = AV_RB24(&buf[33]);
> 
> if info is generic codec parameters, why is it not named accordingly.
> codec_params or stream_params being an obvious choice ...
> And if you really are reading bits, maybe get_bits() would be cleaner ?

Renamed.

> 
> Please remove _ALL_ comments from the function body, see the linux kernel
> style guide for explanations why such comments are inapproriate except for
> really tricky things which I belive this simple demuxer does not qualify
> as.
> 

Removed.

> 
>>     /* Atrac3 specific: get coding mode, 1 for joint-stereo */
>>     jsflag = (info >> 17) & 1;
> 
> If its ATRAC3 specific why is it not under the appropriate if below?
> 

Moved.

> 
>>     channel_id = (info >> 10) & 7;
>>     samplerate = srate_tab[(info >> 13) & 7]*100;
>>
> 
>>     /* Check for invalid configurations */
>>     switch (buf[32]) {
>>         case OMA_CODECID_ATRAC3:
>>             framesize = (info & 0x3FF) * 8;
>>             if (samplerate != 44100) {
> 
>>                 av_log(s, AV_LOG_INFO, "Unsupported sample rate, send sample file to developers: %d\n", samplerate);
>>                 return -1;
> 
> AV_LOG_ERROR or FATAL see log.h
> If the demuxer fails and doesnt demux its not INFO though maybe it would be
> more appropriate not to fail ...
> 

Changed, we could always try to decode.

> 
> [...]
> 
>>     /* Set common parameters */
>>     st = av_new_stream(s, 0);
>>     if (!st)
>>         return AVERROR(ENOMEM);
>>
> 
> This creates a new stream it does not set common parameters
> 

Removed.

> 
>>     st->codec->codec_type  = CODEC_TYPE_AUDIO;
>>     st->codec->codec_id    = codec_get_id(codec_oma_tags, buf[32]);
>>     st->codec->channels    = channel_id;
>>     st->codec->sample_rate = samplerate;
>>     st->codec->bit_rate    = samplerate * framesize * 8 / 1024;
>>     st->codec->block_align = framesize;
> 
>>     st->codec->codec_tag   = 0;
> 
> buf[32] or more cleanly
> 
> st->codec->codec_tag   = buf[32]
> st->codec->codec_id    = codec_get_id(codec_oma_tags, st->codec->codec_tag);
> 

Fixed.

> 
> [...]
> 
>>     if (st->codec->codec_id==CODEC_ID_ATRAC3) {
> 
> That can be merged with the switch above
> 

Merged.

> 
> [...]
>> static int oma_read_packet(AVFormatContext *s, AVPacket *pkt)
>> {
> 
>>     int ret;
>>
>>     ret = av_get_packet(s->pb, pkt, s->streams[0]->codec->block_align);
> 
> declaration and initialization can be merged
> 

Merged.

> 
> [...]
>> static int oma_read_probe(AVProbeData *p)
>> {
>>     /* check file header */
>>     if (!memcmp(p->buf, (uint8_t[]){'e', 'a', '3', 3, 0},5))
>>         return AVPROBE_SCORE_MAX;
>>     else
>>         return 0;
>> }
> 
> its obvious that a *_probe() will likely check the file header, if you really
> think this has to be emphasized place the comment before the function please.
> Where it is currently it just makes the function hard to read.
> 

Removed.


MvH
Benjamin Larsson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: oma.c
Type: text/x-csrc
Size: 6104 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080608/e27f8376/attachment.c>



More information about the ffmpeg-devel mailing list