mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
Predicting the size of the hdlr, string data and trkn tags in the MOV muxer
Originally committed as revision 22846 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a367be1e88
commit
6b174197b5
@ -1330,8 +1330,7 @@ static int mov_write_mvhd_tag(ByteIOContext *pb, MOVMuxContext *mov)
|
|||||||
static int mov_write_itunes_hdlr_tag(ByteIOContext *pb, MOVMuxContext *mov,
|
static int mov_write_itunes_hdlr_tag(ByteIOContext *pb, MOVMuxContext *mov,
|
||||||
AVFormatContext *s)
|
AVFormatContext *s)
|
||||||
{
|
{
|
||||||
int64_t pos = url_ftell(pb);
|
put_be32(pb, 33); /* size */
|
||||||
put_be32(pb, 0); /* size */
|
|
||||||
put_tag(pb, "hdlr");
|
put_tag(pb, "hdlr");
|
||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
@ -1340,20 +1339,20 @@ static int mov_write_itunes_hdlr_tag(ByteIOContext *pb, MOVMuxContext *mov,
|
|||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
put_byte(pb, 0);
|
put_byte(pb, 0);
|
||||||
return updateSize(pb, pos);
|
return 33;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* helper function to write a data tag with the specified string as data */
|
/* helper function to write a data tag with the specified string as data */
|
||||||
static int mov_write_string_data_tag(ByteIOContext *pb, const char *data, int lang, int long_style)
|
static int mov_write_string_data_tag(ByteIOContext *pb, const char *data, int lang, int long_style)
|
||||||
{
|
{
|
||||||
if(long_style){
|
if(long_style){
|
||||||
int64_t pos = url_ftell(pb);
|
int size = 16 + strlen(data);
|
||||||
put_be32(pb, 0); /* size */
|
put_be32(pb, size); /* size */
|
||||||
put_tag(pb, "data");
|
put_tag(pb, "data");
|
||||||
put_be32(pb, 1);
|
put_be32(pb, 1);
|
||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
put_buffer(pb, data, strlen(data));
|
put_buffer(pb, data, strlen(data));
|
||||||
return updateSize(pb, pos);
|
return size;
|
||||||
}else{
|
}else{
|
||||||
if (!lang)
|
if (!lang)
|
||||||
lang = ff_mov_iso639_to_lang("und", 1);
|
lang = ff_mov_iso639_to_lang("und", 1);
|
||||||
@ -1407,12 +1406,9 @@ static int mov_write_trkn_tag(ByteIOContext *pb, MOVMuxContext *mov,
|
|||||||
AVMetadataTag *t = av_metadata_get(s->metadata, "track", NULL, 0);
|
AVMetadataTag *t = av_metadata_get(s->metadata, "track", NULL, 0);
|
||||||
int size = 0, track = t ? atoi(t->value) : 0;
|
int size = 0, track = t ? atoi(t->value) : 0;
|
||||||
if (track) {
|
if (track) {
|
||||||
int64_t pos = url_ftell(pb);
|
put_be32(pb, 32); /* size */
|
||||||
put_be32(pb, 0); /* size */
|
|
||||||
put_tag(pb, "trkn");
|
put_tag(pb, "trkn");
|
||||||
{
|
put_be32(pb, 24); /* size */
|
||||||
int64_t pos = url_ftell(pb);
|
|
||||||
put_be32(pb, 0); /* size */
|
|
||||||
put_tag(pb, "data");
|
put_tag(pb, "data");
|
||||||
put_be32(pb, 0); // 8 bytes empty
|
put_be32(pb, 0); // 8 bytes empty
|
||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
@ -1420,9 +1416,7 @@ static int mov_write_trkn_tag(ByteIOContext *pb, MOVMuxContext *mov,
|
|||||||
put_be16(pb, track); // track number
|
put_be16(pb, track); // track number
|
||||||
put_be16(pb, 0); // total track number
|
put_be16(pb, 0); // total track number
|
||||||
put_be16(pb, 0); // empty
|
put_be16(pb, 0); // empty
|
||||||
updateSize(pb, pos);
|
size = 32;
|
||||||
}
|
|
||||||
size = updateSize(pb, pos);
|
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user