staging/easycap: Remove obsolete routines
The so-called bridger routine has proved unnecessary following general improvements elsewhere. The explain_() functions were a convenience during early development, but are unnecessary and inappropriate now. 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
050afc92ee
commit
ce36cedab3
@@ -42,12 +42,6 @@
|
||||
#if (!defined(EASYCAP_H))
|
||||
#define EASYCAP_H
|
||||
|
||||
#if defined(EASYCAP_DEBUG)
|
||||
#if (9 < EASYCAP_DEBUG)
|
||||
#error Debug levels 0 to 9 are okay.\
|
||||
To achieve higher levels, remove this trap manually from easycap.h
|
||||
#endif
|
||||
#endif /*EASYCAP_DEBUG*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* THESE ARE FOR MAINTENANCE ONLY - NORMALLY UNDEFINED:
|
||||
@@ -56,21 +50,9 @@
|
||||
#undef PREFER_NTSC
|
||||
#undef EASYCAP_TESTCARD
|
||||
#undef EASYCAP_TESTTONE
|
||||
#undef LOCKFRAME
|
||||
#undef NOREADBACK
|
||||
#undef AUDIOTIME
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
*
|
||||
* DEFINE BRIDGER TO ACTIVATE THE ROUTINE FOR BRIDGING VIDEOTAPE DROPOUTS.
|
||||
*
|
||||
* *** UNDER DEVELOPMENT/TESTING - NOT READY YET!***
|
||||
*
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
#undef BRIDGER
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
@@ -135,7 +117,7 @@
|
||||
#define USB_EASYCAP_VENDOR_ID 0x05e1
|
||||
#define USB_EASYCAP_PRODUCT_ID 0x0408
|
||||
|
||||
#define EASYCAP_DRIVER_VERSION "0.8.21"
|
||||
#define EASYCAP_DRIVER_VERSION "0.8.41"
|
||||
#define EASYCAP_DRIVER_DESCRIPTION "easycapdc60"
|
||||
|
||||
#define USB_SKEL_MINOR_BASE 192
|
||||
@@ -291,8 +273,6 @@ unsigned int audio_buffer_page_many;
|
||||
__s16 oldaudio;
|
||||
#endif /*UPSAMPLE*/
|
||||
|
||||
struct easycap_format easycap_format[1 + SETTINGS_MANY];
|
||||
|
||||
int ilk;
|
||||
bool microphone;
|
||||
|
||||
@@ -307,10 +287,6 @@ struct usb_interface *pusb_interface;
|
||||
|
||||
struct kref kref;
|
||||
|
||||
struct mutex mutex_mmap_video[FRAME_BUFFER_MANY];
|
||||
struct mutex mutex_timeval0;
|
||||
struct mutex mutex_timeval1;
|
||||
|
||||
int queued[FRAME_BUFFER_MANY];
|
||||
int done[FRAME_BUFFER_MANY];
|
||||
|
||||
@@ -347,8 +323,6 @@ int video_idle;
|
||||
int video_eof;
|
||||
int video_junk;
|
||||
|
||||
int fudge;
|
||||
|
||||
struct data_buffer video_isoc_buffer[VIDEO_ISOC_BUFFER_MANY];
|
||||
struct data_buffer \
|
||||
field_buffer[FIELD_BUFFER_MANY][(FIELD_BUFFER_SIZE/PAGE_SIZE)];
|
||||
@@ -489,11 +463,7 @@ int kill_video_urbs(struct easycap *);
|
||||
int field2frame(struct easycap *);
|
||||
int redaub(struct easycap *, void *, void *, \
|
||||
int, int, __u8, __u8, bool);
|
||||
void debrief(struct easycap *);
|
||||
void sayreadonly(struct easycap *);
|
||||
void easycap_testcard(struct easycap *, int);
|
||||
int explain_ioctl(__u32);
|
||||
int explain_cid(__u32);
|
||||
int fillin_formats(void);
|
||||
int adjust_standard(struct easycap *, v4l2_std_id);
|
||||
int adjust_format(struct easycap *, __u32, __u32, __u32, \
|
||||
@@ -595,7 +565,7 @@ unsigned long long int remainder;
|
||||
|
||||
#if defined(EASYCAP_DEBUG)
|
||||
#define JOT(n, format, args...) do { \
|
||||
if (n <= easycap_debug) { \
|
||||
if (n <= debug) { \
|
||||
printk(KERN_DEBUG "easycap: %s: " format, __func__, ##args); \
|
||||
} \
|
||||
} while (0)
|
||||
@@ -603,8 +573,6 @@ unsigned long long int remainder;
|
||||
#define JOT(n, format, args...) do {} while (0)
|
||||
#endif /*EASYCAP_DEBUG*/
|
||||
|
||||
#define POUT JOT(8, ":-(in file %s line %4i\n", __FILE__, __LINE__)
|
||||
|
||||
#define MICROSECONDS(X, Y) \
|
||||
((1000000*((long long int)(X.tv_sec - Y.tv_sec))) + \
|
||||
(long long int)(X.tv_usec - Y.tv_usec))
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
* *
|
||||
* easycap_debug.h *
|
||||
* debug.h *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
/*
|
||||
@@ -24,4 +24,4 @@
|
||||
*
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
extern int easycap_debug;
|
||||
extern int debug;
|
||||
|
@@ -857,10 +857,8 @@ case VIDIOC_QUERYCAP: {
|
||||
&v4l2_capability.bus_info[0]);
|
||||
}
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_capability, \
|
||||
sizeof(struct v4l2_capability))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_capability)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -871,10 +869,8 @@ case VIDIOC_ENUMINPUT: {
|
||||
JOT(8, "VIDIOC_ENUMINPUT\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_input, (void __user *)arg, \
|
||||
sizeof(struct v4l2_input))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_input)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
index = v4l2_input.index;
|
||||
memset(&v4l2_input, 0, sizeof(struct v4l2_input));
|
||||
@@ -959,10 +955,8 @@ case VIDIOC_ENUMINPUT: {
|
||||
}
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_input, \
|
||||
sizeof(struct v4l2_input))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_input)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -972,10 +966,8 @@ case VIDIOC_G_INPUT: {
|
||||
JOT(8, "VIDIOC_G_INPUT\n");
|
||||
index = (__u32)peasycap->input;
|
||||
JOT(8, "user is told: %i\n", index);
|
||||
if (0 != copy_to_user((void __user *)arg, &index, sizeof(__u32))) {
|
||||
POUT;
|
||||
if (0 != copy_to_user((void __user *)arg, &index, sizeof(__u32)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -985,10 +977,8 @@ case VIDIOC_S_INPUT:
|
||||
|
||||
JOT(8, "VIDIOC_S_INPUT\n");
|
||||
|
||||
if (0 != copy_from_user(&index, (void __user *)arg, sizeof(__u32))) {
|
||||
POUT;
|
||||
if (0 != copy_from_user(&index, (void __user *)arg, sizeof(__u32)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
JOT(8, "user requests input %i\n", index);
|
||||
|
||||
@@ -1019,10 +1009,8 @@ case VIDIOC_ENUMAUDOUT: {
|
||||
JOT(8, "VIDIOC_ENUMAUDOUT\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_audioout, (void __user *)arg, \
|
||||
sizeof(struct v4l2_audioout))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_audioout)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (0 != v4l2_audioout.index)
|
||||
return -EINVAL;
|
||||
@@ -1031,10 +1019,8 @@ case VIDIOC_ENUMAUDOUT: {
|
||||
strcpy(&v4l2_audioout.name[0], "Soundtrack");
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_audioout, \
|
||||
sizeof(struct v4l2_audioout))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_audioout)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1045,10 +1031,8 @@ case VIDIOC_QUERYCTRL: {
|
||||
JOT(8, "VIDIOC_QUERYCTRL\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_queryctrl, (void __user *)arg, \
|
||||
sizeof(struct v4l2_queryctrl))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_queryctrl)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
i1 = 0;
|
||||
while (0xFFFFFFFF != easycap_control[i1].id) {
|
||||
@@ -1066,10 +1050,8 @@ case VIDIOC_QUERYCTRL: {
|
||||
return -EINVAL;
|
||||
}
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_queryctrl, \
|
||||
sizeof(struct v4l2_queryctrl))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_queryctrl)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1085,10 +1067,8 @@ case VIDIOC_G_CTRL: {
|
||||
JOT(8, "VIDIOC_G_CTRL\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_control, (void __user *)arg, \
|
||||
sizeof(struct v4l2_control))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_control)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
switch (v4l2_control.id) {
|
||||
case V4L2_CID_BRIGHTNESS: {
|
||||
@@ -1127,15 +1107,12 @@ case VIDIOC_G_CTRL: {
|
||||
default: {
|
||||
SAY("ERROR: unknown V4L2 control: 0x%08X=id\n", \
|
||||
v4l2_control.id);
|
||||
explain_cid(v4l2_control.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_control, \
|
||||
sizeof(struct v4l2_control))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_control)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1151,10 +1128,8 @@ case VIDIOC_S_CTRL:
|
||||
JOT(8, "VIDIOC_S_CTRL\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_control, (void __user *)arg, \
|
||||
sizeof(struct v4l2_control))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_control)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
switch (v4l2_control.id) {
|
||||
case V4L2_CID_BRIGHTNESS: {
|
||||
@@ -1203,10 +1178,9 @@ case VIDIOC_S_CTRL:
|
||||
default: {
|
||||
SAY("ERROR: unknown V4L2 control: 0x%08X=id\n", \
|
||||
v4l2_control.id);
|
||||
explain_cid(v4l2_control.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1222,10 +1196,8 @@ case VIDIOC_ENUM_FMT: {
|
||||
JOT(8, "VIDIOC_ENUM_FMT\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_fmtdesc, (void __user *)arg, \
|
||||
sizeof(struct v4l2_fmtdesc))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_fmtdesc)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
index = v4l2_fmtdesc.index;
|
||||
memset(&v4l2_fmtdesc, 0, sizeof(struct v4l2_fmtdesc));
|
||||
@@ -1282,10 +1254,8 @@ case VIDIOC_ENUM_FMT: {
|
||||
}
|
||||
}
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_fmtdesc, \
|
||||
sizeof(struct v4l2_fmtdesc))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_fmtdesc)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1305,15 +1275,11 @@ case VIDIOC_G_FMT: {
|
||||
JOT(8, "VIDIOC_G_FMT\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_format, (void __user *)arg, \
|
||||
sizeof(struct v4l2_format))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_format)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_format.type != V4L2_BUF_TYPE_VIDEO_CAPTURE) {
|
||||
POUT;
|
||||
if (v4l2_format.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(&v4l2_pix_format, 0, sizeof(struct v4l2_pix_format));
|
||||
v4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
@@ -1324,10 +1290,8 @@ case VIDIOC_G_FMT: {
|
||||
&easycap_format[peasycap->format_offset].name[0]);
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_format, \
|
||||
sizeof(struct v4l2_format))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_format)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1347,10 +1311,8 @@ case VIDIOC_S_FMT: {
|
||||
}
|
||||
|
||||
if (0 != copy_from_user(&v4l2_format, (void __user *)arg, \
|
||||
sizeof(struct v4l2_format))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_format)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
best_format = adjust_format(peasycap, \
|
||||
v4l2_format.fmt.pix.width, \
|
||||
@@ -1371,10 +1333,8 @@ case VIDIOC_S_FMT: {
|
||||
JOT(8, "user is told: %s\n", &easycap_format[best_format].name[0]);
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_format, \
|
||||
sizeof(struct v4l2_format))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_format)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1384,10 +1344,8 @@ case VIDIOC_CROPCAP: {
|
||||
JOT(8, "VIDIOC_CROPCAP\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_cropcap, (void __user *)arg, \
|
||||
sizeof(struct v4l2_cropcap))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_cropcap)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_cropcap.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
JOT(8, "v4l2_cropcap.type != V4L2_BUF_TYPE_VIDEO_CAPTURE\n");
|
||||
@@ -1408,10 +1366,8 @@ case VIDIOC_CROPCAP: {
|
||||
JOT(8, "user is told: %ix%i\n", peasycap->width, peasycap->height);
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_cropcap, \
|
||||
sizeof(struct v4l2_cropcap))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_cropcap)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1444,10 +1400,8 @@ case VIDIOC_ENUMSTD: {
|
||||
JOT(8, "VIDIOC_ENUMSTD\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_standard, (void __user *)arg, \
|
||||
sizeof(struct v4l2_standard))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_standard)))
|
||||
return -EFAULT;
|
||||
}
|
||||
index = v4l2_standard.index;
|
||||
|
||||
last3 = last2; last2 = last1; last1 = last0; last0 = index;
|
||||
@@ -1477,10 +1431,8 @@ case VIDIOC_ENUMSTD: {
|
||||
v4l2_standard.index = index;
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_standard, \
|
||||
sizeof(struct v4l2_standard))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_standard)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1491,10 +1443,8 @@ case VIDIOC_G_STD: {
|
||||
JOT(8, "VIDIOC_G_STD\n");
|
||||
|
||||
if (0 != copy_from_user(&std_id, (void __user *)arg, \
|
||||
sizeof(v4l2_std_id))) {
|
||||
POUT;
|
||||
sizeof(v4l2_std_id)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
peasycap_standard = &easycap_standard[peasycap->standard_offset];
|
||||
std_id = peasycap_standard->v4l2_standard.id;
|
||||
@@ -1503,10 +1453,8 @@ case VIDIOC_G_STD: {
|
||||
&peasycap_standard->v4l2_standard.name[0]);
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &std_id, \
|
||||
sizeof(v4l2_std_id))) {
|
||||
POUT;
|
||||
sizeof(v4l2_std_id)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1517,10 +1465,8 @@ case VIDIOC_S_STD: {
|
||||
JOT(8, "VIDIOC_S_STD\n");
|
||||
|
||||
if (0 != copy_from_user(&std_id, (void __user *)arg, \
|
||||
sizeof(v4l2_std_id))) {
|
||||
POUT;
|
||||
sizeof(v4l2_std_id)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
rc = adjust_standard(peasycap, std_id);
|
||||
if (0 > rc) {
|
||||
@@ -1537,17 +1483,13 @@ case VIDIOC_REQBUFS: {
|
||||
JOT(8, "VIDIOC_REQBUFS\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_requestbuffers, (void __user *)arg, \
|
||||
sizeof(struct v4l2_requestbuffers))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_requestbuffers)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_requestbuffers.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
if (v4l2_requestbuffers.memory != V4L2_MEMORY_MMAP) {
|
||||
POUT;
|
||||
if (v4l2_requestbuffers.memory != V4L2_MEMORY_MMAP)
|
||||
return -EINVAL;
|
||||
}
|
||||
nbuffers = v4l2_requestbuffers.count;
|
||||
JOT(8, " User requests %i buffers ...\n", nbuffers);
|
||||
if (nbuffers < 2)
|
||||
@@ -1565,10 +1507,8 @@ case VIDIOC_REQBUFS: {
|
||||
peasycap->frame_buffer_many = nbuffers;
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_requestbuffers, \
|
||||
sizeof(struct v4l2_requestbuffers))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_requestbuffers)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1585,10 +1525,8 @@ case VIDIOC_QUERYBUF: {
|
||||
}
|
||||
|
||||
if (0 != copy_from_user(&v4l2_buffer, (void __user *)arg, \
|
||||
sizeof(struct v4l2_buffer))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_buffer)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_buffer.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
@@ -1620,10 +1558,8 @@ case VIDIOC_QUERYBUF: {
|
||||
JOT(16, " %10i=length\n", v4l2_buffer.length);
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_buffer, \
|
||||
sizeof(struct v4l2_buffer))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_buffer)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1633,10 +1569,8 @@ case VIDIOC_QBUF: {
|
||||
JOT(8, "VIDIOC_QBUF\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_buffer, (void __user *)arg, \
|
||||
sizeof(struct v4l2_buffer))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_buffer)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_buffer.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
@@ -1651,10 +1585,8 @@ case VIDIOC_QBUF: {
|
||||
peasycap->queued[v4l2_buffer.index] = V4L2_BUF_FLAG_QUEUED;
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_buffer, \
|
||||
sizeof(struct v4l2_buffer))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_buffer)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
JOT(8, "..... user queueing frame buffer %i\n", \
|
||||
(int)v4l2_buffer.index);
|
||||
@@ -1687,10 +1619,8 @@ case VIDIOC_DQBUF:
|
||||
}
|
||||
|
||||
if (0 != copy_from_user(&v4l2_buffer, (void __user *)arg, \
|
||||
sizeof(struct v4l2_buffer))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_buffer)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_buffer.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
@@ -1752,17 +1682,10 @@ case VIDIOC_DQBUF:
|
||||
timeval1 = timeval;
|
||||
timeval2 = timeval;
|
||||
dnbydt = 192000;
|
||||
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_timeval0)))
|
||||
return -ERESTARTSYS;
|
||||
peasycap->timeval0 = timeval0;
|
||||
mutex_unlock(&(peasycap->mutex_timeval0));
|
||||
} else {
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_timeval1)))
|
||||
return -ERESTARTSYS;
|
||||
dnbydt = peasycap->dnbydt;
|
||||
timeval1 = peasycap->timeval1;
|
||||
mutex_unlock(&(peasycap->mutex_timeval1));
|
||||
above = dnbydt * MICROSECONDS(timeval, timeval1);
|
||||
below = 192000;
|
||||
sdr = signed_div(above, below);
|
||||
@@ -1807,10 +1730,8 @@ case VIDIOC_DQBUF:
|
||||
JOT(16, " %10i=length\n", v4l2_buffer.length);
|
||||
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_buffer, \
|
||||
sizeof(struct v4l2_buffer))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_buffer)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
JOT(8, "..... user is offered frame buffer %i\n", \
|
||||
peasycap->frame_read);
|
||||
@@ -1879,15 +1800,11 @@ case VIDIOC_G_PARM: {
|
||||
JOT(8, "VIDIOC_G_PARM\n");
|
||||
|
||||
if (0 != copy_from_user(&v4l2_streamparm, (void __user *)arg, \
|
||||
sizeof(struct v4l2_streamparm))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_streamparm)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (v4l2_streamparm.type != V4L2_BUF_TYPE_VIDEO_CAPTURE) {
|
||||
POUT;
|
||||
if (v4l2_streamparm.type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
}
|
||||
v4l2_streamparm.parm.capture.capability = 0;
|
||||
v4l2_streamparm.parm.capture.capturemode = 0;
|
||||
v4l2_streamparm.parm.capture.timeperframe.numerator = 1;
|
||||
@@ -1895,10 +1812,8 @@ case VIDIOC_G_PARM: {
|
||||
v4l2_streamparm.parm.capture.readbuffers = peasycap->frame_buffer_many;
|
||||
v4l2_streamparm.parm.capture.extendedmode = 0;
|
||||
if (0 != copy_to_user((void __user *)arg, &v4l2_streamparm, \
|
||||
sizeof(struct v4l2_streamparm))) {
|
||||
POUT;
|
||||
sizeof(struct v4l2_streamparm)))
|
||||
return -EFAULT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
@@ -1941,8 +1856,6 @@ case VIDIOC_S_FREQUENCY: {
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
default: {
|
||||
JOT(8, "ERROR: unrecognized V4L2 IOCTL command: 0x%08X\n", cmd);
|
||||
explain_ioctl(cmd);
|
||||
POUT;
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
}
|
||||
@@ -2147,7 +2060,6 @@ case SNDCTL_DSP_GETISPACE: {
|
||||
}
|
||||
default: {
|
||||
JOT(8, "ERROR: unrecognized DSP IOCTL command: 0x%08X\n", cmd);
|
||||
POUT;
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
}
|
||||
@@ -2165,531 +2077,4 @@ long easysnd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int explain_ioctl(__u32 wot)
|
||||
{
|
||||
int k;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* THE DATA FOR THE ARRAY mess BELOW WERE CONSTRUCTED BY RUNNING THE FOLLOWING
|
||||
* SHELL SCRIPT:
|
||||
* #
|
||||
* cat /usr/src/linux-headers-`uname -r`/include/linux/videodev2.h | \
|
||||
* grep "^#define VIDIOC_" - | grep -v "_OLD" - | \
|
||||
* sed -e "s,_IO.*$,,;p" | sed -e "N;s,\n,, " | \
|
||||
* sed -e "s/^#define / {/;s/#define /, \"/;s/$/\"},/" | \
|
||||
* sed -e "s, ,,g;s, ,,g" >ioctl.tmp
|
||||
* echo "{0xFFFFFFFF,\"\"}" >>ioctl.tmp
|
||||
* exit 0
|
||||
* #
|
||||
* AND REINSTATING THE EXCISED "_OLD" CASES WERE LATER MANUALLY.
|
||||
*
|
||||
* THE DATA FOR THE ARRAY mess1 BELOW WERE CONSTRUCTED BY RUNNING THE FOLLOWING
|
||||
* SHELL SCRIPT:
|
||||
* cat /usr/src/linux-headers-`uname -r`/include/linux/videodev.h | \
|
||||
* grep "^#define VIDIOC" - | grep -v "_OLD" - | \
|
||||
* sed -e "s,_IO.*$,,;p" | sed -e "N;s,\n,, " | \
|
||||
* sed -e "s/^#define / {/;s/#define /, \"/;s/$/\"},/" | \
|
||||
* sed -e "s, ,,g;s, ,,g" >ioctl.tmp
|
||||
* echo "{0xFFFFFFFF,\"\"}" >>ioctl.tmp
|
||||
* exit 0
|
||||
* #
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static struct mess {
|
||||
__u32 command;
|
||||
char name[64];
|
||||
} mess[] = {
|
||||
#if defined(VIDIOC_QUERYCAP)
|
||||
{VIDIOC_QUERYCAP, "VIDIOC_QUERYCAP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_RESERVED)
|
||||
{VIDIOC_RESERVED, "VIDIOC_RESERVED"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUM_FMT)
|
||||
{VIDIOC_ENUM_FMT, "VIDIOC_ENUM_FMT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_FMT)
|
||||
{VIDIOC_G_FMT, "VIDIOC_G_FMT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_FMT)
|
||||
{VIDIOC_S_FMT, "VIDIOC_S_FMT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_REQBUFS)
|
||||
{VIDIOC_REQBUFS, "VIDIOC_REQBUFS"},
|
||||
#endif
|
||||
#if defined(VIDIOC_QUERYBUF)
|
||||
{VIDIOC_QUERYBUF, "VIDIOC_QUERYBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_FBUF)
|
||||
{VIDIOC_G_FBUF, "VIDIOC_G_FBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_FBUF)
|
||||
{VIDIOC_S_FBUF, "VIDIOC_S_FBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOC_OVERLAY)
|
||||
{VIDIOC_OVERLAY, "VIDIOC_OVERLAY"},
|
||||
#endif
|
||||
#if defined(VIDIOC_QBUF)
|
||||
{VIDIOC_QBUF, "VIDIOC_QBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOC_DQBUF)
|
||||
{VIDIOC_DQBUF, "VIDIOC_DQBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOC_STREAMON)
|
||||
{VIDIOC_STREAMON, "VIDIOC_STREAMON"},
|
||||
#endif
|
||||
#if defined(VIDIOC_STREAMOFF)
|
||||
{VIDIOC_STREAMOFF, "VIDIOC_STREAMOFF"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_PARM)
|
||||
{VIDIOC_G_PARM, "VIDIOC_G_PARM"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_PARM)
|
||||
{VIDIOC_S_PARM, "VIDIOC_S_PARM"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_STD)
|
||||
{VIDIOC_G_STD, "VIDIOC_G_STD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_STD)
|
||||
{VIDIOC_S_STD, "VIDIOC_S_STD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUMSTD)
|
||||
{VIDIOC_ENUMSTD, "VIDIOC_ENUMSTD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUMINPUT)
|
||||
{VIDIOC_ENUMINPUT, "VIDIOC_ENUMINPUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_CTRL)
|
||||
{VIDIOC_G_CTRL, "VIDIOC_G_CTRL"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_CTRL)
|
||||
{VIDIOC_S_CTRL, "VIDIOC_S_CTRL"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_TUNER)
|
||||
{VIDIOC_G_TUNER, "VIDIOC_G_TUNER"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_TUNER)
|
||||
{VIDIOC_S_TUNER, "VIDIOC_S_TUNER"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_AUDIO)
|
||||
{VIDIOC_G_AUDIO, "VIDIOC_G_AUDIO"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_AUDIO)
|
||||
{VIDIOC_S_AUDIO, "VIDIOC_S_AUDIO"},
|
||||
#endif
|
||||
#if defined(VIDIOC_QUERYCTRL)
|
||||
{VIDIOC_QUERYCTRL, "VIDIOC_QUERYCTRL"},
|
||||
#endif
|
||||
#if defined(VIDIOC_QUERYMENU)
|
||||
{VIDIOC_QUERYMENU, "VIDIOC_QUERYMENU"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_INPUT)
|
||||
{VIDIOC_G_INPUT, "VIDIOC_G_INPUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_INPUT)
|
||||
{VIDIOC_S_INPUT, "VIDIOC_S_INPUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_OUTPUT)
|
||||
{VIDIOC_G_OUTPUT, "VIDIOC_G_OUTPUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_OUTPUT)
|
||||
{VIDIOC_S_OUTPUT, "VIDIOC_S_OUTPUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUMOUTPUT)
|
||||
{VIDIOC_ENUMOUTPUT, "VIDIOC_ENUMOUTPUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_AUDOUT)
|
||||
{VIDIOC_G_AUDOUT, "VIDIOC_G_AUDOUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_AUDOUT)
|
||||
{VIDIOC_S_AUDOUT, "VIDIOC_S_AUDOUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_MODULATOR)
|
||||
{VIDIOC_G_MODULATOR, "VIDIOC_G_MODULATOR"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_MODULATOR)
|
||||
{VIDIOC_S_MODULATOR, "VIDIOC_S_MODULATOR"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_FREQUENCY)
|
||||
{VIDIOC_G_FREQUENCY, "VIDIOC_G_FREQUENCY"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_FREQUENCY)
|
||||
{VIDIOC_S_FREQUENCY, "VIDIOC_S_FREQUENCY"},
|
||||
#endif
|
||||
#if defined(VIDIOC_CROPCAP)
|
||||
{VIDIOC_CROPCAP, "VIDIOC_CROPCAP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_CROP)
|
||||
{VIDIOC_G_CROP, "VIDIOC_G_CROP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_CROP)
|
||||
{VIDIOC_S_CROP, "VIDIOC_S_CROP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_JPEGCOMP)
|
||||
{VIDIOC_G_JPEGCOMP, "VIDIOC_G_JPEGCOMP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_JPEGCOMP)
|
||||
{VIDIOC_S_JPEGCOMP, "VIDIOC_S_JPEGCOMP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_QUERYSTD)
|
||||
{VIDIOC_QUERYSTD, "VIDIOC_QUERYSTD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_TRY_FMT)
|
||||
{VIDIOC_TRY_FMT, "VIDIOC_TRY_FMT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUMAUDIO)
|
||||
{VIDIOC_ENUMAUDIO, "VIDIOC_ENUMAUDIO"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUMAUDOUT)
|
||||
{VIDIOC_ENUMAUDOUT, "VIDIOC_ENUMAUDOUT"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_PRIORITY)
|
||||
{VIDIOC_G_PRIORITY, "VIDIOC_G_PRIORITY"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_PRIORITY)
|
||||
{VIDIOC_S_PRIORITY, "VIDIOC_S_PRIORITY"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_SLICED_VBI_CAP)
|
||||
{VIDIOC_G_SLICED_VBI_CAP, "VIDIOC_G_SLICED_VBI_CAP"},
|
||||
#endif
|
||||
#if defined(VIDIOC_LOG_STATUS)
|
||||
{VIDIOC_LOG_STATUS, "VIDIOC_LOG_STATUS"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_EXT_CTRLS)
|
||||
{VIDIOC_G_EXT_CTRLS, "VIDIOC_G_EXT_CTRLS"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_EXT_CTRLS)
|
||||
{VIDIOC_S_EXT_CTRLS, "VIDIOC_S_EXT_CTRLS"},
|
||||
#endif
|
||||
#if defined(VIDIOC_TRY_EXT_CTRLS)
|
||||
{VIDIOC_TRY_EXT_CTRLS, "VIDIOC_TRY_EXT_CTRLS"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUM_FRAMESIZES)
|
||||
{VIDIOC_ENUM_FRAMESIZES, "VIDIOC_ENUM_FRAMESIZES"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENUM_FRAMEINTERVALS)
|
||||
{VIDIOC_ENUM_FRAMEINTERVALS, "VIDIOC_ENUM_FRAMEINTERVALS"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_ENC_INDEX)
|
||||
{VIDIOC_G_ENC_INDEX, "VIDIOC_G_ENC_INDEX"},
|
||||
#endif
|
||||
#if defined(VIDIOC_ENCODER_CMD)
|
||||
{VIDIOC_ENCODER_CMD, "VIDIOC_ENCODER_CMD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_TRY_ENCODER_CMD)
|
||||
{VIDIOC_TRY_ENCODER_CMD, "VIDIOC_TRY_ENCODER_CMD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_CHIP_IDENT)
|
||||
{VIDIOC_G_CHIP_IDENT, "VIDIOC_G_CHIP_IDENT"},
|
||||
#endif
|
||||
|
||||
#if defined(VIDIOC_OVERLAY_OLD)
|
||||
{VIDIOC_OVERLAY_OLD, "VIDIOC_OVERLAY_OLD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_PARM_OLD)
|
||||
{VIDIOC_S_PARM_OLD, "VIDIOC_S_PARM_OLD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_S_CTRL_OLD)
|
||||
{VIDIOC_S_CTRL_OLD, "VIDIOC_S_CTRL_OLD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_AUDIO_OLD)
|
||||
{VIDIOC_G_AUDIO_OLD, "VIDIOC_G_AUDIO_OLD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_G_AUDOUT_OLD)
|
||||
{VIDIOC_G_AUDOUT_OLD, "VIDIOC_G_AUDOUT_OLD"},
|
||||
#endif
|
||||
#if defined(VIDIOC_CROPCAP_OLD)
|
||||
{VIDIOC_CROPCAP_OLD, "VIDIOC_CROPCAP_OLD"},
|
||||
#endif
|
||||
{0xFFFFFFFF, ""}
|
||||
};
|
||||
|
||||
static struct mess mess1[] = \
|
||||
{
|
||||
#if defined(VIDIOCGCAP)
|
||||
{VIDIOCGCAP, "VIDIOCGCAP"},
|
||||
#endif
|
||||
#if defined(VIDIOCGCHAN)
|
||||
{VIDIOCGCHAN, "VIDIOCGCHAN"},
|
||||
#endif
|
||||
#if defined(VIDIOCSCHAN)
|
||||
{VIDIOCSCHAN, "VIDIOCSCHAN"},
|
||||
#endif
|
||||
#if defined(VIDIOCGTUNER)
|
||||
{VIDIOCGTUNER, "VIDIOCGTUNER"},
|
||||
#endif
|
||||
#if defined(VIDIOCSTUNER)
|
||||
{VIDIOCSTUNER, "VIDIOCSTUNER"},
|
||||
#endif
|
||||
#if defined(VIDIOCGPICT)
|
||||
{VIDIOCGPICT, "VIDIOCGPICT"},
|
||||
#endif
|
||||
#if defined(VIDIOCSPICT)
|
||||
{VIDIOCSPICT, "VIDIOCSPICT"},
|
||||
#endif
|
||||
#if defined(VIDIOCCAPTURE)
|
||||
{VIDIOCCAPTURE, "VIDIOCCAPTURE"},
|
||||
#endif
|
||||
#if defined(VIDIOCGWIN)
|
||||
{VIDIOCGWIN, "VIDIOCGWIN"},
|
||||
#endif
|
||||
#if defined(VIDIOCSWIN)
|
||||
{VIDIOCSWIN, "VIDIOCSWIN"},
|
||||
#endif
|
||||
#if defined(VIDIOCGFBUF)
|
||||
{VIDIOCGFBUF, "VIDIOCGFBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOCSFBUF)
|
||||
{VIDIOCSFBUF, "VIDIOCSFBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOCKEY)
|
||||
{VIDIOCKEY, "VIDIOCKEY"},
|
||||
#endif
|
||||
#if defined(VIDIOCGFREQ)
|
||||
{VIDIOCGFREQ, "VIDIOCGFREQ"},
|
||||
#endif
|
||||
#if defined(VIDIOCSFREQ)
|
||||
{VIDIOCSFREQ, "VIDIOCSFREQ"},
|
||||
#endif
|
||||
#if defined(VIDIOCGAUDIO)
|
||||
{VIDIOCGAUDIO, "VIDIOCGAUDIO"},
|
||||
#endif
|
||||
#if defined(VIDIOCSAUDIO)
|
||||
{VIDIOCSAUDIO, "VIDIOCSAUDIO"},
|
||||
#endif
|
||||
#if defined(VIDIOCSYNC)
|
||||
{VIDIOCSYNC, "VIDIOCSYNC"},
|
||||
#endif
|
||||
#if defined(VIDIOCMCAPTURE)
|
||||
{VIDIOCMCAPTURE, "VIDIOCMCAPTURE"},
|
||||
#endif
|
||||
#if defined(VIDIOCGMBUF)
|
||||
{VIDIOCGMBUF, "VIDIOCGMBUF"},
|
||||
#endif
|
||||
#if defined(VIDIOCGUNIT)
|
||||
{VIDIOCGUNIT, "VIDIOCGUNIT"},
|
||||
#endif
|
||||
#if defined(VIDIOCGCAPTURE)
|
||||
{VIDIOCGCAPTURE, "VIDIOCGCAPTURE"},
|
||||
#endif
|
||||
#if defined(VIDIOCSCAPTURE)
|
||||
{VIDIOCSCAPTURE, "VIDIOCSCAPTURE"},
|
||||
#endif
|
||||
#if defined(VIDIOCSPLAYMODE)
|
||||
{VIDIOCSPLAYMODE, "VIDIOCSPLAYMODE"},
|
||||
#endif
|
||||
#if defined(VIDIOCSWRITEMODE)
|
||||
{VIDIOCSWRITEMODE, "VIDIOCSWRITEMODE"},
|
||||
#endif
|
||||
#if defined(VIDIOCGPLAYINFO)
|
||||
{VIDIOCGPLAYINFO, "VIDIOCGPLAYINFO"},
|
||||
#endif
|
||||
#if defined(VIDIOCSMICROCODE)
|
||||
{VIDIOCSMICROCODE, "VIDIOCSMICROCODE"},
|
||||
#endif
|
||||
{0xFFFFFFFF, ""}
|
||||
};
|
||||
|
||||
k = 0;
|
||||
while (mess[k].name[0]) {
|
||||
if (wot == mess[k].command) {
|
||||
JOT(8, "ioctl 0x%08X is %s\n", \
|
||||
mess[k].command, &mess[k].name[0]);
|
||||
return 0;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
JOT(8, "ioctl 0x%08X is not in videodev2.h\n", wot);
|
||||
|
||||
k = 0;
|
||||
while (mess1[k].name[0]) {
|
||||
if (wot == mess1[k].command) {
|
||||
JOT(8, "ioctl 0x%08X is %s (V4L1)\n", \
|
||||
mess1[k].command, &mess1[k].name[0]);
|
||||
return 0;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
JOT(8, "ioctl 0x%08X is not in videodev.h\n", wot);
|
||||
return -1;
|
||||
}
|
||||
/*****************************************************************************/
|
||||
int explain_cid(__u32 wot)
|
||||
{
|
||||
int k;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* THE DATA FOR THE ARRAY mess BELOW WERE CONSTRUCTED BY RUNNING THE FOLLOWING
|
||||
* SHELL SCRIPT:
|
||||
* #
|
||||
* cat /usr/src/linux-headers-`uname -r`/include/linux/videodev2.h | \
|
||||
* grep "^#define V4L2_CID_" | \
|
||||
* sed -e "s,(.*$,,;p" | sed -e "N;s,\n,, " | \
|
||||
* sed -e "s/^#define / {/;s/#define /, \"/;s/$/\"},/" | \
|
||||
* sed -e "s, ,,g;s, ,,g" | grep -v "_BASE" | grep -v "MPEG" >cid.tmp
|
||||
* echo "{0xFFFFFFFF,\"\"}" >>cid.tmp
|
||||
* exit 0
|
||||
* #
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static struct mess
|
||||
{
|
||||
__u32 command;
|
||||
char name[64];
|
||||
} mess[] = {
|
||||
#if defined(V4L2_CID_USER_CLASS)
|
||||
{V4L2_CID_USER_CLASS, "V4L2_CID_USER_CLASS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_BRIGHTNESS)
|
||||
{V4L2_CID_BRIGHTNESS, "V4L2_CID_BRIGHTNESS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_CONTRAST)
|
||||
{V4L2_CID_CONTRAST, "V4L2_CID_CONTRAST"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_SATURATION)
|
||||
{V4L2_CID_SATURATION, "V4L2_CID_SATURATION"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_HUE)
|
||||
{V4L2_CID_HUE, "V4L2_CID_HUE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUDIO_VOLUME)
|
||||
{V4L2_CID_AUDIO_VOLUME, "V4L2_CID_AUDIO_VOLUME"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUDIO_BALANCE)
|
||||
{V4L2_CID_AUDIO_BALANCE, "V4L2_CID_AUDIO_BALANCE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUDIO_BASS)
|
||||
{V4L2_CID_AUDIO_BASS, "V4L2_CID_AUDIO_BASS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUDIO_TREBLE)
|
||||
{V4L2_CID_AUDIO_TREBLE, "V4L2_CID_AUDIO_TREBLE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUDIO_MUTE)
|
||||
{V4L2_CID_AUDIO_MUTE, "V4L2_CID_AUDIO_MUTE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUDIO_LOUDNESS)
|
||||
{V4L2_CID_AUDIO_LOUDNESS, "V4L2_CID_AUDIO_LOUDNESS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_BLACK_LEVEL)
|
||||
{V4L2_CID_BLACK_LEVEL, "V4L2_CID_BLACK_LEVEL"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUTO_WHITE_BALANCE)
|
||||
{V4L2_CID_AUTO_WHITE_BALANCE, "V4L2_CID_AUTO_WHITE_BALANCE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_DO_WHITE_BALANCE)
|
||||
{V4L2_CID_DO_WHITE_BALANCE, "V4L2_CID_DO_WHITE_BALANCE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_RED_BALANCE)
|
||||
{V4L2_CID_RED_BALANCE, "V4L2_CID_RED_BALANCE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_BLUE_BALANCE)
|
||||
{V4L2_CID_BLUE_BALANCE, "V4L2_CID_BLUE_BALANCE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_GAMMA)
|
||||
{V4L2_CID_GAMMA, "V4L2_CID_GAMMA"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_WHITENESS)
|
||||
{V4L2_CID_WHITENESS, "V4L2_CID_WHITENESS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_EXPOSURE)
|
||||
{V4L2_CID_EXPOSURE, "V4L2_CID_EXPOSURE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_AUTOGAIN)
|
||||
{V4L2_CID_AUTOGAIN, "V4L2_CID_AUTOGAIN"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_GAIN)
|
||||
{V4L2_CID_GAIN, "V4L2_CID_GAIN"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_HFLIP)
|
||||
{V4L2_CID_HFLIP, "V4L2_CID_HFLIP"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_VFLIP)
|
||||
{V4L2_CID_VFLIP, "V4L2_CID_VFLIP"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_HCENTER)
|
||||
{V4L2_CID_HCENTER, "V4L2_CID_HCENTER"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_VCENTER)
|
||||
{V4L2_CID_VCENTER, "V4L2_CID_VCENTER"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_POWER_LINE_FREQUENCY)
|
||||
{V4L2_CID_POWER_LINE_FREQUENCY, "V4L2_CID_POWER_LINE_FREQUENCY"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_HUE_AUTO)
|
||||
{V4L2_CID_HUE_AUTO, "V4L2_CID_HUE_AUTO"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_WHITE_BALANCE_TEMPERATURE)
|
||||
{V4L2_CID_WHITE_BALANCE_TEMPERATURE, "V4L2_CID_WHITE_BALANCE_TEMPERATURE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_SHARPNESS)
|
||||
{V4L2_CID_SHARPNESS, "V4L2_CID_SHARPNESS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_BACKLIGHT_COMPENSATION)
|
||||
{V4L2_CID_BACKLIGHT_COMPENSATION, "V4L2_CID_BACKLIGHT_COMPENSATION"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_CHROMA_AGC)
|
||||
{V4L2_CID_CHROMA_AGC, "V4L2_CID_CHROMA_AGC"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_COLOR_KILLER)
|
||||
{V4L2_CID_COLOR_KILLER, "V4L2_CID_COLOR_KILLER"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_LASTP1)
|
||||
{V4L2_CID_LASTP1, "V4L2_CID_LASTP1"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_CAMERA_CLASS)
|
||||
{V4L2_CID_CAMERA_CLASS, "V4L2_CID_CAMERA_CLASS"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_EXPOSURE_AUTO)
|
||||
{V4L2_CID_EXPOSURE_AUTO, "V4L2_CID_EXPOSURE_AUTO"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_EXPOSURE_ABSOLUTE)
|
||||
{V4L2_CID_EXPOSURE_ABSOLUTE, "V4L2_CID_EXPOSURE_ABSOLUTE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_EXPOSURE_AUTO_PRIORITY)
|
||||
{V4L2_CID_EXPOSURE_AUTO_PRIORITY, "V4L2_CID_EXPOSURE_AUTO_PRIORITY"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_PAN_RELATIVE)
|
||||
{V4L2_CID_PAN_RELATIVE, "V4L2_CID_PAN_RELATIVE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_TILT_RELATIVE)
|
||||
{V4L2_CID_TILT_RELATIVE, "V4L2_CID_TILT_RELATIVE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_PAN_RESET)
|
||||
{V4L2_CID_PAN_RESET, "V4L2_CID_PAN_RESET"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_TILT_RESET)
|
||||
{V4L2_CID_TILT_RESET, "V4L2_CID_TILT_RESET"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_PAN_ABSOLUTE)
|
||||
{V4L2_CID_PAN_ABSOLUTE, "V4L2_CID_PAN_ABSOLUTE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_TILT_ABSOLUTE)
|
||||
{V4L2_CID_TILT_ABSOLUTE, "V4L2_CID_TILT_ABSOLUTE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_FOCUS_ABSOLUTE)
|
||||
{V4L2_CID_FOCUS_ABSOLUTE, "V4L2_CID_FOCUS_ABSOLUTE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_FOCUS_RELATIVE)
|
||||
{V4L2_CID_FOCUS_RELATIVE, "V4L2_CID_FOCUS_RELATIVE"},
|
||||
#endif
|
||||
#if defined(V4L2_CID_FOCUS_AUTO)
|
||||
{V4L2_CID_FOCUS_AUTO, "V4L2_CID_FOCUS_AUTO"},
|
||||
#endif
|
||||
{0xFFFFFFFF, ""}
|
||||
};
|
||||
|
||||
k = 0;
|
||||
while (mess[k].name[0]) {
|
||||
if (wot == mess[k].command) {
|
||||
JOT(8, "ioctl 0x%08X is %s\n", \
|
||||
mess[k].command, &mess[k].name[0]);
|
||||
return 0;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
JOT(8, "cid 0x%08X is not in videodev2.h\n", wot);
|
||||
return -1;
|
||||
}
|
||||
/*****************************************************************************/
|
||||
|
@@ -64,45 +64,22 @@ const struct stk1160config { int reg; int set; } stk1160config[256] = {
|
||||
|
||||
#if defined(PREFER_NTSC)
|
||||
|
||||
#undef OLDMARGIN
|
||||
#if defined(OLDMARGIN)
|
||||
{0x110, 0x0008},
|
||||
#else
|
||||
{0x110, 0x0014},
|
||||
#endif /*OLDMARGIN*/
|
||||
|
||||
{0x111, 0x0000},
|
||||
{0x112, 0x0003},
|
||||
{0x113, 0x0000},
|
||||
|
||||
#if defined(OLDMARGIN)
|
||||
{0x114, 0x0508},
|
||||
#else
|
||||
{0x114, 0x0514},
|
||||
#endif /*OLDMARGIN*/
|
||||
|
||||
{0x115, 0x0005},
|
||||
{0x116, 0x00F3},
|
||||
{0x117, 0x0000},
|
||||
|
||||
#else /* ! PREFER_NTSC*/
|
||||
|
||||
#if defined(OLDMARGIN)
|
||||
{0x110, 0x0008},
|
||||
#else
|
||||
{0x110, 0x0014},
|
||||
#endif /*OLDMARGIN*/
|
||||
|
||||
{0x111, 0x0000},
|
||||
{0x112, 0x0020},
|
||||
{0x113, 0x0000},
|
||||
|
||||
#if defined(OLDMARGIN)
|
||||
{0x114, 0x0508},
|
||||
#else
|
||||
{0x114, 0x0514},
|
||||
#endif /*OLDMARGIN*/
|
||||
|
||||
{0x115, 0x0005},
|
||||
{0x116, 0x0110},
|
||||
{0x117, 0x0001},
|
||||
|
@@ -31,8 +31,8 @@
|
||||
#include "easycap.h"
|
||||
#include "easycap_standard.h"
|
||||
|
||||
int easycap_debug;
|
||||
module_param(easycap_debug, int, S_IRUGO | S_IWUSR);
|
||||
int debug;
|
||||
module_param(debug, int, S_IRUGO | S_IWUSR);
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
@@ -314,8 +314,6 @@ peasycap->audio_eof = 0;
|
||||
|
||||
do_gettimeofday(&peasycap->timeval7);
|
||||
|
||||
peasycap->fudge = 0;
|
||||
|
||||
JOT(4, "finished initialization\n");
|
||||
return 0;
|
||||
}
|
||||
@@ -855,15 +853,11 @@ if (NULL == peasycap) {
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
miss = 0;
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_mmap_video[0])))
|
||||
return -ERESTARTSYS;
|
||||
while ((peasycap->field_read == peasycap->field_fill) || \
|
||||
(0 != (0xFF00 & peasycap->field_buffer\
|
||||
[peasycap->field_read][0].kount)) || \
|
||||
(0 != (0x00FF & peasycap->field_buffer\
|
||||
[peasycap->field_read][0].kount))) {
|
||||
mutex_unlock(&(peasycap->mutex_mmap_video[0]));
|
||||
|
||||
if (mode)
|
||||
return -EAGAIN;
|
||||
|
||||
@@ -888,15 +882,11 @@ while ((peasycap->field_read == peasycap->field_fill) || \
|
||||
}
|
||||
if (peasycap->video_eof) {
|
||||
JOT(8, "%i=peasycap->video_eof\n", peasycap->video_eof);
|
||||
debrief(peasycap);
|
||||
kill_video_urbs(peasycap);
|
||||
return -EIO;
|
||||
}
|
||||
miss++;
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_mmap_video[0])))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
mutex_unlock(&(peasycap->mutex_mmap_video[0]));
|
||||
JOT(8, "first awakening on wq_video after %i waits\n", miss);
|
||||
|
||||
rc = field2frame(peasycap);
|
||||
@@ -925,15 +915,11 @@ JOT(8, "bumped to: %i=peasycap->frame_fill\n", peasycap->frame_fill);
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
miss = 0;
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_mmap_video[0])))
|
||||
return -ERESTARTSYS;
|
||||
while ((peasycap->field_read == peasycap->field_fill) || \
|
||||
(0 != (0xFF00 & peasycap->field_buffer\
|
||||
[peasycap->field_read][0].kount)) || \
|
||||
(0 == (0x00FF & peasycap->field_buffer\
|
||||
[peasycap->field_read][0].kount))) {
|
||||
mutex_unlock(&(peasycap->mutex_mmap_video[0]));
|
||||
|
||||
if (mode)
|
||||
return -EAGAIN;
|
||||
|
||||
@@ -957,15 +943,11 @@ while ((peasycap->field_read == peasycap->field_fill) || \
|
||||
}
|
||||
if (peasycap->video_eof) {
|
||||
JOT(8, "%i=peasycap->video_eof\n", peasycap->video_eof);
|
||||
debrief(peasycap);
|
||||
kill_video_urbs(peasycap);
|
||||
return -EIO;
|
||||
}
|
||||
miss++;
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_mmap_video[0])))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
mutex_unlock(&(peasycap->mutex_mmap_video[0]));
|
||||
JOT(8, "second awakening on wq_video after %i waits\n", miss);
|
||||
|
||||
rc = field2frame(peasycap);
|
||||
@@ -2233,41 +2215,6 @@ default: {
|
||||
return 0;
|
||||
}
|
||||
/*****************************************************************************/
|
||||
void
|
||||
debrief(struct easycap *peasycap)
|
||||
{
|
||||
if ((struct usb_device *)NULL != peasycap->pusb_device) {
|
||||
check_stk(peasycap->pusb_device);
|
||||
check_saa(peasycap->pusb_device);
|
||||
sayreadonly(peasycap);
|
||||
SAY("%i=peasycap->field_fill\n", peasycap->field_fill);
|
||||
SAY("%i=peasycap->field_read\n", peasycap->field_read);
|
||||
SAY("%i=peasycap->frame_fill\n", peasycap->frame_fill);
|
||||
SAY("%i=peasycap->frame_read\n", peasycap->frame_read);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*****************************************************************************/
|
||||
void
|
||||
sayreadonly(struct easycap *peasycap)
|
||||
{
|
||||
static int done;
|
||||
int got00, got1F, got60, got61, got62;
|
||||
|
||||
if ((!done) && ((struct usb_device *)NULL != peasycap->pusb_device)) {
|
||||
done = 1;
|
||||
got00 = read_saa(peasycap->pusb_device, 0x00);
|
||||
got1F = read_saa(peasycap->pusb_device, 0x1F);
|
||||
got60 = read_saa(peasycap->pusb_device, 0x60);
|
||||
got61 = read_saa(peasycap->pusb_device, 0x61);
|
||||
got62 = read_saa(peasycap->pusb_device, 0x62);
|
||||
SAY("0x%02X=reg0x00 0x%02X=reg0x1F\n", got00, got1F);
|
||||
SAY("0x%02X=reg0x60 0x%02X=reg0x61 0x%02X=reg0x62\n", \
|
||||
got60, got61, got62);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*****************************************************************************/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* SEE CORBET ET AL. "LINUX DEVICE DRIVERS", 3rd EDITION, PAGES 430-434
|
||||
@@ -2355,7 +2302,6 @@ if (NULL == peasycap) {
|
||||
SAY("ERROR: peasycap is NULL\n");
|
||||
return retcode;
|
||||
}
|
||||
mutex_lock(&(peasycap->mutex_mmap_video[0]));
|
||||
/*---------------------------------------------------------------------------*/
|
||||
pbuf = peasycap->frame_buffer[k][m].pgo;
|
||||
if (NULL == pbuf) {
|
||||
@@ -2370,7 +2316,6 @@ if (NULL == page) {
|
||||
get_page(page);
|
||||
/*---------------------------------------------------------------------------*/
|
||||
finish:
|
||||
mutex_unlock(&(peasycap->mutex_mmap_video[0]));
|
||||
if (NULL == page) {
|
||||
SAY("ERROR: page is NULL after get_page(page)\n");
|
||||
} else {
|
||||
@@ -2383,7 +2328,7 @@ return retcode;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* ON COMPLETION OF A VIDEO URB ITS DATA IS COPIED TO THE FIELD BUFFERS
|
||||
* PROVIDED peasycap->video_idle IS ZER0. REGARDLESS OF THIS BEING TRUE,
|
||||
* PROVIDED peasycap->video_idle IS ZERO. REGARDLESS OF THIS BEING TRUE,
|
||||
* IT IS RESUBMITTED PROVIDED peasycap->video_isoc_streaming IS NOT ZERO.
|
||||
*
|
||||
* THIS FUNCTION IS AN INTERRUPT SERVICE ROUTINE AND MUST NOT SLEEP.
|
||||
@@ -2400,7 +2345,7 @@ return retcode;
|
||||
* 0 != (kount & 0x8000) => AT LEAST ONE URB COMPLETED WITH ERRORS
|
||||
* 0 != (kount & 0x4000) => BUFFER HAS TOO MUCH DATA
|
||||
* 0 != (kount & 0x2000) => BUFFER HAS NOT ENOUGH DATA
|
||||
* 0 != (kount & 0x0400) => FIELD WAS SUBMITTED BY BRIDGER ROUTINE
|
||||
* 0 != (kount & 0x0400) => RESERVED
|
||||
* 0 != (kount & 0x0200) => FIELD BUFFER NOT YET CHECKED
|
||||
* 0 != (kount & 0x0100) => BUFFER HAS TWO EXTRA BYTES - WHY?
|
||||
*/
|
||||
@@ -2417,10 +2362,6 @@ int videofieldamount;
|
||||
unsigned int override;
|
||||
int framestatus, framelength, frameactual, frameoffset;
|
||||
__u8 *pu;
|
||||
#if defined(BRIDGER)
|
||||
struct timeval timeval;
|
||||
long long usec;
|
||||
#endif /*BRIDGER*/
|
||||
|
||||
if (NULL == purb) {
|
||||
SAY("ERROR: easycap_complete(): purb is NULL\n");
|
||||
@@ -2864,55 +2805,6 @@ if (purb->status) {
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
*
|
||||
*
|
||||
* *** UNDER DEVELOPMENT/TESTING - NOT READY YET! ***
|
||||
*
|
||||
*
|
||||
*
|
||||
* VIDEOTAPES MAY HAVE BEEN MANUALLY PAUSED AND RESTARTED DURING RECORDING.
|
||||
* THIS CAUSES LOSS OF SYNC, CONFUSING DOWNSTREAM USERSPACE PROGRAMS WHICH
|
||||
* MAY INTERPRET THE INTERRUPTION AS A SYMPTOM OF LATENCY. TO OVERCOME THIS
|
||||
* THE DRIVER BRIDGES THE HIATUS BY SENDING DUMMY VIDEO FRAMES AT ROUGHLY
|
||||
* THE RIGHT TIME INTERVALS IN THE HOPE OF PERSUADING THE DOWNSTREAM USERSPACE
|
||||
* PROGRAM TO RESUME NORMAL SERVICE WHEN THE INTERRUPTION IS OVER.
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
#if defined(BRIDGER)
|
||||
do_gettimeofday(&timeval);
|
||||
if (peasycap->timeval7.tv_sec) {
|
||||
usec = 1000000*(timeval.tv_sec - peasycap->timeval7.tv_sec) + \
|
||||
(timeval.tv_usec - peasycap->timeval7.tv_usec);
|
||||
if (usec > (peasycap->usec + peasycap->tolerate)) {
|
||||
JOT(8, "bridging hiatus\n");
|
||||
peasycap->video_junk = 0;
|
||||
peasycap->field_buffer[peasycap->field_fill][0].kount |= 0x0400;
|
||||
|
||||
peasycap->field_read = (peasycap->field_fill)++;
|
||||
|
||||
if (FIELD_BUFFER_MANY <= peasycap->field_fill) \
|
||||
peasycap->field_fill = 0;
|
||||
peasycap->field_page = 0;
|
||||
pfield_buffer = &peasycap->field_buffer\
|
||||
[peasycap->field_fill][peasycap->field_page];
|
||||
pfield_buffer->pto = pfield_buffer->pgo;
|
||||
|
||||
JOT(8, "bumped to: %i=peasycap->field_fill %i=parity\n", \
|
||||
peasycap->field_fill, 0x00FF & pfield_buffer->kount);
|
||||
JOT(8, "field buffer %i has %i bytes to be overwritten\n", \
|
||||
peasycap->field_read, videofieldamount);
|
||||
JOT(8, "wakeup call to wq_video, " \
|
||||
"%i=field_read %i=field_fill %i=parity\n", \
|
||||
peasycap->field_read, peasycap->field_fill, \
|
||||
0x00FF & \
|
||||
peasycap->field_buffer[peasycap->field_read][0].kount);
|
||||
wake_up_interruptible(&(peasycap->wq_video));
|
||||
do_gettimeofday(&peasycap->timeval7);
|
||||
}
|
||||
}
|
||||
#endif /*BRIDGER*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* RESUBMIT THIS URB, UNLESS A SEVERE PERSISTENT ERROR CONDITION EXISTS.
|
||||
*
|
||||
@@ -3152,12 +3044,6 @@ if (0 == bInterfaceNumber) {
|
||||
init_waitqueue_head(&(peasycap->wq_video));
|
||||
init_waitqueue_head(&(peasycap->wq_audio));
|
||||
|
||||
mutex_init(&(peasycap->mutex_timeval0));
|
||||
mutex_init(&(peasycap->mutex_timeval1));
|
||||
|
||||
for (k = 0; k < FRAME_BUFFER_MANY; k++)
|
||||
mutex_init(&(peasycap->mutex_mmap_video[k]));
|
||||
|
||||
peasycap->ilk = 0;
|
||||
peasycap->microphone = false;
|
||||
|
||||
@@ -3176,11 +3062,6 @@ if (0 == bInterfaceNumber) {
|
||||
peasycap->audio_isoc_buffer_size = -1;
|
||||
|
||||
peasycap->frame_buffer_many = FRAME_BUFFER_MANY;
|
||||
|
||||
if ((struct mutex *)NULL == &(peasycap->mutex_mmap_video[0])) {
|
||||
SAY("ERROR: &(peasycap->mutex_mmap_video[%i]) is NULL\n", 0);
|
||||
return -EFAULT;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* DYNAMICALLY FILL IN THE AVAILABLE FORMATS.
|
||||
@@ -4308,7 +4189,7 @@ easycap_module_init(void)
|
||||
int result;
|
||||
|
||||
SAY("========easycap=======\n");
|
||||
JOT(4, "begins. %i=debug\n", easycap_debug);
|
||||
JOT(4, "begins. %i=debug\n", debug);
|
||||
SAY("version: " EASYCAP_DRIVER_VERSION "\n");
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
@@ -4349,6 +4230,6 @@ MODULE_AUTHOR("R.M. Thomas <rmthomas@sciolus.org>");
|
||||
MODULE_DESCRIPTION(EASYCAP_DRIVER_DESCRIPTION);
|
||||
MODULE_VERSION(EASYCAP_DRIVER_VERSION);
|
||||
#if defined(EASYCAP_DEBUG)
|
||||
MODULE_PARM_DESC(easycap_debug, "debug: 0 (default), 1, 2,...");
|
||||
MODULE_PARM_DESC(debug, "debug: 0 (default), 1, 2,...");
|
||||
#endif /*EASYCAP_DEBUG*/
|
||||
/*****************************************************************************/
|
||||
|
@@ -413,7 +413,7 @@ return n;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
struct v4l2_queryctrl easycap_control[] = \
|
||||
{{
|
||||
{{
|
||||
.id = V4L2_CID_BRIGHTNESS,
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "Brightness",
|
||||
@@ -485,5 +485,5 @@ struct v4l2_queryctrl easycap_control[] = \
|
||||
{
|
||||
.id = 0xFFFFFFFF
|
||||
}
|
||||
};
|
||||
};
|
||||
/*****************************************************************************/
|
||||
|
@@ -36,7 +36,7 @@
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* ON COMPLETION OF AN AUDIO URB ITS DATA IS COPIED TO THE AUDIO BUFFERS
|
||||
* PROVIDED peasycap->audio_idle IS ZER0. REGARDLESS OF THIS BEING TRUE,
|
||||
* PROVIDED peasycap->audio_idle IS ZERO. REGARDLESS OF THIS BEING TRUE,
|
||||
* IT IS RESUBMITTED PROVIDED peasycap->audio_isoc_streaming IS NOT ZERO.
|
||||
*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
@@ -842,11 +842,7 @@ do_gettimeofday(&timeval);
|
||||
if (!peasycap->timeval1.tv_sec) {
|
||||
audio_bytes = 0;
|
||||
timeval1 = timeval;
|
||||
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_timeval1)))
|
||||
return -ERESTARTSYS;
|
||||
peasycap->timeval1 = timeval1;
|
||||
mutex_unlock(&(peasycap->mutex_timeval1));
|
||||
sdr.quotient = 192000;
|
||||
} else {
|
||||
audio_bytes += (long long int) szret;
|
||||
@@ -861,10 +857,7 @@ if (!peasycap->timeval1.tv_sec) {
|
||||
sdr.quotient = 192000;
|
||||
}
|
||||
JOT(8, "audio streaming at %lli bytes/second\n", sdr.quotient);
|
||||
if (mutex_lock_interruptible(&(peasycap->mutex_timeval1)))
|
||||
return -ERESTARTSYS;
|
||||
peasycap->dnbydt = sdr.quotient;
|
||||
mutex_unlock(&(peasycap->mutex_timeval1));
|
||||
|
||||
JOT(8, "returning %li\n", (long int)szret);
|
||||
return szret;
|
||||
|
@@ -161,31 +161,31 @@ return(0);
|
||||
}
|
||||
-----------------------------------------------------------------------------*/
|
||||
int tones[2048] = {
|
||||
0, 0, 502, 502, 1004, 1004, 1505, 1505, 2005, 2005,
|
||||
2503, 2503, 2998, 2998, 3491, 3491, 3980, 3980, 4466, 4466,
|
||||
4948, 4948, 5424, 5424, 5896, 5896, 6362, 6362, 6822, 6822,
|
||||
7276, 7276, 7723, 7723, 8162, 8162, 8594, 8594, 9018, 9018,
|
||||
9434, 9434, 9840, 9840, 10237, 10237, 10625, 10625, 11002, 11002,
|
||||
11370, 11370, 11726, 11726, 12072, 12072, 12406, 12406, 12728, 12728,
|
||||
13038, 13038, 13337, 13337, 13622, 13622, 13895, 13895, 14155, 14155,
|
||||
14401, 14401, 14634, 14634, 14853, 14853, 15058, 15058, 15249, 15249,
|
||||
15426, 15426, 15588, 15588, 15735, 15735, 15868, 15868, 15985, 15985,
|
||||
16088, 16088, 16175, 16175, 16248, 16248, 16305, 16305, 16346, 16346,
|
||||
16372, 16372, 16383, 16383, 16379, 16379, 16359, 16359, 16323, 16323,
|
||||
16272, 16272, 16206, 16206, 16125, 16125, 16028, 16028, 15917, 15917,
|
||||
15790, 15790, 15649, 15649, 15492, 15492, 15322, 15322, 15136, 15136,
|
||||
14937, 14937, 14723, 14723, 14496, 14496, 14255, 14255, 14001, 14001,
|
||||
13733, 13733, 13452, 13452, 13159, 13159, 12854, 12854, 12536, 12536,
|
||||
12207, 12207, 11866, 11866, 11513, 11513, 11150, 11150, 10777, 10777,
|
||||
10393, 10393, 10000, 10000, 9597, 9597, 9185, 9185, 8765, 8765,
|
||||
8336, 8336, 7900, 7900, 7456, 7456, 7005, 7005, 6547, 6547,
|
||||
6083, 6083, 5614, 5614, 5139, 5139, 4659, 4659, 4175, 4175,
|
||||
3687, 3687, 3196, 3196, 2701, 2701, 2204, 2204, 1705, 1705,
|
||||
1205, 1205, 703, 703, 201, 201, -301, -301, -803, -803,
|
||||
-1305, -1305, -1805, -1805, -2304, -2304, -2801, -2801, -3294, -3294,
|
||||
-3785, -3785, -4272, -4272, -4756, -4756, -5234, -5234, -5708, -5708,
|
||||
-6176, -6176, -6639, -6639, -7095, -7095, -7545, -7545, -7988, -7988,
|
||||
-8423, -8423, -8850, -8850, -9268, -9268, -9679, -9679, -10079, -10079,
|
||||
0, 0, 502, 502, 1004, 1004, 1505, 1505, 2005, 2005,
|
||||
2503, 2503, 2998, 2998, 3491, 3491, 3980, 3980, 4466, 4466,
|
||||
4948, 4948, 5424, 5424, 5896, 5896, 6362, 6362, 6822, 6822,
|
||||
7276, 7276, 7723, 7723, 8162, 8162, 8594, 8594, 9018, 9018,
|
||||
9434, 9434, 9840, 9840, 10237, 10237, 10625, 10625, 11002, 11002,
|
||||
11370, 11370, 11726, 11726, 12072, 12072, 12406, 12406, 12728, 12728,
|
||||
13038, 13038, 13337, 13337, 13622, 13622, 13895, 13895, 14155, 14155,
|
||||
14401, 14401, 14634, 14634, 14853, 14853, 15058, 15058, 15249, 15249,
|
||||
15426, 15426, 15588, 15588, 15735, 15735, 15868, 15868, 15985, 15985,
|
||||
16088, 16088, 16175, 16175, 16248, 16248, 16305, 16305, 16346, 16346,
|
||||
16372, 16372, 16383, 16383, 16379, 16379, 16359, 16359, 16323, 16323,
|
||||
16272, 16272, 16206, 16206, 16125, 16125, 16028, 16028, 15917, 15917,
|
||||
15790, 15790, 15649, 15649, 15492, 15492, 15322, 15322, 15136, 15136,
|
||||
14937, 14937, 14723, 14723, 14496, 14496, 14255, 14255, 14001, 14001,
|
||||
13733, 13733, 13452, 13452, 13159, 13159, 12854, 12854, 12536, 12536,
|
||||
12207, 12207, 11866, 11866, 11513, 11513, 11150, 11150, 10777, 10777,
|
||||
10393, 10393, 10000, 10000, 9597, 9597, 9185, 9185, 8765, 8765,
|
||||
8336, 8336, 7900, 7900, 7456, 7456, 7005, 7005, 6547, 6547,
|
||||
6083, 6083, 5614, 5614, 5139, 5139, 4659, 4659, 4175, 4175,
|
||||
3687, 3687, 3196, 3196, 2701, 2701, 2204, 2204, 1705, 1705,
|
||||
1205, 1205, 703, 703, 201, 201, -301, -301, -803, -803,
|
||||
-1305, -1305, -1805, -1805, -2304, -2304, -2801, -2801, -3294, -3294,
|
||||
-3785, -3785, -4272, -4272, -4756, -4756, -5234, -5234, -5708, -5708,
|
||||
-6176, -6176, -6639, -6639, -7095, -7095, -7545, -7545, -7988, -7988,
|
||||
-8423, -8423, -8850, -8850, -9268, -9268, -9679, -9679, -10079, -10079,
|
||||
-10471, -10471, -10853, -10853, -11224, -11224, -11585, -11585, -11935, -11935,
|
||||
-12273, -12273, -12600, -12600, -12916, -12916, -13219, -13219, -13510, -13510,
|
||||
-13788, -13788, -14053, -14053, -14304, -14304, -14543, -14543, -14767, -14767,
|
||||
@@ -198,35 +198,35 @@ int tones[2048] = {
|
||||
-14353, -14353, -14104, -14104, -13842, -13842, -13566, -13566, -13278, -13278,
|
||||
-12977, -12977, -12665, -12665, -12340, -12340, -12003, -12003, -11656, -11656,
|
||||
-11297, -11297, -10928, -10928, -10548, -10548, -10159, -10159, -9759, -9759,
|
||||
-9351, -9351, -8934, -8934, -8509, -8509, -8075, -8075, -7634, -7634,
|
||||
-7186, -7186, -6731, -6731, -6269, -6269, -5802, -5802, -5329, -5329,
|
||||
-4852, -4852, -4369, -4369, -3883, -3883, -3393, -3393, -2900, -2900,
|
||||
-2404, -2404, -1905, -1905, -1405, -1405, -904, -904, -402, -402,
|
||||
100, 100, 603, 603, 1105, 1105, 1605, 1605, 2105, 2105,
|
||||
2602, 2602, 3097, 3097, 3589, 3589, 4078, 4078, 4563, 4563,
|
||||
5043, 5043, 5519, 5519, 5990, 5990, 6455, 6455, 6914, 6914,
|
||||
7366, 7366, 7811, 7811, 8249, 8249, 8680, 8680, 9102, 9102,
|
||||
9516, 9516, 9920, 9920, 10315, 10315, 10701, 10701, 11077, 11077,
|
||||
11442, 11442, 11796, 11796, 12139, 12139, 12471, 12471, 12791, 12791,
|
||||
13099, 13099, 13395, 13395, 13678, 13678, 13948, 13948, 14205, 14205,
|
||||
14449, 14449, 14679, 14679, 14895, 14895, 15098, 15098, 15286, 15286,
|
||||
15459, 15459, 15618, 15618, 15763, 15763, 15892, 15892, 16007, 16007,
|
||||
16107, 16107, 16191, 16191, 16260, 16260, 16314, 16314, 16353, 16353,
|
||||
16376, 16376, 16384, 16384, 16376, 16376, 16353, 16353, 16314, 16314,
|
||||
16260, 16260, 16191, 16191, 16107, 16107, 16007, 16007, 15892, 15892,
|
||||
15763, 15763, 15618, 15618, 15459, 15459, 15286, 15286, 15098, 15098,
|
||||
14895, 14895, 14679, 14679, 14449, 14449, 14205, 14205, 13948, 13948,
|
||||
13678, 13678, 13395, 13395, 13099, 13099, 12791, 12791, 12471, 12471,
|
||||
12139, 12139, 11796, 11796, 11442, 11442, 11077, 11077, 10701, 10701,
|
||||
10315, 10315, 9920, 9920, 9516, 9516, 9102, 9102, 8680, 8680,
|
||||
8249, 8249, 7811, 7811, 7366, 7366, 6914, 6914, 6455, 6455,
|
||||
5990, 5990, 5519, 5519, 5043, 5043, 4563, 4563, 4078, 4078,
|
||||
3589, 3589, 3097, 3097, 2602, 2602, 2105, 2105, 1605, 1605,
|
||||
1105, 1105, 603, 603, 100, 100, -402, -402, -904, -904,
|
||||
-1405, -1405, -1905, -1905, -2404, -2404, -2900, -2900, -3393, -3393,
|
||||
-3883, -3883, -4369, -4369, -4852, -4852, -5329, -5329, -5802, -5802,
|
||||
-6269, -6269, -6731, -6731, -7186, -7186, -7634, -7634, -8075, -8075,
|
||||
-8509, -8509, -8934, -8934, -9351, -9351, -9759, -9759, -10159, -10159,
|
||||
-9351, -9351, -8934, -8934, -8509, -8509, -8075, -8075, -7634, -7634,
|
||||
-7186, -7186, -6731, -6731, -6269, -6269, -5802, -5802, -5329, -5329,
|
||||
-4852, -4852, -4369, -4369, -3883, -3883, -3393, -3393, -2900, -2900,
|
||||
-2404, -2404, -1905, -1905, -1405, -1405, -904, -904, -402, -402,
|
||||
100, 100, 603, 603, 1105, 1105, 1605, 1605, 2105, 2105,
|
||||
2602, 2602, 3097, 3097, 3589, 3589, 4078, 4078, 4563, 4563,
|
||||
5043, 5043, 5519, 5519, 5990, 5990, 6455, 6455, 6914, 6914,
|
||||
7366, 7366, 7811, 7811, 8249, 8249, 8680, 8680, 9102, 9102,
|
||||
9516, 9516, 9920, 9920, 10315, 10315, 10701, 10701, 11077, 11077,
|
||||
11442, 11442, 11796, 11796, 12139, 12139, 12471, 12471, 12791, 12791,
|
||||
13099, 13099, 13395, 13395, 13678, 13678, 13948, 13948, 14205, 14205,
|
||||
14449, 14449, 14679, 14679, 14895, 14895, 15098, 15098, 15286, 15286,
|
||||
15459, 15459, 15618, 15618, 15763, 15763, 15892, 15892, 16007, 16007,
|
||||
16107, 16107, 16191, 16191, 16260, 16260, 16314, 16314, 16353, 16353,
|
||||
16376, 16376, 16384, 16384, 16376, 16376, 16353, 16353, 16314, 16314,
|
||||
16260, 16260, 16191, 16191, 16107, 16107, 16007, 16007, 15892, 15892,
|
||||
15763, 15763, 15618, 15618, 15459, 15459, 15286, 15286, 15098, 15098,
|
||||
14895, 14895, 14679, 14679, 14449, 14449, 14205, 14205, 13948, 13948,
|
||||
13678, 13678, 13395, 13395, 13099, 13099, 12791, 12791, 12471, 12471,
|
||||
12139, 12139, 11796, 11796, 11442, 11442, 11077, 11077, 10701, 10701,
|
||||
10315, 10315, 9920, 9920, 9516, 9516, 9102, 9102, 8680, 8680,
|
||||
8249, 8249, 7811, 7811, 7366, 7366, 6914, 6914, 6455, 6455,
|
||||
5990, 5990, 5519, 5519, 5043, 5043, 4563, 4563, 4078, 4078,
|
||||
3589, 3589, 3097, 3097, 2602, 2602, 2105, 2105, 1605, 1605,
|
||||
1105, 1105, 603, 603, 100, 100, -402, -402, -904, -904,
|
||||
-1405, -1405, -1905, -1905, -2404, -2404, -2900, -2900, -3393, -3393,
|
||||
-3883, -3883, -4369, -4369, -4852, -4852, -5329, -5329, -5802, -5802,
|
||||
-6269, -6269, -6731, -6731, -7186, -7186, -7634, -7634, -8075, -8075,
|
||||
-8509, -8509, -8934, -8934, -9351, -9351, -9759, -9759, -10159, -10159,
|
||||
-10548, -10548, -10928, -10928, -11297, -11297, -11656, -11656, -12003, -12003,
|
||||
-12340, -12340, -12665, -12665, -12977, -12977, -13278, -13278, -13566, -13566,
|
||||
-13842, -13842, -14104, -14104, -14353, -14353, -14589, -14589, -14810, -14810,
|
||||
@@ -239,35 +239,35 @@ int tones[2048] = {
|
||||
-14304, -14304, -14053, -14053, -13788, -13788, -13510, -13510, -13219, -13219,
|
||||
-12916, -12916, -12600, -12600, -12273, -12273, -11935, -11935, -11585, -11585,
|
||||
-11224, -11224, -10853, -10853, -10471, -10471, -10079, -10079, -9679, -9679,
|
||||
-9268, -9268, -8850, -8850, -8423, -8423, -7988, -7988, -7545, -7545,
|
||||
-7095, -7095, -6639, -6639, -6176, -6176, -5708, -5708, -5234, -5234,
|
||||
-4756, -4756, -4272, -4272, -3785, -3785, -3294, -3294, -2801, -2801,
|
||||
-2304, -2304, -1805, -1805, -1305, -1305, -803, -803, -301, -301,
|
||||
201, 201, 703, 703, 1205, 1205, 1705, 1705, 2204, 2204,
|
||||
2701, 2701, 3196, 3196, 3687, 3687, 4175, 4175, 4659, 4659,
|
||||
5139, 5139, 5614, 5614, 6083, 6083, 6547, 6547, 7005, 7005,
|
||||
7456, 7456, 7900, 7900, 8336, 8336, 8765, 8765, 9185, 9185,
|
||||
9597, 9597, 10000, 10000, 10393, 10393, 10777, 10777, 11150, 11150,
|
||||
11513, 11513, 11866, 11866, 12207, 12207, 12536, 12536, 12854, 12854,
|
||||
13159, 13159, 13452, 13452, 13733, 13733, 14001, 14001, 14255, 14255,
|
||||
14496, 14496, 14723, 14723, 14937, 14937, 15136, 15136, 15322, 15322,
|
||||
15492, 15492, 15649, 15649, 15790, 15790, 15917, 15917, 16028, 16028,
|
||||
16125, 16125, 16206, 16206, 16272, 16272, 16323, 16323, 16359, 16359,
|
||||
16379, 16379, 16383, 16383, 16372, 16372, 16346, 16346, 16305, 16305,
|
||||
16248, 16248, 16175, 16175, 16088, 16088, 15985, 15985, 15868, 15868,
|
||||
15735, 15735, 15588, 15588, 15426, 15426, 15249, 15249, 15058, 15058,
|
||||
14853, 14853, 14634, 14634, 14401, 14401, 14155, 14155, 13895, 13895,
|
||||
13622, 13622, 13337, 13337, 13038, 13038, 12728, 12728, 12406, 12406,
|
||||
12072, 12072, 11726, 11726, 11370, 11370, 11002, 11002, 10625, 10625,
|
||||
10237, 10237, 9840, 9840, 9434, 9434, 9018, 9018, 8594, 8594,
|
||||
8162, 8162, 7723, 7723, 7276, 7276, 6822, 6822, 6362, 6362,
|
||||
5896, 5896, 5424, 5424, 4948, 4948, 4466, 4466, 3980, 3980,
|
||||
3491, 3491, 2998, 2998, 2503, 2503, 2005, 2005, 1505, 1505,
|
||||
1004, 1004, 502, 502, 0, 0, -502, -502, -1004, -1004,
|
||||
-1505, -1505, -2005, -2005, -2503, -2503, -2998, -2998, -3491, -3491,
|
||||
-3980, -3980, -4466, -4466, -4948, -4948, -5424, -5424, -5896, -5896,
|
||||
-6362, -6362, -6822, -6822, -7276, -7276, -7723, -7723, -8162, -8162,
|
||||
-8594, -8594, -9018, -9018, -9434, -9434, -9840, -9840, -10237, -10237,
|
||||
-9268, -9268, -8850, -8850, -8423, -8423, -7988, -7988, -7545, -7545,
|
||||
-7095, -7095, -6639, -6639, -6176, -6176, -5708, -5708, -5234, -5234,
|
||||
-4756, -4756, -4272, -4272, -3785, -3785, -3294, -3294, -2801, -2801,
|
||||
-2304, -2304, -1805, -1805, -1305, -1305, -803, -803, -301, -301,
|
||||
201, 201, 703, 703, 1205, 1205, 1705, 1705, 2204, 2204,
|
||||
2701, 2701, 3196, 3196, 3687, 3687, 4175, 4175, 4659, 4659,
|
||||
5139, 5139, 5614, 5614, 6083, 6083, 6547, 6547, 7005, 7005,
|
||||
7456, 7456, 7900, 7900, 8336, 8336, 8765, 8765, 9185, 9185,
|
||||
9597, 9597, 10000, 10000, 10393, 10393, 10777, 10777, 11150, 11150,
|
||||
11513, 11513, 11866, 11866, 12207, 12207, 12536, 12536, 12854, 12854,
|
||||
13159, 13159, 13452, 13452, 13733, 13733, 14001, 14001, 14255, 14255,
|
||||
14496, 14496, 14723, 14723, 14937, 14937, 15136, 15136, 15322, 15322,
|
||||
15492, 15492, 15649, 15649, 15790, 15790, 15917, 15917, 16028, 16028,
|
||||
16125, 16125, 16206, 16206, 16272, 16272, 16323, 16323, 16359, 16359,
|
||||
16379, 16379, 16383, 16383, 16372, 16372, 16346, 16346, 16305, 16305,
|
||||
16248, 16248, 16175, 16175, 16088, 16088, 15985, 15985, 15868, 15868,
|
||||
15735, 15735, 15588, 15588, 15426, 15426, 15249, 15249, 15058, 15058,
|
||||
14853, 14853, 14634, 14634, 14401, 14401, 14155, 14155, 13895, 13895,
|
||||
13622, 13622, 13337, 13337, 13038, 13038, 12728, 12728, 12406, 12406,
|
||||
12072, 12072, 11726, 11726, 11370, 11370, 11002, 11002, 10625, 10625,
|
||||
10237, 10237, 9840, 9840, 9434, 9434, 9018, 9018, 8594, 8594,
|
||||
8162, 8162, 7723, 7723, 7276, 7276, 6822, 6822, 6362, 6362,
|
||||
5896, 5896, 5424, 5424, 4948, 4948, 4466, 4466, 3980, 3980,
|
||||
3491, 3491, 2998, 2998, 2503, 2503, 2005, 2005, 1505, 1505,
|
||||
1004, 1004, 502, 502, 0, 0, -502, -502, -1004, -1004,
|
||||
-1505, -1505, -2005, -2005, -2503, -2503, -2998, -2998, -3491, -3491,
|
||||
-3980, -3980, -4466, -4466, -4948, -4948, -5424, -5424, -5896, -5896,
|
||||
-6362, -6362, -6822, -6822, -7276, -7276, -7723, -7723, -8162, -8162,
|
||||
-8594, -8594, -9018, -9018, -9434, -9434, -9840, -9840, -10237, -10237,
|
||||
-10625, -10625, -11002, -11002, -11370, -11370, -11726, -11726, -12072, -12072,
|
||||
-12406, -12406, -12728, -12728, -13038, -13038, -13337, -13337, -13622, -13622,
|
||||
-13895, -13895, -14155, -14155, -14401, -14401, -14634, -14634, -14853, -14853,
|
||||
@@ -280,35 +280,35 @@ int tones[2048] = {
|
||||
-14255, -14255, -14001, -14001, -13733, -13733, -13452, -13452, -13159, -13159,
|
||||
-12854, -12854, -12536, -12536, -12207, -12207, -11866, -11866, -11513, -11513,
|
||||
-11150, -11150, -10777, -10777, -10393, -10393, -10000, -10000, -9597, -9597,
|
||||
-9185, -9185, -8765, -8765, -8336, -8336, -7900, -7900, -7456, -7456,
|
||||
-7005, -7005, -6547, -6547, -6083, -6083, -5614, -5614, -5139, -5139,
|
||||
-4659, -4659, -4175, -4175, -3687, -3687, -3196, -3196, -2701, -2701,
|
||||
-2204, -2204, -1705, -1705, -1205, -1205, -703, -703, -201, -201,
|
||||
301, 301, 803, 803, 1305, 1305, 1805, 1805, 2304, 2304,
|
||||
2801, 2801, 3294, 3294, 3785, 3785, 4272, 4272, 4756, 4756,
|
||||
5234, 5234, 5708, 5708, 6176, 6176, 6639, 6639, 7095, 7095,
|
||||
7545, 7545, 7988, 7988, 8423, 8423, 8850, 8850, 9268, 9268,
|
||||
9679, 9679, 10079, 10079, 10471, 10471, 10853, 10853, 11224, 11224,
|
||||
11585, 11585, 11935, 11935, 12273, 12273, 12600, 12600, 12916, 12916,
|
||||
13219, 13219, 13510, 13510, 13788, 13788, 14053, 14053, 14304, 14304,
|
||||
14543, 14543, 14767, 14767, 14978, 14978, 15175, 15175, 15357, 15357,
|
||||
15525, 15525, 15678, 15678, 15817, 15817, 15940, 15940, 16049, 16049,
|
||||
16142, 16142, 16221, 16221, 16284, 16284, 16331, 16331, 16364, 16364,
|
||||
16381, 16381, 16382, 16382, 16368, 16368, 16339, 16339, 16294, 16294,
|
||||
16234, 16234, 16159, 16159, 16069, 16069, 15963, 15963, 15842, 15842,
|
||||
15707, 15707, 15557, 15557, 15392, 15392, 15212, 15212, 15018, 15018,
|
||||
14810, 14810, 14589, 14589, 14353, 14353, 14104, 14104, 13842, 13842,
|
||||
13566, 13566, 13278, 13278, 12977, 12977, 12665, 12665, 12340, 12340,
|
||||
12003, 12003, 11656, 11656, 11297, 11297, 10928, 10928, 10548, 10548,
|
||||
10159, 10159, 9759, 9759, 9351, 9351, 8934, 8934, 8509, 8509,
|
||||
8075, 8075, 7634, 7634, 7186, 7186, 6731, 6731, 6269, 6269,
|
||||
5802, 5802, 5329, 5329, 4852, 4852, 4369, 4369, 3883, 3883,
|
||||
3393, 3393, 2900, 2900, 2404, 2404, 1905, 1905, 1405, 1405,
|
||||
904, 904, 402, 402, -100, -100, -603, -603, -1105, -1105,
|
||||
-1605, -1605, -2105, -2105, -2602, -2602, -3097, -3097, -3589, -3589,
|
||||
-4078, -4078, -4563, -4563, -5043, -5043, -5519, -5519, -5990, -5990,
|
||||
-6455, -6455, -6914, -6914, -7366, -7366, -7811, -7811, -8249, -8249,
|
||||
-8680, -8680, -9102, -9102, -9516, -9516, -9920, -9920, -10315, -10315,
|
||||
-9185, -9185, -8765, -8765, -8336, -8336, -7900, -7900, -7456, -7456,
|
||||
-7005, -7005, -6547, -6547, -6083, -6083, -5614, -5614, -5139, -5139,
|
||||
-4659, -4659, -4175, -4175, -3687, -3687, -3196, -3196, -2701, -2701,
|
||||
-2204, -2204, -1705, -1705, -1205, -1205, -703, -703, -201, -201,
|
||||
301, 301, 803, 803, 1305, 1305, 1805, 1805, 2304, 2304,
|
||||
2801, 2801, 3294, 3294, 3785, 3785, 4272, 4272, 4756, 4756,
|
||||
5234, 5234, 5708, 5708, 6176, 6176, 6639, 6639, 7095, 7095,
|
||||
7545, 7545, 7988, 7988, 8423, 8423, 8850, 8850, 9268, 9268,
|
||||
9679, 9679, 10079, 10079, 10471, 10471, 10853, 10853, 11224, 11224,
|
||||
11585, 11585, 11935, 11935, 12273, 12273, 12600, 12600, 12916, 12916,
|
||||
13219, 13219, 13510, 13510, 13788, 13788, 14053, 14053, 14304, 14304,
|
||||
14543, 14543, 14767, 14767, 14978, 14978, 15175, 15175, 15357, 15357,
|
||||
15525, 15525, 15678, 15678, 15817, 15817, 15940, 15940, 16049, 16049,
|
||||
16142, 16142, 16221, 16221, 16284, 16284, 16331, 16331, 16364, 16364,
|
||||
16381, 16381, 16382, 16382, 16368, 16368, 16339, 16339, 16294, 16294,
|
||||
16234, 16234, 16159, 16159, 16069, 16069, 15963, 15963, 15842, 15842,
|
||||
15707, 15707, 15557, 15557, 15392, 15392, 15212, 15212, 15018, 15018,
|
||||
14810, 14810, 14589, 14589, 14353, 14353, 14104, 14104, 13842, 13842,
|
||||
13566, 13566, 13278, 13278, 12977, 12977, 12665, 12665, 12340, 12340,
|
||||
12003, 12003, 11656, 11656, 11297, 11297, 10928, 10928, 10548, 10548,
|
||||
10159, 10159, 9759, 9759, 9351, 9351, 8934, 8934, 8509, 8509,
|
||||
8075, 8075, 7634, 7634, 7186, 7186, 6731, 6731, 6269, 6269,
|
||||
5802, 5802, 5329, 5329, 4852, 4852, 4369, 4369, 3883, 3883,
|
||||
3393, 3393, 2900, 2900, 2404, 2404, 1905, 1905, 1405, 1405,
|
||||
904, 904, 402, 402, -100, -100, -603, -603, -1105, -1105,
|
||||
-1605, -1605, -2105, -2105, -2602, -2602, -3097, -3097, -3589, -3589,
|
||||
-4078, -4078, -4563, -4563, -5043, -5043, -5519, -5519, -5990, -5990,
|
||||
-6455, -6455, -6914, -6914, -7366, -7366, -7811, -7811, -8249, -8249,
|
||||
-8680, -8680, -9102, -9102, -9516, -9516, -9920, -9920, -10315, -10315,
|
||||
-10701, -10701, -11077, -11077, -11442, -11442, -11796, -11796, -12139, -12139,
|
||||
-12471, -12471, -12791, -12791, -13099, -13099, -13395, -13395, -13678, -13678,
|
||||
-13948, -13948, -14205, -14205, -14449, -14449, -14679, -14679, -14895, -14895,
|
||||
@@ -321,35 +321,35 @@ int tones[2048] = {
|
||||
-14205, -14205, -13948, -13948, -13678, -13678, -13395, -13395, -13099, -13099,
|
||||
-12791, -12791, -12471, -12471, -12139, -12139, -11796, -11796, -11442, -11442,
|
||||
-11077, -11077, -10701, -10701, -10315, -10315, -9920, -9920, -9516, -9516,
|
||||
-9102, -9102, -8680, -8680, -8249, -8249, -7811, -7811, -7366, -7366,
|
||||
-6914, -6914, -6455, -6455, -5990, -5990, -5519, -5519, -5043, -5043,
|
||||
-4563, -4563, -4078, -4078, -3589, -3589, -3097, -3097, -2602, -2602,
|
||||
-2105, -2105, -1605, -1605, -1105, -1105, -603, -603, -100, -100,
|
||||
402, 402, 904, 904, 1405, 1405, 1905, 1905, 2404, 2404,
|
||||
2900, 2900, 3393, 3393, 3883, 3883, 4369, 4369, 4852, 4852,
|
||||
5329, 5329, 5802, 5802, 6269, 6269, 6731, 6731, 7186, 7186,
|
||||
7634, 7634, 8075, 8075, 8509, 8509, 8934, 8934, 9351, 9351,
|
||||
9759, 9759, 10159, 10159, 10548, 10548, 10928, 10928, 11297, 11297,
|
||||
11656, 11656, 12003, 12003, 12340, 12340, 12665, 12665, 12977, 12977,
|
||||
13278, 13278, 13566, 13566, 13842, 13842, 14104, 14104, 14353, 14353,
|
||||
14589, 14589, 14810, 14810, 15018, 15018, 15212, 15212, 15392, 15392,
|
||||
15557, 15557, 15707, 15707, 15842, 15842, 15963, 15963, 16069, 16069,
|
||||
16159, 16159, 16234, 16234, 16294, 16294, 16339, 16339, 16368, 16368,
|
||||
16382, 16382, 16381, 16381, 16364, 16364, 16331, 16331, 16284, 16284,
|
||||
16221, 16221, 16142, 16142, 16049, 16049, 15940, 15940, 15817, 15817,
|
||||
15678, 15678, 15525, 15525, 15357, 15357, 15175, 15175, 14978, 14978,
|
||||
14767, 14767, 14543, 14543, 14304, 14304, 14053, 14053, 13788, 13788,
|
||||
13510, 13510, 13219, 13219, 12916, 12916, 12600, 12600, 12273, 12273,
|
||||
11935, 11935, 11585, 11585, 11224, 11224, 10853, 10853, 10471, 10471,
|
||||
10079, 10079, 9679, 9679, 9268, 9268, 8850, 8850, 8423, 8423,
|
||||
7988, 7988, 7545, 7545, 7095, 7095, 6639, 6639, 6176, 6176,
|
||||
5708, 5708, 5234, 5234, 4756, 4756, 4272, 4272, 3785, 3785,
|
||||
3294, 3294, 2801, 2801, 2304, 2304, 1805, 1805, 1305, 1305,
|
||||
803, 803, 301, 301, -201, -201, -703, -703, -1205, -1205,
|
||||
-1705, -1705, -2204, -2204, -2701, -2701, -3196, -3196, -3687, -3687,
|
||||
-4175, -4175, -4659, -4659, -5139, -5139, -5614, -5614, -6083, -6083,
|
||||
-6547, -6547, -7005, -7005, -7456, -7456, -7900, -7900, -8336, -8336,
|
||||
-8765, -8765, -9185, -9185, -9597, -9597, -10000, -10000, -10393, -10393,
|
||||
-9102, -9102, -8680, -8680, -8249, -8249, -7811, -7811, -7366, -7366,
|
||||
-6914, -6914, -6455, -6455, -5990, -5990, -5519, -5519, -5043, -5043,
|
||||
-4563, -4563, -4078, -4078, -3589, -3589, -3097, -3097, -2602, -2602,
|
||||
-2105, -2105, -1605, -1605, -1105, -1105, -603, -603, -100, -100,
|
||||
402, 402, 904, 904, 1405, 1405, 1905, 1905, 2404, 2404,
|
||||
2900, 2900, 3393, 3393, 3883, 3883, 4369, 4369, 4852, 4852,
|
||||
5329, 5329, 5802, 5802, 6269, 6269, 6731, 6731, 7186, 7186,
|
||||
7634, 7634, 8075, 8075, 8509, 8509, 8934, 8934, 9351, 9351,
|
||||
9759, 9759, 10159, 10159, 10548, 10548, 10928, 10928, 11297, 11297,
|
||||
11656, 11656, 12003, 12003, 12340, 12340, 12665, 12665, 12977, 12977,
|
||||
13278, 13278, 13566, 13566, 13842, 13842, 14104, 14104, 14353, 14353,
|
||||
14589, 14589, 14810, 14810, 15018, 15018, 15212, 15212, 15392, 15392,
|
||||
15557, 15557, 15707, 15707, 15842, 15842, 15963, 15963, 16069, 16069,
|
||||
16159, 16159, 16234, 16234, 16294, 16294, 16339, 16339, 16368, 16368,
|
||||
16382, 16382, 16381, 16381, 16364, 16364, 16331, 16331, 16284, 16284,
|
||||
16221, 16221, 16142, 16142, 16049, 16049, 15940, 15940, 15817, 15817,
|
||||
15678, 15678, 15525, 15525, 15357, 15357, 15175, 15175, 14978, 14978,
|
||||
14767, 14767, 14543, 14543, 14304, 14304, 14053, 14053, 13788, 13788,
|
||||
13510, 13510, 13219, 13219, 12916, 12916, 12600, 12600, 12273, 12273,
|
||||
11935, 11935, 11585, 11585, 11224, 11224, 10853, 10853, 10471, 10471,
|
||||
10079, 10079, 9679, 9679, 9268, 9268, 8850, 8850, 8423, 8423,
|
||||
7988, 7988, 7545, 7545, 7095, 7095, 6639, 6639, 6176, 6176,
|
||||
5708, 5708, 5234, 5234, 4756, 4756, 4272, 4272, 3785, 3785,
|
||||
3294, 3294, 2801, 2801, 2304, 2304, 1805, 1805, 1305, 1305,
|
||||
803, 803, 301, 301, -201, -201, -703, -703, -1205, -1205,
|
||||
-1705, -1705, -2204, -2204, -2701, -2701, -3196, -3196, -3687, -3687,
|
||||
-4175, -4175, -4659, -4659, -5139, -5139, -5614, -5614, -6083, -6083,
|
||||
-6547, -6547, -7005, -7005, -7456, -7456, -7900, -7900, -8336, -8336,
|
||||
-8765, -8765, -9185, -9185, -9597, -9597, -10000, -10000, -10393, -10393,
|
||||
-10777, -10777, -11150, -11150, -11513, -11513, -11866, -11866, -12207, -12207,
|
||||
-12536, -12536, -12854, -12854, -13159, -13159, -13452, -13452, -13733, -13733,
|
||||
-14001, -14001, -14255, -14255, -14496, -14496, -14723, -14723, -14937, -14937,
|
||||
@@ -362,10 +362,10 @@ int tones[2048] = {
|
||||
-14155, -14155, -13895, -13895, -13622, -13622, -13337, -13337, -13038, -13038,
|
||||
-12728, -12728, -12406, -12406, -12072, -12072, -11726, -11726, -11370, -11370,
|
||||
-11002, -11002, -10625, -10625, -10237, -10237, -9840, -9840, -9434, -9434,
|
||||
-9018, -9018, -8594, -8594, -8162, -8162, -7723, -7723, -7276, -7276,
|
||||
-6822, -6822, -6362, -6362, -5896, -5896, -5424, -5424, -4948, -4948,
|
||||
-4466, -4466, -3980, -3980, -3491, -3491, -2998, -2998, -2503, -2503,
|
||||
-2005, -2005, -1505, -1505, -1004, -1004, -502, -502
|
||||
-9018, -9018, -8594, -8594, -8162, -8162, -7723, -7723, -7276, -7276,
|
||||
-6822, -6822, -6362, -6362, -5896, -5896, -5424, -5424, -4948, -4948,
|
||||
-4466, -4466, -3980, -3980, -3491, -3491, -2998, -2998, -2503, -2503,
|
||||
-2005, -2005, -1505, -1505, -1004, -1004, -502, -502
|
||||
};
|
||||
/*****************************************************************************/
|
||||
void
|
||||
|
Reference in New Issue
Block a user