Yes, and for a very good reason. Unlike DVD Decrypter, AnyDVD (driver) is designed to decrypt "spontanous" on demand in real time by the file system, a player program, CloneCD, CloneDVD, CloneBD, whatever program you like or the AnyDVD user mode application. You should use DVD Decrypter for this purpose.
Reading half a disc just to check, if it might be encrypted at some point is really counter productive for real-time decryption.
But I believe I already told you the last time.
I guess I don't understand.
correct me if some of my assumptions are wrong here (pulling out some code that I've written in the past based on libdvdcss, but it could be bad code, I wrote this nearly a decade ago without much understanding of CSS, it just appeared to work)
1. for a real disc, it's easy to determine if a disc is scrambled, one just calls dvdcss_is_scrambled(input) on the input device. However, this will always return false for an ISO, so one has to be a little smarter.
1a) therefore, one has to ignore it and look at each VOB block (of size DVDCSS_BLOCK_SIZE or 2048 bits) to see if it is CSS scrambled. there's a bit that will be set (in my code with libdvdcss I did
Code:
if ( ((uint8_t*) tmp_buffer)[0x14] & 0x30 ) {}
2a) if a block doesn't have the bit set, you can read it from disc and write it straight out as is, if a block does have it, you have to descramble it.
2b) the way it would be descrambled in libdvdcss is
a) dvdcss_seek(input, pos, DVDCSS_SEEK_KEY) (this will brute force the key if needed/possible)
or
b) dvdcss_seek(input, pos, DVDCSS_NOFLAGS) (i.e. don't have to get the key, as already got the key for this VOB, assumption is that DVDs don't rekey within a VOB, never actually read the spec)
3) read to actually do a read that decrypts a block, one does
dvdcss_read(input, tmp_buffer, 1, DVDCSS_READ_DECRYPT) to read the block that has to be decrypted.
4) putting that together, basically what my code did was a) do a regular read() b) do my test c) if test says scrambled, do a dvdcss seek/read to correct location. I'm guessing it be a bit simpler in your own code.
now, under these assumptions,
is it fair to assume that the test I describe above will always return correctly on a virtual drive (i.e. that the block is scrambled or not).
If so, can we assume that the only difference between a virtual drive and a physical drive that the virtual drive lies to anydvd about CSS in action.
If it lies, can we always assume true for those sets of drives (configurable if don't want to autodetect).
If we assume that CSS is always in action for a virtual drive, will it behave correctly as any block of a VOB that isn't scrambled (i.e. this ISO already had CSS removed) won't have the bit set and therefore we don't have to do dvdcss_read(). I would view this as the show stopper. If we can't trust the bit test I used (i.e. we will actually break non CSS scrambled blocks, which my first iteration did, as I was trying to run the decrypt on non VOB files, which of course broke them, easy enough to fix, stick to only doing it on VOB file blocks)
The reason I ask, is that I'm guessing you have to do basically go through all this logic anyways on a outside of region disc, the only thing you get is dvdcss_is_scrambled() being correct. If we could basically assume it to be true for virtual discs, would it really change anything from an on demand/real time action, you don't even have to ask the user, it could just be transparent if we already configured anydvd to know that this drive lies.
thoughts? perhaps I'm talking out of my ass and there's some fatal flaw that I never hit in my simple tests (and then discovered that dvd decrypter did it anyways so didn't have to stress test my code)