[vlc-devel] [PATCH 01/10] video_filter:deinterlace: use an array of metadata rather than the array in the metadata

Rémi Denis-Courmont remi at remlab.net
Mon Jun 26 19:42:29 CEST 2017


Le 26 juin 2017 19:20:10 GMT+02:00, Steve Lhomme <robux4 at videolabs.io> a écrit :
>---
>modules/video_filter/deinterlace/deinterlace.c | 36
>++++++++++++--------------
> modules/video_filter/deinterlace/deinterlace.h |  8 +++---
> 2 files changed, 20 insertions(+), 24 deletions(-)
>
>diff --git a/modules/video_filter/deinterlace/deinterlace.c
>b/modules/video_filter/deinterlace/deinterlace.c
>index c87d9d6b2c..00194eb59d 100644
>--- a/modules/video_filter/deinterlace/deinterlace.c
>+++ b/modules/video_filter/deinterlace/deinterlace.c
>@@ -316,15 +316,11 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
> 
>     /* Slide the metadata history. */
>     for( int i = 1; i < METADATA_SIZE; i++ )
>-    {
>-        p_sys->meta.pi_date[i-1]            = p_sys->meta.pi_date[i];
>-        p_sys->meta.pi_nb_fields[i-1]       =
>p_sys->meta.pi_nb_fields[i];
>-        p_sys->meta.pb_top_field_first[i-1] =
>p_sys->meta.pb_top_field_first[i];
>-    }
>+        p_sys->meta[i-1] = p_sys->meta[i];
>     /* The last element corresponds to the current input frame. */
>-    p_sys->meta.pi_date[METADATA_SIZE-1]            = p_pic->date;
>-    p_sys->meta.pi_nb_fields[METADATA_SIZE-1]       =
>p_pic->i_nb_fields;
>-    p_sys->meta.pb_top_field_first[METADATA_SIZE-1] =
>p_pic->b_top_field_first;
>+    p_sys->meta[METADATA_SIZE-1].pi_date            = p_pic->date;
>+    p_sys->meta[METADATA_SIZE-1].pi_nb_fields       =
>p_pic->i_nb_fields;
>+    p_sys->meta[METADATA_SIZE-1].pb_top_field_first =
>p_pic->b_top_field_first;
> 
>     /* Remember the frame offset that we should use for this frame.
>        The value in p_sys will be updated to reflect the correct value
>@@ -338,8 +334,8 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
>     if( i_frame_offset != CUSTOM_PTS )
>     {
>         /* Pick the correct values from the history. */
>-        b_top_field_first =
>p_sys->meta.pb_top_field_first[i_meta_idx];
>-        i_nb_fields       = p_sys->meta.pi_nb_fields[i_meta_idx];
>+        b_top_field_first =
>p_sys->meta[i_meta_idx].pb_top_field_first;
>+        i_nb_fields       = p_sys->meta[i_meta_idx].pi_nb_fields;
>     }
>     else
>     {
>@@ -374,7 +370,7 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
>         /* Find oldest valid logged date.
>            The current input frame doesn't count. */
>         for( ; i < iend; i++ )
>-            if( p_sys->meta.pi_date[i] > VLC_TS_INVALID )
>+            if( p_sys->meta[i].pi_date > VLC_TS_INVALID )
>                 break;
>         if( i < iend )
>         {
>@@ -382,9 +378,9 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
>                (except the new frame) represent. */
>             int i_fields_total = 0;
>             for( int j = i ; j < iend; j++ )
>-                i_fields_total += p_sys->meta.pi_nb_fields[j];
>+                i_fields_total += p_sys->meta[j].pi_nb_fields;
>             /* One field took this long. */
>-            i_field_dur = (p_pic->date - p_sys->meta.pi_date[i]) /
>i_fields_total;
>+            i_field_dur = (p_pic->date - p_sys->meta[i].pi_date) /
>i_fields_total;
>         }
>         /* Note that we default to field duration 0 if it could not be
>        determined. This behaves the same as the old code - leaving the
>@@ -512,7 +508,7 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
>assert( i_frame_offset <= METADATA_SIZE  ||  i_frame_offset ==
>CUSTOM_PTS );
>     if( i_frame_offset != CUSTOM_PTS )
>     {
>-        mtime_t i_base_pts = p_sys->meta.pi_date[i_meta_idx];
>+        mtime_t i_base_pts = p_sys->meta[i_meta_idx].pi_date;
> 
>         /* Note: in the usual case (i_frame_offset = 0  and
>                 b_double_rate = false), this effectively does nothing.
>@@ -568,9 +564,9 @@ void Flush( filter_t *p_filter )
> 
>     for( int i = 0; i < METADATA_SIZE; i++ )
>     {
>-        p_sys->meta.pi_date[i] = VLC_TS_INVALID;
>-        p_sys->meta.pi_nb_fields[i] = 2;
>-        p_sys->meta.pb_top_field_first[i] = true;
>+        p_sys->meta[i].pi_date = VLC_TS_INVALID;
>+        p_sys->meta[i].pi_nb_fields = 2;
>+        p_sys->meta[i].pb_top_field_first = true;
>     }
>p_sys->i_frame_offset = 0; /* reset to default value (first frame after
>                                   flush cannot have offset) */
>@@ -653,9 +649,9 @@ notsupp:
> 
>     for( int i = 0; i < METADATA_SIZE; i++ )
>     {
>-        p_sys->meta.pi_date[i] = VLC_TS_INVALID;
>-        p_sys->meta.pi_nb_fields[i] = 2;
>-        p_sys->meta.pb_top_field_first[i] = true;
>+        p_sys->meta[i].pi_date = VLC_TS_INVALID;
>+        p_sys->meta[i].pi_nb_fields = 2;
>+        p_sys->meta[i].pb_top_field_first = true;
>     }
>p_sys->i_frame_offset = 0; /* start with default value (first-ever
>frame
>                                   cannot have offset) */
>diff --git a/modules/video_filter/deinterlace/deinterlace.h
>b/modules/video_filter/deinterlace/deinterlace.h
>index 618db45e7c..93ae1d255b 100644
>--- a/modules/video_filter/deinterlace/deinterlace.h
>+++ b/modules/video_filter/deinterlace/deinterlace.h
>@@ -77,9 +77,9 @@ typedef enum { DEINTERLACE_DISCARD, DEINTERLACE_MEAN,
>   DEINTERLACE_BLEND,
>  * @see Deinterlace()
>  */
> typedef struct {
>-    mtime_t pi_date[METADATA_SIZE];
>-    int     pi_nb_fields[METADATA_SIZE];
>-    bool    pb_top_field_first[METADATA_SIZE];
>+    mtime_t pi_date;
>+    int     pi_nb_fields;
>+    bool    pb_top_field_first;
> } metadata_history_t;
> 
> #define HISTORY_SIZE (3)
>@@ -109,7 +109,7 @@ struct filter_sys_t
> * Metadata history (PTS, nb_fields, TFF). Used for framerate doublers.
>      * @see metadata_history_t
>      */
>-    metadata_history_t meta;
>+    metadata_history_t meta[METADATA_SIZE];
> 
>     /** Output frame timing / framerate doubler control
>         (see extra documentation in deinterlace.h) */
>-- 
>2.12.1
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

LGTM.
-- 
Rémi Denis-Courmont
Typed on an inconvenient virtual keyboard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20170626/38005ff4/attachment.html>


More information about the vlc-devel mailing list