OLD | NEW |
1 /* | 1 /* |
2 * MOV, 3GP, MP4 muxer | 2 * MOV, 3GP, MP4 muxer |
3 * Copyright (c) 2003 Thomas Raivio | 3 * Copyright (c) 2003 Thomas Raivio |
4 * Copyright (c) 2004 Gildas Bazin <gbazin at videolan dot org> | 4 * Copyright (c) 2004 Gildas Bazin <gbazin at videolan dot org> |
5 * Copyright (c) 2009 Baptiste Coudurier <baptiste dot coudurier at gmail dot co
m> | 5 * Copyright (c) 2009 Baptiste Coudurier <baptiste dot coudurier at gmail dot co
m> |
6 * | 6 * |
7 * This file is part of FFmpeg. | 7 * This file is part of FFmpeg. |
8 * | 8 * |
9 * FFmpeg is free software; you can redistribute it and/or | 9 * FFmpeg is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Lesser General Public | 10 * modify it under the terms of the GNU Lesser General Public |
(...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1348 { | 1348 { |
1349 if(long_style){ | 1349 if(long_style){ |
1350 int64_t pos = url_ftell(pb); | 1350 int64_t pos = url_ftell(pb); |
1351 put_be32(pb, 0); /* size */ | 1351 put_be32(pb, 0); /* size */ |
1352 put_tag(pb, "data"); | 1352 put_tag(pb, "data"); |
1353 put_be32(pb, 1); | 1353 put_be32(pb, 1); |
1354 put_be32(pb, 0); | 1354 put_be32(pb, 0); |
1355 put_buffer(pb, data, strlen(data)); | 1355 put_buffer(pb, data, strlen(data)); |
1356 return updateSize(pb, pos); | 1356 return updateSize(pb, pos); |
1357 }else{ | 1357 }else{ |
| 1358 if (!lang) |
| 1359 lang = ff_mov_iso639_to_lang("und", 1); |
1358 put_be16(pb, strlen(data)); /* string length */ | 1360 put_be16(pb, strlen(data)); /* string length */ |
1359 put_be16(pb, lang); | 1361 put_be16(pb, lang); |
1360 put_buffer(pb, data, strlen(data)); | 1362 put_buffer(pb, data, strlen(data)); |
1361 return strlen(data) + 4; | 1363 return strlen(data) + 4; |
1362 } | 1364 } |
1363 } | 1365 } |
1364 | 1366 |
1365 static int mov_write_string_tag(ByteIOContext *pb, const char *name, const char
*value, int lang, int long_style){ | 1367 static int mov_write_string_tag(ByteIOContext *pb, const char *name, const char
*value, int lang, int long_style){ |
1366 int size = 0; | 1368 int size = 0; |
1367 if (value && value[0]) { | 1369 if (value && value[0]) { |
(...skipping 15 matching lines...) Expand all Loading... |
1383 char tag2[16]; | 1385 char tag2[16]; |
1384 | 1386 |
1385 if (!(t = av_metadata_get(s->metadata, tag, NULL, 0))) | 1387 if (!(t = av_metadata_get(s->metadata, tag, NULL, 0))) |
1386 return 0; | 1388 return 0; |
1387 | 1389 |
1388 len = strlen(t->key); | 1390 len = strlen(t->key); |
1389 snprintf(tag2, sizeof(tag2), "%s-", tag); | 1391 snprintf(tag2, sizeof(tag2), "%s-", tag); |
1390 while ((t2 = av_metadata_get(s->metadata, tag2, t2, AV_METADATA_IGNORE_SUFFI
X))) { | 1392 while ((t2 = av_metadata_get(s->metadata, tag2, t2, AV_METADATA_IGNORE_SUFFI
X))) { |
1391 len2 = strlen(t2->key); | 1393 len2 = strlen(t2->key); |
1392 if (len2 == len+4 && !strcmp(t->value, t2->value) | 1394 if (len2 == len+4 && !strcmp(t->value, t2->value) |
1393 && (l=ff_mov_iso639_to_lang(&t2->key[len2-3], 0)) >= 0) { | 1395 && (l=ff_mov_iso639_to_lang(&t2->key[len2-3], 1)) >= 0) { |
1394 lang = l; | 1396 lang = l; |
1395 break; | 1397 break; |
1396 } | 1398 } |
1397 } | 1399 } |
1398 return mov_write_string_tag(pb, name, t->value, lang, long_style); | 1400 return mov_write_string_tag(pb, name, t->value, lang, long_style); |
1399 } | 1401 } |
1400 | 1402 |
1401 /* iTunes track number */ | 1403 /* iTunes track number */ |
1402 static int mov_write_trkn_tag(ByteIOContext *pb, MOVMuxContext *mov, | 1404 static int mov_write_trkn_tag(ByteIOContext *pb, MOVMuxContext *mov, |
1403 AVFormatContext *s) | 1405 AVFormatContext *s) |
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2131 sizeof(MOVMuxContext), | 2133 sizeof(MOVMuxContext), |
2132 CODEC_ID_AAC, | 2134 CODEC_ID_AAC, |
2133 CODEC_ID_H264, | 2135 CODEC_ID_H264, |
2134 mov_write_header, | 2136 mov_write_header, |
2135 mov_write_packet, | 2137 mov_write_packet, |
2136 mov_write_trailer, | 2138 mov_write_trailer, |
2137 .flags = AVFMT_GLOBALHEADER, | 2139 .flags = AVFMT_GLOBALHEADER, |
2138 .codec_tag = (const AVCodecTag* const []){codec_ipod_tags, 0}, | 2140 .codec_tag = (const AVCodecTag* const []){codec_ipod_tags, 0}, |
2139 }; | 2141 }; |
2140 #endif | 2142 #endif |
OLD | NEW |