You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
Merge commit 'b89e8759e053792704741d08cbc41c9ac3c7ed63'
* commit 'b89e8759e053792704741d08cbc41c9ac3c7ed63': mov: Write tmcd extradata This commit should make no difference as we had tmcd support already, which is not changed. Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -1140,9 +1140,30 @@ static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
|
|||||||
return update_size(pb, pos);
|
return update_size(pb, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mov_write_rtp_tag(AVIOContext *pb, MOVTrack *track)
|
||||||
|
{
|
||||||
|
int64_t pos = avio_tell(pb);
|
||||||
|
avio_wb32(pb, 0); /* size */
|
||||||
|
ffio_wfourcc(pb, "rtp ");
|
||||||
|
avio_wb32(pb, 0); /* Reserved */
|
||||||
|
avio_wb16(pb, 0); /* Reserved */
|
||||||
|
avio_wb16(pb, 1); /* Data-reference index */
|
||||||
|
|
||||||
|
avio_wb16(pb, 1); /* Hint track version */
|
||||||
|
avio_wb16(pb, 1); /* Highest compatible version */
|
||||||
|
avio_wb32(pb, track->max_packet_size); /* Max packet size */
|
||||||
|
|
||||||
|
avio_wb32(pb, 12); /* size */
|
||||||
|
ffio_wfourcc(pb, "tims");
|
||||||
|
avio_wb32(pb, track->timescale);
|
||||||
|
|
||||||
|
return update_size(pb, pos);
|
||||||
|
}
|
||||||
|
|
||||||
static int mov_write_tmcd_tag(AVIOContext *pb, MOVTrack *track)
|
static int mov_write_tmcd_tag(AVIOContext *pb, MOVTrack *track)
|
||||||
{
|
{
|
||||||
int64_t pos = avio_tell(pb);
|
int64_t pos = avio_tell(pb);
|
||||||
|
#if 1
|
||||||
int frame_duration = av_rescale(track->timescale, track->enc->time_base.num, track->enc->time_base.den);
|
int frame_duration = av_rescale(track->timescale, track->enc->time_base.num, track->enc->time_base.den);
|
||||||
int nb_frames = 1.0/av_q2d(track->enc->time_base) + 0.5;
|
int nb_frames = 1.0/av_q2d(track->enc->time_base) + 0.5;
|
||||||
|
|
||||||
@@ -1162,26 +1183,15 @@ static int mov_write_tmcd_tag(AVIOContext *pb, MOVTrack *track)
|
|||||||
avio_w8(pb, nb_frames); /* Number of frames */
|
avio_w8(pb, nb_frames); /* Number of frames */
|
||||||
avio_wb24(pb, 0); /* Reserved */
|
avio_wb24(pb, 0); /* Reserved */
|
||||||
/* TODO: source reference string */
|
/* TODO: source reference string */
|
||||||
return update_size(pb, pos);
|
#else
|
||||||
}
|
|
||||||
|
|
||||||
static int mov_write_rtp_tag(AVIOContext *pb, MOVTrack *track)
|
|
||||||
{
|
|
||||||
int64_t pos = avio_tell(pb);
|
|
||||||
avio_wb32(pb, 0); /* size */
|
avio_wb32(pb, 0); /* size */
|
||||||
ffio_wfourcc(pb, "rtp ");
|
ffio_wfourcc(pb, "tmcd"); /* Data format */
|
||||||
avio_wb32(pb, 0); /* Reserved */
|
avio_wb32(pb, 0); /* Reserved */
|
||||||
avio_wb16(pb, 0); /* Reserved */
|
avio_wb32(pb, 1); /* Data reference index */
|
||||||
avio_wb16(pb, 1); /* Data-reference index */
|
if (track->enc->extradata_size)
|
||||||
|
avio_write(pb, track->enc->extradata, track->enc->extradata_size);
|
||||||
avio_wb16(pb, 1); /* Hint track version */
|
#endif
|
||||||
avio_wb16(pb, 1); /* Highest compatible version */
|
|
||||||
avio_wb32(pb, track->max_packet_size); /* Max packet size */
|
|
||||||
|
|
||||||
avio_wb32(pb, 12); /* size */
|
|
||||||
ffio_wfourcc(pb, "tims");
|
|
||||||
avio_wb32(pb, track->timescale);
|
|
||||||
|
|
||||||
return update_size(pb, pos);
|
return update_size(pb, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1510,10 +1520,10 @@ static int mov_write_minf_tag(AVIOContext *pb, MOVTrack *track)
|
|||||||
} else {
|
} else {
|
||||||
mov_write_nmhd_tag(pb);
|
mov_write_nmhd_tag(pb);
|
||||||
}
|
}
|
||||||
} else if (track->tag == MKTAG('t','m','c','d')) {
|
|
||||||
mov_write_gmhd_tag(pb, track);
|
|
||||||
} else if (track->tag == MKTAG('r','t','p',' ')) {
|
} else if (track->tag == MKTAG('r','t','p',' ')) {
|
||||||
mov_write_hmhd_tag(pb);
|
mov_write_hmhd_tag(pb);
|
||||||
|
} else if (track->tag == MKTAG('t','m','c','d')) {
|
||||||
|
mov_write_gmhd_tag(pb, track);
|
||||||
}
|
}
|
||||||
if (track->mode == MODE_MOV) /* FIXME: Why do it for MODE_MOV only ? */
|
if (track->mode == MODE_MOV) /* FIXME: Why do it for MODE_MOV only ? */
|
||||||
mov_write_hdlr_tag(pb, NULL);
|
mov_write_hdlr_tag(pb, NULL);
|
||||||
|
Reference in New Issue
Block a user