aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Gould <miles@assyrian.org.uk>2014-04-21 14:46:22 +0100
committerLuca Barbato <lu_zero@gentoo.org>2014-04-25 17:38:19 +0200
commit99e22b7859177f6d3ed6121040924b337dce5497 (patch)
treed278855c0489f197dab0a524f7926ea12fed3959
parent802385dbc2c57abd76f6a00e32f3df35e9526c08 (diff)
downloadffmpeg-99e22b7859177f6d3ed6121040924b337dce5497.tar.gz
mov: Emit the correct tags for clcp tracks
Bug-Id: 664 Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r--libavformat/movenc.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 8b53232ba1..73fbddc451 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1295,6 +1295,12 @@ static int mov_write_vmhd_tag(AVIOContext *pb)
return 0x14;
}
+static int is_clcp_track(MOVTrack *track)
+{
+ return track->tag == MKTAG('c','7','0','8') ||
+ track->tag == MKTAG('c','6','0','8');
+}
+
static int mov_write_hdlr_tag(AVIOContext *pb, MOVTrack *track)
{
const char *hdlr, *descr = NULL, *hdlr_type = NULL;
@@ -1317,6 +1323,8 @@ static int mov_write_hdlr_tag(AVIOContext *pb, MOVTrack *track)
hdlr_type = "sbtl";
} else if (track->tag == MKTAG('m','p','4','s')) {
hdlr_type = "subp";
+ } else if (is_clcp_track(track)) {
+ hdlr_type = "clcp";
} else {
hdlr_type = "text";
}
@@ -1379,8 +1387,11 @@ static int mov_write_minf_tag(AVIOContext *pb, MOVTrack *track)
else if (track->enc->codec_type == AVMEDIA_TYPE_AUDIO)
mov_write_smhd_tag(pb);
else if (track->enc->codec_type == AVMEDIA_TYPE_SUBTITLE) {
- if (track->tag == MKTAG('t','e','x','t')) mov_write_gmhd_tag(pb);
- else mov_write_nmhd_tag(pb);
+ if (track->tag == MKTAG('t','e','x','t') || is_clcp_track(track)) {
+ mov_write_gmhd_tag(pb);
+ } else {
+ mov_write_nmhd_tag(pb);
+ }
} else if (track->tag == MKTAG('r','t','p',' ')) {
mov_write_hmhd_tag(pb);
} else if (track->tag == MKTAG('t','m','c','d')) {
@@ -1648,7 +1659,8 @@ static int mov_write_trak_tag(AVIOContext *pb, MOVMuxContext *mov,
ffio_wfourcc(pb, "trak");
mov_write_tkhd_tag(pb, track, st);
if (track->mode == MODE_PSP || track->flags & MOV_TRACK_CTTS ||
- (track->entry && track->cluster[0].dts)) {
+ (track->entry && track->cluster[0].dts) ||
+ is_clcp_track(track)) {
if (!(mov->flags & FF_MOV_FLAG_FRAGMENT))
mov_write_edts_tag(pb, track); // PSP Movies require edts box
}
@@ -1659,10 +1671,16 @@ static int mov_write_trak_tag(AVIOContext *pb, MOVMuxContext *mov,
mov_write_uuid_tag_psp(pb, track); // PSP Movies require this uuid box
if (track->tag == MKTAG('r','t','p',' '))
mov_write_udta_sdp(pb, track);
- if (track->enc->codec_type == AVMEDIA_TYPE_VIDEO && track->mode == MODE_MOV) {
- double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio);
- if (0.0 != sample_aspect_ratio && 1.0 != sample_aspect_ratio)
+ if (track->mode == MODE_MOV) {
+ if (track->enc->codec_type == AVMEDIA_TYPE_VIDEO) {
+ double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio);
+ if ((0.0 != sample_aspect_ratio && 1.0 != sample_aspect_ratio)) {
+ mov_write_tapt_tag(pb, track);
+ }
+ }
+ if (is_clcp_track(track)) {
mov_write_tapt_tag(pb, track);
+ }
}
return update_size(pb, pos);
}