diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2010-05-07 10:02:59 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2010-05-07 10:02:59 +0000 |
commit | efdc74ef198e9e73e63818f20417e4582b9b6a18 (patch) | |
tree | a2ed3b8a3eb9912c555da9a04f424768a4fcd74b | |
parent | 46847a336e7e71559c8f3917bf8512c90635598b (diff) | |
download | ffmpeg-efdc74ef198e9e73e63818f20417e4582b9b6a18.tar.gz |
Try to keep track of interlaced and top field first.
Originally committed as revision 23044 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavfilter/avfilter.c | 2 | ||||
-rw-r--r-- | libavfilter/avfilter.h | 3 | ||||
-rw-r--r-- | libavfilter/defaults.c | 2 | ||||
-rw-r--r-- | libavfilter/vf_scale.c | 3 | ||||
-rw-r--r-- | libavfilter/vsrc_buffer.c | 4 |
5 files changed, 14 insertions, 0 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 3ed59d7cc2..38ca3b1e91 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -266,6 +266,8 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref) link->cur_pic->pts = link->srcpic->pts; link->cur_pic->pos = link->srcpic->pos; link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect; + link->cur_pic->interlaced = link->srcpic->interlaced; + link->cur_pic->top_field_first = link->srcpic->top_field_first; } else link->cur_pic = picref; diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 214b8d481a..3566ed61c3 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -115,6 +115,9 @@ typedef struct AVFilterPicRef #define AV_PERM_PRESERVE 0x04 ///< nobody else can overwrite the buffer #define AV_PERM_REUSE 0x08 ///< can output the buffer multiple times, with the same contents each time #define AV_PERM_REUSE2 0x10 ///< can output the buffer multiple times, modified each time + + int interlaced; ///< is frame interlaced + int top_field_first; } AVFilterPicRef; /** diff --git a/libavfilter/defaults.c b/libavfilter/defaults.c index afa0f669b9..f348d4f2b8 100644 --- a/libavfilter/defaults.c +++ b/libavfilter/defaults.c @@ -76,6 +76,8 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref) out->outpic->pts = picref->pts; out->outpic->pos = picref->pos; out->outpic->pixel_aspect = picref->pixel_aspect; + out->outpic->interlaced = picref->interlaced; + out->outpic->top_field_first = picref->top_field_first; avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0)); } } diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 7a0994fe97..e65057cfd7 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -150,6 +150,9 @@ static void start_frame(AVFilterLink *link, AVFilterPicRef *picref) outpicref = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); outpicref->pts = picref->pts; outpicref->pos = picref->pos; + outpicref->interlaced = picref->interlaced; + outpicref->top_field_first = picref->top_field_first; + outlink->outpic = outpicref; av_reduce(&outpicref->pixel_aspect.num, &outpicref->pixel_aspect.den, diff --git a/libavfilter/vsrc_buffer.c b/libavfilter/vsrc_buffer.c index 74da712fc4..17e56eeb79 100644 --- a/libavfilter/vsrc_buffer.c +++ b/libavfilter/vsrc_buffer.c @@ -46,6 +46,8 @@ int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, memcpy(c->frame.data , frame->data , sizeof(frame->data)); memcpy(c->frame.linesize, frame->linesize, sizeof(frame->linesize)); + c->frame.interlaced_frame= frame->interlaced_frame; + c->frame.top_field_first = frame->top_field_first; c->pts = pts; c->pixel_aspect = pixel_aspect; c->has_frame = 1; @@ -106,6 +108,8 @@ static int request_frame(AVFilterLink *link) picref->pts = c->pts; picref->pixel_aspect = c->pixel_aspect; + picref->interlaced = c->frame.interlaced_frame; + picref->top_field_first = c->frame.top_field_first; avfilter_start_frame(link, avfilter_ref_pic(picref, ~0)); avfilter_draw_slice(link, 0, link->h, 1); avfilter_end_frame(link); |