Valve screen capture detection claim

Discussion in '3D Hardware, Software & Output Devices' started by 3dilettante, Sep 15, 2003.

  1. 3dilettante

    Legend Alpha

    Joined:
    Sep 15, 2003
    Messages:
    8,363
    Likes Received:
    3,944
    Location:
    Well within 3d
    One of the allegations made in the Valve presentation was that certain beta drivers were detecting screen captures and temporarily pumping up the image quality.

    I'm sure that the coders at Valve have their ways of finding this out, but how easily can this be proven in the wild?

    In particular, there's not much said about what exactly the drivers could detect. Could they detect in-program screen captures as well as a capture made by the user?

    I'm asking this because if the det. 50s being previewed on aquamark3 have this capability, then the screenshots that the program automatically makes that are being posted may be compromised.

    I find this doubly troubling, since there are already certain IQ concerns about the screenshots as is. Could this "feature" still be out there?
     
  2. bloodbob

    bloodbob Trollipop
    Veteran

    Joined:
    May 23, 2003
    Messages:
    1,630
    Likes Received:
    27
    Location:
    Australia
    capture the images from the DVI port and compare them to the ones the hardware gives out.
     
  3. Mark0

    Newcomer

    Joined:
    Jun 1, 2003
    Messages:
    105
    Likes Received:
    1
    Yes but... I have the feeling that, maybe, someday we will observe that running a particular bench on a nVidia card, we will see different performance using a CRT instead of a DVI-LCD! :)

    Bye!
     
  4. Colourless

    Colourless Monochrome wench
    Veteran

    Joined:
    Feb 6, 2002
    Messages:
    1,274
    Likes Received:
    30
    Location:
    Somewhere in outback South Australia
    Proving it wouldn't be easy. Sure, there are ways you can do things to be able to tell if it is occuring, but proving it to others wiill be difficult.

    A trick a deveolper can use to test for questionable things going on would be to take a screenshot of the screenn, then switch between showing the screenshot and the scene being rendered. Thing is even though this should make the difference visible, you wouldn't be able to get proof for others to see.

    Sure, this trick 'could' be defeated, but attempting to do so will likely cause the cheats to be revealed. You will either have to render the scene properly, or output a poor quality screenshot.
     
  5. 3dilettante

    Legend Alpha

    Joined:
    Sep 15, 2003
    Messages:
    8,363
    Likes Received:
    3,944
    Location:
    Well within 3d
    I wonder if all the screenshot comparisons on the new dets might be mistakenly using fudged shots, since they all seemed to use in-program screen captures. It's may also be possible that any performance loss from screenshot detection could be masked by whatever overhead a screen capture has. Is any such overhead that great?

    What could make things even more freaky is that it may someday be that the video card's video output circuitry would detect differing signal impedances and voltage drops that would correllate to a screen capture being made on the port.

    This isn't exactly impossible, but would be easy to spoof or be too sensitive and cause weird output behavior with the slight variations in each card and signal line. It would probably cause strange instances where quality would flicker between different IQ modes between frames dependent on signal noise and other random variables.

    Not to sound too paranoid, but this becomes much easier to do when nearly all 3d cards are produced by a single manufacturer and then rebadged for different brands. While any individual manufacturer might balk at using mandatory custom circuitry on the video out, it may not be so picky if it's supplied by the IHV.

    Who knows how complicated things will be with further video integration into the GPU, then even with separate manufacturers, there could be detection going on. However, this would allow for even more erroneous detection with quality variations.
     
  6. Humus

    Humus Crazy coder
    Veteran

    Joined:
    Feb 6, 2002
    Messages:
    3,217
    Likes Received:
    77
    Location:
    Stockholm, Sweden
    Yup. It's the driver that composes the output. Noone but the driver knows how to interpret framebuffer data, so nobody but the driver could do that. So the driver always have the last say.
     
  7. 3dilettante

    Legend Alpha

    Joined:
    Sep 15, 2003
    Messages:
    8,363
    Likes Received:
    3,944
    Location:
    Well within 3d
    Then there's the suspicion that the Aquamark3 screenshots being shown have been similarly detected and compromised. Is there any conclusive evidence to to prove if this detection is present or is not in the beta det. 50s?
     
  8. tb

    tb
    Newcomer

    Joined:
    Feb 7, 2002
    Messages:
    241
    Likes Received:
    0
    Location:
    Germany / Thuringia
    Maybe some way of intercepting dx9 calls could help. For instance make the back buffer lockable in all dx9 apps and get the data(pointer read out or via stretchrect to another surface) just before or after the present() call...

    Thomas
     
  9. AAlcHemY

    Newcomer

    Joined:
    Jun 17, 2003
    Messages:
    215
    Likes Received:
    0
    Location:
    Belgium
    What happens when you simply record it with Fraps ? ( Or is it just the same ? )
     
  10. OpenGL guy

    Veteran

    Joined:
    Feb 6, 2002
    Messages:
    2,357
    Likes Received:
    28
    The only way to get that address is via Lock, which goes to the driver. The driver can do whatever it wants to the data before returning the value of the Lock back to the application.
     
  11. OpenGL guy

    Veteran

    Joined:
    Feb 6, 2002
    Messages:
    2,357
    Likes Received:
    28
    Fraps is bound by the API as well: It captures frames via Lock.
     
  12. Bouncing Zabaglione Bros.

    Legend

    Joined:
    Jun 24, 2003
    Messages:
    6,363
    Likes Received:
    82
    So we are basically down to capturing a screen, and displaying it on the second monitor of a dual-head system, while looking at the same frame on the main screen. For any games that won't let you dual-monitor, you'll have to shunt it over to a second machine with an identical card and monitor to compare the two frames.

    Hmm, very low tech, and not very useful for displaying the difference on a website.
     
  13. tb

    tb
    Newcomer

    Joined:
    Feb 7, 2002
    Messages:
    241
    Likes Received:
    0
    Location:
    Germany / Thuringia
    Thats correct, but If you create a different render target/surface, how will the driver know, that this special locked data will be used for image comparison? You could even let the renderer do some more frames and copy the data from a previous stretchrect via lock. If the driver want's to secure high quality, it must do some "magic" stuff to every lock or stretchrect call, which could slow down other apps! There is often a hole in such very special detection algo's, you just have to find it...

    Thomas
     
  14. Humus

    Humus Crazy coder
    Veteran

    Joined:
    Feb 6, 2002
    Messages:
    3,217
    Likes Received:
    77
    Location:
    Stockholm, Sweden
    Not that I know of. I'm somewhat sceptical until I see proof. I'm not sure how much work you'd have to spend in order to implement something like that. In order to contruct a higher quality screenshot the driver would need to keep a copy of all calls to the driver for the last frame and redo all that with full precision / whatever cheats exists disabled. Of course the driver could buffer whole frames of driver calls before actually drawing anything, and the mechanisms for that is most likely in the driver anyway, so it not even neccesarily the case that it would need to redraw anything, unless any synchroneous calls are made such as the glFinish() call in OpenGL.
     
  15. OpenGL guy

    Veteran

    Joined:
    Feb 6, 2002
    Messages:
    2,357
    Likes Received:
    28
    You don't have to do this for all applications, only the ones you want to "improve" the image quality on. If you start playing with wrappers, you may even disable the app. detect in the first place and that may change the results you get.

    Basically what I am saying here is that the driver can pretty much do whatever it wants...
     
  16. bloodbob

    bloodbob Trollipop
    Veteran

    Joined:
    May 23, 2003
    Messages:
    1,630
    Likes Received:
    27
    Location:
    Australia
    If it wasn't for the DMCA you could reverse engineer the drivers but since that is illegal we can't do it.
     
  17. Captain Chickenpants

    Regular

    Joined:
    Feb 6, 2002
    Messages:
    446
    Likes Received:
    14
    Location:
    Kings Langley
    You could write an app that pretends to do a screen capture.
    Time the same render with and without the fake screen capture and compare the time taken.

    Just a thought.


    CC
     
  18. bloodbob

    bloodbob Trollipop
    Veteran

    Joined:
    May 23, 2003
    Messages:
    1,630
    Likes Received:
    27
    Location:
    Australia
    best way if you can code the software is to display a static screen grab the screen send it to a file load the file up and flicker a quad on the screen with the texture :)
     
  19. Rodéric

    Rodéric a.k.a. Ingenu
    Moderator Veteran

    Joined:
    Feb 6, 2002
    Messages:
    4,030
    Likes Received:
    894
    Location:
    Planet Earth.
    You mean render to pBuffer/REnderTexture, and then either recover from pBuffer hoping they didn't thought about it, or displaying a quad with the RenderTexture before getting the FrameBuffer content so it can't change anything ?
     
  20. bloodbob

    bloodbob Trollipop
    Veteran

    Joined:
    May 23, 2003
    Messages:
    1,630
    Likes Received:
    27
    Location:
    Australia
    Mkay not exactly sure what you mean I don't do all that much fiddling with 3d coding no more :)

    1. Grab a screen shot in a way that is thought to be tweaked.
    2. Load that screen shot as a texture.
    3. Display scene for 1 frame.
    4. Place a quad or 2 triangles or tristrip,ect with the screen shot so that image from the screen shot is shown at full size with pixels correctly centered for 1 frame.
    5. go to 3 and repeat.

    Now all you gotta do is hope there is no SS or that could cause some problems.

    If the image displayed is stable doesn't flicker or anything then no detection occured.
     
Loading...

Share This Page

  • About Us

    Beyond3D has been around for over a decade and prides itself on being the best place on the web for in-depth, technically-driven discussion and analysis of 3D graphics hardware. If you love pixels and transistors, you've come to the right place!

    Beyond3D is proudly published by GPU Tools Ltd.
Loading...