diff options
author | scop <scop> | 2005-03-22 23:09:14 +0000 |
---|---|---|
committer | scop <scop> | 2005-03-22 23:09:14 +0000 |
commit | 3825bcef3d4eedcf48e3b2221d719699dad46ed7 (patch) | |
tree | a03ad9b5f4a4cfd959743331ab0a8dc76fead23f | |
parent | 6721a75f6fa59e2555bf52d935487320a8fb40b5 (diff) | |
download | vdr-plugin-dxr3-3825bcef3d4eedcf48e3b2221d719699dad46ed7.tar.gz vdr-plugin-dxr3-3825bcef3d4eedcf48e3b2221d719699dad46ed7.tar.bz2 |
Bring in patches from 0-2 branch.
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | patches/README | 1 | ||||
-rw-r--r-- | patches/em8300-adv7170-wss.patch | 354 | ||||
-rw-r--r-- | patches/vdr-dxr3-wss.patch | 42 | ||||
-rw-r--r-- | patches/vdr-iframe.patch | 19 |
5 files changed, 420 insertions, 0 deletions
@@ -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 { |