import libunicap-0.9.12-21.el8

c8 imports/c8/libunicap-0.9.12-21.el8
CentOS Sources 6 years ago committed by MSVSphere Packaging Team
commit 6ad67e34fa

1
.gitignore vendored

@ -0,0 +1 @@
SOURCES/libunicap-0.9.12.tar.gz

@ -0,0 +1 @@
a4d3a484ecc63a6f7e080c67d54131f7058f2790 SOURCES/libunicap-0.9.12.tar.gz

@ -0,0 +1,78 @@
From 6cf16e964e312a2e040cc3e7b45be21715961a19 Mon Sep 17 00:00:00 2001
From: Kamil Dudka <kdudka@redhat.com>
Date: Thu, 7 Oct 2010 11:02:48 +0200
Subject: [PATCH 2/2] linunicap: do not compare arrays with NULL
---
cpi/vid21394/vid21394_base.c | 2 +-
cpi/vid21394/vid21394_cpi.c | 3 ---
src/unicap_helpers.c | 10 +++++-----
3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/cpi/vid21394/vid21394_base.c b/cpi/vid21394/vid21394_base.c
index 464a760..2ba576d 100644
--- a/cpi/vid21394/vid21394_base.c
+++ b/cpi/vid21394/vid21394_base.c
@@ -501,7 +501,7 @@ static unicap_status_t _vid21394_send_fcp_command_new( vid21394handle_t vid21394
raw1394handle_t raw1394handle = vid21394handle->raw1394handle;
- nodeid_t nodeid = nodeid = 0xffc0 | vid21394handle->node;
+ nodeid_t nodeid = 0xffc0 | vid21394handle->node;
unicap_status_t status = STATUS_SUCCESS;
diff --git a/cpi/vid21394/vid21394_cpi.c b/cpi/vid21394/vid21394_cpi.c
index e3778e4..738d0d7 100644
--- a/cpi/vid21394/vid21394_cpi.c
+++ b/cpi/vid21394/vid21394_cpi.c
@@ -654,7 +654,6 @@ int cpi_enumerate_formats( void *cpi_data, unicap_format_t *format, int index )
return STATUS_INVALID_PARAMETER;
}
- if( !data->current_formats )
{
int tmp;
cpi_reenumerate_formats( cpi_data, &tmp );
@@ -683,7 +682,6 @@ int cpi_set_format( void *cpi_data, unicap_format_t *format )
TRACE( "cpi_set_format\n" );
- if( !data->current_formats )
{
int tmp;
cpi_reenumerate_formats( cpi_data, &tmp );
@@ -845,7 +843,6 @@ unicap_status_t cpi_get_format( void *cpi_data, unicap_format_t *format )
{
vid21394_data_t *data = cpi_data;
- if( !data->current_formats )
{
int tmp;
cpi_reenumerate_formats( cpi_data, &tmp );
diff --git a/src/unicap_helpers.c b/src/unicap_helpers.c
index c2e1ec4..67578ac 100644
--- a/src/unicap_helpers.c
+++ b/src/unicap_helpers.c
@@ -105,13 +105,13 @@ unicap_status_t unicap_describe_device( unicap_device_t *device, char *buffer, s
"Vendor id: %u ( 0x%x )\n"\
"cpi: %s\n"\
"device: %s\n",
- device->identifier ? device->identifier : "(nil)",
- device->model_name ? device->model_name : "(nil)",
- device->vendor_name ? device->vendor_name : "(nil)",
+ device->identifier,
+ device->model_name,
+ device->vendor_name,
device->model_id,
device->vendor_id, device->vendor_id,
- device->cpi_layer ? device->cpi_layer : "(nil)",
- device->device ? device->device : "(nil)" );
+ device->cpi_layer,
+ device->device);
strncpy( buffer, tmp_buffer, (*buffer_size)-1 );
--
1.7.2.3

@ -0,0 +1,14 @@
Patch by Robert Scheck <robert@fedoraproject.org> for libunicap <= 0.9.12 to work around
the issue of /usr/@DATADIRNAME@/locale/ rather /usr/share/locale/ on Fedora 22 (and newer).
--- libunicap-0.9.12/po/Makefile.in.in 2009-09-21 18:08:22.000000000 +0200
+++ libunicap-0.9.12/po/Makefile.in.in.datadirname 2015-05-31 21:44:58.000000000 +0200
@@ -33,7 +33,7 @@
datadir = @datadir@
datarootdir = @datarootdir@
libdir = @libdir@
-DATADIRNAME = @DATADIRNAME@
+DATADIRNAME = share
itlocaledir = $(prefix)/$(DATADIRNAME)/locale
subdir = po
install_sh = @install_sh@

@ -0,0 +1,15 @@
Patch by Kamil Dudka <kdudka@redhat.com> for libunicap >= 0.9.12, to get it building on Red Hat
Enterprise Linux 5 (or derivates); see https://bugzilla.redhat.com/show_bug.cgi?id=635377#c2 for
more details.
--- libunicap-0.9.12/cpi/v4l2cpi/buffermanager.c 2010-08-17 18:13:08.000000000 +0200
+++ libunicap-0.9.12/cpi/v4l2cpi/buffermanager.c.includes 2010-10-04 21:44:09.942065713 +0200
@@ -1,5 +1,8 @@
#include "config.h"
+#include <sys/time.h>
+
+#include <linux/ioctl.h>
#include <linux/types.h>
#include <linux/videodev2.h>
#include <semaphore.h>

@ -0,0 +1,126 @@
From 739d6bde46f6d7dd68e228f2a27eb039d0550999 Mon Sep 17 00:00:00 2001
From: Kamil Dudka <kdudka@redhat.com>
Date: Thu, 7 Oct 2010 10:56:06 +0200
Subject: [PATCH] libunicap: fix various memory errors
---
cpi/dcam/dcam_v_modes.c | 3 ++-
cpi/euvccam/euvccam_capture.c | 1 +
cpi/v4l/v4l.c | 2 +-
cpi/v4l2cpi/v4l2.c | 12 ++++++++++--
cpi/vid21394/vid21394_cpi.c | 5 ++---
src/unicap.c | 2 ++
6 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/cpi/dcam/dcam_v_modes.c b/cpi/dcam/dcam_v_modes.c
index 2b8e45a..05dd318 100644
--- a/cpi/dcam/dcam_v_modes.c
+++ b/cpi/dcam/dcam_v_modes.c
@@ -182,7 +182,8 @@ unicap_status_t _dcam_prepare_format_array( dcam_handle_t dcamhandle,
int index = _dcam_get_mode_index( f, i );
TRACE( "f: %d m: %d index: %d (%s)\n", f, i, index, _dcam_unicap_formats[index].identifier );
TRACE( "size: %d x %d\n", _dcam_unicap_formats[index].size.width, _dcam_unicap_formats[index].size.height );
- memcpy( format_array + current_format, &_dcam_unicap_formats[index], sizeof( unicap_format_t ) );
+ if( 0 < index )
+ memcpy( format_array + current_format, &_dcam_unicap_formats[index], sizeof( unicap_format_t ) );
current_format++;
}
}
diff --git a/cpi/euvccam/euvccam_capture.c b/cpi/euvccam/euvccam_capture.c
index 2909bdb..d4ea60e 100644
--- a/cpi/euvccam/euvccam_capture.c
+++ b/cpi/euvccam/euvccam_capture.c
@@ -231,6 +231,7 @@ static void *capture_thread( euvccam_handle_t handle )
if( ret < 0 ){
TRACE( "Failed to submit urb!\n" );
perror( "ioctl" );
+ free( urb );
return NULL;
}
diff --git a/cpi/v4l/v4l.c b/cpi/v4l/v4l.c
index 91b7e87..416dc30 100644
--- a/cpi/v4l/v4l.c
+++ b/cpi/v4l/v4l.c
@@ -292,7 +292,7 @@ static unicap_status_t v4l_open( void **cpi_data, unicap_device_t *device )
v4l_handle_t v4lhandle;
*cpi_data = malloc( sizeof( struct _v4l_handle ) );
- if( !cpi_data )
+ if( !*cpi_data )
{
TRACE( "malloc failed\n" );
return STATUS_FAILURE;
diff --git a/cpi/v4l2cpi/v4l2.c b/cpi/v4l2cpi/v4l2.c
index ba3d5b3..925659c 100644
--- a/cpi/v4l2cpi/v4l2.c
+++ b/cpi/v4l2cpi/v4l2.c
@@ -864,7 +864,7 @@ static unicap_status_t v4l2_reenumerate_formats( void *cpi_data, int *_pcount )
sizes = build_format_size_table( handle, v4l2_fmt.pixelformat, &size_count );
- if( size_count == 0 )
+ if( sizes == NULL )
{
handle->unicap_formats[v4l2_fmt.index].min_size.width =
handle->unicap_formats[v4l2_fmt.index].min_size.height = 1;
@@ -2148,6 +2150,8 @@ static unicap_status_t v4l2_queue_buffer( void *cpi_data, unicap_data_buffer_t *
else
{
TRACE( "queue buffer failed\n" );
+ free( queue );
+ /* FIXME: should return STATUS_FAILURE? */
}
if( ( status == STATUS_NO_BUFFERS ) && ( buffer->type == UNICAP_BUFFER_TYPE_SYSTEM ) )
@@ -2155,6 +2159,10 @@ static unicap_status_t v4l2_queue_buffer( void *cpi_data, unicap_data_buffer_t *
status = STATUS_SUCCESS;
}
}
+ else
+ {
+ free( queue );
+ }
return STATUS_SUCCESS;
diff --git a/cpi/vid21394/vid21394_cpi.c b/cpi/vid21394/vid21394_cpi.c
index c79e8db..e3778e4 100644
--- a/cpi/vid21394/vid21394_cpi.c
+++ b/cpi/vid21394/vid21394_cpi.c
@@ -504,9 +504,6 @@ int cpi_close( void *cpi_data )
{
vid21394_data_t *data = cpi_data;
- vid21394_close( data->vid21394handle );
-
-
ucutil_destroy_queue( data->in_queue );
ucutil_destroy_queue( data->out_queue );
@@ -515,6 +512,8 @@ int cpi_close( void *cpi_data )
free( data->vid21394handle->unicap_handle );
}
+ vid21394_close( data->vid21394handle );
+
g_instance_count--;
free( data );
diff --git a/src/unicap.c b/src/unicap.c
index 5cfa673..f56c6f0 100644
--- a/src/unicap.c
+++ b/src/unicap.c
@@ -1521,7 +1521,9 @@ unicap_status_t unicap_data_buffer_unref( unicap_data_buffer_t *buffer )
buffer->private->unref_func (buffer, buffer->private->unref_func_data);
}
if (buffer->private->ref_count == 0 ){
+ sem_post (&buffer->private->lock);
unicap_data_buffer_free( buffer );
+ return STATUS_SUCCESS;
}
}else{
TRACE( "unref of a buffer with refcount <= 0!" );
--
1.7.2.3

@ -0,0 +1,25 @@
Patch by Robert Scheck <robert@fedoraproject.org> for libunicap >= 0.9.12, which switches
after the removal of v4l1 from the Linux kernel to the libv4l1compat header of libv4l.
--- libunicap-0.9.12/cpi/v4l/v4l.c 2010-01-17 08:49:29.000000000 +0100
+++ libunicap-0.9.12/cpi/v4l/v4l.c.videodev 2011-10-09 02:50:26.000000000 +0200
@@ -49,7 +49,7 @@
#endif
#include <debug.h>
-#include <linux/videodev.h>
+#include <libv4l1-videodev.h>
#include <linux/videodev2.h> // for v4l2 checks
#include "v4l.h"
--- libunicap-0.9.12/cpi/v4l2cpi/uvcvideo.h 2010-01-17 08:49:29.000000000 +0100
+++ libunicap-0.9.12/cpi/v4l2cpi/uvcvideo.h.videodev 2011-10-09 02:50:09.000000000 +0200
@@ -2,7 +2,7 @@
#define _USB_VIDEO_H_
#include <linux/kernel.h>
-#include <linux/videodev.h>
+#include <libv4l1-videodev.h>
#include "uvc_compat.h"

@ -0,0 +1,433 @@
cpi/dcam/dcam_capture.c | 8 ----
cpi/dcam/dcam_property.c | 2 -
cpi/euvccam/debayer.c | 5 ---
cpi/euvccam/euvccam_colorproc.c | 2 +
cpi/euvccam/euvccam_cpi.c | 2 +
cpi/euvccam/euvccam_device.c | 2 +-
cpi/euvccam/euvccam_usb.c | 1 +
cpi/euvccam/logging.c | 1 +
cpi/v4l2cpi/buffermanager.c | 19 +---------
cpi/v4l2cpi/tiseuvccam.c | 2 +
cpi/v4l2cpi/tisuvccam.c | 31 +---------------
cpi/v4l2cpi/v4l2.c | 74 +--------------------------------------
cpi/vid21394/vid21394_base.c | 3 +-
src/unicap_helpers.c | 2 +-
14 files changed, 16 insertions(+), 138 deletions(-)
diff --git a/cpi/dcam/dcam_capture.c b/cpi/dcam/dcam_capture.c
index f92f757..068a78f 100644
--- a/cpi/dcam/dcam_capture.c
+++ b/cpi/dcam/dcam_capture.c
@@ -60,14 +60,6 @@ static void new_frame_event( dcam_handle_t dcamhandle, unicap_data_buffer_t *buf
}
}
-static void drop_frame_event( dcam_handle_t dcamhandle )
-{
- if( dcamhandle->event_callback )
- {
- dcamhandle->event_callback( dcamhandle->unicap_handle, UNICAP_EVENT_NEW_FRAME );
- }
-}
-
static void cleanup_handler( void *arg )
{
TRACE( "cleanup_handler\n" );
diff --git a/cpi/dcam/dcam_property.c b/cpi/dcam/dcam_property.c
index 8199162..6bf1dff 100644
--- a/cpi/dcam/dcam_property.c
+++ b/cpi/dcam/dcam_property.c
@@ -1017,7 +1017,6 @@ unicap_status_t dcam_init_trigger_property( dcam_handle_t dcamhandle,
// TRIGGER_POLARITY
if( ( dcam_property->register_inq >> 26 ) & 0x1 )
{
- int i;
strcpy( dcam_property->unicap_property.menu_item, dcamhandle->trigger_polarities[( dcam_property->register_default >> 26 ) & 1] );
dcam_property->unicap_property.menu.menu_item_count = 2;
dcam_property->unicap_property.menu.menu_items = dcamhandle->trigger_polarities;
@@ -1430,7 +1429,6 @@ unicap_status_t dcam_set_property( dcam_handle_t dcamhandle,
case PPTY_TYPE_TRIGGER_POLARITY:
{
- int i;
quadlet_t quad = 0;
status = _dcam_read_register( dcamhandle->raw1394handle,
diff --git a/cpi/euvccam/debayer.c b/cpi/euvccam/debayer.c
index 1f0bffc..4e04506 100644
--- a/cpi/euvccam/debayer.c
+++ b/cpi/euvccam/debayer.c
@@ -88,7 +88,6 @@ void debayer_calculate_rbgain( unicap_data_buffer_t *buffer, int *rgain, int *bg
void debayer_ccm_rgb24_nn( unicap_data_buffer_t *destbuf, unicap_data_buffer_t *srcbuf, debayer_data_t *data )
{
int i, j;
- int dest_offset = 0;
unsigned char *dest = destbuf->data;
unsigned char *source = srcbuf->data;
int width = srcbuf->format.size.width;
@@ -159,15 +158,12 @@ void debayer_ccm_rgb24_nn( unicap_data_buffer_t *destbuf, unicap_data_buffer_t *
void debayer_ccm_rgb24_nn_be( unicap_data_buffer_t *destbuf, unicap_data_buffer_t *srcbuf, debayer_data_t *data )
{
int i, j;
- int dest_offset = 0;
unsigned char *dest = destbuf->data;
unsigned char *source = srcbuf->data;
int width = srcbuf->format.size.width;
int height = srcbuf->format.size.height;
int rgain, bgain;
- static int odd = 0;
-
if( data->use_rbgain )
{
rgain = data->rgain;
@@ -242,7 +238,6 @@ void debayer_ccm_rgb24_nn_be( unicap_data_buffer_t *destbuf, unicap_data_buffer_
void debayer_ccm_rgb24_gr_nn( unicap_data_buffer_t *destbuf, unicap_data_buffer_t *srcbuf, debayer_data_t *data )
{
int i, j;
- int dest_offset = 0;
unsigned char *dest = destbuf->data;
unsigned char *source = srcbuf->data;
int width = srcbuf->format.size.width;
diff --git a/cpi/euvccam/euvccam_colorproc.c b/cpi/euvccam/euvccam_colorproc.c
index 807ae65..adf98c3 100644
--- a/cpi/euvccam/euvccam_colorproc.c
+++ b/cpi/euvccam/euvccam_colorproc.c
@@ -21,6 +21,8 @@
#include "euvccam_cpi.h"
#include "debayer.h"
+#include <string.h>
+
void euvccam_colorproc_by8_rgb24_nn( euvccam_handle_t handle, unicap_data_buffer_t *dest, unicap_data_buffer_t *src )
{
#ifdef __SSE2__
diff --git a/cpi/euvccam/euvccam_cpi.c b/cpi/euvccam/euvccam_cpi.c
index 73d413a..8e39343 100644
--- a/cpi/euvccam/euvccam_cpi.c
+++ b/cpi/euvccam/euvccam_cpi.c
@@ -94,6 +94,8 @@ static struct _unicap_cpi cpi_s =
cpi_set_event_notify: (cpi_set_event_notify_t)euvccam_set_event_notify,
};
+void log_init( void );
+
unicap_status_t cpi_register( struct _unicap_cpi *reg_data )
{
memcpy( reg_data, &cpi_s, sizeof( struct _unicap_cpi ) );
diff --git a/cpi/euvccam/euvccam_device.c b/cpi/euvccam/euvccam_device.c
index 73a2be3..7168cdf 100644
--- a/cpi/euvccam/euvccam_device.c
+++ b/cpi/euvccam/euvccam_device.c
@@ -788,7 +788,7 @@ unicap_status_t euvccam_device_set_gpout( euvccam_handle_t handle, unicap_proper
unicap_status_t status = STATUS_SUCCESS;
unsigned char val = (property->flags & UNICAP_FLAGS_ON_OFF)?1:0;
- printf( "%lld %d\n", property->flags, val );
+ printf( "%lld %d\n", (long long int) property->flags, val );
status = euvccam_usb_ctrl_msg( handle->dev.fd,
EP0_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
diff --git a/cpi/euvccam/euvccam_usb.c b/cpi/euvccam/euvccam_usb.c
index 4059c9e..fcff74b 100644
--- a/cpi/euvccam/euvccam_usb.c
+++ b/cpi/euvccam/euvccam_usb.c
@@ -24,6 +24,7 @@
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unicap.h>
+#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <linux/usbdevice_fs.h>
diff --git a/cpi/euvccam/logging.c b/cpi/euvccam/logging.c
index 065501e..7b98daa 100644
--- a/cpi/euvccam/logging.c
+++ b/cpi/euvccam/logging.c
@@ -21,6 +21,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
+#include <string.h>
FILE *g_logfp = NULL;
int g_log_modules_mask = 0xffff;
diff --git a/cpi/v4l2cpi/buffermanager.c b/cpi/v4l2cpi/buffermanager.c
index 7c0cbae..64cb57f 100644
--- a/cpi/v4l2cpi/buffermanager.c
+++ b/cpi/v4l2cpi/buffermanager.c
@@ -21,6 +21,8 @@
#define MAX_BUFFERS 16
#if USE_LIBV4L
+# include <libv4l2.h>
+
#define OPEN v4l2_open
#define CLOSE v4l2_close
#define IOCTL v4l2_ioctl
@@ -60,8 +62,6 @@ struct buffer_mgr
#define BUFFER_MGR_UNLOCK(mgr) { sem_post( &mgr->lock); }
-static v4l2cpi_buffer_t *buffer_mgr_get_cpi_buffer( buffer_mgr_t mgr, unicap_data_buffer_t *buffer );
-
static void v4l2_data_buffer_unref( unicap_data_buffer_t *buffer, buffer_mgr_t mgr )
{
@@ -167,21 +167,6 @@ void buffer_mgr_destroy( buffer_mgr_t mgr )
}
-static v4l2cpi_buffer_t *buffer_mgr_get_cpi_buffer( buffer_mgr_t mgr, unicap_data_buffer_t *buffer )
-{
- int i;
-
- for( i = 0; i < mgr->num_buffers; i++ ){
- if (&mgr->buffers[i].data_buffer == buffer){
- return &mgr->buffers[i];
- }
- }
-
- return NULL;
-}
-
-
-
unicap_status_t buffer_mgr_queue_all( buffer_mgr_t mgr )
{
int i;
diff --git a/cpi/v4l2cpi/tiseuvccam.c b/cpi/v4l2cpi/tiseuvccam.c
index 93729a5..72a3515 100644
--- a/cpi/v4l2cpi/tiseuvccam.c
+++ b/cpi/v4l2cpi/tiseuvccam.c
@@ -37,6 +37,8 @@
#define FOURCC(a,b,c,d) (unsigned int)((((unsigned int)d)<<24)+(((unsigned int)c)<<16)+(((unsigned int)b)<<8)+a)
#if USE_LIBV4L
+# include <libv4l2.h>
+
#define OPEN v4l2_open
#define CLOSE v4l2_close
#define IOCTL v4l2_ioctl
diff --git a/cpi/v4l2cpi/tisuvccam.c b/cpi/v4l2cpi/tisuvccam.c
index 62ee147..029b48d 100644
--- a/cpi/v4l2cpi/tisuvccam.c
+++ b/cpi/v4l2cpi/tisuvccam.c
@@ -39,6 +39,8 @@
#if USE_LIBV4L
+# include <libv4l2.h>
+
#define OPEN v4l2_open
#define CLOSE v4l2_close
#define IOCTL v4l2_ioctl
@@ -358,18 +360,6 @@ static struct ppty_info TISUVCPropertyOverrides[] =
}
};
-static struct uvc_format TISUVCFormats[] =
-{
- {
- type: V4L2_BUF_TYPE_VIDEO_CAPTURE,
- bpp: 8,
- colorspace: 0,
- fcc: FOURCC( 'Y', '8', '0', '0' ),
- flags: 0,
- name: "30303859-0000-0010-8000-00aa003",
- }
-};
-
static void tisuvccam_add_controls( int fd )
{
int i;
@@ -404,21 +394,6 @@ static void tisuvccam_add_controls( int fd )
}
}
-static void tisuvccam_add_formats( int fd )
-{
-/* int i; */
-/* int n = sizeof( TISUVCFormats ) / sizeof( struct uvc_format ); */
-
-/* for( i = 0; i < n; i++ ) */
-/* { */
-/* if( ioctl( fd, UVCIOC_FMT_SET, &TISUVCFormats[i] ) < 0 ) */
-/* { */
-/* TRACE( "Failed to set format info for %d\n", i ); */
-/* } */
-/* } */
-}
-
-
int tisuvccam_probe( v4l2_handle_t handle, const char *path )
{
@@ -661,8 +636,6 @@ unicap_status_t tisuvccam_set_property( v4l2_handle_t handle, unicap_property_t
{
case XU_AUTO_SHUTTER_MAX:
{
- struct uvc_xu_control autoctrl;
- __u8 u8data;
/* u8data = ( property->flags & UNICAP_FLAGS_AUTO ) ? 1 : 0; */
diff --git a/cpi/v4l2cpi/v4l2.c b/cpi/v4l2cpi/v4l2.c
index 925659c..a8e0c92 100644
--- a/cpi/v4l2cpi/v4l2.c
+++ b/cpi/v4l2cpi/v4l2.c
@@ -252,7 +252,6 @@ static unicap_status_t v4l2_set_event_notify( void *cpi_data,
unicap_handle_t unicap_handle );
static unicap_status_t queue_buffer( v4l2_handle_t handle, unicap_data_buffer_t *buffer );
-static unicap_status_t queue_system_buffers( v4l2_handle_t handle );
static void v4l2_capture_thread( v4l2_handle_t handle );
static struct _unicap_cpi cpi_s =
@@ -1440,7 +1439,7 @@ static unicap_status_t add_properties_ext( v4l2_handle_t handle, int *ppty_index
int ret;
v4l2ctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
- while( ret = IOCTL( handle->fd, VIDIOC_QUERYCTRL, &v4l2ctrl ) == 0 )
+ while(( ret = IOCTL( handle->fd, VIDIOC_QUERYCTRL, &v4l2ctrl ) == 0 ))
{
TRACE( "++%s++\n", v4l2ctrl.name );
@@ -1918,7 +1917,6 @@ static unicap_status_t v4l2_get_property( void *cpi_data, unicap_property_t *pro
static unicap_status_t v4l2_capture_start( void *cpi_data )
{
v4l2_handle_t handle = (v4l2_handle_t) cpi_data;
- struct v4l2_requestbuffers v4l2_reqbuf;
unicap_status_t status = STATUS_SUCCESS;
@@ -1952,7 +1950,6 @@ static unicap_status_t v4l2_capture_stop( void *cpi_data )
v4l2_handle_t handle = (v4l2_handle_t) cpi_data;
int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- int i;
TRACE( "v4l2_capture_stop\n" );
@@ -2069,69 +2066,6 @@ static unicap_status_t queue_buffer( v4l2_handle_t handle, unicap_data_buffer_t
return STATUS_SUCCESS;
}
-static unicap_status_t queue_system_buffers( v4l2_handle_t handle )
-{
- struct v4l2_buffer v4l2_buffer;
- memset( &v4l2_buffer, 0x0, sizeof( v4l2_buffer ) );
- v4l2_buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- v4l2_buffer.length = handle->current_format.buffer_size;
- switch( handle->io_method )
- {
- case CPI_V4L2_IO_METHOD_MMAP:
- {
- int i;
- v4l2_buffer.index = 0;
- v4l2_buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- v4l2_buffer.memory = V4L2_MEMORY_MMAP;
-
- if( sem_wait( &handle->sema ) )
- {
- TRACE( "SEM_WAIT FAILED!\n" );
- return STATUS_FAILURE;
- }
-
- for( i = 0; i < handle->buffer_count; i++ )
- {
- int ret;
- if( ( ( handle->qindex + 1 ) % handle->buffer_count ) == handle->dqindex )
- {
- TRACE( "NO BUFFERS\n" );
- sem_post( &handle->sema );
- return STATUS_NO_BUFFERS;
- }
-
- v4l2_buffer.index = handle->qindex;
- TRACE( "Q: index = %d type = %u, memory = %u dqindex = %d\n", handle->qindex, v4l2_buffer.type, v4l2_buffer.memory, handle->dqindex );
- handle->qindex = ( handle->qindex + 1 ) % handle->buffer_count;
- v4l2_buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
- if( ( ret = IOCTL( handle->fd, VIDIOC_QBUF, &v4l2_buffer ) ) < 0 )
- {
- if( ( ret == -ENODEV ) && !handle->removed && handle->event_callback )
- {
- handle->event_callback( handle->unicap_handle, UNICAP_EVENT_DEVICE_REMOVED );
- handle->removed = 1;
- }
- TRACE( "VIDIOC_QBUF ioctl failed: %s\n", strerror( errno ) );
- sem_post( &handle->sema );
- return STATUS_FAILURE;
- }
-
- if( sem_post( &handle->sema ) )
- {
- TRACE( "SEM_POST FAILED\n" );
- return STATUS_FAILURE;
- }
- }
- }
- break;
- default:
- return STATUS_FAILURE;
- }
-
- return STATUS_SUCCESS;
-}
-
static unicap_status_t v4l2_queue_buffer( void *cpi_data, unicap_data_buffer_t *buffer )
{
v4l2_handle_t handle = (v4l2_handle_t) cpi_data;
@@ -2231,17 +2165,11 @@ static unicap_status_t v4l2_set_event_notify( void *cpi_data, unicap_event_callb
static void v4l2_capture_thread( v4l2_handle_t handle )
{
- unicap_data_buffer_t new_frame_buffer;
-
handle->dqindex = -1;
while( !handle->quit_capture_thread )
{
- unicap_queue_t *entry;
- struct timeval ctime;
- int old_index;
int drop = 0;
- int ret = 0;
unicap_data_buffer_t *data_buffer;
diff --git a/cpi/vid21394/vid21394_base.c b/cpi/vid21394/vid21394_base.c
index 2ba576d..8339845 100644
--- a/cpi/vid21394/vid21394_base.c
+++ b/cpi/vid21394/vid21394_base.c
@@ -1333,7 +1333,7 @@ unicap_status_t vid21394_rs232_io( vid21394handle_t vid21394handle,
/* TRACE( "rs232io fcp: %08llx out_data_length: %d, in_data_length: %d\n", fcp, out_data_length, in_data_length ); */
- return( _vid21394_send_fcp_command_new( vid21394handle, fcp, bit, out_data, out_data_length, in_data, (unsigned int *)&in_data_length ) );
+ return( _vid21394_send_fcp_command_new( vid21394handle, fcp, bit, out_data, out_data_length, in_data, (size_t *)&in_data_length ) );
}
unicap_status_t vid21394_read_rs232( vid21394handle_t vid21394handle,
@@ -1629,7 +1629,6 @@ int vid21394_wait_buffer( vid21394handle_t vid21394handle, void **buffer )
*/
int vid21394_poll_buffer( vid21394handle_t vid21394handle )
{
- int buffers = 0;
/* unicap_queue_t *entry = &vid21394handle->ready_buffers; */
/* while( entry->next ) */
diff --git a/src/unicap_helpers.c b/src/unicap_helpers.c
index 67578ac..ae73f5a 100644
--- a/src/unicap_helpers.c
+++ b/src/unicap_helpers.c
@@ -292,7 +292,7 @@ unicap_status_t unicap_describe_property( unicap_property_t *property, char *buf
property->range.min,
property->range.max,
property->stepping,
- property->property_data_size );
+ (int) property->property_data_size );
strncpy( buffer, tmp_buffer, *buffer_size );

@ -0,0 +1,15 @@
diff --git a/cpi/v4l2cpi/v4l2.c b/cpi/v4l2cpi/v4l2.c
index a8e0c92..ec4c8db 100644
--- a/cpi/v4l2cpi/v4l2.c
+++ b/cpi/v4l2cpi/v4l2.c
@@ -1928,6 +1928,10 @@ static unicap_status_t v4l2_capture_start( void *cpi_data )
}
handle->buffer_mgr = buffer_mgr_create( handle->fd, &handle->current_format );
+ if( !handle->buffer_mgr )
+ {
+ return STATUS_FAILURE;
+ }
handle->capture_running = 1;

@ -0,0 +1,138 @@
include/unicap.h | 2 +-
src/unicap.c | 62 +++++++++++++++++++++++++++---------------------------
2 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/include/unicap.h b/include/unicap.h
index 43a3040..e516734 100644
--- a/include/unicap.h
+++ b/include/unicap.h
@@ -215,7 +215,7 @@ struct _unicap_data_buffer_t
unicap_buffer_flags_t flags;
- unicap_data_buffer_private_t *private;
+ unicap_data_buffer_private_t *priv;
};
typedef struct _unicap_data_buffer_t unicap_data_buffer_t;
diff --git a/src/unicap.c b/src/unicap.c
index f56c6f0..adac44d 100644
--- a/src/unicap.c
+++ b/src/unicap.c
@@ -1467,7 +1467,7 @@ unicap_data_buffer_t *unicap_data_buffer_new( unicap_format_t *format )
buffer->buffer_size = buffer->format.buffer_size;
buffer->data = malloc( buffer->buffer_size );
unicap_copy_format( &buffer->format, format );
- buffer->private = NULL;
+ buffer->priv = NULL;
return buffer;
}
@@ -1475,28 +1475,28 @@ unicap_data_buffer_t *unicap_data_buffer_new( unicap_format_t *format )
void unicap_data_buffer_init( unicap_data_buffer_t *buffer, unicap_format_t *format, unicap_data_buffer_init_data_t *init_data )
{
unicap_copy_format( &buffer->format, format );
- buffer->private = malloc( sizeof( unicap_data_buffer_private_t ) );
- sem_init( &buffer->private->lock, 0, 1 );
- buffer->private->ref_count = 0;
- buffer->private->free_func = init_data->free_func;
- buffer->private->free_func_data = init_data->free_func_data;
- buffer->private->ref_func = init_data->ref_func;
- buffer->private->ref_func_data = init_data->ref_func_data;
- buffer->private->unref_func = init_data->unref_func;
- buffer->private->unref_func_data = init_data->unref_func_data;
+ buffer->priv = malloc( sizeof( unicap_data_buffer_private_t ) );
+ sem_init( &buffer->priv->lock, 0, 1 );
+ buffer->priv->ref_count = 0;
+ buffer->priv->free_func = init_data->free_func;
+ buffer->priv->free_func_data = init_data->free_func_data;
+ buffer->priv->ref_func = init_data->ref_func;
+ buffer->priv->ref_func_data = init_data->ref_func_data;
+ buffer->priv->unref_func = init_data->unref_func;
+ buffer->priv->unref_func_data = init_data->unref_func_data;
}
void unicap_data_buffer_free( unicap_data_buffer_t *buffer )
{
- sem_wait( &buffer->private->lock );
- if( buffer->private->ref_count > 0 ){
- TRACE( "freeing a buffer with refcount = %d!!!\n", buffer->private.refcount );
+ sem_wait( &buffer->priv->lock );
+ if( buffer->priv->ref_count > 0 ){
+ TRACE( "freeing a buffer with refcount = %d!!!\n", buffer->priv.refcount );
}
- if( buffer->private->free_func ){
- buffer->private->free_func( buffer, buffer->private->free_func_data );
+ if( buffer->priv->free_func ){
+ buffer->priv->free_func( buffer, buffer->priv->free_func_data );
}
- sem_destroy( &buffer->private->lock );
+ sem_destroy( &buffer->priv->lock );
if (buffer->data)
free( buffer->data );
free( buffer );
@@ -1504,9 +1504,9 @@ void unicap_data_buffer_free( unicap_data_buffer_t *buffer )
unicap_status_t unicap_data_buffer_ref( unicap_data_buffer_t *buffer )
{
- sem_wait( &buffer->private->lock );
- buffer->private->ref_count++;
- sem_post( &buffer->private->lock );
+ sem_wait( &buffer->priv->lock );
+ buffer->priv->ref_count++;
+ sem_post( &buffer->priv->lock );
return STATUS_SUCCESS;
}
@@ -1514,14 +1514,14 @@ unicap_status_t unicap_data_buffer_ref( unicap_data_buffer_t *buffer )
unicap_status_t unicap_data_buffer_unref( unicap_data_buffer_t *buffer )
{
unicap_status_t status = STATUS_SUCCESS;
- sem_wait( &buffer->private->lock );
- if( buffer->private->ref_count > 0 ){
- buffer->private->ref_count--;
- if (buffer->private->unref_func){
- buffer->private->unref_func (buffer, buffer->private->unref_func_data);
+ sem_wait( &buffer->priv->lock );
+ if( buffer->priv->ref_count > 0 ){
+ buffer->priv->ref_count--;
+ if (buffer->priv->unref_func){
+ buffer->priv->unref_func (buffer, buffer->priv->unref_func_data);
}
- if (buffer->private->ref_count == 0 ){
- sem_post (&buffer->private->lock);
+ if (buffer->priv->ref_count == 0 ){
+ sem_post (&buffer->priv->lock);
unicap_data_buffer_free( buffer );
return STATUS_SUCCESS;
}
@@ -1529,23 +1529,23 @@ unicap_status_t unicap_data_buffer_unref( unicap_data_buffer_t *buffer )
TRACE( "unref of a buffer with refcount <= 0!" );
status = STATUS_FAILURE;
}
- sem_post (&buffer->private->lock);
+ sem_post (&buffer->priv->lock);
return status;
}
unsigned int unicap_data_buffer_get_refcount( unicap_data_buffer_t *buffer )
{
- return buffer->private->ref_count;
+ return buffer->priv->ref_count;
}
void *unicap_data_buffer_set_user_data( unicap_data_buffer_t *buffer, void *data )
{
- void *old_data = buffer->private->user_data;
- buffer->private->user_data = data;
+ void *old_data = buffer->priv->user_data;
+ buffer->priv->user_data = data;
return old_data;
}
void *unicap_data_buffer_get_user_data( unicap_data_buffer_t *buffer )
{
- return buffer->private->user_data;
+ return buffer->priv->user_data;
}

@ -0,0 +1,4 @@
#!/bin/sh
# The original script name has been passed as the first argument:
"$@" | sed -e '/^libdcam.so/d' -e '/^libv4l.so/d' -e '/^libv4l2cpi.so/d' -e '/^libvid21394.so/d'

@ -0,0 +1,245 @@
%define _use_internal_dependency_generator 0
%{expand:%%define prev__find_provides %{__find_provides}}
%define __find_provides sh %{SOURCE1} %{prev__find_provides}
%{expand:%%define prev__find_requires %{__find_requires}}
%define __find_requires sh %{SOURCE1} %{prev__find_requires}
Summary: Library to access different kinds of (video) capture devices
Name: libunicap
Version: 0.9.12
Release: 21%{?dist}
License: GPLv2+
Group: System Environment/Libraries
URL: http://www.unicap-imaging.org/
Source0: http://www.unicap-imaging.org/downloads/%{name}-%{version}.tar.gz
Source1: %{name}-filter.sh
Patch0: libunicap-0.9.12-includes.patch
Patch1: libunicap-0.9.12-memerrs.patch
Patch2: libunicap-0.9.12-arraycmp.patch
Patch3: libunicap-0.9.12-warnings.patch
Patch4: libunicap-bz641623.patch
Patch5: libunicap-bz642118.patch
Patch6: libunicap-0.9.12-videodev.patch
Patch7: libunicap-0.9.12-datadirname.patch
BuildRequires: intltool, /usr/bin/perl, perl(XML::Parser), gettext, gtk-doc >= 1.4
BuildRequires: glib2-devel >= 2.10.0
%ifnarch s390 s390x
BuildRequires: libraw1394-devel >= 1.1.0
%endif
%if 0%{?rhel}%{?fedora} >= 6
BuildRequires: libv4l-devel >= 0.8.3-1, libtool, automake, autoconf
%endif
%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7
BuildRequires: systemd
%endif
Obsoletes: unicap <= 0.9.7-1
%description
Unicap provides a uniform interface to video capture devices. It allows
applications to use any supported video capture device via a single API.
The unicap library offers a high level of hardware abstraction while
maintaining maximum performance. Zero copy capture of video buffers is
possible for devices supporting it allowing fast video capture with low
CPU usage even on low-speed architectures.
%package devel
Summary: Development files for the unicap library
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}, pkgconfig
Obsoletes: unicap-devel <= 0.9.7-1
%description devel
The libunicap-devel package includes header files and libraries necessary
for for developing programs which use the unicap library. It contains the
API documentation of the library, too.
%prep
%setup -q
%patch0 -p1 -b .includes
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%if 0%{?rhel}%{?fedora} >= 7
%patch6 -p1
%endif
%patch7 -p1
# Needed to get rid of rpath
%if 0%{?rhel}%{?fedora} >= 6
libtoolize --force
# fixes for gtk-doc 1.26
sed -i -e '/^DOC_SOURCE_DIR/s/--source-dir=//g' doc/libunicap/Makefile.am
gtkdocize --copy
autoreconf --force --install
%endif
%build
%if 0%{?rhel}%{?fedora} >= 6
%configure --disable-rpath --enable-gtk-doc --enable-libv4l
%else
%configure --disable-rpath --enable-gtk-doc
%endif
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
# Don't install any static .a and libtool .la files
rm -f $RPM_BUILD_ROOT%{_libdir}/{,unicap2/cpi/}*.{a,la}
# Use ATTRS rather SYSFS for udev where appropriate
%if 0%{?rhel}%{?fedora} >= 6
sed -e 's/\(SYSFS\|ATTRS\)/ATTRS/g' -i $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/50-euvccam.rules
%else
sed -e 's/\(SYSFS\|ATTRS\)/SYSFS/g' -i $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/50-euvccam.rules
%endif
touch -c -r {data,$RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d}/50-euvccam.rules
# Move udev rules file to appropriate rules directory
%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7
mkdir -p $RPM_BUILD_ROOT%{_udevrulesdir}/
mv -f $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/50-euvccam.rules $RPM_BUILD_ROOT%{_udevrulesdir}/
%endif
%find_lang unicap
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files -f unicap.lang
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING README
%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7
%{_udevrulesdir}/50-euvccam.rules
%else
%config %{_sysconfdir}/udev/rules.d/50-euvccam.rules
%endif
%{_libdir}/%{name}.so.*
%{_libdir}/unicap2
%files devel
%defattr(-,root,root,-)
%{_libdir}/%{name}.so
%{_libdir}/pkgconfig/%{name}.pc
%{_includedir}/unicap
%{_datadir}/gtk-doc/html/%{name}
%changelog
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.12-21
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.12-20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.12-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.12-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.12-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Sun May 31 2015 Robert Scheck <robert@fedoraproject.org> 0.9.12-15
- Added patch to avoid a /usr/@DATADIRNAME@/locale/ directory
- Use %%{_udevrulesdir} macro rather /etc/udev/rules.d/ (#1226681)
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Sun Oct 09 2011 Robert Scheck <robert@fedoraproject.org> 0.9.12-8
- Added a patch to use the libv4l1compat header (#676470, #716118)
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.12-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Tue Nov 02 2010 Kamil Dudka <kdudka@redhat.com> 0.9.12-6
- fix a crasher bug introduced by libunicap-0.9.12-memerrs.patch (#647880)
* Fri Oct 29 2010 Robert Scheck <robert@fedoraproject.org> 0.9.12-5
- Use ATTRS rather SYSFS for udev where appropriate (#643729)
* Tue Oct 12 2010 Kamil Dudka <kdudka@redhat.com> 0.9.12-4
- do not use "private" as identifier in a public header (#642118)
* Sat Oct 09 2010 Kamil Dudka <kdudka@redhat.com> 0.9.12-3
- avoid SIGSEGV in v4l2_capture_start() (#641623)
* Thu Oct 07 2010 Kamil Dudka <kdudka@redhat.com> 0.9.12-2
- build the package in %%build
- fix tons of compile-time warnings
- fix some memory errors in the code
* Mon Oct 04 2010 Robert Scheck <robert@fedoraproject.org> 0.9.12-1
- Upgrade to 0.9.12 (#635377)
* Sun Feb 21 2010 Robert Scheck <robert@fedoraproject.org> 0.9.8-1
- Upgrade to 0.9.8 (#530702, #567109, #567110, #567111)
- Splitting of unicap into libunicap, libucil and libunicapgtk
* Sat Oct 24 2009 Robert Scheck <robert@fedoraproject.org> 0.9.7-1
- Upgrade to 0.9.7 (#530702)
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Thu Jun 18 2009 Dan Horak <dan[at]danny.cz> 0.9.5-2
- don't require libraw1394 on s390/s390x
* Sun May 03 2009 Robert Scheck <robert@fedoraproject.org> 0.9.5-1
- Upgrade to 0.9.5
* Mon Feb 23 2009 Robert Scheck <robert@fedoraproject.org> 0.9.3-2
- Rebuild against gcc 4.4 and rpm 4.6
* Mon Oct 13 2008 Robert Scheck <robert@fedoraproject.org> 0.9.3-1
- Upgrade to 0.9.3 (#466825, thanks to Hans de Goede)
- Enabled libv4l support for the new gspca kernel driver
* Sat Aug 09 2008 Robert Scheck <robert@fedoraproject.org> 0.2.23-4
- Rebuild to get missing dependencies back (#443015, #458527)
* Tue Aug 05 2008 Robert Scheck <robert@fedoraproject.org> 0.2.23-3
- Filter the unicap plugins which overlap with libv4l libraries
* Wed Jul 22 2008 Robert Scheck <robert@fedoraproject.org> 0.2.23-2
- Rebuild for libraw1394 2.0.0
* Mon May 19 2008 Robert Scheck <robert@fedoraproject.org> 0.2.23-1
- Upgrade to 0.2.23
- Corrected packaging of cpi/*.so files (thanks to Arne Caspari)
* Sat May 17 2008 Robert Scheck <robert@fedoraproject.org> 0.2.22-1
- Upgrade to 0.2.22 (#446021)
* Sat Feb 16 2008 Robert Scheck <robert@fedoraproject.org> 0.2.19-3
- Added patch to correct libdir paths (thanks to Ralf Corsepius)
* Mon Feb 04 2008 Robert Scheck <robert@fedoraproject.org> 0.2.19-2
- Changes to match with Fedora Packaging Guidelines (#431381)
* Mon Feb 04 2008 Robert Scheck <robert@fedoraproject.org> 0.2.19-1
- Upgrade to 0.2.19
- Initial spec file for Fedora and Red Hat Enterprise Linux
Loading…
Cancel
Save