X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmatroskaenc.c;h=d7610cf5cdbd6b84e28c193e6d474577930e8f80;hb=c58d45e00489e07fd4606b64ad4095660494185b;hp=ecc5e6bbb3436b800c6b12e5003be6fd89fac2af;hpb=ca1dfea12771b585846fb86aa08c3d7f066a3cc4;p=ffmpeg diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index ecc5e6bbb34..d7610cf5cdb 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1198,6 +1198,22 @@ static int mkv_write_trailer(AVFormatContext *s) return 0; } +static int mkv_query_codec(enum CodecID codec_id, int std_compliance) +{ + int i; + for (i = 0; ff_mkv_codec_tags[i].id != CODEC_ID_NONE; i++) + if (ff_mkv_codec_tags[i].id == codec_id) + return 1; + + if (std_compliance < FF_COMPLIANCE_NORMAL) { // mkv theoretically supports any + enum AVMediaType type = avcodec_get_type(codec_id); // video/audio through VFW/ACM + if (type == AVMEDIA_TYPE_VIDEO || type == AVMEDIA_TYPE_AUDIO) + return 1; + } + + return 0; +} + #if CONFIG_MATROSKA_MUXER AVOutputFormat ff_matroska_muxer = { .name = "matroska", @@ -1205,14 +1221,22 @@ AVOutputFormat ff_matroska_muxer = { .mime_type = "video/x-matroska", .extensions = "mkv", .priv_data_size = sizeof(MatroskaMuxContext), - .audio_codec = CODEC_ID_MP2, +#if CONFIG_LIBVORBIS_ENCODER + .audio_codec = CODEC_ID_VORBIS, +#else + .audio_codec = CODEC_ID_AC3, +#endif +#if CONFIG_LIBX264_ENCODER + .video_codec = CODEC_ID_H264, +#else .video_codec = CODEC_ID_MPEG4, +#endif .write_header = mkv_write_header, .write_packet = mkv_write_packet, .write_trailer = mkv_write_trailer, - .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS, - .codec_tag = (const AVCodecTag* const []){ff_codec_bmp_tags, ff_codec_wav_tags, 0}, - .subtitle_codec = CODEC_ID_SSA, + .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS, + .subtitle_codec = CODEC_ID_SSA, + .query_codec = mkv_query_codec, }; #endif @@ -1239,12 +1263,15 @@ AVOutputFormat ff_matroska_audio_muxer = { .mime_type = "audio/x-matroska", .extensions = "mka", .priv_data_size = sizeof(MatroskaMuxContext), - .audio_codec = CODEC_ID_MP2, +#if CONFIG_LIBVORBIS_ENCODER + .audio_codec = CODEC_ID_VORBIS, +#else + .audio_codec = CODEC_ID_AC3, +#endif .video_codec = CODEC_ID_NONE, .write_header = mkv_write_header, .write_packet = mkv_write_packet, .write_trailer = mkv_write_trailer, .flags = AVFMT_GLOBALHEADER, - .codec_tag = (const AVCodecTag* const []){ff_codec_wav_tags, 0}, }; #endif