home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / dvdmedia.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  14KB  |  367 lines

  1. //==========================================================================;
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6. //  PURPOSE.
  7. //
  8. //  Copyright (c) 1997  Microsoft Corporation.  All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------;
  11. //
  12. // dvdmedia.h
  13. //
  14. // Contains typedefs and #defines necessary for user mode (ring 3) DVD 
  15. // filters and applications.
  16. // This is should be included in the DirectShow SDK for user mode filters.
  17. // The types defined here should be kept in synch with ksmedia.h WDM DDK for
  18. // kernel mode filters.
  19. //
  20.  
  21. #ifndef __DVDMEDIA_H__
  22. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  23. #define __DVDMEDIA_H__
  24.  
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif // __cplusplus
  28.  
  29. // -----------------------------------------------------------------------
  30. // AC-3 definition for the AM_KSPROPSETID_AC3 property set
  31. // -----------------------------------------------------------------------
  32.  
  33. typedef enum {
  34.     AM_PROPERTY_AC3_ERROR_CONCEALMENT = 1,
  35.     AM_PROPERTY_AC3_ALTERNATE_AUDIO,
  36.     AM_PROPERTY_AC3_DOWNMIX,
  37.     AM_PROPERTY_AC3_BIT_STREAM_MODE,
  38.     AM_PROPERTY_AC3_DIALOGUE_LEVEL,
  39.     AM_PROPERTY_AC3_LANGUAGE_CODE,
  40.     AM_PROPERTY_AC3_ROOM_TYPE
  41. } AM_PROPERTY_AC3;
  42.  
  43. typedef struct  {
  44.     BOOL        fRepeatPreviousBlock;
  45.     BOOL        fErrorInCurrentBlock;
  46. } AM_AC3_ERROR_CONCEALMENT, *PAM_AC3_ERROR_CONCEALMENT;
  47.  
  48. typedef struct {
  49.     BOOL    fStereo;
  50.     ULONG   DualMode;
  51. } AM_AC3_ALTERNATE_AUDIO, *PAM_AC3_ALTERNATE_AUDIO;
  52.  
  53. #define AM_AC3_ALTERNATE_AUDIO_1     1
  54. #define AM_AC3_ALTERNATE_AUDIO_2     2
  55. #define AM_AC3_ALTERNATE_AUDIO_BOTH  3
  56.  
  57. typedef struct {
  58.     BOOL        fDownMix;
  59.     BOOL        fDolbySurround;
  60. } AM_AC3_DOWNMIX, *PAM_AC3_DOWNMIX;
  61.  
  62. typedef struct {
  63.     LONG        BitStreamMode;
  64. } AM_AC3_BIT_STREAM_MODE, *PAM_AC3_BIT_STREAM_MODE;
  65.  
  66. #define AM_AC3_SERVICE_MAIN_AUDIO            0
  67. #define AM_AC3_SERVICE_NO_DIALOG             1
  68. #define AM_AC3_SERVICE_VISUALLY_IMPAIRED     2
  69. #define AM_AC3_SERVICE_HEARING_IMPAIRED      3
  70. #define AM_AC3_SERVICE_DIALOG_ONLY           4
  71. #define AM_AC3_SERVICE_COMMENTARY            5
  72. #define AM_AC3_SERVICE_EMERGENCY_FLASH       6
  73. #define AM_AC3_SERVICE_VOICE_OVER            7
  74.  
  75. typedef struct {
  76.     ULONG   DialogueLevel;
  77. } AM_AC3_DIALOGUE_LEVEL, *PAM_AC3_DIALOGUE_LEVEL;
  78.  
  79. typedef struct {
  80.     BOOL    fLargeRoom;
  81. } AM_AC3_ROOM_TYPE, *PAM_AC3_ROOM_TYPE;
  82.  
  83.  
  84. // -----------------------------------------------------------------------
  85. // subpicture definition for the AM_KSPROPSETID_DvdSubPic property set
  86. // -----------------------------------------------------------------------
  87.  
  88. typedef enum {
  89.     AM_PROPERTY_DVDSUBPIC_PALETTE,
  90.     AM_PROPERTY_DVDSUBPIC_HLI,
  91.     AM_PROPERTY_DVDSUBPIC_COMPOSIT_ON,  // TRUE for subpicture is displayed
  92. } AM_PROPERTY_DVDSUBPIC;
  93.  
  94. typedef struct _AM_DVD_YUV {
  95.     UCHAR   Reserved;
  96.     UCHAR   Y;
  97.     UCHAR   U;
  98.     UCHAR   V;
  99. } AM_DVD_YUV, *PAM_DVD_YUV;
  100.  
  101. typedef struct _AM_PROPERTY_SPPAL {
  102.     AM_DVD_YUV sppal[16];
  103. } AM_PROPERTY_SPPAL, *PAM_PROPERTY_SPPAL;
  104.  
  105. typedef struct _AM_COLCON {
  106.     UCHAR emph1col:4;
  107.     UCHAR emph2col:4;
  108.     UCHAR backcol:4;
  109.     UCHAR patcol:4;
  110.     UCHAR emph1con:4;
  111.     UCHAR emph2con:4;
  112.     UCHAR backcon:4;
  113.     UCHAR patcon:4;
  114.  
  115. } AM_COLCON, *PAM_COLCON;
  116.  
  117. typedef struct _AM_PROPERTY_SPHLI {
  118.     USHORT     HLISS;      //
  119.     USHORT     Reserved;
  120.     ULONG      StartPTM;   // start presentation time in x/90000
  121.     ULONG      EndPTM;     // end PTM in x/90000
  122.     USHORT     StartX;
  123.     USHORT     StartY;
  124.     USHORT     StopX;
  125.     USHORT     StopY;
  126.     AM_COLCON  ColCon;     // color contrast description (4 bytes as given in HLI)
  127. } AM_PROPERTY_SPHLI, *PAM_PROPERTY_SPHLI;
  128.  
  129. typedef BOOL AM_PROPERTY_COMPOSIT_ON, *PAM_PROPERTY_COMPOSIT_ON;
  130.  
  131.  
  132.  
  133. // -----------------------------------------------------------------------
  134. // copy protection definitions
  135. // -----------------------------------------------------------------------
  136.  
  137. // AM_UseNewCSSKey for the dwTypeSpecificFlags in IMediaSample2 to indicate
  138. // the exact point in a stream after which to start applying a new CSS key.
  139. // This is typically sent on an empty media sample just before attempting 
  140. // to renegotiate a CSS key.
  141. #define AM_UseNewCSSKey    0x1
  142.  
  143. //
  144. // AM_KSPROPSETID_CopyProt property set definitions
  145. //
  146. typedef enum {
  147.     AM_PROPERTY_DVDCOPY_CHLG_KEY = 0x01,
  148.     AM_PROPERTY_DVDCOPY_DVD_KEY1,
  149.     AM_PROPERTY_DVDCOPY_DEC_KEY2,
  150.     AM_PROPERTY_DVDCOPY_TITLE_KEY,
  151.     AM_PROPERTY_COPY_MACROVISION,
  152.     AM_PROPERTY_DVDCOPY_REGION,
  153.     AM_PROPERTY_DVDCOPY_SET_COPY_STATE,
  154.     AM_PROPERTY_DVDCOPY_DISC_KEY = 0x80
  155. } AM_PROPERTY_DVDCOPYPROT;
  156.  
  157. typedef struct _AM_DVDCOPY_CHLGKEY {
  158.     BYTE ChlgKey[10];
  159.     BYTE Reserved[2];
  160. } AM_DVDCOPY_CHLGKEY, *PAM_DVDCOPY_CHLGKEY;
  161.  
  162. typedef struct _AM_DVDCOPY_BUSKEY {
  163.     BYTE BusKey[5];
  164.     BYTE Reserved[1];
  165. } AM_DVDCOPY_BUSKEY, *PAM_DVDCOPY_BUSKEY;
  166.  
  167. typedef struct _AM_DVDCOPY_DISCKEY {
  168.     BYTE DiscKey[2048];
  169. } AM_DVDCOPY_DISCKEY, *PAM_DVDCOPY_DISCKEY;
  170.  
  171. typedef struct AM_DVDCOPY_TITLEKEY {
  172.     ULONG KeyFlags;
  173.     ULONG Reserved1[2];
  174.     UCHAR TitleKey[6];
  175.     UCHAR Reserved2[2];
  176. } AM_DVDCOPY_TITLEKEY, *PAM_DVDCOPY_TITLEKEY;
  177.  
  178. typedef struct _AM_COPY_MACROVISION {
  179.     ULONG MACROVISIONLevel;
  180. } AM_COPY_MACROVISION, *PAM_COPY_MACROVISION;
  181.  
  182. typedef struct AM_DVDCOPY_SET_COPY_STATE {
  183.     ULONG DVDCopyState;
  184. } AM_DVDCOPY_SET_COPY_STATE, *PAM_DVDCOPY_SET_COPY_STATE;
  185.  
  186. typedef enum {
  187.     AM_DVDCOPYSTATE_INITIALIZE,
  188.     AM_DVDCOPYSTATE_INITIALIZE_TITLE,    // indicates we are starting a title
  189.                                         // key copy protection sequence
  190.     AM_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
  191.     AM_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
  192.     AM_DVDCOPYSTATE_DONE
  193. } AM_DVDCOPYSTATE;
  194.  
  195. typedef enum {
  196.     AM_MACROVISION_DISABLED,
  197.     AM_MACROVISION_LEVEL1,
  198.     AM_MACROVISION_LEVEL2,
  199.     AM_MACROVISION_LEVEL3
  200. } AM_COPY_MACROVISION_LEVEL, *PAM_COPY_MACROVISION_LEVEL;
  201.  
  202.  
  203. // CSS region stucture
  204. typedef struct _DVD_REGION {
  205.     UCHAR CopySystem;
  206.     UCHAR RegionData;
  207.     UCHAR SystemRegion;
  208.     UCHAR Reserved;
  209. } DVD_REGION, *PDVD_REGION;    
  210.  
  211. //
  212. // CGMS Copy Protection Flags
  213. //
  214.  
  215. #define AM_DVD_CGMS_RESERVED_MASK      0x00000078
  216.  
  217. #define AM_DVD_CGMS_COPY_PROTECT_MASK  0x00000018
  218. #define AM_DVD_CGMS_COPY_PERMITTED     0x00000000
  219. #define AM_DVD_CGMS_COPY_ONCE          0x00000010
  220. #define AM_DVD_CGMS_NO_COPY            0x00000018
  221.  
  222. #define AM_DVD_COPYRIGHT_MASK          0x00000040
  223. #define AM_DVD_NOT_COPYRIGHTED         0x00000000
  224. #define AM_DVD_COPYRIGHTED             0x00000040
  225.  
  226. #define AM_DVD_SECTOR_PROTECT_MASK     0x00000020
  227. #define AM_DVD_SECTOR_NOT_PROTECTED    0x00000000
  228. #define AM_DVD_SECTOR_PROTECTED        0x00000020
  229.  
  230.  
  231. // -----------------------------------------------------------------------
  232. // video format blocks
  233. // -----------------------------------------------------------------------
  234.  
  235. enum AM_MPEG2Level {
  236.     AM_MPEG2Level_Low = 1,
  237.     AM_MPEG2Level_Main,
  238.     AM_MPEG2Level_High1440,
  239.     AM_MPEG2Level_High
  240. };
  241.  
  242. enum AM_MPEG2Profile {
  243.     AM_MPEG2Profile_Simple = 1,
  244.     AM_MPEG2Profile_Main,
  245.     AM_MPEG2Profile_SNRScalable,
  246.     AM_MPEG2Profile_SpatiallyScalable,
  247.     AM_MPEG2Profile_High
  248. };
  249.  
  250. #define AMINTERLACE_IsInterlaced            0x00000001  // if 0, other interlace bits are irrelevent
  251. #define AMINTERLACE_1FieldPerSample         0x00000002  // else 2 fields per media sample
  252. #define AMINTERLACE_Field1First             0x00000004  // else Field 2 is first;  top field in PAL is field 1, top field in NTSC is field 2?
  253. #define AMINTERLACE_UNUSED                  0x00000008  //
  254. #define AMINTERLACE_FieldPatternMask        0x00000030  // use this mask with AMINTERLACE_FieldPat*
  255. #define AMINTERLACE_FieldPatField1Only      0x00000000  // stream never contains a Field2
  256. #define AMINTERLACE_FieldPatField2Only      0x00000010  // stream never contains a Field1
  257. #define AMINTERLACE_FieldPatBothRegular     0x00000020  // There will be a Field2 for every Field1 (required for Weave?)
  258. #define AMINTERLACE_FieldPatBothIrregular   0x00000030  // Random pattern of Field1s and Field2s
  259. #define AMINTERLACE_DisplayModeMask         0x000000c0
  260. #define AMINTERLACE_DisplayModeBobOnly      0x00000000
  261. #define AMINTERLACE_DisplayModeWeaveOnly    0x00000040
  262. #define AMINTERLACE_DisplayModeBobOrWeave   0x00000080
  263.  
  264. #define AMCOPYPROTECT_RestrictDuplication   0x00000001  // duplication of this stream should be restricted
  265.  
  266. #define AMMPEG2_DoPanScan           0x00000001  //if set, the MPEG-2 video decoder should crop output image 
  267.                         //  based on pan-scan vectors in picture_display_extension 
  268.                         //  and change the picture aspect ratio accordingly.
  269. #define AMMPEG2_DVDLine21Field1     0x00000002  //if set, the MPEG-2 decoder must be able to produce an output 
  270.                         //  pin for DVD style closed caption data found in GOP layer of field 1
  271. #define AMMPEG2_DVDLine21Field2     0x00000004  //if set, the MPEG-2 decoder must be able to produce an output 
  272.                         //  pin for DVD style closed caption data found in GOP layer of field 2
  273. #define AMMPEG2_SourceIsLetterboxed 0x00000008  //if set, indicates that black bars have been encoded in the top 
  274.                         //  and bottom of the video.
  275. #define AMMPEG2_FilmCameraMode      0x00000010  //if set, indicates "film mode" used for 625/50 content.  If cleared,
  276.                         //  indicates that "camera mode" was used.
  277. #define AMMPEG2_LetterboxAnalogOut  0x00000020  //if set and this stream is sent to an analog output, it should 
  278.                         //  be letterboxed.  Streams sent to VGA should be letterboxed only by renderers.
  279.  
  280.  
  281. typedef struct tagVIDEOINFOHEADER2 {
  282.     RECT                rcSource;
  283.     RECT                rcTarget;
  284.     DWORD               dwBitRate;
  285.     DWORD               dwBitErrorRate;
  286.     REFERENCE_TIME      AvgTimePerFrame;
  287.     DWORD               dwInterlaceFlags;   // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
  288.     DWORD               dwCopyProtectFlags; // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
  289.     DWORD               dwPictAspectRatioX; // X dimension of picture aspect ratio, e.g. 16 for 16x9 display 
  290.     DWORD               dwPictAspectRatioY; // Y dimension of picture aspect ratio, e.g.  9 for 16x9 display
  291.     DWORD               dwReserved1;        // must be 0; reject connection otherwise
  292.     DWORD               dwReserved2;        // must be 0; reject connection otherwise
  293.     BITMAPINFOHEADER    bmiHeader;
  294. } VIDEOINFOHEADER2;
  295.  
  296. typedef struct tagMPEG2VIDEOINFO {
  297.     VIDEOINFOHEADER2    hdr;
  298.     DWORD               dwStartTimeCode;        //  ?? not used for DVD ??
  299.     DWORD               cbSequenceHeader;       // is 0 for DVD (no sequence header)
  300.     DWORD               dwProfile;              // use enum MPEG2Profile   
  301.     DWORD               dwLevel;                // use enum MPEG2Level
  302.     DWORD               dwFlags;                // use AMMPEG2_* defines.  Reject connection if undefined bits are not 0
  303.     DWORD               dwSequenceHeader[1];    // DWORD instead of Byte for alignment purposes
  304.                                                 //   For MPEG-2, if a sequence_header is included, the sequence_extension 
  305.                                                 //   should also be included
  306. } MPEG2VIDEOINFO;
  307.  
  308. #define SIZE_MPEG2VIDEOINFO(pv) (FIELD_OFFSET(MPEG2VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  309. #define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  310.  
  311.  
  312. //===================================================================================
  313. // flags for dwTypeSpecificFlags in AM_SAMPLE2_PROPERTIES which define type specific
  314. // data in IMediaSample2
  315. //===================================================================================
  316.  
  317. #define AM_VIDEO_FLAG_FIELD_MASK        0x0003L    // use this mask to check whether the sample is field1 or field2 or frame
  318. #define AM_VIDEO_FLAG_INTERLEAVED_FRAME        0x0000L     // the sample is a frame (remember to use AM_VIDEO_FLAG_FIELD_MASK when using this)
  319. #define AM_VIDEO_FLAG_FIELD1            0x0001L    // the sample is field1 (remember to use AM_VIDEO_FLAG_FIELD_MASK when using this)
  320. #define AM_VIDEO_FLAG_FIELD2            0x0002L    // the sample is the field2 (remember to use AM_VIDEO_FLAG_FIELD_MASK when using this)
  321. #define AM_VIDEO_FLAG_FIELD1FIRST        0x0004L    // if set means display field1 first, else display field2 first.
  322.                             // this bit is irrelavant for 1FieldPerSample mode
  323. #define AM_VIDEO_FLAG_WEAVE                0x0008L    // if set use bob display mode else weave
  324. #define AM_VIDEO_FLAG_IPB_MASK            0x0030L    // use this mask to check whether the sample is I, P or B
  325. #define AM_VIDEO_FLAG_I_SAMPLE            0x0000L     // I Sample (remember to use AM_VIDEO_FLAG_IPB_MASK when using this)
  326. #define AM_VIDEO_FLAG_P_SAMPLE            0x0010L    // P Sample (remember to use AM_VIDEO_FLAG_IPB_MASK when using this)
  327. #define AM_VIDEO_FLAG_B_SAMPLE            0x0020L    // B Sample (remember to use AM_VIDEO_FLAG_IPB_MASK when using this)
  328. #define AM_VIDEO_FLAG_REPEAT_FIELD        0x0040L    // if set means display the field which has been displayed first again after displaying 
  329.                             // both fields first. This bit is irrelavant for 1FieldPerSample mode
  330.  
  331.  
  332. // -----------------------------------------------------------------------
  333. // AM_KSPROPSETID_TSRateChange property set definitions for time stamp
  334. // rate changes.
  335. // -----------------------------------------------------------------------
  336.  
  337. typedef enum {
  338.     AM_RATE_SimpleRateChange=1,   // rw, use AM_SimpleRateChange
  339.     AM_RATE_ExactRateChange=2,    // rw, use AM_ExactRateChange
  340.     AM_RATE_MaxFullDataRate=3,    // r, use AM_MaxFullDataRate
  341.     AM_RATE_Step=4            // w, use AM_Step
  342. } AM_PROPERTY_TS_RATE_CHANGE;
  343.  
  344. typedef struct {
  345.     // this is the simplest mechinism to set a time stamp rate change on
  346.     // a filter (simplest for the person setting the rate change, harder
  347.     // for the filter doing the rate change).  
  348.     REFERENCE_TIME    StartTime;  //stream time at which to start this rate
  349.     LONG        Rate;       //new rate * 10000 (decimal)
  350. } AM_SimpleRateChange;
  351.  
  352. typedef struct {
  353.     REFERENCE_TIME  OutputZeroTime; //input TS that maps to zero output TS
  354.     LONG        Rate;       //new rate * 10000 (decimal)
  355. } AM_ExactRateChange;
  356.  
  357. typedef LONG AM_MaxFullDataRate; //rate * 10000 (decimal)
  358.  
  359. typedef DWORD AM_Step; // number of frame to step
  360.  
  361.  
  362. #ifdef __cplusplus
  363. }
  364. #endif // __cplusplus
  365. #pragma option pop /*P_O_Pop*/
  366. #endif // __DVDMEDIA_H__
  367.