Skip to content

Commit

Permalink
use correct field number for video according to specs, patch by Thier…
Browse files Browse the repository at this point in the history
…ry Foucu, tfoucu at gmail dot com

Originally committed as revision 17214 to svn://svn.ffmpeg.org/ffmpeg/trunk
  • Loading branch information
lotharkript authored and bcoudurier committed Feb 13, 2009
1 parent 032d8ae commit 2ead1eb
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions libavformat/gxfenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -728,11 +728,19 @@ static int gxf_parse_mpeg_frame(GXFStreamContext *sc, const uint8_t *buf, int si
static int gxf_write_media_preamble(ByteIOContext *pb, GXFContext *ctx, AVPacket *pkt, int size)
{
GXFStreamContext *sc = ctx->fc->streams[pkt->stream_index]->priv_data;
int64_t dts = av_rescale_rnd(pkt->dts, ctx->sample_rate, sc->codec->time_base.den, AV_ROUND_UP);
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 (sc->codec->codec_type == CODEC_TYPE_VIDEO) {
field_nb = ctx->nb_fields;
} else {
field_nb = av_rescale_rnd(pkt->dts, ctx->sample_rate, sc->codec->time_base.den, AV_ROUND_UP);
}

put_byte(pb, sc->media_type);
put_byte(pb, sc->index);
put_be32(pb, dts);
put_be32(pb, field_nb);
if (sc->codec->codec_type == CODEC_TYPE_AUDIO) {
put_be16(pb, 0);
put_be16(pb, size / 2);
Expand All @@ -754,7 +762,7 @@ static int gxf_write_media_preamble(ByteIOContext *pb, GXFContext *ctx, AVPacket
put_be24(pb, 0);
} else
put_be32(pb, size);
put_be32(pb, dts);
put_be32(pb, field_nb);
put_byte(pb, 1); /* flags */
put_byte(pb, 0); /* reserved */
return 16;
Expand Down

0 comments on commit 2ead1eb

Please sign in to comment.