[FFmpeg-devel] [PATCH] Make a clear distinction between an unsupported codec and an unknown one
Vitor Sessak
vitor1001
Sun Aug 31 17:42:49 CEST 2008
Robert Swain wrote:
> 2008/8/31 Peter Ross <pross at xvid.org>:
>> On Sun, Aug 31, 2008 at 12:53:34PM +0200, Michael Niedermayer wrote:
>>> On Sun, Aug 31, 2008 at 06:56:48AM +0200, Vitor Sessak wrote:
>>>> See $subj. I got pretty confused by "Stream #0.1: Audio: 0x0000, 5512 Hz,
>>>> mono, s16" meaning that a codec is known, but unsupported...
>>>>
>>>> -Vitor
>>>> Index: libavcodec/utils.c
>>>> ===================================================================
>>>> --- libavcodec/utils.c (revision 15050)
>>>> +++ libavcodec/utils.c (working copy)
>>>> @@ -1091,8 +1091,12 @@
>>>> (enc->codec_tag >> 16) & 0xff,
>>>> (enc->codec_tag >> 24) & 0xff,
>>>> enc->codec_tag);
>>>> + } else if (enc->codec_id) {
>>>> + snprintf(buf1, sizeof(buf1), "unsuported (id 0x%04x)", enc->codec_id);
>>>> + } else if (enc->codec_tag) {
>>>> + snprintf(buf1, sizeof(buf1), "unknown (0x%04x)", enc->codec_tag);
>>>> } else {
>>>> - snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag);
>>>> + snprintf(buf1, sizeof(buf1), "unknown");
>>>> }
>>> I think this is inconsistant now
>>> Before it just printed the tag now it prints the tag when its
>>> printable, if not and codec_id is not 0 the id and if not and
>>> id is 0 and the tag is not 0 the tag and ...
>>> Printing the ID in addition to the tag and "NONE" instead of
>>> 0x0000 or so seems more consistent to me
IMHO, when we have a codec ID, the codec is already identified and there
is no use printing the 4CC. Yes, I should move them the "if
(enc->codec_id)" up.
>> An enhancement to the unsupported case would be to actually print
>> the name of the codec. e.g. i am always forgetting which 0x16X
>> twocc refers to wmav3.
>
> Indeed. In my opinion it should print the codec name if possible and
Today we have:
AVCodec flac_decoder = {
"flac",
CODEC_TYPE_AUDIO,
CODEC_ID_FLAC,
sizeof(FLACContext),
flac_decode_init,
NULL,
flac_decode_close,
flac_decode_frame,
CODEC_CAP_DELAY,
.flush= flac_flush,
.long_name= NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
};
AVCodec flac_encoder = {
"flac",
CODEC_TYPE_AUDIO,
CODEC_ID_FLAC,
sizeof(FlacEncodeContext),
flac_encode_init,
flac_encode_frame,
flac_encode_close,
NULL,
.capabilities = CODEC_CAP_SMALL_LAST_FRAME,
.sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
};
enum CodecID {
CODEC_ID_NONE,
/* video codecs */
CODEC_ID_MPEG1VIDEO,
[...]
CODEC_ID_FLAC,
[...]
}
Note the duplication of both the short and the long name. I think that
setting the codec long and short name in the same place of CodecID would
remove duplication and resolve the issue of finding the name of
unimplemented codecs...
-Vitor
More information about the ffmpeg-devel
mailing list