[MPlayer-cvslog] r33732 - in trunk: configure stream/tvi_v4l.c stream/tvi_v4l2.c

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sun Jun 26 20:41:16 CEST 2011


On Sun, Jun 26, 2011 at 04:42:36PM +0200, iive wrote:
> Author: iive
> Date: Sun Jun 26 16:42:35 2011
> New Revision: 33732
> 
> Log:
> Do a proper calculation of free RAM to be used as V4L buffers.
> 
> The code uses sysinfo to query the available RAM, however it used 
> ancient form available is some early development 2.3.x kernels.
> Newer form reports the size in memory units (usually same as page size),
> as result the code would fallback to 2 buffers even on multi GB system.
> 
> The commit does: Improve the check in configure to ensure that we 
> do use sysinfo struct with present mem_unit. Use free ram instead of
> total ram (to avoid swapping). Tweak memory constants and simplify code.
> 
> Modified:
>    trunk/configure
>    trunk/stream/tvi_v4l.c
>    trunk/stream/tvi_v4l2.c
> 
> Modified: trunk/configure
> ==============================================================================
> --- trunk/configure	Sun Jun 26 16:16:40 2011	(r33731)
> +++ trunk/configure	Sun Jun 26 16:42:35 2011	(r33732)
> @@ -3997,7 +3997,7 @@ fi #if sunos
>  
>  echocheck "sys/sysinfo.h"
>  _sys_sysinfo=no
> -statement_check sys/sysinfo.h 'struct sysinfo s_info; sysinfo(&s_info)' && _sys_sysinfo=yes
> +statement_check sys/sysinfo.h 'struct sysinfo s_info; s_info.mem_unit=0; sysinfo(&s_info)' && _sys_sysinfo=yes
>  if test "$_sys_sysinfo" = yes ; then
>    def_sys_sysinfo_h='#define HAVE_SYS_SYSINFO_H 1'
>  else
> 
> Modified: trunk/stream/tvi_v4l.c
> ==============================================================================
> --- trunk/stream/tvi_v4l.c	Sun Jun 26 16:16:40 2011	(r33731)
> +++ trunk/stream/tvi_v4l.c	Sun Jun 26 16:42:35 2011	(r33732)
> @@ -760,7 +760,8 @@ static int uninit(priv_t *priv)
>  
>  static int get_capture_buffer_size(priv_t *priv)
>  {
> -    int bufsize, cnt;
> +    uint64_t bufsize;
> +    int cnt;
>  
>      if (priv->tv_param->buffer_size >= 0) {
>          bufsize = priv->tv_param->buffer_size*1024*1024;
> @@ -769,14 +770,10 @@ static int get_capture_buffer_size(priv_
>          struct sysinfo si;
>  
>          sysinfo(&si);
> -        if (si.totalram<2*1024*1024) {
> -            bufsize = 1024*1024;
> -        } else {
> -            bufsize = si.totalram/2;
> -        }
> -#else
> -        bufsize = 16*1024*1024;
> +        bufsize = (si.freeram/2)*si.mem_unit;
> +        if (bufsize < 16*1024*1024)
>  #endif
> +        bufsize = 16*1024*1024;
>      }
>  
>      cnt = bufsize/(priv->height*priv->bytesperline);
> 
> Modified: trunk/stream/tvi_v4l2.c
> ==============================================================================
> --- trunk/stream/tvi_v4l2.c	Sun Jun 26 16:16:40 2011	(r33731)
> +++ trunk/stream/tvi_v4l2.c	Sun Jun 26 16:42:35 2011	(r33732)
> @@ -1376,7 +1376,8 @@ static int init(priv_t *priv)
>  
>  static int get_capture_buffer_size(priv_t *priv)
>  {
> -    int bufsize, cnt;
> +    uint64_t bufsize;
> +    int cnt;
>  
>      if (priv->tv_param->buffer_size >= 0) {
>          bufsize = priv->tv_param->buffer_size*1024*1024;
> @@ -1385,14 +1386,10 @@ static int get_capture_buffer_size(priv_
>          struct sysinfo si;
>  
>          sysinfo(&si);
> -        if (si.totalram<2*1024*1024) {
> -            bufsize = 1024*1024;
> -        } else {
> -            bufsize = si.totalram/2;
> -        }
> -#else
> -        bufsize = 16*1024*1024;
> +        bufsize = (si.freeram/2)*si.mem_unit;
> +        if ( bufsize < 16*1024*1024)
>  #endif
> +        bufsize = 16*1024*1024;
>      }
>  
>      cnt = bufsize/priv->format.fmt.pix.sizeimage;

Can I convince someone to factor out the code duplication here?


More information about the MPlayer-cvslog mailing list