vlc | branch: master | Julian Scheel <[email protected]> | Wed Jun  3 09:54:37 
2015 +0200| [4e8c81f922d938a0d1089571175ed4388ac047ce] | committer: 
Jean-Baptiste Kempf

mmal/deinterlace: Avoid overflows on buffer calculation

Use signed variables for calculating the buffers to be sent to the component
as negative values may occur.

Signed-off-by: Julian Scheel <[email protected]>
Signed-off-by: Jean-Baptiste Kempf <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4e8c81f922d938a0d1089571175ed4388ac047ce
---

 modules/hw/mmal/deinterlace.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/modules/hw/mmal/deinterlace.c b/modules/hw/mmal/deinterlace.c
index e6f6264..f7e2a2c 100644
--- a/modules/hw/mmal/deinterlace.c
+++ b/modules/hw/mmal/deinterlace.c
@@ -331,10 +331,12 @@ static void fill_output_port(filter_t *filter)
 {
     filter_sys_t *sys = filter->p_sys;
     /* allow at least 2 buffers in transit */
-    unsigned max_buffers_in_transit = __MAX(sys->output->buffer_num, 
MIN_NUM_BUFFERS_IN_TRANSIT);
-    unsigned buffers_available = max_buffers_in_transit - 
atomic_load(&sys->output_in_transit);
-    unsigned buffers_to_send = max_buffers_in_transit - sys->output_in_transit;
-    unsigned i;
+    unsigned max_buffers_in_transit = __MAX(2, MIN_NUM_BUFFERS_IN_TRANSIT);
+    int buffers_available = sys->output->buffer_num -
+        atomic_load(&sys->output_in_transit) -
+        mmal_queue_length(sys->filtered_pictures);
+    int buffers_to_send = max_buffers_in_transit - sys->output_in_transit;
+    int i;
 
     if (buffers_to_send > buffers_available)
         buffers_to_send = buffers_available;

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to