summaryrefslogtreecommitdiff
path: root/libavformat/movenc.c
diff options
context:
space:
mode:
authorAlex Converse <alex.converse@gmail.com>2011-12-13 18:49:06 -0800
committerAlex Converse <alex.converse@gmail.com>2011-12-21 22:04:37 -0800
commit4bf3c8f226252e18de8051fd0d417c1d39857b67 (patch)
treef2b1bccb16202512c24bc080a683a092c8c4174f /libavformat/movenc.c
parentf264d336fe61c12ce9607c3060aa5d3dca947c61 (diff)
mov: Don't stick the QuickTime field ordering atom in extradata.
The 'fiel' atoms can be found in H.264 tracks clobbering the extradata. MJPEG supports non field based extradata, and this data should be preserved when copying.
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r--libavformat/movenc.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 0463528362..e11eb509d8 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -783,6 +783,23 @@ static int mov_write_uuid_tag_ipod(AVIOContext *pb)
return 28;
}
+static const uint16_t fiel_data[] = {
+ 0x0000, 0x0100, 0x0201, 0x0206, 0x0209, 0x020e
+};
+
+static int mov_write_fiel_tag(AVIOContext *pb, MOVTrack *track)
+{
+ unsigned mov_field_order = 0;
+ if (track->enc->field_order < FF_ARRAY_ELEMS(fiel_data))
+ mov_field_order = fiel_data[track->enc->field_order];
+ else
+ return 0;
+ avio_wb32(pb, 10);
+ ffio_wfourcc(pb, "fiel");
+ avio_wb16(pb, mov_field_order);
+ return 10;
+}
+
static int mov_write_subtitle_tag(AVIOContext *pb, MOVTrack *track)
{
int64_t pos = avio_tell(pb);
@@ -869,7 +886,9 @@ static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
mov_write_avcc_tag(pb, track);
if(track->mode == MODE_IPOD)
mov_write_uuid_tag_ipod(pb);
- } else if(track->vosLen > 0)
+ } else if (track->enc->field_order != AV_FIELD_UNKNOWN)
+ mov_write_fiel_tag(pb, track);
+ else if(track->vosLen > 0)
mov_write_glbl_tag(pb, track);
if (track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&