summaryrefslogtreecommitdiff
path: root/libavformat/movenc.c
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2008-06-11 09:40:22 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2008-06-11 09:40:22 +0000
commitc6e2c6c9c69b91a2c648ab51adf9cc0b8c10d0bb (patch)
tree884e5fd8f46018225099bdd5cb6c320826f54627 /libavformat/movenc.c
parent07b7b06d92bb5039a3c5feb4f4ee472ebbf41cee (diff)
support for 3gp metadata
Originally committed as revision 13746 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r--libavformat/movenc.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 5a4a14151b..b123d787e7 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1216,6 +1216,26 @@ static uint16_t language_code(const char *str)
return (((str[0]-0x60) & 0x1F) << 10) + (((str[1]-0x60) & 0x1F) << 5) + ((str[2]-0x60) & 0x1F);
}
+static int mov_write_3gp_udta_tag(ByteIOContext *pb, AVFormatContext *s,
+ const char *tag, const char *str)
+{
+ offset_t pos = url_ftell(pb);
+ if (!utf8len(str))
+ return 0;
+ put_be32(pb, 0); /* size */
+ put_tag (pb, tag); /* type */
+ put_be32(pb, 0); /* version + flags */
+ if (!strcmp(tag, "yrrc"))
+ put_be16(pb, s->year);
+ else {
+ put_be16(pb, language_code("eng")); /* language */
+ ascii_to_wc(pb, str);
+ if (!strcmp(tag, "albm") && s->year)
+ put_byte(pb, s->year);
+ }
+ return updateSize(pb, pos);
+}
+
static int mov_write_udta_tag(ByteIOContext *pb, MOVContext *mov,
AVFormatContext *s)
{
@@ -1235,6 +1255,14 @@ static int mov_write_udta_tag(ByteIOContext *pb, MOVContext *mov,
put_be32(pb, 0); /* size */
put_tag(pb, "udta");
+ if (mov->mode == MODE_3GP || mov->mode == MODE_3G2) {
+ mov_write_3gp_udta_tag(pb, s, "titl", s->title);
+ mov_write_3gp_udta_tag(pb, s, "auth", s->author);
+ mov_write_3gp_udta_tag(pb, s, "gnre", s->genre);
+ mov_write_3gp_udta_tag(pb, s, "dscp", s->comment);
+ mov_write_3gp_udta_tag(pb, s, "albm", s->album);
+ mov_write_3gp_udta_tag(pb, s, "yrrc", "nil");
+ } else {
/* iTunes meta data */
mov_write_meta_tag(pb, mov, s);
@@ -1247,7 +1275,7 @@ static int mov_write_udta_tag(ByteIOContext *pb, MOVContext *mov,
mov_write_string_tag(pb, "\251des", s->comment , 0);
mov_write_string_tag(pb, "\251gen", s->genre , 0);
}
-
+ }
return updateSize(pb, pos);
}
@@ -1330,7 +1358,7 @@ static int mov_write_moov_tag(ByteIOContext *pb, MOVContext *mov,
if (mov->mode == MODE_PSP)
mov_write_uuidusmt_tag(pb, s);
- else if (mov->mode != MODE_3GP && mov->mode != MODE_3G2)
+ else
mov_write_udta_tag(pb, mov, s);
return updateSize(pb, pos);