summaryrefslogtreecommitdiff
path: root/dxr3interface.c
diff options
context:
space:
mode:
authoraustriancoder <austriancoder>2004-09-15 22:15:29 +0000
committeraustriancoder <austriancoder>2004-09-15 22:15:29 +0000
commitd49a17aed8ffd4ba1467f09b616635e659bc0bc2 (patch)
tree7e40c449560227004ef740e4bc62ccdb03c22b0e /dxr3interface.c
parent999905037cc62770ca111e24ac36e76b59ee7a20 (diff)
downloadvdr-plugin-dxr3-d49a17aed8ffd4ba1467f09b616635e659bc0bc2.tar.gz
vdr-plugin-dxr3-d49a17aed8ffd4ba1467f09b616635e659bc0bc2.tar.bz2
added routine to get YUVData from dxr3
Diffstat (limited to 'dxr3interface.c')
-rw-r--r--dxr3interface.c57
1 files changed, 55 insertions, 2 deletions
diff --git a/dxr3interface.c b/dxr3interface.c
index 25abc77..b866a9c 100644
--- a/dxr3interface.c
+++ b/dxr3interface.c
@@ -1191,10 +1191,63 @@ void cDxr3Interface::WriteRegister(int registernum, int val)
// maybe we should copy this routine into em8300 driver
// ==================================
-//
-void cDxr3Interface::Dxr3CopyYUVData(int pos, int *dst, int length)
+//! It appears that the follow routine copies length bytes to memory pointed to
+//! by dst.
+//! Most likely, pos contains some kind of buffer offset.
+char cDxr3Interface::Dxr3CopyYUVData(int pos, int *dst, int length)
{
+ int l1;
+
+ for (l1 = 0x1000; (l1) ;--l1)
+ {
+ if (ReadRegister(0x1c1a) == 0)
+ break;
+ }
+
+ if (l1 == 0)
+ {
+ //printf("Borked!\n");
+ exit(0);
+ }
+
+ WriteRegister(0x1c50, 8);
+ WriteRegister(0x1c51, pos & 0xffff);
+ WriteRegister(0x1c52, pos >>16);
+ WriteRegister(0x1c53, length);
+ WriteRegister(0x1c54, length);
+ WriteRegister(0x1c55, 0);
+ WriteRegister(0x1c56, 1);
+ WriteRegister(0x1c57, 1);
+ WriteRegister(0x1c58, pos & 0xffff);
+ WriteRegister(0x1c59, 0);
+ WriteRegister(0x1c5a, 1);
+
+ int l2 = 0;
+ for( l2=0; l2 < (length>>2) ; ++l2)
+ {
+ *dst++ = ReadRegister(0x11800);
+ }
+
+ switch( length % 4 )
+ {
+ case 3:
+ *dst++ = ReadRegister(0x11000);
+ break;
+ case 2:
+ *dst++ = ReadRegister(0x10800);
+ break;
+ case 1:
+ *dst++ = ReadRegister(0x10000);
+ break;
+ }
+
+ for (l1 = 0x1000; (l1) ; --l1)
+ {
+ if (ReadRegister(0x1c1a) == 0)
+ return 1;
+ }
+ return 0;
}
// ==================================