[vlc-devel] [PATCH 02/10] video_filter:deinterlace: only compute the field duration when needed
Rémi Denis-Courmont
remi at remlab.net
Mon Jun 26 19:48:48 CEST 2017
Le 26 juin 2017 19:20:11 GMT+02:00, Steve Lhomme <robux4 at videolabs.io> a écrit :
>---
>modules/video_filter/deinterlace/deinterlace.c | 57
>+++++++++++++++-----------
> 1 file changed, 32 insertions(+), 25 deletions(-)
>
>diff --git a/modules/video_filter/deinterlace/deinterlace.c
>b/modules/video_filter/deinterlace/deinterlace.c
>index 00194eb59d..2be5422c3a 100644
>--- a/modules/video_filter/deinterlace/deinterlace.c
>+++ b/modules/video_filter/deinterlace/deinterlace.c
>@@ -279,6 +279,37 @@ static void GetOutputFormat( filter_t *p_filter,
>
> #define DEINTERLACE_DST_SIZE 3
>
>+static mtime_t GetFieldDuration( metadata_history_t meta[static
>METADATA_SIZE],
>+ picture_t *p_pic )
>+{
>+ mtime_t i_field_dur = 0;
>+
>+ /* Calculate one field duration. */
>+ int i = 0;
>+ int iend = METADATA_SIZE-1;
>+ /* Find oldest valid logged date.
>+ The current input frame doesn't count. */
>+ for( ; i < iend; i++ )
>+ if( meta[i].pi_date > VLC_TS_INVALID )
>+ break;
>+ if( i < iend )
>+ {
>+ /* Count how many fields the valid history entries
>+ (except the new frame) represent. */
>+ int i_fields_total = 0;
>+ for( int j = i ; j < iend; j++ )
>+ i_fields_total += meta[j].pi_nb_fields;
>+ /* One field took this long. */
>+ i_field_dur = (p_pic->date - 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
>+ extra output frame dates the same as p_pic->date if the last
>cached
>+ date was not valid.
>+ */
>+ return i_field_dur;
>+}
>+
> /* This is the filter function. See Open(). */
> picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic )
> {
>@@ -356,7 +387,6 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
>
> /* For framerate doublers, determine field duration and allocate
> output frames. */
>- mtime_t i_field_dur = 0;
> int i_double_rate_alloc_end = 0; /* One past last for allocated output
> frames in p_dst[]. Used only for
> framerate doublers. Will be inited
>@@ -364,30 +394,6 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
> PTS logic needs the result. */
> if( p_sys->b_double_rate )
> {
>- /* Calculate one field duration. */
>- int i = 0;
>- int iend = METADATA_SIZE-1;
>- /* Find oldest valid logged date.
>- The current input frame doesn't count. */
>- for( ; i < iend; i++ )
>- if( p_sys->meta[i].pi_date > VLC_TS_INVALID )
>- break;
>- if( i < iend )
>- {
>- /* Count how many fields the valid history entries
>- (except the new frame) represent. */
>- int i_fields_total = 0;
>- for( int j = i ; j < iend; 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[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
>- extra output frame dates the same as p_pic->date if the
>last cached
>- date was not valid.
>- */
>-
> i_double_rate_alloc_end = i_nb_fields;
> if( i_nb_fields > DEINTERLACE_DST_SIZE )
> {
>@@ -518,6 +524,7 @@ picture_t *Deinterlace( filter_t *p_filter,
>picture_t *p_pic )
>
> if( p_sys->b_double_rate )
> {
>+ mtime_t i_field_dur = GetFieldDuration( p_sys->meta, p_pic
>);
> /* Processing all actually allocated output frames. */
> for( int i = 1; i < i_double_rate_alloc_end; ++i )
> {
>--
>2.12.1
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel
Probably ok
--
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/8ee37566/attachment-0001.html>
More information about the vlc-devel
mailing list