+ uint32_t c=-1;
+ int i;
+ for(i=0; i<size-4 && c!=0x100; i++){
+ c = (c<<8) + buf[i];
+ if(c == 0x1B8 && sc->first_gop_closed == -1) /* GOP start code */
+ sc->first_gop_closed= (buf[i+4]>>6)&1;
+ }
+ return (buf[i+1]>>3)&7;
+}
+
+static int gxf_write_media_preamble(AVFormatContext *s, AVPacket *pkt, int size)
+{
+ GXFContext *gxf = s->priv_data;
+ ByteIOContext *pb = s->pb;
+ AVStream *st = s->streams[pkt->stream_index];
+ GXFStreamContext *sc = st->priv_data;
+ unsigned field_nb;
+ /* If the video is frame-encoded, the frame numbers shall be represented by
+ * even field numbers.
+ * see SMPTE360M-2004 6.4.2.1.3 Media field number */
+ if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
+ field_nb = gxf->nb_fields;
+ } else {
+ field_nb = av_rescale_rnd(pkt->dts, gxf->time_base.den,
+ (int64_t)48000*gxf->time_base.num, AV_ROUND_UP);
+ }