summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorVictor Vasiliev <vasilvv@gmail.com>2011-11-25 23:29:12 +0400
committerAnton Khirnov <anton@khirnov.net>2012-10-16 18:50:36 +0200
commit71e92414bfd79e56ea6fff174a665ff7b9b86e68 (patch)
treed2d780db102f7123021c0ce9ef8d13317f479f3d /libavformat
parenta119c64e38bd9bfc5c3c94b70b321619c6fabac9 (diff)
lavf: move RIFF INFO tag writing from avienc to riff
It will be useful in the wav muxer. Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avienc.c24
-rw-r--r--libavformat/riff.c32
-rw-r--r--libavformat/riff.h12
3 files changed, 44 insertions, 24 deletions
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index fa6321200e..9d1f5102a1 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -105,19 +105,6 @@ static char* avi_stream2fourcc(char* tag, int index, enum AVMediaType type)
return tag;
}
-static void avi_write_info_tag(AVIOContext *pb, const char *tag, const char *str)
-{
- int len = strlen(str);
- if (len > 0) {
- len++;
- ffio_wfourcc(pb, tag);
- avio_wl32(pb, len);
- avio_put_str(pb, str);
- if (len & 1)
- avio_w8(pb, 0);
- }
-}
-
static int avi_write_counters(AVFormatContext* s, int riff_id)
{
AVIOContext *pb = s->pb;
@@ -300,7 +287,7 @@ static int avi_write_header(AVFormatContext *s)
}
ff_end_tag(pb, strf);
if ((t = av_dict_get(s->streams[i]->metadata, "title", NULL, 0))) {
- avi_write_info_tag(s->pb, "strn", t->value);
+ ff_riff_write_info_tag(s->pb, "strn", t->value);
t = NULL;
}
}
@@ -377,14 +364,7 @@ static int avi_write_header(AVFormatContext *s)
ff_end_tag(pb, list1);
- list2 = ff_start_tag(pb, "LIST");
- ffio_wfourcc(pb, "INFO");
- ff_metadata_conv(&s->metadata, ff_riff_info_conv, NULL);
- for (i = 0; *ff_riff_tags[i]; i++) {
- if ((t = av_dict_get(s->metadata, ff_riff_tags[i], NULL, AV_DICT_MATCH_CASE)))
- avi_write_info_tag(s->pb, t->key, t->value);
- }
- ff_end_tag(pb, list2);
+ ff_riff_write_info(s);
/* some padding for easier tag editing */
list2 = ff_start_tag(pb, "JUNK");
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 2539b23134..3d805d8884 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -1,5 +1,5 @@
/*
- * RIFF codec tags
+ * RIFF common functions and data
* Copyright (c) 2000 Fabrice Bellard
*
* This file is part of Libav.
@@ -708,3 +708,33 @@ int ff_read_riff_info(AVFormatContext *s, int64_t size)
return 0;
}
+
+void ff_riff_write_info_tag(AVIOContext *pb, const char *tag, const char *str)
+{
+ int len = strlen(str);
+ if (len > 0) {
+ len++;
+ ffio_wfourcc(pb, tag);
+ avio_wl32(pb, len);
+ avio_put_str(pb, str);
+ if (len & 1)
+ avio_w8(pb, 0);
+ }
+}
+
+void ff_riff_write_info(AVFormatContext *s)
+{
+ AVIOContext *pb = s->pb;
+ int i;
+ int64_t list_pos;
+ AVDictionaryEntry *t = NULL;
+
+ list_pos = ff_start_tag(pb, "LIST");
+ ffio_wfourcc(pb, "INFO");
+ ff_metadata_conv(&s->metadata, ff_riff_info_conv, NULL);
+ for (i = 0; *ff_riff_tags[i]; i++) {
+ if ((t = av_dict_get(s->metadata, ff_riff_tags[i], NULL, AV_DICT_MATCH_CASE)))
+ ff_riff_write_info_tag(s->pb, t->key, t->value);
+ }
+ ff_end_tag(pb, list_pos);
+}
diff --git a/libavformat/riff.h b/libavformat/riff.h
index 42a28d17c9..167d8fc49b 100644
--- a/libavformat/riff.h
+++ b/libavformat/riff.h
@@ -1,5 +1,5 @@
/*
- * RIFF codec tags
+ * RIFF common functions and data
* copyright (c) 2000 Fabrice Bellard
*
* This file is part of Libav.
@@ -60,4 +60,14 @@ void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssiz
int ff_read_riff_info(AVFormatContext *s, int64_t size);
+/**
+ * Write all recognized RIFF tags from s->metadata
+ */
+void ff_riff_write_info(AVFormatContext *s);
+
+/**
+ * Write a single RIFF info tag
+ */
+void ff_riff_write_info_tag(AVIOContext *pb, const char *tag, const char *str);
+
#endif /* AVFORMAT_RIFF_H */