From b513bf6f69e26e724de6d5dca642c3582dcd0517 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 3 May 2014 11:08:25 +0200 Subject: yuv4mpegdec: do not set coded_frame properties coded_frame is not meant to be changed from outside of lavc, and is not used for decoding. Set AVCodecContext.field_order instead. --- libavformat/yuv4mpegdec.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) (limited to 'libavformat/yuv4mpegdec.c') diff --git a/libavformat/yuv4mpegdec.c b/libavformat/yuv4mpegdec.c index fb71dcb7e4..e5c4456ed7 100644 --- a/libavformat/yuv4mpegdec.c +++ b/libavformat/yuv4mpegdec.c @@ -27,11 +27,6 @@ #define MAX_YUV4_HEADER 80 #define MAX_FRAME_HEADER 80 -struct frame_attributes { - int interlaced_frame; - int top_field_first; -}; - static int yuv4_read_header(AVFormatContext *s) { char header[MAX_YUV4_HEADER + 10]; // Include headroom for @@ -44,7 +39,7 @@ static int yuv4_read_header(AVFormatContext *s) enum AVPixelFormat pix_fmt = AV_PIX_FMT_NONE, alt_pix_fmt = AV_PIX_FMT_NONE; enum AVChromaLocation chroma_sample_location = AVCHROMA_LOC_UNSPECIFIED; AVStream *st; - struct frame_attributes *s1 = s->priv_data; + enum AVFieldOrder field_order; for (i = 0; i < MAX_YUV4_HEADER; i++) { header[i] = avio_r8(pb); @@ -60,8 +55,6 @@ static int yuv4_read_header(AVFormatContext *s) if (strncmp(header, Y4M_MAGIC, strlen(Y4M_MAGIC))) return -1; - s1->interlaced_frame = 0; - s1->top_field_first = 0; header_end = &header[i + 1]; // Include space for (tokstart = &header[strlen(Y4M_MAGIC) + 1]; tokstart < header_end; tokstart++) { @@ -112,17 +105,16 @@ static int yuv4_read_header(AVFormatContext *s) case 'I': // Interlace type switch (*tokstart++){ case '?': + field_order = AV_FIELD_UNKNOWN; break; case 'p': - s1->interlaced_frame = 0; + field_order = AV_FIELD_PROGRESSIVE; break; case 't': - s1->interlaced_frame = 1; - s1->top_field_first = 1; + field_order = AV_FIELD_TT; break; case 'b': - s1->interlaced_frame = 1; - s1->top_field_first = 0; + field_order = AV_FIELD_BB; break; case 'm': av_log(s, AV_LOG_ERROR, "YUV4MPEG stream contains mixed " @@ -202,6 +194,7 @@ static int yuv4_read_header(AVFormatContext *s) st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; st->sample_aspect_ratio = (AVRational){ aspectn, aspectd }; st->codec->chroma_sample_location = chroma_sample_location; + st->codec->field_order = field_order; return 0; } @@ -212,7 +205,6 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) char header[MAX_FRAME_HEADER+1]; int packet_size, width, height, ret; AVStream *st = s->streams[0]; - struct frame_attributes *s1 = s->priv_data; for (i = 0; i < MAX_FRAME_HEADER; i++) { header[i] = avio_r8(s->pb); @@ -244,11 +236,6 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) else if (ret != packet_size) return s->pb->eof_reached ? AVERROR_EOF : AVERROR(EIO); - if (st->codec->coded_frame) { - st->codec->coded_frame->interlaced_frame = s1->interlaced_frame; - st->codec->coded_frame->top_field_first = s1->top_field_first; - } - pkt->stream_index = 0; return 0; } @@ -265,7 +252,6 @@ static int yuv4_probe(AVProbeData *pd) AVInputFormat ff_yuv4mpegpipe_demuxer = { .name = "yuv4mpegpipe", .long_name = NULL_IF_CONFIG_SMALL("YUV4MPEG pipe"), - .priv_data_size = sizeof(struct frame_attributes), .read_probe = yuv4_probe, .read_header = yuv4_read_header, .read_packet = yuv4_read_packet, -- cgit v1.2.3