Mercurial > libavformat.hg
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 |