Jean-Baptiste Kempf pushed to branch 3.0.x at VideoLAN / VLC


Commits:
c969cbf9 by RĂ©mi Denis-Courmont at 2023-02-15T16:00:24+00:00
goom: keep track of video format

(cherry picked from commit d7aca8699eadccb7b57491b8e202cfc77ebccb01)

- - - - -
93bd3afc by Steve Lhomme at 2023-02-15T16:00:24+00:00
goom: use plane_CopyPixels()

The destination stribe may not be the same as the source.

(cherry picked from commit 82bca6ae86ffff4f4006f301249f6f7e6f13a8b7)

- - - - -
8bf721b9 by Steve Lhomme at 2023-02-15T16:00:24+00:00
goom: explicitely set the output as full range

(cherry picked from commit 6dc1c5a457b44aa3850aca8c611f7bc2125a5701)

- - - - -
62ccae7d by Steve Lhomme at 2023-02-15T16:00:24+00:00
goom: initialize the video format with video_format_Init()

Do not rely on calloc to get proper values.

(cherry picked from commit 61c9cbe24f6830cd745469e089470022e8a1892a)

- - - - -


1 changed file:

- modules/visualization/goom.c


Changes:

=====================================
modules/visualization/goom.c
=====================================
@@ -79,9 +79,8 @@ vlc_module_end ()
 typedef struct
 {
     vlc_thread_t  thread;
+    video_format_t fmt;
 
-    int           i_width;
-    int           i_height;
     vout_thread_t *p_vout;
     int           i_speed;
 
@@ -118,7 +117,6 @@ static int Open( vlc_object_t *p_this )
     filter_t       *p_filter = (filter_t *)p_this;
     filter_sys_t   *p_sys;
     goom_thread_t  *p_thread;
-    video_format_t fmt;
 
     /* Allocate structure */
     p_sys = p_filter->p_sys = malloc( sizeof( filter_sys_t ) );
@@ -126,20 +124,21 @@ static int Open( vlc_object_t *p_this )
     /* Create goom thread */
     p_sys->p_thread = p_thread = calloc( 1, sizeof(*p_thread) );
 
-    const int width  = p_thread->i_width  = var_InheritInteger( p_filter, 
"goom-width" );
-    const int height = p_thread->i_height = var_InheritInteger( p_filter, 
"goom-height" );
-
-    memset( &fmt, 0, sizeof(video_format_t) );
+    const int width  = var_InheritInteger( p_filter, "goom-width" );
+    const int height = var_InheritInteger( p_filter, "goom-height" );
 
-    fmt.i_width = fmt.i_visible_width = width;
-    fmt.i_height = fmt.i_visible_height = height;
-    fmt.i_chroma = VLC_CODEC_RGB32;
-    fmt.i_sar_num = fmt.i_sar_den = 1;
+    video_format_Init(&p_thread->fmt, VLC_CODEC_RGB32);
+    p_thread->fmt.i_width = p_thread->fmt.i_visible_width = width;
+    p_thread->fmt.i_height = p_thread->fmt.i_visible_height = height;
+    p_thread->fmt.i_sar_num = p_thread->fmt.i_sar_den = 1;
+    p_thread->fmt.b_color_range_full = true;
 
-    p_thread->p_vout = aout_filter_RequestVout( p_filter, NULL, &fmt );
+    p_thread->p_vout = aout_filter_RequestVout( p_filter, NULL,
+                                                &p_thread->fmt );
     if( p_thread->p_vout == NULL )
     {
         msg_Err( p_filter, "no suitable vout module" );
+        video_format_Clean(&p_thread->fmt);
         free( p_thread );
         free( p_sys );
         return VLC_EGENERIC;
@@ -164,6 +163,7 @@ static int Open( vlc_object_t *p_this )
         vlc_mutex_destroy( &p_thread->lock );
         vlc_cond_destroy( &p_thread->wait );
         aout_filter_RequestVout( p_filter, p_thread->p_vout, NULL );
+        video_format_Clean(&p_thread->fmt);
         free( p_thread );
         free( p_sys );
         return VLC_EGENERIC;
@@ -292,7 +292,13 @@ static void *Thread( void *p_thread_data )
     PluginInfo *p_plugin_info;
     int canc = vlc_savecancel ();
 
-    p_plugin_info = goom_init( p_thread->i_width, p_thread->i_height );
+    p_plugin_info = goom_init( p_thread->fmt.i_width, p_thread->fmt.i_height );
+
+    plane_t src;
+    src.i_lines = p_thread->fmt.i_height;
+    src.i_pitch = p_thread->fmt.i_width * 4;
+    src.i_visible_lines = p_thread->fmt.i_height;
+    src.i_visible_pitch = p_thread->fmt.i_width * 4;
 
     for( ;; )
     {
@@ -331,7 +337,8 @@ static void *Thread( void *p_thread_data )
         if( unlikely(p_pic == NULL) )
             continue;
 
-        memcpy( p_pic->p[0].p_pixels, plane, p_thread->i_width * 
p_thread->i_height * 4 );
+        src.p_pixels = (uint8_t*)plane;
+        plane_CopyPixels(&p_pic->p[0], &src);
 
         p_pic->date = date_Get( &i_pts ) + GOOM_DELAY;
         vout_PutPicture( p_thread->p_vout, p_pic );
@@ -368,8 +375,8 @@ static void Close( vlc_object_t *p_this )
         block_Release( p_sys->p_thread->pp_blocks[p_sys->p_thread->i_blocks] );
     }
 
+    video_format_Clean(&p_sys->p_thread->fmt);
     free( p_sys->p_thread );
-
     free( p_sys );
 }
 



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/4b8069d7a2ad688ba7686a804a06072d392b12a0...62ccae7d09fa58cd65c5c2d2cab8f58017157468

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/4b8069d7a2ad688ba7686a804a06072d392b12a0...62ccae7d09fa58cd65c5c2d2cab8f58017157468
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to