comparison matroskaenc.c @ 4498:d7a7c516f281 libavformat

matroskaenc: use new metadata API
author aurel
date Sun, 15 Feb 2009 16:53:05 +0000
parents 3f5d00cb1f61
children 963e3b76c7a6
comparison
equal deleted inserted replaced
4497:dc79722bbc25 4498:d7a7c516f281
541 int native_id = 0; 541 int native_id = 0;
542 int qt_id = 0; 542 int qt_id = 0;
543 int bit_depth = av_get_bits_per_sample(codec->codec_id); 543 int bit_depth = av_get_bits_per_sample(codec->codec_id);
544 int sample_rate = codec->sample_rate; 544 int sample_rate = codec->sample_rate;
545 int output_sample_rate = 0; 545 int output_sample_rate = 0;
546 AVMetadataTag *tag;
546 547
547 if (!bit_depth) 548 if (!bit_depth)
548 bit_depth = av_get_bits_per_sample_format(codec->sample_fmt); 549 bit_depth = av_get_bits_per_sample_format(codec->sample_fmt);
549 550
550 if (codec->codec_id == CODEC_ID_AAC) 551 if (codec->codec_id == CODEC_ID_AAC)
553 track = start_ebml_master(pb, MATROSKA_ID_TRACKENTRY, 0); 554 track = start_ebml_master(pb, MATROSKA_ID_TRACKENTRY, 0);
554 put_ebml_uint (pb, MATROSKA_ID_TRACKNUMBER , i + 1); 555 put_ebml_uint (pb, MATROSKA_ID_TRACKNUMBER , i + 1);
555 put_ebml_uint (pb, MATROSKA_ID_TRACKUID , i + 1); 556 put_ebml_uint (pb, MATROSKA_ID_TRACKUID , i + 1);
556 put_ebml_uint (pb, MATROSKA_ID_TRACKFLAGLACING , 0); // no lacing (yet) 557 put_ebml_uint (pb, MATROSKA_ID_TRACKFLAGLACING , 0); // no lacing (yet)
557 558
558 if (st->language[0]) 559 if ((tag = av_metadata_get(st->metadata, "description", NULL, 0)))
559 put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, st->language); 560 put_ebml_string(pb, MATROSKA_ID_TRACKNAME, tag->value);
560 else 561 tag = av_metadata_get(st->metadata, "language", NULL, 0);
561 put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, "und"); 562 put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, tag ? tag->value:"und");
562 563
563 if (st->disposition) 564 if (st->disposition)
564 put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGDEFAULT, !!(st->disposition & AV_DISPOSITION_DEFAULT)); 565 put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGDEFAULT, !!(st->disposition & AV_DISPOSITION_DEFAULT));
565 566
566 // look for a codec ID string specific to mkv to use, 567 // look for a codec ID string specific to mkv to use,
642 static int mkv_write_header(AVFormatContext *s) 643 static int mkv_write_header(AVFormatContext *s)
643 { 644 {
644 MatroskaMuxContext *mkv = s->priv_data; 645 MatroskaMuxContext *mkv = s->priv_data;
645 ByteIOContext *pb = s->pb; 646 ByteIOContext *pb = s->pb;
646 ebml_master ebml_header, segment_info; 647 ebml_master ebml_header, segment_info;
648 AVMetadataTag *tag;
647 int ret; 649 int ret;
648 650
649 mkv->md5_ctx = av_mallocz(av_md5_size); 651 mkv->md5_ctx = av_mallocz(av_md5_size);
650 av_md5_init(mkv->md5_ctx); 652 av_md5_init(mkv->md5_ctx);
651 653
675 ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_INFO, url_ftell(pb)); 677 ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_INFO, url_ftell(pb));
676 if (ret < 0) return ret; 678 if (ret < 0) return ret;
677 679
678 segment_info = start_ebml_master(pb, MATROSKA_ID_INFO, 0); 680 segment_info = start_ebml_master(pb, MATROSKA_ID_INFO, 0);
679 put_ebml_uint(pb, MATROSKA_ID_TIMECODESCALE, 1000000); 681 put_ebml_uint(pb, MATROSKA_ID_TIMECODESCALE, 1000000);
680 if (strlen(s->title)) 682 if ((tag = av_metadata_get(s->metadata, "title", NULL, 0)))
681 put_ebml_string(pb, MATROSKA_ID_TITLE, s->title); 683 put_ebml_string(pb, MATROSKA_ID_TITLE, tag->value);
682 if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) { 684 if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
683 put_ebml_string(pb, MATROSKA_ID_MUXINGAPP , LIBAVFORMAT_IDENT); 685 put_ebml_string(pb, MATROSKA_ID_MUXINGAPP , LIBAVFORMAT_IDENT);
684 put_ebml_string(pb, MATROSKA_ID_WRITINGAPP, LIBAVFORMAT_IDENT); 686 put_ebml_string(pb, MATROSKA_ID_WRITINGAPP, LIBAVFORMAT_IDENT);
685 687
686 // reserve space to write the segment UID later 688 // reserve space to write the segment UID later