@ -1140,9 +1140,30 @@ static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
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 )
{
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 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_wb24 ( pb , 0 ) ; /* Reserved */
/* 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 */
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 ) ;
ffio_wfourcc ( pb , " tmcd " ) ; /* Data format */
avio_wb32 ( pb , 0 ) ; /* Reserved */
avio_wb32 ( pb , 1 ) ; /* Data reference index */
if ( track - > enc - > extradata_size )
avio_write ( pb , track - > enc - > extradata , track - > enc - > extradata_size ) ;
# endif
return update_size ( pb , pos ) ;
}
@ -1510,10 +1520,10 @@ static int mov_write_minf_tag(AVIOContext *pb, MOVTrack *track)
} else {
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 ' , ' ' ) ) {
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 ? */
mov_write_hdlr_tag ( pb , NULL ) ;