[FFmpeg-cvslog] r23044 - in trunk/libavfilter: avfilter.c avfilter.h defaults.c vf_scale.c vsrc_buffer.c

michael subversion
Fri May 7 12:02:59 CEST 2010


Author: michael
Date: Fri May  7 12:02:59 2010
New Revision: 23044

Log:
Try to keep track of interlaced and top field first.

Modified:
   trunk/libavfilter/avfilter.c
   trunk/libavfilter/avfilter.h
   trunk/libavfilter/defaults.c
   trunk/libavfilter/vf_scale.c
   trunk/libavfilter/vsrc_buffer.c

Modified: trunk/libavfilter/avfilter.c
==============================================================================
--- trunk/libavfilter/avfilter.c	Fri May  7 11:43:21 2010	(r23043)
+++ trunk/libavfilter/avfilter.c	Fri May  7 12:02:59 2010	(r23044)
@@ -266,6 +266,8 @@ void avfilter_start_frame(AVFilterLink *
         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;

Modified: trunk/libavfilter/avfilter.h
==============================================================================
--- trunk/libavfilter/avfilter.h	Fri May  7 11:43:21 2010	(r23043)
+++ trunk/libavfilter/avfilter.h	Fri May  7 12:02:59 2010	(r23044)
@@ -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;
 
 /**

Modified: trunk/libavfilter/defaults.c
==============================================================================
--- trunk/libavfilter/defaults.c	Fri May  7 11:43:21 2010	(r23043)
+++ trunk/libavfilter/defaults.c	Fri May  7 12:02:59 2010	(r23044)
@@ -76,6 +76,8 @@ void avfilter_default_start_frame(AVFilt
         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));
     }
 }

Modified: trunk/libavfilter/vf_scale.c
==============================================================================
--- trunk/libavfilter/vf_scale.c	Fri May  7 11:43:21 2010	(r23043)
+++ trunk/libavfilter/vf_scale.c	Fri May  7 12:02:59 2010	(r23044)
@@ -150,6 +150,9 @@ static void start_frame(AVFilterLink *li
     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,

Modified: trunk/libavfilter/vsrc_buffer.c
==============================================================================
--- trunk/libavfilter/vsrc_buffer.c	Fri May  7 11:43:21 2010	(r23043)
+++ trunk/libavfilter/vsrc_buffer.c	Fri May  7 12:02:59 2010	(r23044)
@@ -46,6 +46,8 @@ int av_vsrc_buffer_add_frame(AVFilterCon
 
     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 *l
 
     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);



More information about the ffmpeg-cvslog mailing list