Commit 187e2a58 authored by michael's avatar michael

Try to keep track of interlaced and top field first.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@23044 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 5469d8f7
...@@ -266,6 +266,8 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref) ...@@ -266,6 +266,8 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
link->cur_pic->pts = link->srcpic->pts; link->cur_pic->pts = link->srcpic->pts;
link->cur_pic->pos = link->srcpic->pos; link->cur_pic->pos = link->srcpic->pos;
link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect; 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 else
link->cur_pic = picref; link->cur_pic = picref;
......
...@@ -115,6 +115,9 @@ typedef struct AVFilterPicRef ...@@ -115,6 +115,9 @@ typedef struct AVFilterPicRef
#define AV_PERM_PRESERVE 0x04 ///< nobody else can overwrite the buffer #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_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 #define AV_PERM_REUSE2 0x10 ///< can output the buffer multiple times, modified each time
int interlaced; ///< is frame interlaced
int top_field_first;
} AVFilterPicRef; } AVFilterPicRef;
/** /**
......
...@@ -76,6 +76,8 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref) ...@@ -76,6 +76,8 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
out->outpic->pts = picref->pts; out->outpic->pts = picref->pts;
out->outpic->pos = picref->pos; out->outpic->pos = picref->pos;
out->outpic->pixel_aspect = picref->pixel_aspect; 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)); avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
} }
} }
......
...@@ -150,6 +150,9 @@ static void start_frame(AVFilterLink *link, AVFilterPicRef *picref) ...@@ -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 = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
outpicref->pts = picref->pts; outpicref->pts = picref->pts;
outpicref->pos = picref->pos; outpicref->pos = picref->pos;
outpicref->interlaced = picref->interlaced;
outpicref->top_field_first = picref->top_field_first;
outlink->outpic = outpicref; outlink->outpic = outpicref;
av_reduce(&outpicref->pixel_aspect.num, &outpicref->pixel_aspect.den, av_reduce(&outpicref->pixel_aspect.num, &outpicref->pixel_aspect.den,
......
...@@ -46,6 +46,8 @@ int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, ...@@ -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.data , frame->data , sizeof(frame->data));
memcpy(c->frame.linesize, frame->linesize, sizeof(frame->linesize)); 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->pts = pts;
c->pixel_aspect = pixel_aspect; c->pixel_aspect = pixel_aspect;
c->has_frame = 1; c->has_frame = 1;
...@@ -106,6 +108,8 @@ static int request_frame(AVFilterLink *link) ...@@ -106,6 +108,8 @@ static int request_frame(AVFilterLink *link)
picref->pts = c->pts; picref->pts = c->pts;
picref->pixel_aspect = c->pixel_aspect; 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_start_frame(link, avfilter_ref_pic(picref, ~0));
avfilter_draw_slice(link, 0, link->h, 1); avfilter_draw_slice(link, 0, link->h, 1);
avfilter_end_frame(link); avfilter_end_frame(link);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment