diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2008-06-11 09:40:22 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2008-06-11 09:40:22 +0000 |
commit | c6e2c6c9c69b91a2c648ab51adf9cc0b8c10d0bb (patch) | |
tree | 884e5fd8f46018225099bdd5cb6c320826f54627 /libavformat/movenc.c | |
parent | 07b7b06d92bb5039a3c5feb4f4ee472ebbf41cee (diff) | |
download | ffmpeg-streaming-c6e2c6c9c69b91a2c648ab51adf9cc0b8c10d0bb.zip ffmpeg-streaming-c6e2c6c9c69b91a2c648ab51adf9cc0b8c10d0bb.tar.gz |
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.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 5a4a141..b123d78 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); |