README.dvd_decoder
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:3k
源码类别:

DVD

开发平台:

Unix_Linux

  1. This module, dvd_decoder, can be used to playback DVD Video media streams
  2. The Makefile is more a dummy Makefile, it just compiles the 
  3. object file. The use of this module is to include it in
  4. a project of your own, e.g. a DVD Video Navigator.
  5. _____________________________________________________________________
  6. How to play a DVD Video
  7. This dvd_decoder module is just a wrapper for the io-controls of the
  8. convergence/LSI Logic DVD Decoder Card. By changing dvd_decoder.c to
  9. your own needs, you can implement other underlying decoder 
  10. architectures, such as a software stream demultiplexers and software 
  11. or hardware decoder for MPEG2 video, MPEG audio, AC3, SPU and CSS.
  12. First, you have to tell where the consuming device is. Pass the 
  13. filename of the device to DecoderSetDevice(). This also initializes
  14. the module.
  15. From the information retreived from the info files of the DVD, the 
  16. demux and the decoder have to be set up with stream numbers and 
  17. stream parameters. This is done with DecoderSetVideoStream(), 
  18. DecoderSetAudioStream() and DecoderSetSubPictureStream() for the 
  19. demux, DecoderSetVideoAttr() for the video decoder, 
  20. DecoderSetAudioAttr() and DecoderSetKaraokeMix() for the audio 
  21. decoder, and DecoderSetSubPicturePalette() and DecoderHighlight()
  22. for the SPU (Sub Picture Unit, run-length encoded bitmaps to be
  23. overlayed onto the video for menus and subtitles) decoder.
  24. Also, a function DecoderPause() is provided to pause the decoding
  25. process.
  26. A number of CSS function is also provided: DecoderCSSBypass() 
  27. bypasses the CSS module for unencrypted data. For encrypted data
  28. the drive and the decoder have to authenticate to each other 
  29. with DecoderCSSDriveAuthChallenge(), DecoderCSSDriveAuthResponse()
  30. and DecoderCSSHostAuth(), then the keys for the disc and the title
  31. have to be sent into the decoder with DecoderCSSDiscKey() and 
  32. DecoderCSSTitleKey().
  33. Then, you can use DecoderWrite() to write DVD data into the demux. 
  34. The parsed PCI and DSI packets are only of interest for the navi-
  35. gator, so they are passed back by polling DecoderGetNaviPack().
  36. _____________________________________________________________________
  37. CSS - The DVD Content Scrambling System
  38. Example of a CSS authorisation, requires a licensed DVD decoder:
  39. // CSS key exchange
  40. // disc: 0=disable/bypass, 1=disc key, 2=title key
  41. // lba: logical block address of title
  42. int CSS(int disc, u32 lba) {
  43.   char CSSdata[2048];
  44.   int agid,cpm,cp_sec,cgms;
  45.   if (!disc) return (DecoderCSSBypass())?-1:0;
  46.   if ((agid=UDFCSSRequestAGID())<0) return -1;
  47.   if (DecoderCSSDriveAuthChallenge((disc==1),CSSdata)) goto ERROR;
  48.   if (UDFCSSDriveAuth(CSSdata)<0) goto ERROR;
  49.   if (DecoderCSSDriveAuthResponse((disc==1),CSSdata)) goto ERROR;
  50.   if (UDFCSSHostAuthChallenge(CSSdata)<0) goto ERROR;
  51.   if (DecoderCSSHostAuth((disc==1),CSSdata)) goto ERROR;
  52.   if (UDFCSSHostAuthResponse(CSSdata)<0) goto ERROR;
  53.   if (disc==1) {
  54.     if (UDFCSSDiscKey(CSSdata)<0) goto ERROR;
  55.     if (DecoderCSSDiscKey(CSSdata)) goto ERROR;
  56.   } else if (disc==2) {
  57.     if (UDFCSSTitleKey(lba,CSSdata,&cpm,&cp_sec,&cgms)<0) goto ERROR;
  58.     if (DecoderCSSTitleKey(CSSdata)) goto ERROR;
  59.   }
  60.   UDFCSSInvalidateAGID(agid);
  61.   return 0;
  62.   ERROR:
  63.   UDFCSSInvalidateAGID(agid);
  64.   return -1;
  65. }
  66. _____________________________________________________________________
  67. Version history:
  68. 19991209 (chw)
  69.   First release.
  70.