[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