[FFmpeg-devel] [PATCH] attachments support in matroska demuxer
Måns Rullgård
mans
Sun Jan 20 19:35:58 CET 2008
Michael Niedermayer <michaelni at gmx.at> writes:
> On Sun, Jan 20, 2008 at 04:05:21PM +0000, M?ns Rullg?rd wrote:
>> Baptiste Coudurier <baptiste.coudurier at smartjog.com> writes:
>>
>> > Hi
>> >
>> > Michael Niedermayer wrote:
>> >> (not that mpeg-ps/ts and matroska would set codec_tag correctly ...)
>> >
>> > Yes, mpeg-ps should set codec_tag to startcode.
>>
>> There is no logical value to put there for mpeg-ps. For mpeg-ts, the
>> codec ID from the PMT would be a natural, albeit pointless, choice.
>> The same value is used in the MPEG-PS PSM when present, but since PSM
>> is optional when only MPEG1/2 video and audio is present, there is no
>> obvious choice for codec_tag.
>>
>
>> Based on what you say, I have to consider the entire concept of
>> codec_tag flawed. Since the decoder does not in general (and
>> certainly should not) know what container the data came in, it cannot
>> know how to interpret the value of codec_tag.
>
> Well fact is, the system is extreemly simple and works extreemly well in
> detecting buggy divx and xvid whithout false detections, at least none an
> alternative system would avoid.
System? What system?
> And no the demuxer has no knowledgle of the container.
^^^^^^^
I assume you meant decoder.
> And hell the whole mplayer uses avi fourccs internally to identify codecs
Well, mplayer is basically an AVI player that also happens to support
a some other formats. Besides, MPlayer is hardly a good example of
how to do anything whatsoever.
> and mplayer plays many files your program doesnt, it cant as you already
> said you ignore codec_tag which is essential to the playback of many files.
Samples, please.
>> Similarly a muxer, whether transcoding or copying, does not know
>> the source of the codec_tag value, and thus cannot interpret it one
>> way or another.
>
> The user app can set codec_tag to 0 for the muxer
> or set it to a value that is valid for the container, it can do that
> by using the AVCodecTag table from the muxer.
What would be the point in doing that?
> You shouldnt blame the API if the user app sets the codec_tag to a
> value which isnt valid ...
I'm blaming the API for existing in the first place.
>> I feel sorry for all you people who were raised on AVI files. I
>> really do...
>
> I feel happy for you all who like mpeg with its 3 different ways to
> identify codecs. And then for a dozen cases reuse all ids so the
> streams need analyzing to identify the codec.
>
> (minor snippet of mpeg.c
> } else if (startcode >= 0x1e0 && startcode <= 0x1ef) {
> static const unsigned char avs_seqh[4] = { 0, 0, 1, 0xb0 };
> unsigned char buf[8];
> get_buffer(s->pb, buf, 8);
> url_fseek(s->pb, -8, SEEK_CUR);
> if(!memcmp(buf, avs_seqh, 4) && (buf[6] != 0 || buf[7] != 1))
> codec_id = CODEC_ID_CAVS;
> else
> codec_id = CODEC_ID_MPEG2VIDEO;
> type = CODEC_TYPE_VIDEO;
It's not the fault of MPEG that the Chinese chose to ignore the spec.
> } else if (startcode >= 0x1c0 && startcode <= 0x1df) {
> type = CODEC_TYPE_AUDIO;
> codec_id = m->sofdec > 0 ? CODEC_ID_ADPCM_ADX : CODEC_ID_MP2;
It's not the fault of MPEG that whoever is behind ADX chose to ignore
the spec.
> avi doesnt have such entertaining identifer system, but uses boring 4
> character codes with some similarity to the codec name and suprisingly
> that anarchistic system is free of colissions while the great mpeg
> is full of collisions.
Well, with AVI the problem is the opposite. Every codec has a zillion
different identifiers. This is because of fundamental misconceptions
in the way AVI and VFW were originally conceived. I've discussed
these at length in the past, and I don't feel inclined to repeat it
all again.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list