Merge commit 'b89e8759e053792704741d08cbc41c9ac3c7ed63'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 26 Aug 2013 12:31:07 +0000 (14:31 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 26 Aug 2013 12:36:00 +0000 (14:36 +0200)
* 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>
1  2 
libavformat/movenc.c

@@@ -1143,45 -1063,13 +1163,35 @@@ static int mov_write_rtp_tag(AVIOContex
  static int mov_write_tmcd_tag(AVIOContext *pb, MOVTrack *track)
  {
      int64_t pos = avio_tell(pb);
-     return update_size(pb, pos);
- }
++#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;
 +
 +    if (nb_frames > 255) {
 +        av_log(NULL, AV_LOG_ERROR, "fps %d is too large\n", nb_frames);
 +        return AVERROR(EINVAL);
 +    }
 +
 +    avio_wb32(pb, 0); /* size */
 +    ffio_wfourcc(pb, "tmcd");               /* Data format */
 +    avio_wb32(pb, 0);                       /* Reserved */
 +    avio_wb32(pb, 1);                       /* Data reference index */
 +    avio_wb32(pb, 0);                       /* Flags */
 +    avio_wb32(pb, track->timecode_flags);   /* Flags (timecode) */
 +    avio_wb32(pb, track->timescale);        /* Timescale */
 +    avio_wb32(pb, frame_duration);          /* Frame duration */
 +    avio_w8(pb, nb_frames);                 /* Number of frames */
 +    avio_wb24(pb, 0);                       /* Reserved */
 +    /* TODO: source reference string */
++#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);
  }
  
@@@ -1505,15 -1335,12 +1515,15 @@@ static int mov_write_minf_tag(AVIOConte
      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') || track->tag == MKTAG('c','6','0','8')) {
 +            mov_write_gmhd_tag(pb, 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);
 -        mov_write_gmhd_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);