summaryrefslogtreecommitdiff
path: root/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'device.c')
-rw-r--r--device.c809
1 files changed, 405 insertions, 404 deletions
diff --git a/device.c b/device.c
index 998ef48..67c8b13 100644
--- a/device.c
+++ b/device.c
@@ -15,7 +15,7 @@ char CARDNAME[][9] = {
"undef", "PVR150", "PVR250", "PVR350", "PVR500#1", "PVR500#2", "HVR1300", "HVR1600", "HVR1900", "HVR1950", "PVRUSB2", "HDPVR"
};
-cPvrDevice * PvrDevices[kMaxPvrDevices];
+cPvrDevice *PvrDevices[kMaxPvrDevices];
cString cPvrDevice::externChannelSwitchScript;
@@ -30,7 +30,7 @@ private:
public:
cPvrSourceParam();
cString ParametersToString(void) const;
- void ParseParameters(const char* Parameters);
+ void ParseParameters(const char *Parameters);
virtual void SetData(cChannel *Channel);
virtual void GetData(cChannel *Channel);
virtual cOsdItem *GetOsdItem(void);
@@ -40,14 +40,14 @@ public:
static const char sSourceID = 'V';
static const uint stPvr = (sSourceID << 24);
static const int sNumInputs = 12;
- static const char* sInputs[];
+ static const char *sInputs[];
static const int sNumCards = 9;
- static const char* sCards[];
+ static const char *sCards[];
static const int sNumStandards = 31;
- static const char* sStandards[];
+ static const char *sStandards[];
};
-const char* cPvrSourceParam::sInputs[] = {
+const char *cPvrSourceParam::sInputs[] = {
"TV",
"RADIO",
"COMPOSITE0",
@@ -62,7 +62,7 @@ const char* cPvrSourceParam::sInputs[] = {
"COMPONENT"
};
-const char* cPvrSourceParam::sCards[] = {
+const char *cPvrSourceParam::sCards[] = {
"",
"CARD0",
"CARD1",
@@ -74,7 +74,7 @@ const char* cPvrSourceParam::sCards[] = {
"CARD7"
};
-const char* cPvrSourceParam::sStandards[] = {
+const char *cPvrSourceParam::sStandards[] = {
"",
"PAL",
"NTSC",
@@ -120,24 +120,25 @@ cPvrSourceParam::cPvrSourceParam()
cString cPvrSourceParam::ParametersToString(void) const
{
if ((standard == 0) && (card == 0))
- return cString::sprintf("%s", sInputs[input]);
+ return cString::sprintf("%s", sInputs[input]);
if ((standard == 0) && (card != 0))
- return cString::sprintf("%s|%s", sInputs[input], sCards[card]);
+ return cString::sprintf("%s|%s", sInputs[input], sCards[card]);
if ((standard != 0) && (card == 0))
- return cString::sprintf("%s|%s", sInputs[input], sStandards[standard]);
+ return cString::sprintf("%s|%s", sInputs[input], sStandards[standard]);
return cString::sprintf("%s|%s|%s", sInputs[input], sCards[card], sStandards[standard]);
}
-void cPvrSourceParam::ParseParameters(const char* Parameters) {
- char * Input = NULL;
- char * optArg[2] = { NULL, NULL };
+void cPvrSourceParam::ParseParameters(const char *Parameters)
+{
+ char *Input = NULL;
+ char *optArg[2] = { NULL, NULL };
int NumArgs = sscanf(Parameters, "%a[^|]|%a[^|]|%a[^:\n]", &Input, &optArg[0], &optArg[1]);
input = 0;
card = 0;
standard = 0;
if (NumArgs >= 1) {
for (int i = 0; sInputs[i]; i++) {
- if (!strcasecmp (Input, sInputs[i])) {
+ if (!strcasecmp(Input, sInputs[i])) {
input = i;
break;
}
@@ -147,7 +148,7 @@ void cPvrSourceParam::ParseParameters(const char* Parameters) {
if (NumArgs >= (opt + 2)) {
bool parsed = false;
for (int c = 1; sCards[c]; c++) {
- if (!strcasecmp (optArg[opt], sCards[c])) {
+ if (!strcasecmp(optArg[opt], sCards[c])) {
card = c;
parsed = true;
break;
@@ -155,7 +156,7 @@ void cPvrSourceParam::ParseParameters(const char* Parameters) {
}
if (!parsed) {
for (int s = 1; sStandards[s]; s++) {
- if (!strcasecmp (optArg[opt], sStandards[s])) {
+ if (!strcasecmp(optArg[opt], sStandards[s])) {
standard = s;
break;
}
@@ -189,19 +190,21 @@ cOsdItem *cPvrSourceParam::GetOsdItem(void)
return NULL;
}
-bool cPvrSourceParam::IsPvr(int Code) {
+bool cPvrSourceParam::IsPvr(int Code)
+{
return (Code & cSource::st_Mask) == stPvr;
}
#endif
-static void cPvrSourceParam_Initialize() {
+static void cPvrSourceParam_Initialize()
+{
#ifdef PVR_SOURCEPARAMS
new cPvrSourceParam();
#endif
}
cPvrDevice::cPvrDevice(int DeviceNumber)
-: number(DeviceNumber),
+: number(DeviceNumber),
frequency(-1),
CurrentNorm(0), //uint64_t can't be negative
CurrentLinesPerFrame(-1),
@@ -221,7 +224,8 @@ cPvrDevice::cPvrDevice(int DeviceNumber)
cardname(UNDEF),
tsBufferPrefill(0),
readThread(0)
-{ log(pvrDEBUG2,"new cPvrDevice (%d)", number);
+{
+ log(pvrDEBUG2, "new cPvrDevice (%d)", number);
v4l2_fd = mpeg_fd = radio_fd = -1;
v4l2_dev = mpeg_dev = radio_dev = -1;
vpid = apid = tpid = -1;
@@ -234,65 +238,61 @@ cPvrDevice::cPvrDevice(int DeviceNumber)
v4l2_dev = number;
devName = cString::sprintf("/dev/video%d", v4l2_dev);
v4l2_fd = open(devName, O_RDWR);
- if (v4l2_fd < 0) {
- log(pvrERROR, "cPvrDevice::cPvrDevice(): error opening video device %s: %s",
- *devName, strerror(errno));
- }
+ if (v4l2_fd < 0)
+ log(pvrERROR, "cPvrDevice::cPvrDevice(): error opening video device %s: %s", *devName, strerror(errno));
memset(&video_vcap, 0, sizeof(video_vcap));
IOCTL(v4l2_fd, VIDIOC_QUERYCAP, &video_vcap);
log(pvrDEBUG1, "%s = %s", *devName, video_vcap.card);
BusID = cString::sprintf("%s", video_vcap.bus_info);
log(pvrDEBUG1, "BusID = %s", *BusID);
- if (!memcmp(video_vcap.driver, "ivtv",4)) driver = ivtv;
- else if (!memcmp(video_vcap.driver, "cx18",4)) driver = cx18;
- else if (!memcmp(video_vcap.driver, "pvrusb2",7)) driver = pvrusb2;
- else if (!memcmp(video_vcap.driver, "cx88_blackbird",14)) driver = cx88_blackbird;
- else if (!memcmp(video_vcap.driver, "hdpvr",5)) driver = hdpvr;
+ if (!memcmp(video_vcap.driver, "ivtv", 4)) driver = ivtv;
+ else if (!memcmp(video_vcap.driver, "cx18", 4)) driver = cx18;
+ else if (!memcmp(video_vcap.driver, "pvrusb2", 7)) driver = pvrusb2;
+ else if (!memcmp(video_vcap.driver, "cx88_blackbird", 14)) driver = cx88_blackbird;
+ else if (!memcmp(video_vcap.driver, "hdpvr", 5)) driver = hdpvr;
else { driver = undef; log(pvrDEBUG1, "unknown video driver: \"%s\"",video_vcap.driver); }
- if (!memcmp(video_vcap.card, "Hauppauge WinTV PVR-150",23)) cardname = PVR150;
- else if (!memcmp(video_vcap.card, "Hauppauge WinTV PVR-250",23)) cardname = PVR250;
- else if (!memcmp(video_vcap.card, "Hauppauge WinTV PVR-350",23)) cardname = PVR350;
- else if (!memcmp(video_vcap.card, "WinTV PVR 500 (unit #1)",23)) cardname = PVR500_1;
- else if (!memcmp(video_vcap.card, "WinTV PVR 500 (unit #2)",23)) cardname = PVR500_2;
- else if (!memcmp(video_vcap.card, "Hauppauge WinTV-HVR1300",23)) cardname = HVR1300;
- else if (!memcmp(video_vcap.card, "Hauppauge HVR-1600",18)) cardname = HVR1600;
- else if (!memcmp(video_vcap.card, "WinTV HVR-1900",14)) cardname = HVR1900;
- else if (!memcmp(video_vcap.card, "WinTV HVR-1950",14)) cardname = HVR1950;
- else if (!memcmp(video_vcap.card, "WinTV PVR USB2",14)) cardname = PVRUSB2;
- else if (!memcmp(video_vcap.card, "Hauppauge HD PVR",16)) cardname = HDPVR;
- else if (!memcmp(video_vcap.card, "Haupauge HD PVR",15)) cardname = HDPVR; // spelling error in hdpvr
+ if (!memcmp(video_vcap.card, "Hauppauge WinTV PVR-150", 23)) cardname = PVR150;
+ else if (!memcmp(video_vcap.card, "Hauppauge WinTV PVR-250", 23)) cardname = PVR250;
+ else if (!memcmp(video_vcap.card, "Hauppauge WinTV PVR-350", 23)) cardname = PVR350;
+ else if (!memcmp(video_vcap.card, "WinTV PVR 500 (unit #1)", 23)) cardname = PVR500_1;
+ else if (!memcmp(video_vcap.card, "WinTV PVR 500 (unit #2)", 23)) cardname = PVR500_2;
+ else if (!memcmp(video_vcap.card, "Hauppauge WinTV-HVR1300", 23)) cardname = HVR1300;
+ else if (!memcmp(video_vcap.card, "Hauppauge HVR-1600", 18)) cardname = HVR1600;
+ else if (!memcmp(video_vcap.card, "WinTV HVR-1900", 14)) cardname = HVR1900;
+ else if (!memcmp(video_vcap.card, "WinTV HVR-1950", 14)) cardname = HVR1950;
+ else if (!memcmp(video_vcap.card, "WinTV PVR USB2", 14)) cardname = PVRUSB2;
+ else if (!memcmp(video_vcap.card, "Hauppauge HD PVR", 16)) cardname = HDPVR;
+ else if (!memcmp(video_vcap.card, "Haupauge HD PVR", 15)) cardname = HDPVR; // spelling error in hdpvr
else { cardname = UNDEF; log(pvrDEBUG1, "unknown video card: \"%s\"",video_vcap.card); }
- if (cardname == HVR1300) log(pvrERROR, "HVR 1300 is not really supported yet");
+ if (cardname == HVR1300)
+ log(pvrERROR, "HVR 1300 is not really supported yet");
driver_apiversion = video_vcap.version;
log(pvrDEBUG1, "%s Version 0x%06x", DRIVERNAME[driver], driver_apiversion);
if ((video_vcap.capabilities & V4L2_CAP_SLICED_VBI_CAPTURE) && (driver != pvrusb2)) {
/*The pvrusb2 driver advertises vbi capability, although it isn't there.
This was fixed in v4l-dvb hg in 01/2009 and will hopefully be in Kernel 2.6.30*/
SupportsSlicedVBI = true;
- log(pvrDEBUG1, "%s supports sliced VBI Capture",*devName);
- }
- if (video_vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT_OVERLAY) {
- hasDecoder = true; //can only be a PVR350
+ log(pvrDEBUG1, "%s supports sliced VBI Capture", *devName);
}
- for (i=0; i<kMaxPvrDevices; i++) {
+ if (video_vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
+ hasDecoder = true; //can only be a PVR350
+ for (i = 0; i < kMaxPvrDevices; i++) {
if (radio_dev<0 && (video_vcap.capabilities & V4L2_CAP_RADIO)) { //searching matching radio dev
devName = cString::sprintf("/dev/radio%d", i);
radio_fd = open(devName, O_RDWR);
if (radio_fd >= 0) {
memset(&capability, 0, sizeof(capability));
- if (IOCTL(radio_fd, VIDIOC_QUERYCAP, &capability) !=0) {
- log(pvrERROR, "VIDIOC_QUERYCAP failed, %d:%s",
- errno, strerror(errno));
- }
- if (!strncmp(*BusID,(const char *) capability.bus_info, strlen(*BusID)-1)) {
- radio_dev=i; // store info for later
+ if (IOCTL(radio_fd, VIDIOC_QUERYCAP, &capability) != 0)
+ log(pvrERROR, "VIDIOC_QUERYCAP failed, %d:%s", errno, strerror(errno));
+ if (!strncmp(*BusID, (const char*)capability.bus_info, strlen(*BusID) - 1)) {
+ radio_dev = i; // store info for later
log(pvrDEBUG1, "/dev/radio%d = FM radio dev",radio_dev);
}
close(radio_fd); // a pvrusb2 will remain on input 3. The bool FirstChannelSwitch will solve this later
radio_fd = -1;
}
}
- if (mpeg_dev<0 && (driver == cx88_blackbird)) { // the blackbird uses two (!) different devices, search the other one.
+ if (mpeg_dev < 0 && (driver == cx88_blackbird)) { // the blackbird uses two (!) different devices, search the other one.
close(v4l2_fd);
v4l2_fd = -1;
devName = cString::sprintf("/dev/video%d", i);
@@ -300,12 +300,12 @@ cPvrDevice::cPvrDevice(int DeviceNumber)
if (mpeg_fd) {
memset(&capability, 0, sizeof(capability));
IOCTL(mpeg_fd, VIDIOC_QUERYCAP, &capability);
- if (!strncmp(*BusID ,(const char *) capability.bus_info, strlen(*BusID)-1) &&
- !strcmp("cx8800",(const char *) capability.driver)) {
+ if (!strncmp(*BusID, (const char*)capability.bus_info, strlen(*BusID) - 1)
+ && !strcmp("cx8800", (const char*)capability.driver)) {
mpeg_dev = v4l2_dev; //for this driver we found mpeg_dev up to now.
v4l2_dev = i; //reassigning, now with correct value.
- log(pvrDEBUG1, "/dev/video%d = v4l2 dev (analog properties: volume/hue/brightness/inputs..)",v4l2_dev);
- log(pvrDEBUG1, "/dev/video%d = mpeg dev (MPEG properties: bitrates/frame rate/filters..)",mpeg_dev);
+ log(pvrDEBUG1, "/dev/video%d = v4l2 dev (analog properties: volume/hue/brightness/inputs..)", v4l2_dev);
+ log(pvrDEBUG1, "/dev/video%d = mpeg dev (MPEG properties: bitrates/frame rate/filters..)", mpeg_dev);
}
close(mpeg_fd);
mpeg_fd = -1;
@@ -333,32 +333,31 @@ cPvrDevice::cPvrDevice(int DeviceNumber)
for (i = 0;; i++) {
memset(&input, 0, sizeof(input));
input.index = i;
- if (IOCTL(v4l2_fd, VIDIOC_ENUMINPUT, &input) == -1) {
+ if (IOCTL(v4l2_fd, VIDIOC_ENUMINPUT, &input) == -1)
break;
- }
else {
log(pvrDEBUG1, "input %d = %s", i, input.name);
numInputs++;
}
- if (!memcmp(input.name, "Tuner", 5)) { inputs[eTelevision]=inputs[eRadio]=i; continue; } //ivtv: Radio and TV tuner are same input.
- else if (!memcmp(input.name, "television", 10)) { inputs[eTelevision]=i; continue; } //pvrusb2
- else if (!memcmp(input.name, "Television", 10)) { inputs[eTelevision]=i; continue; } //cx88_blackbird
- else if (!memcmp(input.name, "radio", 5)) { inputs[eRadio] =i; continue; } //pvrusb2
- else if (!memcmp(input.name, "Composite 0", 11)) { inputs[eComposite0]=i; continue; }
- else if (!memcmp(input.name, "Composite 1", 11)) { inputs[eComposite1]=i; continue; }
- else if (!memcmp(input.name, "Composite 2", 11)) { inputs[eComposite2]=i; continue; }
- else if (!memcmp(input.name, "Composite 3", 11)) { inputs[eComposite3]=i; continue; }
- else if (!memcmp(input.name, "Composite 4", 11)) { inputs[eComposite4]=i; continue; }
- else if (!memcmp(input.name, "Composite1", 10)) { inputs[eComposite1]=i; continue; } //cx88_blackbird
- else if (!memcmp(input.name, "composite", 9)) { inputs[eComposite0]=i; continue; } //pvrusb2
- else if (!memcmp(input.name, "Composite", 9)) { inputs[eComposite0]=i; continue; } //hdpvr
- else if (!memcmp(input.name, "S-Video 3", 9)) { inputs[eSVideo3] =i; continue; }
- else if (!memcmp(input.name, "S-Video 0", 9)) { inputs[eSVideo0] =i; continue; }
- else if (!memcmp(input.name, "S-Video 1", 9)) { inputs[eSVideo1] =i; continue; }
- else if (!memcmp(input.name, "S-Video 2", 9)) { inputs[eSVideo2] =i; continue; }
- else if (!memcmp(input.name, "S-Video", 7)) { inputs[eSVideo0] =i; continue; } //cx88_blackbird & hdpvr
- else if (!memcmp(input.name, "s-video", 7)) { inputs[eSVideo0] =i; continue; } //pvrusb2
- else if (!memcmp(input.name, "Component", 9)) { inputs[eComponent] =i; continue; } //hdpvr
+ if (!memcmp(input.name, "Tuner", 5)) { inputs[eTelevision] = inputs[eRadio] = i; continue; } //ivtv: Radio and TV tuner are same input.
+ else if (!memcmp(input.name, "television", 10)) { inputs[eTelevision] = i; continue; } //pvrusb2
+ else if (!memcmp(input.name, "Television", 10)) { inputs[eTelevision] = i; continue; } //cx88_blackbird
+ else if (!memcmp(input.name, "radio", 5)) { inputs[eRadio] = i; continue; } //pvrusb2
+ else if (!memcmp(input.name, "Composite 0", 11)) { inputs[eComposite0] = i; continue; }
+ else if (!memcmp(input.name, "Composite 1", 11)) { inputs[eComposite1] = i; continue; }
+ else if (!memcmp(input.name, "Composite 2", 11)) { inputs[eComposite2] = i; continue; }
+ else if (!memcmp(input.name, "Composite 3", 11)) { inputs[eComposite3] = i; continue; }
+ else if (!memcmp(input.name, "Composite 4", 11)) { inputs[eComposite4] = i; continue; }
+ else if (!memcmp(input.name, "Composite1", 10)) { inputs[eComposite1] = i; continue; } //cx88_blackbird
+ else if (!memcmp(input.name, "composite", 9)) { inputs[eComposite0] = i; continue; } //pvrusb2
+ else if (!memcmp(input.name, "Composite", 9)) { inputs[eComposite0] = i; continue; } //hdpvr
+ else if (!memcmp(input.name, "S-Video 3", 9)) { inputs[eSVideo3] = i; continue; }
+ else if (!memcmp(input.name, "S-Video 0", 9)) { inputs[eSVideo0] = i; continue; }
+ else if (!memcmp(input.name, "S-Video 1", 9)) { inputs[eSVideo1] = i; continue; }
+ else if (!memcmp(input.name, "S-Video 2", 9)) { inputs[eSVideo2] = i; continue; }
+ else if (!memcmp(input.name, "S-Video", 7)) { inputs[eSVideo0] = i; continue; } //cx88_blackbird & hdpvr
+ else if (!memcmp(input.name, "s-video", 7)) { inputs[eSVideo0] = i; continue; } //pvrusb2
+ else if (!memcmp(input.name, "Component", 9)) { inputs[eComponent] = i; continue; } //hdpvr
else log(pvrERROR, "unknown input %s. PLEASE SEND LOG TO MAINTAINER.", input.name);
}
if (inputs[eTelevision] >= 0)
@@ -389,19 +388,21 @@ cPvrDevice::cPvrDevice(int DeviceNumber)
StartSectionHandler();
}
-cPvrDevice::~cPvrDevice() {
+cPvrDevice::~cPvrDevice()
+{
#if VDRVERSNUM >= 10600
StopSectionHandler();
#endif
- cRingBufferLinear * tsBuffer_tmp = tsBuffer;
- log(pvrDEBUG2,"~cPvrDevice()");
+ cRingBufferLinear *tsBuffer_tmp = tsBuffer;
+ log(pvrDEBUG2, "~cPvrDevice()");
tsBuffer = NULL;
delete tsBuffer_tmp;
close(radio_fd);
close(v4l2_fd);
}
-bool cPvrDevice::Probe(int DeviceNumber) {
+bool cPvrDevice::Probe(int DeviceNumber)
+{
char device[256];
struct v4l2_capability vcap;
struct v4l2_format vfmt;
@@ -411,7 +412,7 @@ bool cPvrDevice::Probe(int DeviceNumber) {
memset(&vfmt, 0, sizeof(vfmt));
sprintf(device, "/dev/video%d", DeviceNumber);
v4l2_fd = open(device, O_RDONLY);
- if (v4l2_fd >=0) {
+ if (v4l2_fd >= 0) {
IOCTL(v4l2_fd, VIDIOC_QUERYCAP, &vcap);
if (!memcmp(vcap.driver, "ivtv",4) ||
!memcmp(vcap.driver, "cx18",4) ||
@@ -420,18 +421,20 @@ bool cPvrDevice::Probe(int DeviceNumber) {
found = true;
if (!memcmp(vcap.driver, "cx88_blackbird", 14)) {
vfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- if (! IOCTL(v4l2_fd, VIDIOC_G_FMT, &vfmt) &&
+ if (!IOCTL(v4l2_fd, VIDIOC_G_FMT, &vfmt) &&
(v4l2_fourcc('M','P','E','G') == vfmt.fmt.pix.pixelformat))
- found=true;
+ found = true;
}
close(v4l2_fd);
- if (found) log(pvrINFO, "cPvrDevice::Probe():found %s", vcap.card);
+ if (found)
+ log(pvrINFO, "cPvrDevice::Probe():found %s", vcap.card);
return found;
}
return false;
}
-bool cPvrDevice::Initialize(void) {
+bool cPvrDevice::Initialize(void)
+{
int found = 0;
cPvrSourceParam_Initialize();
for (int i = 0; i < kMaxPvrDevices; i++) {
@@ -449,7 +452,8 @@ bool cPvrDevice::Initialize(void) {
return found > 0;
}
-void cPvrDevice::Stop(void) {
+void cPvrDevice::Stop(void)
+{
/* recursively stop all threads inside pvrinputs devices */
for (int i = 0; i < kMaxPvrDevices; i++) {
if (PvrDevices[i]) {
@@ -463,49 +467,47 @@ void cPvrDevice::Stop(void) {
}
}
-void cPvrDevice::GetStandard(void) {
+void cPvrDevice::GetStandard(void)
+{
v4l2_std_id std;
if (IOCTL(v4l2_fd, VIDIOC_G_STD, &std) == -1) {
- log(pvrERROR, "error VIDIOC_G_STD on /dev/video%d (%s): %d:%s", \
- number, CARDNAME[cardname], errno, strerror(errno));
- }
- if (std & V4L2_STD_625_50) {
+ log(pvrERROR, "error VIDIOC_G_STD on /dev/video%d (%s): %d:%s",
+ number, CARDNAME[cardname], errno, strerror(errno));
+ }
+ if (std & V4L2_STD_625_50)
CurrentLinesPerFrame = 625;
- }
- else {
+ else
CurrentLinesPerFrame = 525;
- }
/* the driver will automatically set the height to 576 or 480 on each change */
CurrentNorm = std;
- log(pvrINFO, "cPvrDevice::CurrentNorm=0x%08llx, CurrentLinesPerFrame=%d on /dev/video%d (%s)", \
+ log(pvrINFO, "cPvrDevice::CurrentNorm=0x%08llx, CurrentLinesPerFrame=%d on /dev/video%d (%s)",
std, CurrentLinesPerFrame, number, CARDNAME[cardname]);
}
-void cPvrDevice::StopReadThread(void) {
+void cPvrDevice::StopReadThread(void)
+{
if (readThreadRunning) {
- log(pvrDEBUG2,"cPvrDevice::StopReadThread on /dev/video%d (%s): read thread exists, delete it", \
- number, CARDNAME[cardname]);
- cPvrReadThread * readThread_tmp = readThread;
+ log(pvrDEBUG2,"cPvrDevice::StopReadThread on /dev/video%d (%s): read thread exists, delete it", number, CARDNAME[cardname]);
+ cPvrReadThread *readThread_tmp = readThread;
readThread = NULL;
delete readThread_tmp;
- }
- else {
- log(pvrDEBUG2,"cPvrDevice::StopReadThread: no read thread running on /dev/video%d (%s)", \
- number, CARDNAME[cardname]);
}
+ else
+ log(pvrDEBUG2,"cPvrDevice::StopReadThread: no read thread running on /dev/video%d (%s)", number, CARDNAME[cardname]);
}
-void cPvrDevice::ReInitAll(void) {
- log(pvrDEBUG1,"cPvrDevice::ReInitAll");
+void cPvrDevice::ReInitAll(void)
+{
+ log(pvrDEBUG1, "cPvrDevice::ReInitAll");
int i;
for (i = 0; i < kMaxPvrDevices; i++) {
- if (PvrDevices[i]) {
+ if (PvrDevices[i])
PvrDevices[i]->ReInit();
- }
}
}
-int cPvrDevice::Count() {
+int cPvrDevice::Count()
+{
int count = 0;
for (int i = 0; i < kMaxPvrDevices; i++) {
if (PvrDevices[i])
@@ -514,7 +516,8 @@ int cPvrDevice::Count() {
return count;
}
-cPvrDevice * cPvrDevice::Get(int index) {
+cPvrDevice *cPvrDevice::Get(int index)
+{
int count = 0;
for (int i = 0; i < kMaxPvrDevices; i++) {
if (PvrDevices[i]) {
@@ -526,8 +529,9 @@ cPvrDevice * cPvrDevice::Get(int index) {
return NULL;
}
-void cPvrDevice::ReInit(void) {
- log(pvrDEBUG1,"cPvrDevice::ReInit /dev/video%d = %s (%s)", number, CARDNAME[cardname], DRIVERNAME[driver]);
+void cPvrDevice::ReInit(void)
+{
+ log(pvrDEBUG1, "cPvrDevice::ReInit /dev/video%d = %s (%s)", number, CARDNAME[cardname], DRIVERNAME[driver]);
SetTunerAudioMode(PvrSetup.TunerAudioMode);
SetInput(CurrentInput);
/* begin new v4l2 ivtv controls */
@@ -574,7 +578,8 @@ void cPvrDevice::ReInit(void) {
}
}
-bool cPvrDevice::Tune(eVideoInputs encoderInput, int freq) {
+bool cPvrDevice::Tune(eVideoInputs encoderInput, int freq)
+{
double fac = 16;
int freqaux = freq;
struct v4l2_frequency vf;
@@ -584,18 +589,17 @@ bool cPvrDevice::Tune(eVideoInputs encoderInput, int freq) {
memset(&vf, 0, sizeof(vf));
struct v4l2_tuner tuner;
memset(&tuner, 0, sizeof(tuner));
- if (IOCTL(v4l2_fd, VIDIOC_G_TUNER,&tuner) == 0) {
+ if (IOCTL(v4l2_fd, VIDIOC_G_TUNER,&tuner) == 0)
fac = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
- }
vf.tuner = 0;
vf.type = tuner.type;
- vf.frequency = (int) ((double) freqaux * fac / 1000.0);
+ vf.frequency = (int)((double)freqaux * fac / 1000.0);
if (IOCTL(v4l2_fd, VIDIOC_S_FREQUENCY, &vf) == 0) {
- log(pvrDEBUG1, "cPvrDevice::Tune(): set Frequency on /dev/video%d (%s) to %.2f MHz (%d)", \
- number, CARDNAME[cardname], vf.frequency / fac, vf.frequency);
+ log(pvrDEBUG1, "cPvrDevice::Tune(): set Frequency on /dev/video%d (%s) to %.2f MHz (%d)",
+ number, CARDNAME[cardname], vf.frequency / fac, vf.frequency);
}
else {
- log(pvrERROR, "cPvrDevice::Tune(): error on /dev/video%d (%s) tuning to %.2f MHz (%d): %d:%s", \
+ log(pvrERROR, "cPvrDevice::Tune(): error on /dev/video%d (%s) tuning to %.2f MHz (%d): %d:%s",
number, CARDNAME[cardname], vf.frequency / fac, vf.frequency, errno, strerror(errno));
return false;
}
@@ -605,52 +609,52 @@ bool cPvrDevice::Tune(eVideoInputs encoderInput, int freq) {
return true;
}
-bool cPvrDevice::SetInput(int input) {
- if (input == CurrentInput && !FirstChannelSwitch) return true;
- log(pvrDEBUG1,"cPvrDevice::SetInput on /dev/video%d (%s) to %d", number, CARDNAME[cardname], input);
+bool cPvrDevice::SetInput(int input)
+{
+ if (input == CurrentInput && !FirstChannelSwitch)
+ return true;
+ log(pvrDEBUG1, "cPvrDevice::SetInput on /dev/video%d (%s) to %d", number, CARDNAME[cardname], input);
if (IOCTL(v4l2_fd, VIDIOC_S_INPUT, &input) != 0) {
log(pvrERROR, "VIDIOC_S_INPUT failed on /dev/video%d (%s) for input%d, %d:%s",
- number, CARDNAME[cardname], errno, strerror(errno));
+ number, CARDNAME[cardname], errno, strerror(errno));
return false;
}
#if 1 /* workaround for pvrusb2 driver bug: no audio after switching from radio to TV */
- if (input == 0 && CurrentInput == 3 && driver == pvrusb2) {
+ if ((input == 0) && (CurrentInput == 3) && (driver == pvrusb2)) {
usleep(200000); /* 200msec */
- log(pvrDEBUG2,"cPvrDevice::SetInput on /dev/video%d (%s) again to %d (workaround for driver bug)",
- number, CARDNAME[cardname], input);
+ log(pvrDEBUG2, "cPvrDevice::SetInput on /dev/video%d (%s) again to %d (workaround for driver bug)",
+ number, CARDNAME[cardname], input);
IOCTL(v4l2_fd, VIDIOC_S_INPUT, &input); //set input television again
}
#endif
- CurrentInput=input;
+ CurrentInput = input;
if (driver == pvrusb2) {
usleep(100000); /* 100msec */
- if (CurrentInput == inputs[eRadio]) {
- SetControlValue(&PvrSetup.AudioVolumeFM,
- PvrSetup.AudioVolumeFM.value);
- }
- else { //television or extern
+ if (CurrentInput == inputs[eRadio])
+ SetControlValue(&PvrSetup.AudioVolumeFM, PvrSetup.AudioVolumeFM.value);
+ else //television or extern
SetAudioVolumeTV();
- }
}
return true;
}
-bool cPvrDevice::SetAudioInput(int input) {
- struct v4l2_audio a;
+bool cPvrDevice::SetAudioInput(int input)
+{
+ struct v4l2_audio a;
a.index = input;
log(pvrDEBUG1,"cPvrDevice::SetAudioInput on /dev/video%d (%s) to %d", number, CARDNAME[cardname], input);
if (IOCTL(v4l2_fd, VIDIOC_S_AUDIO, &a) != 0) {
log(pvrERROR, "VIDIOC_S_AUDIO failed on /dev/video%d (%s) for input%d, %d:%s",
- number, CARDNAME[cardname], errno, strerror(errno));
+ number, CARDNAME[cardname], errno, strerror(errno));
return false;
}
return true;
}
-bool cPvrDevice::SetVideoNorm(uint64_t norm) {
- if (norm == CurrentNorm){
+bool cPvrDevice::SetVideoNorm(uint64_t norm)
+{
+ if (norm == CurrentNorm)
return true;
- }
log(pvrDEBUG1, "SetVideoNorm(0x%08llx) for /dev/video%d (%s)", norm, number, CARDNAME[cardname]);
if (hasDecoder) {
log(pvrDEBUG1, "cPvrDevice::we need to stop the PVR350 decoder");
@@ -658,65 +662,66 @@ bool cPvrDevice::SetVideoNorm(uint64_t norm) {
memset(&cmd, 0, sizeof(cmd));
cmd.cmd = VIDEO_CMD_STOP;
cmd.flags = VIDEO_CMD_STOP_TO_BLACK | VIDEO_CMD_STOP_IMMEDIATELY;
- if (IOCTL(v4l2_fd, VIDEO_COMMAND, &cmd) < 0) {
+ if (IOCTL(v4l2_fd, VIDEO_COMMAND, &cmd) < 0)
log(pvrERROR, "pvrinput: VIDEO_CMD_STOP error on /dev/video%d=%d:%s", number, strerror(errno));
- }
}
if (IOCTL(v4l2_fd, VIDIOC_S_STD, &norm) !=0) {
- log(pvrERROR, "cPvrDevice::SetVideoNorm() on /dev/video%d (%s) failed, %d:%s", \
- number, CARDNAME[cardname], errno, strerror(errno));
+ log(pvrERROR, "cPvrDevice::SetVideoNorm() on /dev/video%d (%s) failed, %d:%s",
+ number, CARDNAME[cardname], errno, strerror(errno));
return false;
}
- CurrentNorm=norm;
+ CurrentNorm = norm;
return true;
}
-bool cPvrDevice::SetVideoSize(int width, int height) {
- log(pvrDEBUG1,"cPvrDevice::SetVideoSize");
+bool cPvrDevice::SetVideoSize(int width, int height)
+{
+ log(pvrDEBUG1, "cPvrDevice::SetVideoSize");
struct v4l2_format vfmt;
-
vfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (IOCTL(v4l2_fd, VIDIOC_G_FMT, &vfmt) != 0) {
- log(pvrERROR, "cPvrDevice::SetVideoSize(): VIDIOC_G_FMT failed on /dev/video%d (%s), %d:%s", \
- number, CARDNAME[cardname], errno, strerror(errno));
- return false;
- }
- vfmt.fmt.pix.width = width;
+ log(pvrERROR, "cPvrDevice::SetVideoSize(): VIDIOC_G_FMT failed on /dev/video%d (%s), %d:%s",
+ number, CARDNAME[cardname], errno, strerror(errno));
+ return false;
+ }
+ vfmt.fmt.pix.width = width;
vfmt.fmt.pix.height = height;
if (IOCTL(v4l2_fd, VIDIOC_S_FMT, &vfmt) != 0) {
- log(pvrERROR, "cPvrDevice::SetVideoSize(): VIDIOC_S_FMT failed on /dev/video%d (%s), %d:%s", \
- number, CARDNAME[cardname], errno, strerror(errno));
- return false;
- }
+ log(pvrERROR, "cPvrDevice::SetVideoSize(): VIDIOC_S_FMT failed on /dev/video%d (%s), %d:%s",
+ number, CARDNAME[cardname], errno, strerror(errno));
+ return false;
+ }
return true;
}
-void cPvrDevice::SetTunerAudioMode(int tuneraudiomode) {
+void cPvrDevice::SetTunerAudioMode(int tuneraudiomode)
+{
if (!hasTuner)
return;
- log(pvrDEBUG1, "cPvrDevice::SetTunerAudioMode(%s) on /dev/video%d (%s)", \
- tuneraudiomode == V4L2_TUNER_MODE_MONO?"mono":
- tuneraudiomode == V4L2_TUNER_MODE_STEREO?"stereo":
- tuneraudiomode == V4L2_TUNER_MODE_LANG1?"lang1":
- tuneraudiomode == V4L2_TUNER_MODE_LANG2?"lang2":"bilingual", \
+ log(pvrDEBUG1, "cPvrDevice::SetTunerAudioMode(%s) on /dev/video%d (%s)",
+ tuneraudiomode == V4L2_TUNER_MODE_MONO ? "mono" :
+ tuneraudiomode == V4L2_TUNER_MODE_STEREO ? "stereo" :
+ tuneraudiomode == V4L2_TUNER_MODE_LANG1 ? "lang1" :
+ tuneraudiomode == V4L2_TUNER_MODE_LANG2 ? "lang2" : "bilingual",
number, CARDNAME[cardname]);
struct v4l2_tuner vt;
memset(&vt, 0, sizeof(vt));
vt.audmode = tuneraudiomode;
if (IOCTL(v4l2_fd, VIDIOC_S_TUNER, &vt))
- log(pvrERROR, "cPvrDevice::SetTunerAudioMode(%d): error %d:%s on /dev/video%d (%s)", \
- tuneraudiomode, errno, strerror(errno), number, CARDNAME[cardname]);
+ log(pvrERROR, "cPvrDevice::SetTunerAudioMode(%d): error %d:%s on /dev/video%d (%s)",
+ tuneraudiomode, errno, strerror(errno), number, CARDNAME[cardname]);
}
-void cPvrDevice::SetAudioVolumeTV() {
- log(pvrDEBUG2, "AudioVolumeTVException.value=%d; AudioVolumeTVCommon.value=%d; number=%d, AudioVolumeTVExceptionCard=%d", \
+void cPvrDevice::SetAudioVolumeTV()
+{
+ log(pvrDEBUG2, "AudioVolumeTVException.value=%d; AudioVolumeTVCommon.value=%d; number=%d, AudioVolumeTVExceptionCard=%d",
PvrSetup.AudioVolumeTVException.value, PvrSetup.AudioVolumeTVCommon.value, number, PvrSetup.AudioVolumeTVExceptionCard);
- if ((PvrSetup.AudioVolumeTVExceptionCard >= 0 && PvrSetup.AudioVolumeTVExceptionCard <=7) \
- && (number == PvrSetup.AudioVolumeTVExceptionCard)) { //special value selected for a /dev/videoX number
- log(pvrDEBUG1, "cPvrDevice::SetAudioVolumeTVException %d for /dev/video%d (%s)", \
- PvrSetup.AudioVolumeTVException.value, number, CARDNAME[cardname]);
- SetControlValue(&PvrSetup.AudioVolumeTVException, PvrSetup.AudioVolumeTVException.value);
- }
+ if ((PvrSetup.AudioVolumeTVExceptionCard >= 0 && PvrSetup.AudioVolumeTVExceptionCard <= 7)
+ && (number == PvrSetup.AudioVolumeTVExceptionCard)) { //special value selected for a /dev/videoX number
+ log(pvrDEBUG1, "cPvrDevice::SetAudioVolumeTVException %d for /dev/video%d (%s)",
+ PvrSetup.AudioVolumeTVException.value, number, CARDNAME[cardname]);
+ SetControlValue(&PvrSetup.AudioVolumeTVException, PvrSetup.AudioVolumeTVException.value);
+ }
if (PvrSetup.AudioVolumeTVExceptionCard >= 9 && PvrSetup.AudioVolumeTVExceptionCard <=18) { //special value for card(s) with certain name
if ((cardname == PVR150 && PvrSetup.AudioVolumeTVExceptionCard ==9) ||
(cardname == PVR250 && PvrSetup.AudioVolumeTVExceptionCard ==10) ||
@@ -728,46 +733,46 @@ void cPvrDevice::SetAudioVolumeTV() {
(cardname == HVR1900 && PvrSetup.AudioVolumeTVExceptionCard ==16) ||
(cardname == HVR1950 && PvrSetup.AudioVolumeTVExceptionCard ==17) ||
(cardname == PVRUSB2 && PvrSetup.AudioVolumeTVExceptionCard ==18) ) {
- log(pvrDEBUG1, "cPvrDevice::SetAudioVolumeTVException %d for /dev/video%d (%s)", \
- PvrSetup.AudioVolumeTVException.value, number, CARDNAME[cardname]);
+ log(pvrDEBUG1, "cPvrDevice::SetAudioVolumeTVException %d for /dev/video%d (%s)",
+ PvrSetup.AudioVolumeTVException.value, number, CARDNAME[cardname]);
SetControlValue(&PvrSetup.AudioVolumeTVException, PvrSetup.AudioVolumeTVException.value);
}
}
else { //no special value (PvrSetup.AudioVolumeTVExceptionCard ==8)
- log(pvrDEBUG1, "cPvrDevice::SetAudioVolumeTVCommon %d for /dev/video%d (%s)", \
- PvrSetup.AudioVolumeTVCommon.value, number, CARDNAME[cardname]);
- SetControlValue(&PvrSetup.AudioVolumeTVCommon, PvrSetup.AudioVolumeTVCommon.value);
- }
+ log(pvrDEBUG1, "cPvrDevice::SetAudioVolumeTVCommon %d for /dev/video%d (%s)",
+ PvrSetup.AudioVolumeTVCommon.value, number, CARDNAME[cardname]);
+ SetControlValue(&PvrSetup.AudioVolumeTVCommon, PvrSetup.AudioVolumeTVCommon.value);
+ }
}
-void cPvrDevice::SetEncoderState(eEncState state) {
- log(pvrDEBUG1, "cPvrDevice::SetEncoderState (%s) for /dev/video%d (%s)", \
- state==eStop?"Stop":"Start", number, CARDNAME[cardname]);
+void cPvrDevice::SetEncoderState(eEncState state)
+{
+ log(pvrDEBUG1, "cPvrDevice::SetEncoderState (%s) for /dev/video%d (%s)", state == eStop ? "Stop" : "Start", number, CARDNAME[cardname]);
if (driver == ivtv || driver == cx18 || driver == hdpvr) {
struct v4l2_encoder_cmd encoderCommand;
memset(&encoderCommand, 0, sizeof(encoderCommand));
- switch(state) {
+ switch (state) {
case eStop : encoderCommand.cmd = V4L2_ENC_CMD_STOP; break;
case eStart : encoderCommand.cmd = V4L2_ENC_CMD_START; break;
}
- if (IOCTL(v4l2_fd, VIDIOC_ENCODER_CMD, &encoderCommand))
- log(pvrERROR, "cPvrDevice::SetEncoderState(%s): error %d:%s on /dev/video%d (%s)", \
- state==eStop?"Stop":"Start", errno, strerror(errno), number, CARDNAME[cardname]);
+ if (IOCTL(v4l2_fd, VIDIOC_ENCODER_CMD, &encoderCommand)) {
+ log(pvrERROR, "cPvrDevice::SetEncoderState(%s): error %d:%s on /dev/video%d (%s)",
+ state == eStop ? "Stop" : "Start", errno, strerror(errno), number, CARDNAME[cardname]);
+ }
}
if (driver == pvrusb2 && state == eStop) {
int retry_count = 5;
retry:
close(v4l2_fd);
v4l2_fd = -1;
- log(pvrDEBUG2, "cPvrDevice::SetEncoderState (eStop): /dev/video%d (%s) is closed", \
+ log(pvrDEBUG2, "cPvrDevice::SetEncoderState (eStop): /dev/video%d (%s) is closed",
number, CARDNAME[cardname]);
pvrusb2_ready = false;
- char * devName;
- if (asprintf(&devName, "/dev/video%d", number) != -1) {
+ char *devName;
+ if (asprintf(&devName, "/dev/video%d", number) != -1)
v4l2_fd = open(devName, O_RDWR); //reopen for tuning
- }
if (v4l2_fd < 0) {
- log(pvrERROR, "cPvrDevice::SetEncoderState(eStop): error reopening %s (%s): %d:%s", \
+ log(pvrERROR, "cPvrDevice::SetEncoderState(eStop): error reopening %s (%s): %d:%s",
CARDNAME[cardname], devName, errno, strerror(errno));
free(devName);
retry_count--;
@@ -775,7 +780,7 @@ void cPvrDevice::SetEncoderState(eEncState state) {
goto retry;
}
else {
- log(pvrDEBUG2, "cPvrDevice::SetEncoderState (eStop): %s (%s) successfully re-opened", \
+ log(pvrDEBUG2, "cPvrDevice::SetEncoderState (eStop): %s (%s) successfully re-opened",
devName, CARDNAME[cardname]);
pvrusb2_ready = true;
free(devName);
@@ -783,10 +788,10 @@ void cPvrDevice::SetEncoderState(eEncState state) {
}
}
-bool cPvrDevice::SetVBImode(int vbiLinesPerFrame, int vbistatus) {
- if (v4l2_fd >= 0 && SupportsSlicedVBI ) {
- log(pvrDEBUG1, "SetVBImode(%d, %d) on /dev/video%d (%s)", \
- vbiLinesPerFrame, vbistatus, number, CARDNAME[cardname]);
+bool cPvrDevice::SetVBImode(int vbiLinesPerFrame, int vbistatus)
+{
+ if (v4l2_fd >= 0 && SupportsSlicedVBI) {
+ log(pvrDEBUG1, "SetVBImode(%d, %d) on /dev/video%d (%s)", vbiLinesPerFrame, vbistatus, number, CARDNAME[cardname]);
struct v4l2_format vbifmt;
struct v4l2_ext_controls ctrls;
struct v4l2_ext_control ctrl;
@@ -797,12 +802,12 @@ bool cPvrDevice::SetVBImode(int vbiLinesPerFrame, int vbistatus) {
ctrl.value = vbistatus;
/* 0 = V4L2_MPEG_STREAM_VBI_FMT_NONE, No VBI in the MPEG stream
1 = V4L2_MPEG_STREAM_VBI_FMT_IVTV, VBI in private packets, IVTV format */
- ctrls.ctrl_class=V4L2_CTRL_CLASS_MPEG;
- ctrls.controls=&ctrl;
- ctrls.count=1;
+ ctrls.ctrl_class = V4L2_CTRL_CLASS_MPEG;
+ ctrls.controls = &ctrl;
+ ctrls.count = 1;
if (IOCTL(v4l2_fd, VIDIOC_S_EXT_CTRLS, &ctrls) != 0) {
log(pvrERROR, "cPvrDevice::SetVBImode(): error setting vbi mode (ctrls) on /dev/video%d (%s), %d:%s",
- number, CARDNAME[cardname], errno, strerror(errno));
+ number, CARDNAME[cardname], errno, strerror(errno));
return false;
}
if (ctrl.value == V4L2_MPEG_STREAM_VBI_FMT_IVTV && vbiLinesPerFrame == 625) {
@@ -822,9 +827,10 @@ bool cPvrDevice::SetVBImode(int vbiLinesPerFrame, int vbistatus) {
}
bool cPvrDevice::ParseChannel(const cChannel *Channel, int *input, uint64_t *norm, int *LinesPerFrame,
- int *card, eVideoInputs *encoderInput, int *apid, int *vpid, int *tpid) const {
- *card = 999;
- *norm = CurrentNorm; //make sure we have a value if channels.conf has no optArg for norm
+ int *card, eVideoInputs *encoderInput, int *apid, int *vpid, int *tpid) const
+{
+ *card = 999;
+ *norm = CurrentNorm; //make sure we have a value if channels.conf has no optArg for norm
*LinesPerFrame = CurrentLinesPerFrame; //see above
*input = -1;
if (Channel->IsCable() && Channel->Ca() == 0xA1) {
@@ -833,30 +839,29 @@ bool cPvrDevice::ParseChannel(const cChannel *Channel, int *input, uint64_t *nor
}
#ifdef PVR_SOURCEPARAMS
if (cPvrSourceParam::IsPvr(Channel->Source())) {
- const char * str = Channel->Parameters();
- const char * PluginId = "PVRINPUT";
- char * Input = NULL;
- char * optArg1 = NULL;
- char * optArg2 = NULL;
- int NumArgs = 1 + sscanf(str, "%a[^|]|%a[^|]|%a[^:\n]",
- &Input, &optArg1, &optArg2);
+ const char *str = Channel->Parameters();
+ const char *PluginId = "PVRINPUT";
+ char *Input = NULL;
+ char *optArg1 = NULL;
+ char *optArg2 = NULL;
+ int NumArgs = 1 + sscanf(str, "%a[^|]|%a[^|]|%a[^:\n]", &Input, &optArg1, &optArg2);
#else
if (Channel->IsPlug()) {
- const char * str = Channel->PluginParam();
- char * PluginId = NULL;
- char * Input = NULL;
- char * optArg1 = NULL;
- char * optArg2 = NULL;
- int NumArgs = sscanf(str, "%a[^|]|%a[^|]|%a[^|]|%a[^:\n]",
- &PluginId, &Input, &optArg1, &optArg2);
+ const char *str = Channel->PluginParam();
+ char *PluginId = NULL;
+ char *Input = NULL;
+ char *optArg1 = NULL;
+ char *optArg2 = NULL;
+ int NumArgs = sscanf(str, "%a[^|]|%a[^|]|%a[^|]|%a[^:\n]", &PluginId, &Input, &optArg1, &optArg2);
#endif
if (NumArgs >= 2) {
- if (strcasecmp(PluginId, "PVRINPUT")) return false;
+ if (strcasecmp(PluginId, "PVRINPUT"))
+ return false;
log(pvrDEBUG1, "cPvrDevice::ParseChannel: using iptv channel syntax.");
- *vpid = Channel->Vpid();
- *apid = Channel->Apid(0);
- *tpid = Channel->Tpid();
+ *vpid = Channel->Vpid();
+ *apid = Channel->Apid(0);
+ *tpid = Channel->Tpid();
if (!strcasecmp (Input, "RADIO")) *encoderInput=eRadio;
else if (!strcasecmp (Input, "TV")) *encoderInput=eTelevision;
else if (!strncasecmp(Input, "COMPOSITE",9)) *encoderInput=eExternalInput;
@@ -959,27 +964,27 @@ bool cPvrDevice::ParseChannel(const cChannel *Channel, int *input, uint64_t *nor
else if (!strcasecmp (optArg2, "CARD7")) *card = 7;
}
log(pvrDEBUG2, "ParseChannel %s input %d, norm=0x%08llx, card %d",
- (*encoderInput==eRadio)?"Radio":(*encoderInput==eTelevision)?"TV":"Ext",
- *input,*norm,*card);
+ (*encoderInput == eRadio) ? "Radio" : (*encoderInput == eTelevision) ? "TV" : "Ext", *input, *norm, *card);
return true;
}
}
return false;
}
-bool cPvrDevice::SetChannelDevice(const cChannel * Channel, bool LiveView) {
+bool cPvrDevice::SetChannelDevice(const cChannel * Channel, bool LiveView)
+{
log(pvrDEBUG1, "cPvrDevice::SetChannelDevice %d (%s) %3.2fMHz (/dev/video%d = %s)",
- Channel->Number(), Channel->Name(), (double) Channel->Frequency()/1000, number, CARDNAME[cardname]);
+ Channel->Number(), Channel->Name(), (double)Channel->Frequency() / 1000, number, CARDNAME[cardname]);
int input, LinesPerFrame, card;
uint64_t norm;
eVideoInputs encoderInput;
- if (! ParseChannel(Channel,&input,&norm,&LinesPerFrame,&card,&encoderInput,&apid,&vpid,&tpid))
+ if (!ParseChannel(Channel, &input, &norm, &LinesPerFrame, &card, &encoderInput, &apid, &vpid, &tpid))
return false;
if ((Channel->Number() == currentChannel.Number()) && (Channel->Frequency() == frequency) && (input == CurrentInput) && (norm == CurrentNorm))
return true;
log(pvrDEBUG1, "cPvrDevice::SetChannelDevice prepare switch to %d (%s) %3.2fMHz (/dev/video%d = %s)",
- Channel->Number(), Channel->Name(), (double) Channel->Frequency()/1000, number, CARDNAME[cardname]);
+ Channel->Number(), Channel->Name(), (double)Channel->Frequency() / 1000, number, CARDNAME[cardname]);
newFrequency = Channel->Frequency();
newInput = input;
newNorm = norm;
@@ -990,7 +995,8 @@ bool cPvrDevice::SetChannelDevice(const cChannel * Channel, bool LiveView) {
return true;
}
-bool cPvrDevice::SetPid(cPidHandle * Handle, int Type, bool On) {
+bool cPvrDevice::SetPid(cPidHandle * Handle, int Type, bool On)
+{
log(pvrDEBUG2, "cPvrDevice::SetPid %d = %s", Handle->pid, On?"On":"Off");
return true;
}
@@ -1012,15 +1018,15 @@ void cPvrDevice::CloseFilter(int Handle)
}
#endif
-bool cPvrDevice::OpenDvr(void) {
+bool cPvrDevice::OpenDvr(void)
+{
log(pvrDEBUG1, "entering cPvrDevice::OpenDvr: Dvr of /dev/video%d (%s) is %s",
number, CARDNAME[cardname], (dvrOpen)?"open":"closed");
delivered = false;
CloseDvr();
while (dvrOpen) { //wait until CloseDvr has finnished
usleep(40000);
- log(pvrDEBUG1, "OpenDvr: wait for CloseDvr on /dev/video%d (%s) to finnish", \
- number, CARDNAME[cardname]);
+ log(pvrDEBUG1, "OpenDvr: wait for CloseDvr on /dev/video%d (%s) to finnish", number, CARDNAME[cardname]);
}
tsBuffer->Clear();
ResetBuffering();
@@ -1035,8 +1041,7 @@ bool cPvrDevice::OpenDvr(void) {
if (driver == pvrusb2) {
while (!pvrusb2_ready) { //re-opening pvrusb2 in SetEncoderState might be in progress
usleep(40000);
- log(pvrDEBUG1, "OpenDvr: wait until /dev/video%d (%s) is ready", \
- number, CARDNAME[cardname]);
+ log(pvrDEBUG1, "OpenDvr: wait until /dev/video%d (%s) is ready", number, CARDNAME[cardname]);
}
}
switch (newEncoderInput) {
@@ -1045,14 +1050,13 @@ bool cPvrDevice::OpenDvr(void) {
case eComponent: //no break here, continuing at next case item
case eExternalInput:
{
- log(pvrDEBUG2,"channel is external input.");
+ log(pvrDEBUG2, "channel is external input.");
if (radio_fd >= 0) {
close(radio_fd);
radio_fd = -1;
usleep(100000); /* 100msec */
SetAudioVolumeTV();
- SetControlValue(&PvrSetup.VideoBitrateTV, \
- PvrSetup.VideoBitrateTV.value);
+ SetControlValue(&PvrSetup.VideoBitrateTV, PvrSetup.VideoBitrateTV.value);
}
if (PvrSetup.UseExternChannelSwitchScript) {
@@ -1060,9 +1064,8 @@ bool cPvrDevice::OpenDvr(void) {
*externChannelSwitchScript, currentChannel.Sid(), currentChannel.Number(),
number, currentChannel.Frequency());
log(pvrDEBUG1, "OpenDvr: calling %s", *cmd);
- if (system(*cmd) < 0) {
- log(pvrERROR, "OpenDvr: executing %s failed", *cmd);
- }
+ if (system(*cmd) < 0)
+ log(pvrERROR, "OpenDvr: executing %s failed", *cmd);
log(pvrDEBUG1, "OpenDvr: returned from %s", *cmd);
if (PvrSetup.ExternChannelSwitchSleep > 0) {
log(pvrDEBUG2, "OpenDvr: sleeping for %d seconds...", PvrSetup.ExternChannelSwitchSleep);
@@ -1071,60 +1074,67 @@ bool cPvrDevice::OpenDvr(void) {
}
}
- if (! SetInput(newInput)) return false;
- if (! SetVideoNorm(newNorm)) return false;
+ if (!SetInput(newInput))
+ return false;
+ if (!SetVideoNorm(newNorm))
+ return false;
frequency = newFrequency; // since we don't tune: set it here
EncoderInput = newEncoderInput;
break;
}
- case eRadio :
+ case eRadio:
{
log(pvrDEBUG2,"channel is FM radio.");
switch (driver) {
case ivtv:
case cx18:
- if (radio_dev < 0) return false; //no hardware support.
+ if (radio_dev < 0)
+ return false; //no hardware support.
if (radio_fd < 0) {
- char * devName;
- if (asprintf(&devName, "/dev/radio%d", radio_dev) != -1) {
+ char *devName;
+ if (asprintf(&devName, "/dev/radio%d", radio_dev) != -1)
radio_fd = open(devName, O_RDONLY);
- }
if (radio_fd < 0) {
- log(pvrERROR, "Error opening FM radio device %s: %s",\
- devName, strerror(errno));
+ log(pvrERROR, "Error opening FM radio device %s: %s", devName, strerror(errno));
return false;
}
free(devName);
usleep(100000); /* 100msec */
- SetControlValue(&PvrSetup.AudioVolumeFM, \
- PvrSetup.AudioVolumeFM.value);
+ SetControlValue(&PvrSetup.AudioVolumeFM, PvrSetup.AudioVolumeFM.value);
}
break;
case pvrusb2:
- if (! SetInput(inputs[eRadio])) return false;
+ if (!SetInput(inputs[eRadio]))
+ return false;
case cx88_blackbird:
case hdpvr:
break;
- case undef: log(pvrERROR, "driver is unknown!!"); return false;
+ case undef:
+ log(pvrERROR, "driver is unknown!!");
+ return false;
}
- if (! Tune(newEncoderInput, newFrequency)) return false;
+ if (!Tune(newEncoderInput, newFrequency))
+ return false;
break;
}
- case eTelevision :
+ case eTelevision:
{
- log(pvrDEBUG2,"channel is television.");
+ log(pvrDEBUG2, "channel is television.");
if ((driver == ivtv) && (radio_fd >= 0)) {
close(radio_fd);
radio_fd = -1;
usleep(100000); /* 100msec */
SetAudioVolumeTV();
- SetControlValue(&PvrSetup.VideoBitrateTV, \
- PvrSetup.VideoBitrateTV.value);
+ SetControlValue(&PvrSetup.VideoBitrateTV, PvrSetup.VideoBitrateTV.value);
}
- if (! SetInput(inputs[eTelevision])) return false;
- if (! SetVideoNorm(newNorm)) return false;
- if (! SetVBImode(newLinesPerFrame, PvrSetup.SliceVBI)) return false;
- if (! Tune(newEncoderInput, newFrequency)) return false;
+ if (!SetInput(inputs[eTelevision]))
+ return false;
+ if (!SetVideoNorm(newNorm))
+ return false;
+ if (!SetVBImode(newLinesPerFrame, PvrSetup.SliceVBI))
+ return false;
+ if (!Tune(newEncoderInput, newFrequency))
+ return false;
}
} //end: switch (newEncoderInput)
ChannelSettingsDone = true;
@@ -1132,19 +1142,20 @@ bool cPvrDevice::OpenDvr(void) {
} //end: if ((!ChannelSettingsDone)
SetEncoderState(eStart);
if (!readThreadRunning) {
- log(pvrDEBUG2, "cPvrDevice::OpenDvr: create new readThread on /dev/video%d (%s)", \
- number, CARDNAME[cardname]);
- readThread = new cPvrReadThread(tsBuffer, this);
- }
+ log(pvrDEBUG2, "cPvrDevice::OpenDvr: create new readThread on /dev/video%d (%s)", number, CARDNAME[cardname]);
+ readThread = new cPvrReadThread(tsBuffer, this);
+ }
} //end: if (!dvrOpen)
dvrOpen = true;
return true;
}
-void cPvrDevice::CloseDvr(void) {
- if (isClosing) return;
+void cPvrDevice::CloseDvr(void)
+{
+ if (isClosing)
+ return;
isClosing = true;
- log(pvrDEBUG2, "entering cPvrDevice::CloseDvr: Dvr of /dev/video%d (%s) is %s", \
+ log(pvrDEBUG2, "entering cPvrDevice::CloseDvr: Dvr of /dev/video%d (%s) is %s",
number, CARDNAME[cardname], (dvrOpen)?"open":"closed");
if (dvrOpen) {
StopReadThread();
@@ -1155,14 +1166,16 @@ void cPvrDevice::CloseDvr(void) {
isClosing = false;
}
-void cPvrDevice::ResetBuffering() {
+void cPvrDevice::ResetBuffering()
+{
tsBufferPrefill = (MEGABYTE(PvrSetup.TsBufferSizeMB) * PvrSetup.TsBufferPrefillRatio) / 100;
tsBufferPrefill -= (tsBufferPrefill % TS_SIZE);
log(pvrDEBUG2, "cPvrDevice::ResetBuffering(): tsBuffer prefill = %d for /dev/video%d (%s)",
tsBufferPrefill, number, CARDNAME[cardname]);
}
-bool cPvrDevice::IsBuffering() {
+bool cPvrDevice::IsBuffering()
+{
int avail = tsBuffer->Available();
if (tsBufferPrefill && (avail < tsBufferPrefill)) {
log(pvrDEBUG2, "cPvrDevice::IsBuffering(): available = %d, prefill = %d for /dev/video%d (%s)",
@@ -1173,11 +1186,11 @@ bool cPvrDevice::IsBuffering() {
return false;
}
-bool cPvrDevice::GetTSPacket(uchar *&Data) {
+bool cPvrDevice::GetTSPacket(uchar *&Data)
+{
int Count = 0;
- if (! tsBuffer ) {
- log(pvrERROR, "cPvrDevice::GetTSPacket(): no tsBuffer for /dev/video%d (%s)", \
- number, CARDNAME[cardname]);
+ if (!tsBuffer ) {
+ log(pvrERROR, "cPvrDevice::GetTSPacket(): no tsBuffer for /dev/video%d (%s)", number, CARDNAME[cardname]);
return false;
}
if (tsBuffer && readThreadRunning) {
@@ -1213,20 +1226,21 @@ bool cPvrDevice::GetTSPacket(uchar *&Data) {
return false;
}
-bool cPvrDevice::ProvidesSource(int Source) const {
+bool cPvrDevice::ProvidesSource(int Source) const
+{
#ifdef PVR_SOURCEPARAMS
if (cPvrSourceParam::IsPvr(Source)) {
#else
if (cSource::IsPlug(Source)) {
#endif
- log(pvrDEBUG1, "cPvrDevice::ProvidesSource Source=%s -> true",
- (const char *) cSource::ToString(Source));
+ log(pvrDEBUG1, "cPvrDevice::ProvidesSource Source=%s -> true", (const char*)cSource::ToString(Source));
return true;
}
return false;
}
-bool cPvrDevice::ProvidesTransponder(const cChannel * Channel) const {
+bool cPvrDevice::ProvidesTransponder(const cChannel *Channel) const
+{
return ProvidesSource(Channel->Source());
}
@@ -1235,52 +1249,52 @@ int cPvrDevice::NumProvidedSystems(void) const
return 1;
}
-bool cPvrDevice::ProvidesChannel(const cChannel * Channel, int Priority, \
- bool * NeedsDetachReceivers) const {
+bool cPvrDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
+{
bool result = false;
bool hasPriority = Priority < 0 || Priority > this->Priority();
bool needsDetachReceivers = true;
int input, LinesPerFrame, dev;
uint64_t norm;
- eVideoInputs encoderInput; //only dummy
- int audioPid,videoPid,teletextPid; //only dummy
- if (! ParseChannel(Channel, &input, &norm, &LinesPerFrame, &dev, &encoderInput, &audioPid, &videoPid, &teletextPid))
+ eVideoInputs encoderInput; //only dummy
+ int audioPid, videoPid, teletextPid; //only dummy
+ if (!ParseChannel(Channel, &input, &norm, &LinesPerFrame, &dev, &encoderInput, &audioPid, &videoPid, &teletextPid))
return false; // non-pvrinput channel or wrong syntax used, silently ignore this one
if ((dev < 999) && (number != dev)) {
log(pvrDEBUG1, "cPvrDevice::ProvidesChannel %s -> false (this is /dev/video%d, but CARD parameter says /dev/video%d only)",
Channel->Name(), number, dev);
return false;
}
- if ((PvrSetup.UseOnlyCard >= 0 && PvrSetup.UseOnlyCard <=7) && (number != PvrSetup.UseOnlyCard)) { //select by number
+ if ((PvrSetup.UseOnlyCard >= 0 && PvrSetup.UseOnlyCard <= 7) && (number != PvrSetup.UseOnlyCard)) { //select by number
log(pvrDEBUG1, "cPvrDevice::ProvidesChannel %s -> false (this is /dev/video%d, but /dev/video%d only was selected in setup)",
Channel->Name(), number, PvrSetup.UseOnlyCard);
return false;
}
- if (PvrSetup.UseOnlyCard >= 9 && PvrSetup.UseOnlyCard <=19) { //select by Name
- if ((cardname == PVR150 && PvrSetup.UseOnlyCard !=9) ||
- (cardname == PVR250 && PvrSetup.UseOnlyCard !=10) ||
- (cardname == PVR350 && PvrSetup.UseOnlyCard !=11) ||
- (cardname == PVR500_1 && PvrSetup.UseOnlyCard !=12) ||
- (cardname == PVR500_2 && PvrSetup.UseOnlyCard !=13) ||
- (cardname == HVR1300 && PvrSetup.UseOnlyCard !=14) ||
- (cardname == HVR1600 && PvrSetup.UseOnlyCard !=15) ||
- (cardname == HVR1900 && PvrSetup.UseOnlyCard !=16) ||
- (cardname == HVR1950 && PvrSetup.UseOnlyCard !=17) ||
- (cardname == PVRUSB2 && PvrSetup.UseOnlyCard !=18) ||
- (cardname == HDPVR && PvrSetup.UseOnlyCard !=19) ) {
+ if (PvrSetup.UseOnlyCard >= 9 && PvrSetup.UseOnlyCard <= 19) { //select by Name
+ if ((cardname == PVR150 && PvrSetup.UseOnlyCard != 9) ||
+ (cardname == PVR250 && PvrSetup.UseOnlyCard != 10) ||
+ (cardname == PVR350 && PvrSetup.UseOnlyCard != 11) ||
+ (cardname == PVR500_1 && PvrSetup.UseOnlyCard != 12) ||
+ (cardname == PVR500_2 && PvrSetup.UseOnlyCard != 13) ||
+ (cardname == HVR1300 && PvrSetup.UseOnlyCard != 14) ||
+ (cardname == HVR1600 && PvrSetup.UseOnlyCard != 15) ||
+ (cardname == HVR1900 && PvrSetup.UseOnlyCard != 16) ||
+ (cardname == HVR1950 && PvrSetup.UseOnlyCard != 17) ||
+ (cardname == PVRUSB2 && PvrSetup.UseOnlyCard != 18) ||
+ (cardname == HDPVR && PvrSetup.UseOnlyCard != 19) ) {
log(pvrDEBUG1, "cPvrDevice::ProvidesChannel %s -> false (this is %s, but %s only was selected in setup)",
- Channel->Name(),CARDNAME[cardname],
- PvrSetup.UseOnlyCard==9?"PVR150": \
- PvrSetup.UseOnlyCard==10?"PVR250": \
- PvrSetup.UseOnlyCard==11?"PVR350": \
- PvrSetup.UseOnlyCard==12?"PVR500#1": \
- PvrSetup.UseOnlyCard==13?"PVR500#2": \
- PvrSetup.UseOnlyCard==14?"HVR1300": \
- PvrSetup.UseOnlyCard==15?"HVR1600": \
- PvrSetup.UseOnlyCard==16?"HVR1900": \
- PvrSetup.UseOnlyCard==17?"HVR1950": \
- PvrSetup.UseOnlyCard==18?"PVRUSB2": \
- PvrSetup.UseOnlyCard==19?"HDPVR":"UNDEF");
+ Channel->Name(), CARDNAME[cardname],
+ PvrSetup.UseOnlyCard == 9 ? "PVR150" :
+ PvrSetup.UseOnlyCard == 10 ? "PVR250" :
+ PvrSetup.UseOnlyCard == 11 ? "PVR350" :
+ PvrSetup.UseOnlyCard == 12 ? "PVR500#1" :
+ PvrSetup.UseOnlyCard == 13 ? "PVR500#2" :
+ PvrSetup.UseOnlyCard == 14 ? "HVR1300" :
+ PvrSetup.UseOnlyCard == 15 ? "HVR1600" :
+ PvrSetup.UseOnlyCard == 16 ? "HVR1900" :
+ PvrSetup.UseOnlyCard == 17 ? "HVR1950" :
+ PvrSetup.UseOnlyCard == 18 ? "PVRUSB2" :
+ PvrSetup.UseOnlyCard == 19 ? "HDPVR" : "UNDEF");
return false;
}
}
@@ -1291,7 +1305,7 @@ bool cPvrDevice::ProvidesChannel(const cChannel * Channel, int Priority, \
}
}
if ((input < 0) || (input >= numInputs)) {
- log(pvrERROR, "cPvrDevice::ProvidesChannel: input %d unknown on /dev/video%d (%s)", \
+ log(pvrERROR, "cPvrDevice::ProvidesChannel: input %d unknown on /dev/video%d (%s)",
input, number, CARDNAME[cardname]);
return false;
}
@@ -1308,18 +1322,19 @@ bool cPvrDevice::ProvidesChannel(const cChannel * Channel, int Priority, \
result = hasPriority;
if (NeedsDetachReceivers)
*NeedsDetachReceivers = needsDetachReceivers;
- log(pvrDEBUG1, "cPvrDevice::ProvidesChannel: /dev/video%d (%s): Channel %d (%s) %3.2fMHz, -> %s", \
- number, CARDNAME[cardname], Channel->Number(), Channel->Name(), (double) Channel->Frequency()/1000, \
- result?"true":"false");
- log(pvrDEBUG2, "cPvrDevice::ProvidesChannel: /dev/video%d: Receiving()=%s, needsDetachReceivers=%s, Priority=%d, hasPriority=%s", \
- number, Receiving(true)?"true":"false", needsDetachReceivers?"true":"false", Priority, hasPriority?"true":"false");
+ log(pvrDEBUG1, "cPvrDevice::ProvidesChannel: /dev/video%d (%s): Channel %d (%s) %3.2fMHz, -> %s",
+ number, CARDNAME[cardname], Channel->Number(), Channel->Name(), (double)Channel->Frequency() / 1000,
+ result ? "true" : "false");
+ log(pvrDEBUG2, "cPvrDevice::ProvidesChannel: /dev/video%d: Receiving()=%s, needsDetachReceivers=%s, Priority=%d, hasPriority=%s",
+ number, Receiving(true) ? "true" : "false", needsDetachReceivers ? "true" : "false", Priority, hasPriority ? "true" : "false");
return result;
}
/*
if a card/driver has unsupported controls, it returns false for this
*/
-bool cPvrDevice::ControlIdIsValid(__u32 ctrlid) {
+bool cPvrDevice::ControlIdIsValid(__u32 ctrlid)
+{
if (driver == hdpvr) {
if (/*(ctrlid != V4L2_CID_BRIGHTNESS) // these controls seem to use other values for the HD PVR
&& (ctrlid != V4L2_CID_CONTRAST) // than the other PVRs (ioctl returns "invalid argument")
@@ -1347,126 +1362,122 @@ If possible, use THIS function for setting VIDIOC_S_EXT_CTRLS.
-wirbel-
*/
-int cPvrDevice::SetControlValue(struct valSet * vs, __s32 Val) {
+int cPvrDevice::SetControlValue(struct valSet * vs, __s32 Val)
+{
if (SetControlValue(vs->ctrl_class, vs->queryctrl.id, Val, vs->queryctrl) == 0) {
- vs->value = Val;
- return 0;
- }
- else
- return -1;
+ vs->value = Val;
+ return 0;
+ }
+ return -1;
}
/*
functionality as above, but no valSet needed.
*/
+int cPvrDevice::SetControlValue(__u32 control, __s32 Val)
+{
+ __u32 ctrl_class=V4L2_CTRL_CLASS_MPEG;
+ struct v4l2_queryctrl *query = 0;
-int cPvrDevice::SetControlValue(__u32 control, __s32 Val) {
-
-__u32 ctrl_class=V4L2_CTRL_CLASS_MPEG;
-struct v4l2_queryctrl * query;
-
-switch (control) {
+ switch (control) {
// picture properties
- case V4L2_CID_BRIGHTNESS: ctrl_class=V4L2_CTRL_CLASS_USER;
- query=&PvrSetup.Brightness.queryctrl;
+ case V4L2_CID_BRIGHTNESS: ctrl_class = V4L2_CTRL_CLASS_USER;
+ query = &PvrSetup.Brightness.queryctrl;
break;
- case V4L2_CID_CONTRAST: ctrl_class=V4L2_CTRL_CLASS_USER;
- query=&PvrSetup.Contrast.queryctrl;
+ case V4L2_CID_CONTRAST: ctrl_class = V4L2_CTRL_CLASS_USER;
+ query = &PvrSetup.Contrast.queryctrl;
break;
- case V4L2_CID_SATURATION: ctrl_class=V4L2_CTRL_CLASS_USER;
- query=&PvrSetup.Saturation.queryctrl;
+ case V4L2_CID_SATURATION: ctrl_class = V4L2_CTRL_CLASS_USER;
+ query = &PvrSetup.Saturation.queryctrl;
break;
- case V4L2_CID_HUE: ctrl_class=V4L2_CTRL_CLASS_USER;
- query=&PvrSetup.Hue.queryctrl;
+ case V4L2_CID_HUE: ctrl_class = V4L2_CTRL_CLASS_USER;
+ query = &PvrSetup.Hue.queryctrl;
break;
// Audio
- case V4L2_CID_AUDIO_VOLUME: ctrl_class=V4L2_CTRL_CLASS_USER;
- query=&PvrSetup.AudioVolumeTVCommon.queryctrl;
+ case V4L2_CID_AUDIO_VOLUME: ctrl_class = V4L2_CTRL_CLASS_USER;
+ query = &PvrSetup.AudioVolumeTVCommon.queryctrl;
break;
- case V4L2_CID_AUDIO_MUTE: ctrl_class=V4L2_CTRL_CLASS_USER;
- query=&PvrSetup.AudioMute.queryctrl;
+ case V4L2_CID_AUDIO_MUTE: ctrl_class = V4L2_CTRL_CLASS_USER;
+ query = &PvrSetup.AudioMute.queryctrl;
break;
case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
- query=&PvrSetup.AudioBitrate.queryctrl;
+ query = &PvrSetup.AudioBitrate.queryctrl;
break;
case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
- query=&PvrSetup.AudioSampling.queryctrl;
+ query = &PvrSetup.AudioSampling.queryctrl;
break;
case V4L2_CID_MPEG_AUDIO_ENCODING:
if (driver == hdpvr)
- query=&PvrSetup.HDPVR_AudioEncoding.queryctrl;
+ query = &PvrSetup.HDPVR_AudioEncoding.queryctrl;
else
- query=&PvrSetup.AudioEncoding.queryctrl;
+ query = &PvrSetup.AudioEncoding.queryctrl;
break;
// Video
case V4L2_CID_MPEG_VIDEO_BITRATE:
- query=&PvrSetup.VideoBitrateTV.queryctrl;
+ query = &PvrSetup.VideoBitrateTV.queryctrl;
break;
case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
- query=&PvrSetup.VideoBitratePeak.queryctrl;
+ query = &PvrSetup.VideoBitratePeak.queryctrl;
break;
case V4L2_CID_MPEG_VIDEO_ASPECT:
- query=&PvrSetup.AspectRatio.queryctrl;
+ query = &PvrSetup.AspectRatio.queryctrl;
break;
// MPEG
case V4L2_CID_MPEG_STREAM_TYPE:
- query=&PvrSetup.StreamType.queryctrl;
+ query = &PvrSetup.StreamType.queryctrl;
break;
case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
- query=&PvrSetup.BitrateMode.queryctrl;
+ query = &PvrSetup.BitrateMode.queryctrl;
break;
case V4L2_CID_MPEG_VIDEO_B_FRAMES:
- query=&PvrSetup.BFrames.queryctrl;
+ query = &PvrSetup.BFrames.queryctrl;
break;
case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
- query=&PvrSetup.GopSize.queryctrl;
+ query = &PvrSetup.GopSize.queryctrl;
break;
case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
- query=&PvrSetup.GopClosure.queryctrl;
+ query = &PvrSetup.GopClosure.queryctrl;
break;
// Video Filters
case V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE:
- query=&PvrSetup.FilterSpatialMode.queryctrl;
+ query = &PvrSetup.FilterSpatialMode.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER:
- query=&PvrSetup.FilterSpatial.queryctrl;
+ query = &PvrSetup.FilterSpatial.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE:
- query=&PvrSetup.FilterLumaSpatialType.queryctrl;
+ query = &PvrSetup.FilterLumaSpatialType.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE:
- query=&PvrSetup.FilterChromaSpatialType.queryctrl;
+ query = &PvrSetup.FilterChromaSpatialType.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE:
- query=&PvrSetup.FilterTemporalMode.queryctrl;
+ query = &PvrSetup.FilterTemporalMode.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER:
- query=&PvrSetup.FilterTemporal.queryctrl;
+ query = &PvrSetup.FilterTemporal.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE:
- query=&PvrSetup.FilterMedianType.queryctrl;
+ query = &PvrSetup.FilterMedianType.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM:
- query=&PvrSetup.FilterLumaMedianBottom.queryctrl;
+ query = &PvrSetup.FilterLumaMedianBottom.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP:
- query=&PvrSetup.FilterLumaMedianTop.queryctrl;
+ query = &PvrSetup.FilterLumaMedianTop.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM:
- query=&PvrSetup.FilterChromaMedianBottom.queryctrl;
+ query = &PvrSetup.FilterChromaMedianBottom.queryctrl;
break;
case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP:
- query=&PvrSetup.FilterChromaMedianTop.queryctrl;
+ query = &PvrSetup.FilterChromaMedianTop.queryctrl;
+ break;
+ case V4L2_CID_MPEG_STREAM_VBI_FMT:
+ if (SupportsSlicedVBI)
+ query = &PvrSetup.VBIformat.queryctrl;
break;
- if (SupportsSlicedVBI) {
- // VBI
- case V4L2_CID_MPEG_STREAM_VBI_FMT:
- query=&PvrSetup.VBIformat.queryctrl;
- break;
- }
default:
- log(pvrERROR, "SetControlValue(__u32 control, __s32 Val): ERROR: control %d not included in switch(control)",\
- control);
+ log(pvrERROR, "SetControlValue(__u32 control, __s32 Val): ERROR: control %d not included in switch(control)", control);
return -1;
}
@@ -1482,30 +1493,28 @@ default.
Has to be used *after* calling cPvrDevice::QueryAllControls().
-wirbel-
*/
-
-int cPvrDevice::SetControlValue(__u32 control_class, __u32 control, __s32 Val, \
- struct v4l2_queryctrl queryctrl) {
-
+int cPvrDevice::SetControlValue(__u32 control_class, __u32 control, __s32 Val, struct v4l2_queryctrl queryctrl)
+{
struct v4l2_ext_controls ctrls;
struct v4l2_ext_control ctrl;
if (!ControlIdIsValid(queryctrl.id)) // skip known unsupported controls of the driver with "no error"
return Val;
- log (3, "SetControlValue(%s, %d)",queryctrl.name, Val);
- if ((queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) == V4L2_CTRL_FLAG_DISABLED){
+ log (3, "SetControlValue(%s, %d)", queryctrl.name, Val);
+ if ((queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) == V4L2_CTRL_FLAG_DISABLED) {
log(pvrINFO, " Error: this control is disabled by driver. Skipped.");
return Val;
}
- if ((Val>queryctrl.maximum) || (Val<queryctrl.minimum)) {
- log(pvrINFO, " Info: setting value to default(%d)",queryctrl.default_value);
- Val=queryctrl.default_value;
+ if ((Val > queryctrl.maximum) || (Val < queryctrl.minimum)) {
+ log(pvrINFO, " Info: setting value to default(%d)", queryctrl.default_value);
+ Val = queryctrl.default_value;
}
ctrl.id = control;
ctrl.value = Val;
- ctrls.ctrl_class=control_class;
- ctrls.controls=&ctrl;
- ctrls.count=1;
+ ctrls.ctrl_class = control_class;
+ ctrls.controls = &ctrl;
+ ctrls.count = 1;
if (IOCTL(v4l2_fd, VIDIOC_S_EXT_CTRLS, &ctrls) != 0) {
log(pvrERROR, "cPvrDevice::SetControlValue(): setting control value %s: %d:%s",
@@ -1521,8 +1530,8 @@ Queries the properties of a given valSet
-> Before using function, valSet's queryctrl.id has to be set.
-wirbel-
*/
-
-int cPvrDevice::QueryControl(struct valSet * vs) {
+int cPvrDevice::QueryControl(struct valSet * vs)
+{
if (!ControlIdIsValid(vs->queryctrl.id)) // skip known unsupported controls of the driver with "no error"
return 0;
vs->query_isvalid = false;
@@ -1544,9 +1553,9 @@ Queries the properties of all valSets used in SetControlValue
20070510
-wirbel-
*/
-
-bool cPvrDevice::QueryAllControls(void) {
- int err=0;
+bool cPvrDevice::QueryAllControls(void)
+{
+ int err = 0;
log(pvrDEBUG1, "QueryAllControls");
PvrSetup.Brightness.ctrl_class = V4L2_CTRL_CLASS_USER;
@@ -1620,10 +1629,8 @@ bool cPvrDevice::QueryAllControls(void) {
PvrSetup.FilterLumaMedianTop.queryctrl.id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP;
PvrSetup.FilterChromaMedianBottom.queryctrl.id= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM;
PvrSetup.FilterChromaMedianTop.queryctrl.id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP;
- if (SupportsSlicedVBI) {
- // VBI
- PvrSetup.VBIformat.queryctrl.id = V4L2_CID_MPEG_STREAM_VBI_FMT;
- }
+ if (SupportsSlicedVBI)
+ PvrSetup.VBIformat.queryctrl.id = V4L2_CID_MPEG_STREAM_VBI_FMT;
/* now quering min, max, default */
// picture properties
err += QueryControl(&PvrSetup.Brightness);
@@ -1663,10 +1670,8 @@ bool cPvrDevice::QueryAllControls(void) {
err += QueryControl(&PvrSetup.FilterLumaMedianTop);
err += QueryControl(&PvrSetup.FilterChromaMedianBottom);
err += QueryControl(&PvrSetup.FilterChromaMedianTop);
- if (SupportsSlicedVBI) {
- // VBI
- err += QueryControl(&PvrSetup.VBIformat);
- }
+ if (SupportsSlicedVBI)
+ err += QueryControl(&PvrSetup.VBIformat);
if (err)
return false;
@@ -1681,14 +1686,11 @@ bool cPvrDevice::QueryAllControls(void) {
INIT(PvrSetup.Hue);
// Audio
if (PvrSetup.AudioVolumeTVCommon.value == INVALID_VALUE)
- PvrSetup.AudioVolumeTVCommon.value = \
- (int) (0.95 * PvrSetup.AudioVolumeTVCommon.queryctrl.maximum);
+ PvrSetup.AudioVolumeTVCommon.value = (int)(0.95 * PvrSetup.AudioVolumeTVCommon.queryctrl.maximum);
if (PvrSetup.AudioVolumeTVException.value == INVALID_VALUE)
- PvrSetup.AudioVolumeTVException.value = \
- (int) (0.95 * PvrSetup.AudioVolumeTVException.queryctrl.maximum);
+ PvrSetup.AudioVolumeTVException.value = (int)(0.95 * PvrSetup.AudioVolumeTVException.queryctrl.maximum);
if (PvrSetup.AudioVolumeFM.value == INVALID_VALUE)
- PvrSetup.AudioVolumeFM.value = \
- PvrSetup.AudioVolumeFM.queryctrl.maximum;
+ PvrSetup.AudioVolumeFM.value = PvrSetup.AudioVolumeFM.queryctrl.maximum;
INIT(PvrSetup.AudioBitrate);
INIT(PvrSetup.AudioSampling);
if (driver == hdpvr)
@@ -1715,4 +1717,3 @@ bool cPvrDevice::QueryAllControls(void) {
INIT(PvrSetup.FilterChromaMedianTop);
return true;
}
-