summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscop <scop>2005-03-22 23:09:14 +0000
committerscop <scop>2005-03-22 23:09:14 +0000
commit3825bcef3d4eedcf48e3b2221d719699dad46ed7 (patch)
treea03ad9b5f4a4cfd959743331ab0a8dc76fead23f
parent6721a75f6fa59e2555bf52d935487320a8fb40b5 (diff)
downloadvdr-plugin-dxr3-3825bcef3d4eedcf48e3b2221d719699dad46ed7.tar.gz
vdr-plugin-dxr3-3825bcef3d4eedcf48e3b2221d719699dad46ed7.tar.bz2
Bring in patches from 0-2 branch.
-rw-r--r--INSTALL4
-rw-r--r--patches/README1
-rw-r--r--patches/em8300-adv7170-wss.patch354
-rw-r--r--patches/vdr-dxr3-wss.patch42
-rw-r--r--patches/vdr-iframe.patch19
5 files changed, 420 insertions, 0 deletions
diff --git a/INSTALL b/INSTALL
index f6b03dc..4ca3325 100644
--- a/INSTALL
+++ b/INSTALL
@@ -20,3 +20,7 @@ Installation:
- Call "make plugins" in the VDR root directory.
- Make sure your DXR3 driver modules are loaded and ready to run.
- Start VDR with "vdr -Pdxr3".
+
+Supplemental patches:
+
+- See the patches/ directory.
diff --git a/patches/README b/patches/README
new file mode 100644
index 0000000..29524fe
--- /dev/null
+++ b/patches/README
@@ -0,0 +1 @@
+See top of each patch for a description.
diff --git a/patches/em8300-adv7170-wss.patch b/patches/em8300-adv7170-wss.patch
new file mode 100644
index 0000000..e2e6e5c
--- /dev/null
+++ b/patches/em8300-adv7170-wss.patch
@@ -0,0 +1,354 @@
+Wide screen signaling (WSS) patch for the em8300 driver by Seppo Ingalsuo.
+Apply to: em8300 driver sources
+More info: http://sf.net/mailarchive/forum.php?thread_id=6061108&forum_id=7173
+Note: you'll probably want to apply vdr-dxr3-wss.patch too
+ in order to get VDR(-dxr3) to use this functionality.
+
+
+Index: em8300setup/em8300setup.c
+===================================================================
+RCS file: /cvsroot/dxr3/em8300/em8300setup/em8300setup.c,v
+retrieving revision 1.3
+diff -u -r1.3 em8300setup.c
+--- em8300setup/em8300setup.c 8 Mar 2005 01:14:31 -0000 1.3
++++ em8300setup/em8300setup.c 8 Mar 2005 20:47:06 -0000
+@@ -112,7 +112,7 @@
+ char ucode_file[200]; // bad hardcoded value ;-)
+
+ /* Vars to hold desired setings - init to -1 so we can see which were requested to be set explicitly by the user and which should be left alone */
+- int tvmode=-1, aspect=-1, audio=-1, spu=-1, upload=0, display_only=0;
++ int tvmode=-1, aspect=-1, audio=-1, spu=-1, upload=0, display_only=0, wssmode=-1;
+
+
+ char * devs[] = {"/dev/em8300-0","/dev/em8300-1","/dev/em8300-2","/dev/em8300-3"};
+@@ -175,12 +175,45 @@
+ upload=1;
+ printf("Using microcode file %s\n",ucode_file);
+ break;
++ case 'z':
++ switch (opt[2]) {
++ case '0':
++ wssmode = EM8300_WSS_OFF;
++ break;
++ case '1':
++ wssmode = EM8300_WSS_4_3;
++ break;
++ case '2':
++ wssmode = EM8300_WSS_14_9;
++ if (opt[3]=='l') wssmode = EM8300_WSS_14_9_LETTERBOX;
++ if (opt[3]=='t') wssmode = EM8300_WSS_14_9_LETTERBOX_TOP;
++ break;
++ case '3':
++ wssmode = EM8300_WSS_16_9;
++ if (opt[3]=='l') wssmode = EM8300_WSS_16_9_LETTERBOX;
++ if (opt[3]=='t') wssmode = EM8300_WSS_16_9_LETTERBOX_TOP;
++ if (opt[3]=='p') wssmode = EM8300_WSS_16P_9_LETTERBOX;
++ break;
++ default:
++ printf("Unknown option -z%c\n\n",opt[2]);;
++ exit(1);
++ }
++ break;
+ default:
+ printf("Unknown option -%c \n\n",opt[1]);
+ printf("Usage: em8300setup [-q]|[all other options]\n\nWhere options are one of the following (latter options will override previously\nspecified options for the same control):\n\n");
+ printf(" -p, -p6, -n\tSet display mode to pal, pal60, ntsc\n");
+ printf(" -a, -d, -3\tSet audio mode to analog, digitalpcm, digital ac3\n");
+ printf(" -o, -w\tSet aspect ratio to normal[4:3], widescreen[16:9]\n");
++ printf(" -z0\t\tSet WSS to disabled\n");
++ printf(" -z1\t\tSet WSS to 4:3\n");
++ printf(" -z2\t\tSet WSS to 14:9\n");
++ printf(" -z2l\t\tSet WSS to 14:9 letterbox\n");
++ printf(" -z2t\t\tSet WSS to 14:9 letterbox top\n");
++ printf(" -z3\t\tSet WSS to 16:9\n");
++ printf(" -z3l\t\tSet WSS to 16:9 letterbox\n");
++ printf(" -z3t\t\tSet WSS to 16:9 letterbox top\n");
++ printf(" -z3p\t\tSet WSS to >16:9 letterbox\n");
+ printf(" -S, -s\tSet spu mode On(S), Off(s)\n");
+ printf(" -f <filename>\tSpecify alternate location of microcode\n\t\t(Defaults to /usr/share/misc/em8300.uc)\n");
+ printf(" -q\t\tQuery the current settings for all of the above and\n\t\texit without making any changes\n");
+@@ -270,6 +303,12 @@
+ if(ioctl(DEV, EM8300_IOCTL_SET_ASPECTRATIO, &aspect) == -1)
+ check_errno("Unable to set aspect ratio");
+ }
++ if(wssmode!=-1) {
++ printf("Setting WSS = %i\n",wssmode);
++ if(ioctl(DEV, EM8300_IOCTL_SET_WSS, &wssmode) == -1)
++ check_errno("Unable to set wss");
++ }
++
+ if(audio!=-1) {
+ printf("Setting audio = %i\n",audio);
+ if(ioctl(DEV, EM8300_IOCTL_SET_AUDIOMODE, &audio) == -1)
+Index: include/linux/em8300.h
+===================================================================
+RCS file: /cvsroot/dxr3/em8300/include/linux/em8300.h,v
+retrieving revision 1.37
+diff -u -r1.37 em8300.h
+--- include/linux/em8300.h 27 Oct 2004 00:03:14 -0000 1.37
++++ include/linux/em8300.h 8 Mar 2005 20:47:07 -0000
+@@ -80,6 +80,7 @@
+ #define EM8300_IOCTL_SCR_SETSPEED _IOW('C',17,unsigned)
+ #define EM8300_IOCTL_FLUSH _IOW('C',18,int)
+ #define EM8300_IOCTL_VBI _IOW('C',19,struct timeval)
++#define EM8300_IOCTL_SET_WSS _IOW('C',20,int)
+
+ #define EM8300_OVERLAY_SIGNAL_ONLY 1
+ #define EM8300_OVERLAY_SIGNAL_WITH_VGA 2
+@@ -97,6 +98,16 @@
+ #define EM8300_ASPECTRATIO_16_9 1
+ #define EM8300_ASPECTRATIO_LAST 1
+
++#define EM8300_WSS_OFF 0
++#define EM8300_WSS_4_3 8
++#define EM8300_WSS_14_9_LETTERBOX 1
++#define EM8300_WSS_14_9_LETTERBOX_TOP 2
++#define EM8300_WSS_16_9_LETTERBOX 11
++#define EM8300_WSS_16_9_LETTERBOX_TOP 4
++#define EM8300_WSS_16P_9_LETTERBOX 13
++#define EM8300_WSS_14_9 14
++#define EM8300_WSS_16_9 7
++
+ #define EM8300_VIDEOMODE_PAL 0
+ #define EM8300_VIDEOMODE_PAL60 1
+ #define EM8300_VIDEOMODE_NTSC 2
+@@ -454,6 +465,7 @@
+ int em8300_control_ioctl(struct em8300_s *em, int cmd, unsigned long arg);
+ int em8300_ioctl_setvideomode(struct em8300_s *em, int mode);
+ int em8300_ioctl_setaspectratio(struct em8300_s *em, int ratio);
++int em8300_ioctl_setwss(struct em8300_s *em, int wsscode);
+ void em8300_ioctl_getstatus(struct em8300_s *em, char *usermsg);
+ int em8300_ioctl_init(struct em8300_s *em, em8300_microcode_t *useruc);
+ void em8300_ioctl_enable_videoout(struct em8300_s *em, int mode);
+Index: modules/adv717x.c
+===================================================================
+RCS file: /cvsroot/dxr3/em8300/modules/adv717x.c,v
+retrieving revision 1.43
+diff -u -r1.43 adv717x.c
+--- modules/adv717x.c 7 Mar 2005 00:29:55 -0000 1.43
++++ modules/adv717x.c 8 Mar 2005 20:47:08 -0000
+@@ -112,6 +112,7 @@
+ int pp_ntsc;
+ int pd_adj_pal;
+ int pd_adj_ntsc;
++ int wsscode;
+
+ unsigned char config[32];
+ int configlen;
+@@ -298,6 +299,63 @@
+ if (data->rgbmode) {
+ tmpconfig[3] |= 0x10;
+ }
++
++ switch (data->wsscode) {
++ case 0x08:
++ /* 4:3 full */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x08;
++ break;
++ case 0x01:
++ /* 14:9 letterbox center */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x01;
++ break;
++ case 0x02:
++ /* 14:9 letterbox top */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x02;
++ break;
++ case 0x0b:
++ /* 16:9 letterbox center */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x0b;
++ break;
++ case 0x04:
++ /* 16:9 letterbox top */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x04;
++ break;
++ case 0x0d:
++ /* >16:9 letterbox center */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x0d;
++ break;
++ case 0x0e:
++ /* 14:9 full */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x0e;
++ break;
++ case 0x07:
++ /* 16:9 full */
++ tmpconfig[22] = 0x80;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x07;
++ break;
++ default:
++ tmpconfig[22] = 0x00;
++ tmpconfig[23] = 0x00;
++ tmpconfig[24] = 0x00;
++ break;
++ }
++
+ break;
+ }
+
+@@ -440,6 +498,7 @@
+ data->bars = color_bars[em->card_nr];
+ data->rgbmode = 0;
+ data->enableoutput = 0;
++ data->wsscode = 0;
+
+ adv717x_setmode(ENCODER_MODE_PAL60, client);
+
+@@ -547,6 +606,42 @@
+ data->enableoutput = (long int) arg;
+ adv717x_update(client);
+ break;
++ case ENCODER_CMD_WSS_4_3:
++ data->wsscode = 8;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_14_9_LETTERBOX:
++ data->wsscode = 1;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_14_9_LETTERBOX_TOP:
++ data->wsscode = 2;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_16_9_LETTERBOX:
++ data->wsscode = 11;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_16_9_LETTERBOX_TOP:
++ data->wsscode = 4;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_16P_9_LETTERBOX:
++ data->wsscode = 13;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_14_9:
++ data->wsscode = 14;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_16_9:
++ data->wsscode = 7;
++ adv717x_update(client);
++ break;
++ case ENCODER_CMD_WSS_OFF:
++ data->wsscode = 0;
++ adv717x_update(client);
++ break;
+ default:
+ return -EINVAL;
+ break;
+Index: modules/em8300_ioctl.c
+===================================================================
+RCS file: /cvsroot/dxr3/em8300/modules/em8300_ioctl.c,v
+retrieving revision 1.45
+diff -u -r1.45 em8300_ioctl.c
+--- modules/em8300_ioctl.c 2 May 2004 22:15:01 -0000 1.45
++++ modules/em8300_ioctl.c 8 Mar 2005 20:47:08 -0000
+@@ -178,6 +178,18 @@
+ }
+ break;
+
++ case _IOC_NR(EM8300_IOCTL_SET_WSS):
++ if (!em->ucodeloaded) {
++ return -ENOTTY;
++ }
++
++ if (_IOC_DIR(cmd) & _IOC_WRITE) {
++ get_user(val, (int *) arg);
++ em8300_ioctl_setwss(em, val);
++ }
++
++ break;
++
+ case _IOC_NR(EM8300_IOCTL_GET_AUDIOMODE):
+ if (!em->ucodeloaded) {
+ return -ENOTTY;
+@@ -515,6 +527,52 @@
+ return 0;
+ }
+
++int em8300_ioctl_setwss(struct em8300_s *em, int wsscode)
++{
++ int wsscmd;
++
++ switch (wsscode) {
++ case EM8300_WSS_OFF:
++ wsscmd = ENCODER_CMD_WSS_OFF;
++ break;
++ case EM8300_WSS_4_3:
++ wsscmd = ENCODER_CMD_WSS_4_3;
++ break;
++ case EM8300_WSS_14_9_LETTERBOX:
++ wsscmd = ENCODER_CMD_WSS_14_9_LETTERBOX;
++ break;
++ case EM8300_WSS_14_9_LETTERBOX_TOP:
++ wsscmd = ENCODER_CMD_WSS_14_9_LETTERBOX_TOP;
++ break;
++ case EM8300_WSS_16_9_LETTERBOX:
++ wsscmd = ENCODER_CMD_WSS_16_9_LETTERBOX;
++ break;
++ case EM8300_WSS_16_9_LETTERBOX_TOP:
++ wsscmd = ENCODER_CMD_WSS_16_9_LETTERBOX_TOP;
++ break;
++ case EM8300_WSS_16P_9_LETTERBOX:
++ wsscmd = ENCODER_CMD_WSS_16P_9_LETTERBOX;
++ break;
++ case EM8300_WSS_14_9:
++ wsscmd = ENCODER_CMD_WSS_14_9;
++ break;
++ case EM8300_WSS_16_9:
++ wsscmd = ENCODER_CMD_WSS_16_9;
++ break;
++ default:
++ return -1;
++ }
++
++ em8300_dicom_disable(em);
++ if (em->encoder) {
++ em->encoder->driver->command(em->encoder, wsscmd, (void *) 0 );
++ }
++
++ em8300_dicom_enable(em);
++ em8300_dicom_update(em);
++ return 0;
++}
++
+ int em8300_ioctl_setplaymode(struct em8300_s *em, int mode)
+ {
+ switch (mode) {
+Index: modules/encoder.h
+===================================================================
+RCS file: /cvsroot/dxr3/em8300/modules/encoder.h,v
+retrieving revision 1.8
+diff -u -r1.8 encoder.h
+--- modules/encoder.h 14 Jan 2002 21:41:31 -0000 1.8
++++ modules/encoder.h 8 Mar 2005 20:47:08 -0000
+@@ -13,6 +13,15 @@
+
+ #define ENCODER_CMD_SETMODE 1
+ #define ENCODER_CMD_ENABLEOUTPUT 2
++#define ENCODER_CMD_WSS_4_3 3
++#define ENCODER_CMD_WSS_14_9_LETTERBOX 4
++#define ENCODER_CMD_WSS_14_9_LETTERBOX_TOP 5
++#define ENCODER_CMD_WSS_16_9_LETTERBOX 6
++#define ENCODER_CMD_WSS_16_9_LETTERBOX_TOP 7
++#define ENCODER_CMD_WSS_16P_9_LETTERBOX 8
++#define ENCODER_CMD_WSS_14_9 9
++#define ENCODER_CMD_WSS_16_9 10
++#define ENCODER_CMD_WSS_OFF 11
+
+ #endif
+
diff --git a/patches/vdr-dxr3-wss.patch b/patches/vdr-dxr3-wss.patch
new file mode 100644
index 0000000..729b00c
--- /dev/null
+++ b/patches/vdr-dxr3-wss.patch
@@ -0,0 +1,42 @@
+Wide screen signaling (WSS) patch for vdr-dxr3 by Seppo Ingalsuo.
+Apply to: vdr-dxr3 plugin sources
+More info: http://thread.gmane.org/gmane.linux.vdr/17095
+Note: you'll probably want to apply em8300-adv7170-wss.patch too
+ in order to get support for this functionality in the driver.
+
+
+--- dxr3interface.c.orig 2005-03-23 00:09:56.000000000 +0200
++++ dxr3interface.c 2005-03-23 01:02:42.543440845 +0200
+@@ -534,16 +534,30 @@
+ Lock();
+
+ static int requestCounter = 0;
++ int wssmode;
++ int aspect;
+
+ if (cDxr3ConfigData::Instance().GetForceLetterBox()) ratio = EM8300_ASPECTRATIO_16_9;
+- if (Setup.VideoFormat) ratio = EM8300_ASPECTRATIO_4_3;
+
+ if (!m_ExternalReleased && ratio != UNKNOWN_ASPECT_RATIO)
+ {
+ if (ratio != m_aspectRatio && requestCounter > 50)
+ {
++ if (Setup.VideoFormat)
++ {
++ aspect = EM8300_ASPECTRATIO_4_3;
++#ifdef EM8300_IOCTL_SET_WSS
++ if (ratio == EM8300_ASPECTRATIO_16_9)
++ wssmode = EM8300_WSS_16_9;
++ else
++ wssmode = EM8300_WSS_OFF;
++ ioctl(m_fdControl, EM8300_IOCTL_SET_WSS, &wssmode);
++#endif
++ }
++ else
++ aspect = ratio;
+ requestCounter = 0;
+- if (ioctl(m_fdControl, EM8300_IOCTL_SET_ASPECTRATIO, &ratio) < 0)
++ if (ioctl(m_fdControl, EM8300_IOCTL_SET_ASPECTRATIO, &aspect) < 0)
+ {
+ cLog::Instance() << "cDxr3AbsDevice::SetAspectRatio Unable to set aspect ratio\n";
+ }
diff --git a/patches/vdr-iframe.patch b/patches/vdr-iframe.patch
new file mode 100644
index 0000000..f73d89e
--- /dev/null
+++ b/patches/vdr-iframe.patch
@@ -0,0 +1,19 @@
+Workaround for I-frame display problems when cutting (still picture not
+updating) and/or fast forward/backward in some streams.
+Apply to: VDR sources
+More info: http://www.schluenss.de/history.html
+
+
+--- recording.c.orig 2005-02-12 12:17:47.000000000 +0200
++++ recording.c 2005-03-14 23:01:32.370785864 +0200
+@@ -1017,8 +1017,8 @@
+ FileOffset = &index[Index].offset;
+ if (Length) {
+ // all recordings end with a non-I_FRAME, so the following should be safe:
+- int fn = index[Index + 1].number;
+- int fo = index[Index + 1].offset;
++ int fn = index[Index + 2].number;
++ int fo = index[Index + 2].offset;
+ if (fn == *FileNumber)
+ *Length = fo - *FileOffset;
+ else {