aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/asf-enc.c
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2009-02-04 01:40:52 +0000
committerAurelien Jacobs <aurel@gnuage.org>2009-02-04 01:40:52 +0000
commit488227c5d7d4322b94f385c3d2d61437c560b1f3 (patch)
tree7c62f984cab790d4fcb9df9806bca59f965232e7 /libavformat/asf-enc.c
parent300f24f3177e335ba8bebc5066cd78ee9fec6945 (diff)
downloadffmpeg-488227c5d7d4322b94f385c3d2d61437c560b1f3.tar.gz
write all available metadata tags into extended_content_header
Originally committed as revision 16984 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/asf-enc.c')
-rw-r--r--libavformat/asf-enc.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/libavformat/asf-enc.c b/libavformat/asf-enc.c
index 0edfc69d07..ae6cc2d09a 100644
--- a/libavformat/asf-enc.c
+++ b/libavformat/asf-enc.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avformat.h"
+#include "metadata.h"
#include "riff.h"
#include "asf.h"
@@ -274,6 +275,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
AVMetadataTag *title, *author, *copyright, *comment;
int header_size, n, extra_size, extra_size2, wav_extra_size, file_time;
int has_title;
+ int metadata_count;
AVCodecContext *enc;
int64_t header_offset, cur_pos, hpos;
int bit_rate;
@@ -286,6 +288,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
duration = asf->duration + PREROLL_TIME * 10000;
has_title = title || author || copyright || comment;
+ metadata_count = s->metadata ? s->metadata->count : 0;
bit_rate = 0;
for(n=0;n<s->nb_streams;n++) {
@@ -302,7 +305,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
put_guid(pb, &asf_header);
put_le64(pb, -1); /* header length, will be patched after */
- put_le32(pb, 3 + has_title + s->nb_streams); /* number of chunks in header */
+ put_le32(pb, 3 + has_title + !!metadata_count + s->nb_streams); /* number of chunks in header */
put_byte(pb, 1); /* ??? */
put_byte(pb, 2); /* ??? */
@@ -344,6 +347,22 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
if (comment ) put_str16_nolen(pb, comment->value );
end_header(pb, hpos);
}
+ if (metadata_count) {
+ AVMetadataTag *tag = NULL;
+ hpos = put_header(pb, &extended_content_header);
+ put_le16(pb, metadata_count);
+ while ((tag = av_metadata_get(s->metadata, "", tag, AV_METADATA_IGNORE_SUFFIX))) {
+ put_le16(pb, 2*(strlen(tag->key) + 3) + 1);
+ put_le16(pb, 'W');
+ put_le16(pb, 'M');
+ put_le16(pb, '/');
+ put_str16_nolen(pb, tag->key);
+ put_le16(pb, 0);
+ put_le16(pb, 2*strlen(tag->value) + 1);
+ put_str16_nolen(pb, tag->value);
+ }
+ end_header(pb, hpos);
+ }
/* stream headers */
for(n=0;n<s->nb_streams;n++) {