LimHD:DVDCSS
Unfortunately, libdvdcss's csstest program claim all the disks I've tried are not scrambled:
uclibc[/tmp]# ./csstest /dev/scsi/host0/bus0/target0/lun0/cd cool, I found libdvdcss version 1.2.9 examples: ./csstest /dev/hdc 1024 ./csstest D: 1024 ./csstest scrambledfile.vob 1024 uclibc[/tmp]# ./csstest /dev/scsi/host0/bus0/target0/lun0/cd 1024 cool, I found libdvdcss version 1.2.9 requested sector: 00 00 01 2u... 2{ 1i 0� 2e 2� 17 1n 1} 2� 0d 05 1} 2� 09 1� 1� 2s 3g 2� 0l 03 2�... sector is not scrambled uclibc[/tmp]# ./csstest /mnt/USB1/video_ts/vts_01_2.vob 1024 cool, I found libdvdcss version 1.2.9 zS@j>-�301�}�<O2NR���BV1�cn����-�pC>݃�"��?���?��E?��v?��?���?�̂?��E?���?��?���?@j>zS@j>-�30�...<O2NR���BV1�cn����-��?���?��E?��v?��?���?�̂?��E?���?��?���?��"Q sector is not scrambled
Ah just a misunderstanding of how csstest works. That's the block I want to unscramble, and only video streams are scrambled.
uclibc[/tmp]# ./csstest /dev/scsi/host0/bus0/target0/lun0/cd 1000001 cool, I found libdvdcss version 1.2.9 requested sector: 00 00 01 2c... 0� 0� 2� 18 1� 2~ 2� 2� 0� 0} 1w 0� 2� 1p 0g 2 2� 0� 2e 2g 0� 0d 0�... unscrambled sector: 00 00 01 2c... 2� 1� 1s 1z 1� 2 2� 1� 0� 1f 1u 0| 2p 0� 0� 1� 0� 0� 27 0� 13 1l...
So, I remain positive that this can be done. However, since Fuse does not want to run easily, I thought I would attempt to get CSS internal to em8xxx.o to work. All the code is in there, but curacao does not call it, or set it up.
The EM8xxx.PDF file claim to enable DVD-CSS you need but to load the title key with set_CSStitlekey() before demuxing begins.
I thought I would dlopen('em8xxx.o') from my program and call said function, but unfortunately you can not use dlopen in uClinux. (or at least not the version I have / LimHD runs).
So, the proper way is actually to open /dev/em8xxx0 device, and use ioctl to communicate with it. This is what curacao does after all. I have not done much ioctl programming lately, so I am rusty. This is the next thing I shall try however.
My pseudo-code for the daemon would be:
$cd_dev=/dev/scsi/host0/target0/lun0/cd loop forver if $cd_dev has changed (how can we detect a new CD? research) call libdvdread and obtain disckey and titlekey call em8xxx.o via ioctl to hand over both. hope to hell that that just magically works.
Right, so the ioctl looks like:
#define EM8XXX_IOCTL_MAGIC 'E' #define EM8XXX_IOCTL_SET_PROPERTY _IOWR( EM8XXX_IOCTL_MAGIC, 1, struct em8xxx_property) struct em8xxx_property { RMuint32 moduleId; RMuint32 propId; void *propInVal; RMuint32 propInSize; void *propOutVal; RMuint32 propOutSize; RMstatus status; }; RMVideoDecoderPropertyID_CSSdisckey = 6123 RMVideoDecoderPropertyID_CSStitlekey = 6124
I am not sure what ModuleId is of yet. It is used when the kernel code calls em8xxx library (private.o).