- GXFContext *gxf = s->priv_data;
- AVPacket new_pkt;
- int i;
-
- for (i = 0; i < s->nb_streams; i++) {
- AVStream *st = s->streams[i];
- GXFStreamContext *sc = &gxf->streams[i];
- if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
- if (pkt && pkt->stream_index == i) {
- av_fifo_write(&sc->audio_buffer, pkt->data, pkt->size);
- pkt = NULL;
- }
- if (flush || av_fifo_size(&sc->audio_buffer) >= GXF_AUDIO_PACKET_SIZE) {
- if (!pkt && gxf_new_audio_packet(gxf, sc, &new_pkt, flush) > 0) {
- pkt = &new_pkt;
- break; /* add pkt right now into list */
- }
- }
- } else if (pkt && pkt->stream_index == i) {
- if (sc->dts_delay == GXF_NODELAY) /* adjust dts if needed */
- sc->dts_delay = pkt->dts;
- pkt->dts -= sc->dts_delay;
- }
- }
- return av_interleave_packet_per_dts(s, out, pkt, flush);
+ if (pkt && s->streams[pkt->stream_index]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
+ pkt->duration = 2; // enforce 2 fields
+ return ff_audio_rechunk_interleave(s, out, pkt, flush,
+ av_interleave_packet_per_dts, gxf_compare_field_nb);