Staging: easycap: Replace some global variables
New members of struct easycap take the place of undesirable global variables. Signed-off-by: Mike Thomas <rmthomas@sciolus.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4d6ea9c322
commit
3d423e91b4
@@ -135,7 +135,7 @@
|
|||||||
#define USB_EASYCAP_VENDOR_ID 0x05e1
|
#define USB_EASYCAP_VENDOR_ID 0x05e1
|
||||||
#define USB_EASYCAP_PRODUCT_ID 0x0408
|
#define USB_EASYCAP_PRODUCT_ID 0x0408
|
||||||
|
|
||||||
#define EASYCAP_DRIVER_VERSION "0.8"
|
#define EASYCAP_DRIVER_VERSION "0.8.2"
|
||||||
#define EASYCAP_DRIVER_DESCRIPTION "easycapdc60"
|
#define EASYCAP_DRIVER_DESCRIPTION "easycapdc60"
|
||||||
|
|
||||||
#define USB_SKEL_MINOR_BASE 192
|
#define USB_SKEL_MINOR_BASE 192
|
||||||
@@ -188,6 +188,65 @@
|
|||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
#define AUDIO_FRAGMENT_MANY 32
|
#define AUDIO_FRAGMENT_MANY 32
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/*
|
||||||
|
* IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND,
|
||||||
|
* ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND.
|
||||||
|
* THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE. NOT
|
||||||
|
* ONLY MUST THE PARAMETER
|
||||||
|
* STANDARD_MANY
|
||||||
|
* BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE
|
||||||
|
* NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE: DUMMY STANDARDS
|
||||||
|
* MAY NEED TO BE ADDED. APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN
|
||||||
|
* ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE. BEWARE.
|
||||||
|
*/
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
#define PAL_BGHIN 0
|
||||||
|
#define PAL_Nc 2
|
||||||
|
#define SECAM 4
|
||||||
|
#define NTSC_N 6
|
||||||
|
#define NTSC_N_443 8
|
||||||
|
#define NTSC_M 1
|
||||||
|
#define NTSC_443 3
|
||||||
|
#define NTSC_M_JP 5
|
||||||
|
#define PAL_60 7
|
||||||
|
#define PAL_M 9
|
||||||
|
#define STANDARD_MANY 10
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/*
|
||||||
|
* ENUMS
|
||||||
|
*/
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
enum {
|
||||||
|
AT_720x576,
|
||||||
|
AT_704x576,
|
||||||
|
AT_640x480,
|
||||||
|
AT_720x480,
|
||||||
|
AT_360x288,
|
||||||
|
AT_320x240,
|
||||||
|
AT_360x240,
|
||||||
|
RESOLUTION_MANY
|
||||||
|
};
|
||||||
|
enum {
|
||||||
|
FMT_UYVY,
|
||||||
|
FMT_YUY2,
|
||||||
|
FMT_RGB24,
|
||||||
|
FMT_RGB32,
|
||||||
|
FMT_BGR24,
|
||||||
|
FMT_BGR32,
|
||||||
|
PIXELFORMAT_MANY
|
||||||
|
};
|
||||||
|
enum {
|
||||||
|
FIELD_NONE,
|
||||||
|
FIELD_INTERLACED,
|
||||||
|
FIELD_ALTERNATE,
|
||||||
|
INTERLACE_MANY
|
||||||
|
};
|
||||||
|
#define SETTINGS_MANY (STANDARD_MANY * \
|
||||||
|
RESOLUTION_MANY * \
|
||||||
|
2 * \
|
||||||
|
PIXELFORMAT_MANY * \
|
||||||
|
INTERLACE_MANY)
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
* STRUCTURE DEFINITIONS
|
* STRUCTURE DEFINITIONS
|
||||||
*/
|
*/
|
||||||
@@ -206,6 +265,16 @@ int isbuf;
|
|||||||
int length;
|
int length;
|
||||||
};
|
};
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
struct easycap_standard {
|
||||||
|
__u16 mask;
|
||||||
|
struct v4l2_standard v4l2_standard;
|
||||||
|
};
|
||||||
|
struct easycap_format {
|
||||||
|
__u16 mask;
|
||||||
|
char name[128];
|
||||||
|
struct v4l2_format v4l2_format;
|
||||||
|
};
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
* easycap.ilk == 0 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=256
|
* easycap.ilk == 0 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=256
|
||||||
* easycap.ilk == 2 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=9
|
* easycap.ilk == 2 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=9
|
||||||
@@ -213,6 +282,16 @@ int length;
|
|||||||
*/
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
struct easycap {
|
struct easycap {
|
||||||
|
unsigned int audio_pages_per_fragment;
|
||||||
|
unsigned int audio_bytes_per_fragment;
|
||||||
|
unsigned int audio_buffer_page_many;
|
||||||
|
|
||||||
|
#define UPSAMPLE
|
||||||
|
#if defined(UPSAMPLE)
|
||||||
|
__s16 oldaudio;
|
||||||
|
#endif /*UPSAMPLE*/
|
||||||
|
|
||||||
|
struct easycap_format easycap_format[1 + SETTINGS_MANY];
|
||||||
|
|
||||||
int ilk;
|
int ilk;
|
||||||
bool microphone;
|
bool microphone;
|
||||||
@@ -377,16 +456,6 @@ long long int audio_square;
|
|||||||
struct data_buffer audio_buffer[];
|
struct data_buffer audio_buffer[];
|
||||||
};
|
};
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
struct easycap_standard {
|
|
||||||
__u16 mask;
|
|
||||||
struct v4l2_standard v4l2_standard;
|
|
||||||
};
|
|
||||||
struct easycap_format {
|
|
||||||
__u16 mask;
|
|
||||||
char name[128];
|
|
||||||
struct v4l2_format v4l2_format;
|
|
||||||
};
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/*
|
/*
|
||||||
* VIDEO FUNCTION PROTOTYPES
|
* VIDEO FUNCTION PROTOTYPES
|
||||||
*/
|
*/
|
||||||
@@ -501,65 +570,6 @@ long long int quotient;
|
|||||||
unsigned long long int remainder;
|
unsigned long long int remainder;
|
||||||
} signed_div(long long int, long long int);
|
} signed_div(long long int, long long int);
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
|
||||||
* IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND,
|
|
||||||
* ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND.
|
|
||||||
* THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE. NOT
|
|
||||||
* ONLY MUST THE PARAMETER
|
|
||||||
* STANDARD_MANY
|
|
||||||
* BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE
|
|
||||||
* NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE: DUMMY STANDARDS
|
|
||||||
* MAY NEED TO BE ADDED. APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN
|
|
||||||
* ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE. BEWARE.
|
|
||||||
*/
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
#define PAL_BGHIN 0
|
|
||||||
#define PAL_Nc 2
|
|
||||||
#define SECAM 4
|
|
||||||
#define NTSC_N 6
|
|
||||||
#define NTSC_N_443 8
|
|
||||||
#define NTSC_M 1
|
|
||||||
#define NTSC_443 3
|
|
||||||
#define NTSC_M_JP 5
|
|
||||||
#define PAL_60 7
|
|
||||||
#define PAL_M 9
|
|
||||||
#define STANDARD_MANY 10
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/*
|
|
||||||
* ENUMS
|
|
||||||
*/
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
enum {
|
|
||||||
AT_720x576,
|
|
||||||
AT_704x576,
|
|
||||||
AT_640x480,
|
|
||||||
AT_720x480,
|
|
||||||
AT_360x288,
|
|
||||||
AT_320x240,
|
|
||||||
AT_360x240,
|
|
||||||
RESOLUTION_MANY
|
|
||||||
};
|
|
||||||
enum {
|
|
||||||
FMT_UYVY,
|
|
||||||
FMT_YUY2,
|
|
||||||
FMT_RGB24,
|
|
||||||
FMT_RGB32,
|
|
||||||
FMT_BGR24,
|
|
||||||
FMT_BGR32,
|
|
||||||
PIXELFORMAT_MANY
|
|
||||||
};
|
|
||||||
enum {
|
|
||||||
FIELD_NONE,
|
|
||||||
FIELD_INTERLACED,
|
|
||||||
FIELD_ALTERNATE,
|
|
||||||
INTERLACE_MANY
|
|
||||||
};
|
|
||||||
#define SETTINGS_MANY (STANDARD_MANY * \
|
|
||||||
RESOLUTION_MANY * \
|
|
||||||
2 * \
|
|
||||||
PIXELFORMAT_MANY * \
|
|
||||||
INTERLACE_MANY)
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/*
|
/*
|
||||||
* MACROS
|
* MACROS
|
||||||
*/
|
*/
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
int adjust_standard(struct easycap *peasycap, v4l2_std_id std_id)
|
int adjust_standard(struct easycap *peasycap, v4l2_std_id std_id)
|
||||||
{
|
{
|
||||||
struct easycap_standard *peasycap_standard;
|
struct easycap_standard const *peasycap_standard;
|
||||||
__u16 reg, set;
|
__u16 reg, set;
|
||||||
int ir, rc, need;
|
int ir, rc, need;
|
||||||
unsigned int itwas, isnow;
|
unsigned int itwas, isnow;
|
||||||
@@ -1447,7 +1447,7 @@ case VIDIOC_ENUMSTD: {
|
|||||||
static int last0 = -1, last1 = -1, last2 = -1, last3 = -1;
|
static int last0 = -1, last1 = -1, last2 = -1, last3 = -1;
|
||||||
static struct v4l2_standard v4l2_standard;
|
static struct v4l2_standard v4l2_standard;
|
||||||
static __u32 index;
|
static __u32 index;
|
||||||
static struct easycap_standard *peasycap_standard;
|
static struct easycap_standard const *peasycap_standard;
|
||||||
|
|
||||||
JOT(8, "VIDIOC_ENUMSTD\n");
|
JOT(8, "VIDIOC_ENUMSTD\n");
|
||||||
|
|
||||||
@@ -1479,11 +1479,12 @@ case VIDIOC_ENUMSTD: {
|
|||||||
}
|
}
|
||||||
JOT(8, "%i=index: %s\n", index, \
|
JOT(8, "%i=index: %s\n", index, \
|
||||||
&(peasycap_standard->v4l2_standard.name[0]));
|
&(peasycap_standard->v4l2_standard.name[0]));
|
||||||
peasycap_standard->v4l2_standard.index = index;
|
memcpy(&v4l2_standard, &(peasycap_standard->v4l2_standard), \
|
||||||
|
sizeof(struct v4l2_standard));
|
||||||
|
|
||||||
v4l2_standard.index = index;
|
v4l2_standard.index = index;
|
||||||
|
|
||||||
if (0 != copy_to_user((void __user *)arg, \
|
if (0 != copy_to_user((void __user *)arg, &v4l2_standard, \
|
||||||
&(peasycap_standard->v4l2_standard), \
|
|
||||||
sizeof(struct v4l2_standard))) {
|
sizeof(struct v4l2_standard))) {
|
||||||
POUT;
|
POUT;
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
@@ -1493,7 +1494,7 @@ case VIDIOC_ENUMSTD: {
|
|||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
case VIDIOC_G_STD: {
|
case VIDIOC_G_STD: {
|
||||||
static v4l2_std_id std_id;
|
static v4l2_std_id std_id;
|
||||||
static struct easycap_standard *peasycap_standard;
|
static struct easycap_standard const *peasycap_standard;
|
||||||
|
|
||||||
JOT(8, "VIDIOC_G_STD\n");
|
JOT(8, "VIDIOC_G_STD\n");
|
||||||
|
|
||||||
@@ -2094,7 +2095,7 @@ case SNDCTL_DSP_GETBLKSIZE: {
|
|||||||
if (0 != copy_from_user(&incoming, (void __user *)arg, sizeof(int)))
|
if (0 != copy_from_user(&incoming, (void __user *)arg, sizeof(int)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
JOT(8, "........... %i=incoming\n", incoming);
|
JOT(8, "........... %i=incoming\n", incoming);
|
||||||
incoming = audio_bytes_per_fragment;
|
incoming = peasycap->audio_bytes_per_fragment;
|
||||||
if (0 != copy_to_user((void __user *)arg, &incoming, sizeof(int)))
|
if (0 != copy_to_user((void __user *)arg, &incoming, sizeof(int)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
break;
|
break;
|
||||||
@@ -2104,7 +2105,7 @@ case SNDCTL_DSP_GETISPACE: {
|
|||||||
|
|
||||||
JOT(8, "SNDCTL_DSP_GETISPACE\n");
|
JOT(8, "SNDCTL_DSP_GETISPACE\n");
|
||||||
|
|
||||||
audio_buf_info.bytes = audio_bytes_per_fragment;
|
audio_buf_info.bytes = peasycap->audio_bytes_per_fragment;
|
||||||
audio_buf_info.fragments = 1;
|
audio_buf_info.fragments = 1;
|
||||||
audio_buf_info.fragsize = 0;
|
audio_buf_info.fragsize = 0;
|
||||||
audio_buf_info.fragstotal = 0;
|
audio_buf_info.fragstotal = 0;
|
||||||
|
@@ -26,4 +26,3 @@
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
extern struct easycap_format easycap_format[];
|
extern struct easycap_format easycap_format[];
|
||||||
extern struct v4l2_queryctrl easycap_control[];
|
extern struct v4l2_queryctrl easycap_control[];
|
||||||
extern unsigned int audio_bytes_per_fragment;
|
|
||||||
|
@@ -34,10 +34,6 @@
|
|||||||
int easycap_debug;
|
int easycap_debug;
|
||||||
module_param(easycap_debug, int, S_IRUGO | S_IWUSR);
|
module_param(easycap_debug, int, S_IRUGO | S_IWUSR);
|
||||||
|
|
||||||
unsigned int audio_pages_per_fragment;
|
|
||||||
unsigned int audio_bytes_per_fragment;
|
|
||||||
unsigned int audio_buffer_page_many;
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
* PARAMETERS APPLICABLE TO ENTIRE DRIVER, I.E. BOTH VIDEO AND AUDIO
|
* PARAMETERS APPLICABLE TO ENTIRE DRIVER, I.E. BOTH VIDEO AND AUDIO
|
||||||
@@ -86,7 +82,7 @@ struct usb_class_driver easycap_class = {
|
|||||||
/*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
|
/*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
|
||||||
#if defined(EASYCAP_IS_VIDEODEV_CLIENT)
|
#if defined(EASYCAP_IS_VIDEODEV_CLIENT)
|
||||||
#if defined(EASYCAP_NEEDS_V4L2_FOPS)
|
#if defined(EASYCAP_NEEDS_V4L2_FOPS)
|
||||||
struct v4l2_file_operations v4l2_fops = {
|
const struct v4l2_file_operations v4l2_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.open = easycap_open_noinode,
|
.open = easycap_open_noinode,
|
||||||
.release = easycap_release_noinode,
|
.release = easycap_release_noinode,
|
||||||
@@ -770,7 +766,7 @@ JOT(4, "easysnd_delete(): isoc audio buffers freed: %i pages\n", \
|
|||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
JOT(4, "freeing audio buffers.\n");
|
JOT(4, "freeing audio buffers.\n");
|
||||||
lost = 0;
|
lost = 0;
|
||||||
for (k = 0; k < audio_buffer_page_many; k++) {
|
for (k = 0; k < peasycap->audio_buffer_page_many; k++) {
|
||||||
if ((void *)NULL != peasycap->audio_buffer[k].pgo) {
|
if ((void *)NULL != peasycap->audio_buffer[k].pgo) {
|
||||||
free_page((unsigned long)(peasycap->audio_buffer[k].pgo));
|
free_page((unsigned long)(peasycap->audio_buffer[k].pgo));
|
||||||
peasycap->audio_buffer[k].pgo = (void *)NULL;
|
peasycap->audio_buffer[k].pgo = (void *)NULL;
|
||||||
@@ -3865,12 +3861,12 @@ case 2: {
|
|||||||
peasycap->ilk |= 0x02;
|
peasycap->ilk |= 0x02;
|
||||||
SAY("hardware is FOUR-CVBS\n");
|
SAY("hardware is FOUR-CVBS\n");
|
||||||
peasycap->microphone = true;
|
peasycap->microphone = true;
|
||||||
audio_pages_per_fragment = 2;
|
peasycap->audio_pages_per_fragment = 2;
|
||||||
} else if (256 == peasycap->audio_isoc_maxframesize) {
|
} else if (256 == peasycap->audio_isoc_maxframesize) {
|
||||||
peasycap->ilk &= ~0x02;
|
peasycap->ilk &= ~0x02;
|
||||||
SAY("hardware is CVBS+S-VIDEO\n");
|
SAY("hardware is CVBS+S-VIDEO\n");
|
||||||
peasycap->microphone = false;
|
peasycap->microphone = false;
|
||||||
audio_pages_per_fragment = 4;
|
peasycap->audio_pages_per_fragment = 4;
|
||||||
} else {
|
} else {
|
||||||
SAY("hardware is unidentified:\n");
|
SAY("hardware is unidentified:\n");
|
||||||
SAY("%i=audio_isoc_maxframesize\n", \
|
SAY("%i=audio_isoc_maxframesize\n", \
|
||||||
@@ -3878,17 +3874,19 @@ case 2: {
|
|||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_bytes_per_fragment = audio_pages_per_fragment * \
|
peasycap->audio_bytes_per_fragment = \
|
||||||
|
peasycap->audio_pages_per_fragment * \
|
||||||
PAGE_SIZE ;
|
PAGE_SIZE ;
|
||||||
audio_buffer_page_many = (AUDIO_FRAGMENT_MANY * \
|
peasycap->audio_buffer_page_many = (AUDIO_FRAGMENT_MANY * \
|
||||||
audio_pages_per_fragment);
|
peasycap->audio_pages_per_fragment);
|
||||||
|
|
||||||
JOT(4, "%6i=AUDIO_FRAGMENT_MANY\n", AUDIO_FRAGMENT_MANY);
|
JOT(4, "%6i=AUDIO_FRAGMENT_MANY\n", AUDIO_FRAGMENT_MANY);
|
||||||
JOT(4, "%6i=audio_pages_per_fragment\n", \
|
JOT(4, "%6i=audio_pages_per_fragment\n", \
|
||||||
audio_pages_per_fragment);
|
peasycap->audio_pages_per_fragment);
|
||||||
JOT(4, "%6i=audio_bytes_per_fragment\n", \
|
JOT(4, "%6i=audio_bytes_per_fragment\n", \
|
||||||
audio_bytes_per_fragment);
|
peasycap->audio_bytes_per_fragment);
|
||||||
JOT(4, "%6i=audio_buffer_page_many\n", audio_buffer_page_many);
|
JOT(4, "%6i=audio_buffer_page_many\n", \
|
||||||
|
peasycap->audio_buffer_page_many);
|
||||||
|
|
||||||
peasycap->audio_isoc_framesperdesc = 128;
|
peasycap->audio_isoc_framesperdesc = 128;
|
||||||
|
|
||||||
@@ -3946,9 +3944,10 @@ case 2: {
|
|||||||
peasycap->purb_audio_head = &(peasycap->urb_audio_head);
|
peasycap->purb_audio_head = &(peasycap->urb_audio_head);
|
||||||
|
|
||||||
JOT(4, "allocating an audio buffer\n");
|
JOT(4, "allocating an audio buffer\n");
|
||||||
JOT(4, ".... scattered over %i pages\n", audio_buffer_page_many);
|
JOT(4, ".... scattered over %i pages\n", \
|
||||||
|
peasycap->audio_buffer_page_many);
|
||||||
|
|
||||||
for (k = 0; k < audio_buffer_page_many; k++) {
|
for (k = 0; k < peasycap->audio_buffer_page_many; k++) {
|
||||||
if ((void *)NULL != peasycap->audio_buffer[k].pgo) {
|
if ((void *)NULL != peasycap->audio_buffer[k].pgo) {
|
||||||
SAY("ERROR: attempting to reallocate audio buffers\n");
|
SAY("ERROR: attempting to reallocate audio buffers\n");
|
||||||
} else {
|
} else {
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
* 1 => 30 fps
|
* 1 => 30 fps
|
||||||
*/
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
struct easycap_standard easycap_standard[] = {
|
const struct easycap_standard easycap_standard[] = {
|
||||||
{
|
{
|
||||||
.mask = 0x000F & PAL_BGHIN ,
|
.mask = 0x000F & PAL_BGHIN ,
|
||||||
.v4l2_standard = {
|
.v4l2_standard = {
|
||||||
|
@@ -327,7 +327,7 @@ for (i = 0; i < purb->number_of_packets; i++) {
|
|||||||
"more is negative\n");
|
"more is negative\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (audio_buffer_page_many <= \
|
if (peasycap->audio_buffer_page_many <= \
|
||||||
peasycap->audio_fill) {
|
peasycap->audio_fill) {
|
||||||
SAY("ERROR: bad " \
|
SAY("ERROR: bad " \
|
||||||
"peasycap->audio_fill\n");
|
"peasycap->audio_fill\n");
|
||||||
@@ -352,7 +352,8 @@ for (i = 0; i < purb->number_of_packets; i++) {
|
|||||||
paudio_buffer->pto = \
|
paudio_buffer->pto = \
|
||||||
paudio_buffer->pgo;
|
paudio_buffer->pgo;
|
||||||
(peasycap->audio_fill)++;
|
(peasycap->audio_fill)++;
|
||||||
if (audio_buffer_page_many <= \
|
if (peasycap->\
|
||||||
|
audio_buffer_page_many <= \
|
||||||
peasycap->audio_fill)
|
peasycap->audio_fill)
|
||||||
peasycap->audio_fill = 0;
|
peasycap->audio_fill = 0;
|
||||||
|
|
||||||
@@ -367,13 +368,16 @@ for (i = 0; i < purb->number_of_packets; i++) {
|
|||||||
paudio_buffer->pgo;
|
paudio_buffer->pgo;
|
||||||
|
|
||||||
if (!(peasycap->audio_fill % \
|
if (!(peasycap->audio_fill % \
|
||||||
|
peasycap->\
|
||||||
audio_pages_per_fragment)) {
|
audio_pages_per_fragment)) {
|
||||||
JOT(12, "wakeup call on wq_" \
|
JOT(12, "wakeup call on wq_" \
|
||||||
"audio, %i=frag reading %i" \
|
"audio, %i=frag reading %i" \
|
||||||
"=fragment fill\n", \
|
"=fragment fill\n", \
|
||||||
(peasycap->audio_read / \
|
(peasycap->audio_read / \
|
||||||
|
peasycap->\
|
||||||
audio_pages_per_fragment), \
|
audio_pages_per_fragment), \
|
||||||
(peasycap->audio_fill / \
|
(peasycap->audio_fill / \
|
||||||
|
peasycap->\
|
||||||
audio_pages_per_fragment));
|
audio_pages_per_fragment));
|
||||||
wake_up_interruptible\
|
wake_up_interruptible\
|
||||||
(&(peasycap->wq_audio));
|
(&(peasycap->wq_audio));
|
||||||
@@ -611,7 +615,7 @@ if (NULL == peasycap) {
|
|||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
if ((0 > peasycap->audio_read) || \
|
if ((0 > peasycap->audio_read) || \
|
||||||
(audio_buffer_page_many <= peasycap->audio_read)) {
|
(peasycap->audio_buffer_page_many <= peasycap->audio_read)) {
|
||||||
SAY("ERROR: peasycap->audio_read out of range\n");
|
SAY("ERROR: peasycap->audio_read out of range\n");
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
@@ -621,10 +625,11 @@ if ((struct data_buffer *)NULL == pdata_buffer) {
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
JOT(12, "before wait, %i=frag read %i=frag fill\n", \
|
JOT(12, "before wait, %i=frag read %i=frag fill\n", \
|
||||||
(peasycap->audio_read / audio_pages_per_fragment), \
|
(peasycap->audio_read / peasycap->audio_pages_per_fragment), \
|
||||||
(peasycap->audio_fill / audio_pages_per_fragment));
|
(peasycap->audio_fill / peasycap->audio_pages_per_fragment));
|
||||||
fragment = (peasycap->audio_read / audio_pages_per_fragment);
|
fragment = (peasycap->audio_read / peasycap->audio_pages_per_fragment);
|
||||||
while ((fragment == (peasycap->audio_fill / audio_pages_per_fragment)) || \
|
while ((fragment == (peasycap->audio_fill / \
|
||||||
|
peasycap->audio_pages_per_fragment)) || \
|
||||||
(0 == (PAGE_SIZE - (pdata_buffer->pto - pdata_buffer->pgo)))) {
|
(0 == (PAGE_SIZE - (pdata_buffer->pto - pdata_buffer->pgo)))) {
|
||||||
if (file->f_flags & O_NONBLOCK) {
|
if (file->f_flags & O_NONBLOCK) {
|
||||||
JOT(16, "returning -EAGAIN as instructed\n");
|
JOT(16, "returning -EAGAIN as instructed\n");
|
||||||
@@ -633,7 +638,7 @@ while ((fragment == (peasycap->audio_fill / audio_pages_per_fragment)) || \
|
|||||||
rc = wait_event_interruptible(peasycap->wq_audio, \
|
rc = wait_event_interruptible(peasycap->wq_audio, \
|
||||||
(peasycap->audio_idle || peasycap->audio_eof || \
|
(peasycap->audio_idle || peasycap->audio_eof || \
|
||||||
((fragment != (peasycap->audio_fill / \
|
((fragment != (peasycap->audio_fill / \
|
||||||
audio_pages_per_fragment)) && \
|
peasycap->audio_pages_per_fragment)) && \
|
||||||
(0 < (PAGE_SIZE - (pdata_buffer->pto - pdata_buffer->pgo))))));
|
(0 < (PAGE_SIZE - (pdata_buffer->pto - pdata_buffer->pgo))))));
|
||||||
if (0 != rc) {
|
if (0 != rc) {
|
||||||
SAY("aborted by signal\n");
|
SAY("aborted by signal\n");
|
||||||
@@ -657,10 +662,11 @@ while ((fragment == (peasycap->audio_fill / audio_pages_per_fragment)) || \
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
JOT(12, "after wait, %i=frag read %i=frag fill\n", \
|
JOT(12, "after wait, %i=frag read %i=frag fill\n", \
|
||||||
(peasycap->audio_read / audio_pages_per_fragment), \
|
(peasycap->audio_read / peasycap->audio_pages_per_fragment), \
|
||||||
(peasycap->audio_fill / audio_pages_per_fragment));
|
(peasycap->audio_fill / peasycap->audio_pages_per_fragment));
|
||||||
szret = (size_t)0;
|
szret = (size_t)0;
|
||||||
while (fragment == (peasycap->audio_read / audio_pages_per_fragment)) {
|
while (fragment == (peasycap->audio_read / \
|
||||||
|
peasycap->audio_pages_per_fragment)) {
|
||||||
if (NULL == pdata_buffer->pgo) {
|
if (NULL == pdata_buffer->pgo) {
|
||||||
SAY("ERROR: pdata_buffer->pgo is NULL\n");
|
SAY("ERROR: pdata_buffer->pgo is NULL\n");
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
@@ -676,17 +682,18 @@ while (fragment == (peasycap->audio_read / audio_pages_per_fragment)) {
|
|||||||
}
|
}
|
||||||
if (!kount1) {
|
if (!kount1) {
|
||||||
(peasycap->audio_read)++;
|
(peasycap->audio_read)++;
|
||||||
if (audio_buffer_page_many <= peasycap->audio_read)
|
if (peasycap->audio_buffer_page_many <= peasycap->audio_read)
|
||||||
peasycap->audio_read = 0;
|
peasycap->audio_read = 0;
|
||||||
JOT(12, "bumped peasycap->audio_read to %i\n", \
|
JOT(12, "bumped peasycap->audio_read to %i\n", \
|
||||||
peasycap->audio_read);
|
peasycap->audio_read);
|
||||||
|
|
||||||
if (fragment != (peasycap->audio_read / \
|
if (fragment != (peasycap->audio_read / \
|
||||||
audio_pages_per_fragment))
|
peasycap->audio_pages_per_fragment))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((0 > peasycap->audio_read) || \
|
if ((0 > peasycap->audio_read) || \
|
||||||
(audio_buffer_page_many <= peasycap->audio_read)) {
|
(peasycap->audio_buffer_page_many <= \
|
||||||
|
peasycap->audio_read)) {
|
||||||
SAY("ERROR: peasycap->audio_read out of range\n");
|
SAY("ERROR: peasycap->audio_read out of range\n");
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
@@ -738,8 +745,8 @@ while (fragment == (peasycap->audio_read / audio_pages_per_fragment)) {
|
|||||||
kount -= (size_t)more;
|
kount -= (size_t)more;
|
||||||
}
|
}
|
||||||
JOT(12, "after read, %i=frag read %i=frag fill\n", \
|
JOT(12, "after read, %i=frag read %i=frag fill\n", \
|
||||||
(peasycap->audio_read / audio_pages_per_fragment), \
|
(peasycap->audio_read / peasycap->audio_pages_per_fragment), \
|
||||||
(peasycap->audio_fill / audio_pages_per_fragment));
|
(peasycap->audio_fill / peasycap->audio_pages_per_fragment));
|
||||||
if (kount < 0) {
|
if (kount < 0) {
|
||||||
SAY("MISTAKE: %li=kount %li=szret\n", \
|
SAY("MISTAKE: %li=kount %li=szret\n", \
|
||||||
(long int)kount, (long int)szret);
|
(long int)kount, (long int)szret);
|
||||||
|
@@ -26,5 +26,3 @@
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
extern struct easycap *peasycap;
|
extern struct easycap *peasycap;
|
||||||
extern struct usb_driver easycap_usb_driver;
|
extern struct usb_driver easycap_usb_driver;
|
||||||
extern unsigned int audio_buffer_page_many;
|
|
||||||
extern unsigned int audio_pages_per_fragment;
|
|
||||||
|
Reference in New Issue
Block a user