Ticket #3583: patchwebm2.diff

File patchwebm2.diff, 2.2 KB (added by Carl Eugen Hoyos, 12 years ago)
  • libavformat/matroskaenc.c

    diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
    index e5e6116..47d056c 100644
    a b static int mkv_write_header(AVFormatContext *s)  
    10961096    AVIOContext *pb = s->pb;
    10971097    ebml_master ebml_header, segment_info;
    10981098    AVDictionaryEntry *tag;
    1099     int ret, i;
     1099    int ret, i, version = 2;
    11001100
    11011101    if (!strcmp(s->oformat->name, "webm")) mkv->mode = MODE_WEBM;
    11021102    else                                   mkv->mode = MODE_MATROSKAv2;
    static int mkv_write_header(AVFormatContext *s)  
    11041104    if (s->avoid_negative_ts < 0)
    11051105        s->avoid_negative_ts = 1;
    11061106
    1107     for (i = 0; i < s->nb_streams; i++)
     1107    if (mkv->mode != MODE_WEBM ||
     1108        av_dict_get(s->metadata, "stereo_mode", NULL, 0) ||
     1109        av_dict_get(s->metadata, "alpha_mode", NULL, 0))
     1110        version = 4;
     1111
     1112    for (i = 0; i < s->nb_streams; i++) {
    11081113        if (s->streams[i]->codec->codec_id == AV_CODEC_ID_ATRAC3 ||
    11091114            s->streams[i]->codec->codec_id == AV_CODEC_ID_COOK ||
    11101115            s->streams[i]->codec->codec_id == AV_CODEC_ID_RA_288 ||
    static int mkv_write_header(AVFormatContext *s)  
    11161121                   avcodec_get_name(s->streams[i]->codec->codec_id));
    11171122            return AVERROR_PATCHWELCOME;
    11181123        }
     1124        if (s->streams[i]->codec->codec_id == AV_CODEC_ID_OPUS ||
     1125            av_dict_get(s->streams[i]->metadata, "stereo_mode", NULL, 0) ||
     1126            av_dict_get(s->streams[i]->metadata, "alpha_mode", NULL, 0))
     1127            version = 4;
     1128    }
    11191129
    11201130    mkv->tracks = av_mallocz(s->nb_streams * sizeof(*mkv->tracks));
    11211131    if (!mkv->tracks)
    static int mkv_write_header(AVFormatContext *s)  
    11271137    put_ebml_uint   (pb, EBML_ID_EBMLMAXIDLENGTH    ,           4);
    11281138    put_ebml_uint   (pb, EBML_ID_EBMLMAXSIZELENGTH  ,           8);
    11291139    put_ebml_string (pb, EBML_ID_DOCTYPE            , s->oformat->name);
    1130     put_ebml_uint   (pb, EBML_ID_DOCTYPEVERSION     ,           4);
     1140    put_ebml_uint   (pb, EBML_ID_DOCTYPEVERSION     ,     version);
    11311141    put_ebml_uint   (pb, EBML_ID_DOCTYPEREADVERSION ,           2);
    11321142    end_ebml_master(pb, ebml_header);
    11331143