]> git.sesse.net Git - vlc/blobdiff - src/video_output/vout_pictures.c
Fix menu removal of accelerators. This has yet to be more FIXMEd (jpeg :D)
[vlc] / src / video_output / vout_pictures.c
index e19d9b698fc39c42031e6faf2a0a1ece55fb99a3..55895f756c99b62e481215e75984058d65ae09b1 100644 (file)
@@ -106,6 +106,35 @@ void vout_DatePicture( vout_thread_t *p_vout,
  * It needs locking since several pictures can be created by several producers
  * threads.
  */
+int vout_CountPictureAvailable( vout_thread_t *p_vout )
+{
+    int i_free = 0;
+    int i_pic;
+
+    vlc_mutex_lock( &p_vout->picture_lock );
+    for( i_pic = 0; i_pic < I_RENDERPICTURES; i_pic++ )
+    {
+        picture_t *p_pic = PP_RENDERPICTURE[(p_vout->render.i_last_used_pic + i_pic + 1) % I_RENDERPICTURES];
+
+        switch( p_pic->i_status )
+        {
+            case DESTROYED_PICTURE:
+                i_free++;
+                break;
+
+            case FREE_PICTURE:
+                i_free++;
+                break;
+
+            default:
+                break;
+        }
+    }
+    vlc_mutex_unlock( &p_vout->picture_lock );
+
+    return i_free;
+}
+
 picture_t *vout_CreatePicture( vout_thread_t *p_vout,
                                bool b_progressive,
                                bool b_top_field_first,
@@ -1004,11 +1033,16 @@ void picture_CopyPixels( picture_t *p_dst, const picture_t *p_src )
 
     for( i = 0; i < p_src->i_planes ; i++ )
     {
+        const unsigned i_width  = __MIN( p_dst->p[i].i_visible_pitch,
+                                         p_src->p[i].i_visible_pitch );
+        const unsigned i_height = __MIN( p_dst->p[i].i_visible_lines,
+                                         p_src->p[i].i_visible_lines );
+
         if( p_src->p[i].i_pitch == p_dst->p[i].i_pitch )
         {
             /* There are margins, but with the same width : perfect ! */
             vlc_memcpy( p_dst->p[i].p_pixels, p_src->p[i].p_pixels,
-                        p_src->p[i].i_pitch * p_src->p[i].i_visible_lines );
+                        p_src->p[i].i_pitch * i_height );
         }
         else
         {
@@ -1020,9 +1054,9 @@ void picture_CopyPixels( picture_t *p_dst, const picture_t *p_src )
             assert( p_in );
             assert( p_out );
 
-            for( i_line = p_src->p[i].i_visible_lines; i_line--; )
+            for( i_line = i_height; i_line--; )
             {
-                vlc_memcpy( p_out, p_in, p_src->p[i].i_visible_pitch );
+                vlc_memcpy( p_out, p_in, i_width );
                 p_in += p_src->p[i].i_pitch;
                 p_out += p_dst->p[i].i_pitch;
             }