| /******************************************************************** |
| * Copyright(c) 2006-2009 Broadcom Corporation. |
| * |
| * Name: bc_dts_defs.h |
| * |
| * Description: Common definitions for all components. Only types |
| * is allowed to be included from this file. |
| * |
| * AU |
| * |
| * HISTORY: |
| * |
| ******************************************************************** |
| * This header is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU Lesser General Public License as published |
| * by the Free Software Foundation, either version 2.1 of the License. |
| * |
| * This header is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Lesser General Public License for more details. |
| * You should have received a copy of the GNU Lesser General Public License |
| * along with this header. If not, see <http://www.gnu.org/licenses/>. |
| *******************************************************************/ |
| |
| #ifndef _BC_DTS_DEFS_H_ |
| #define _BC_DTS_DEFS_H_ |
| |
| /* BIT Mask */ |
| #define BC_BIT(_x) (1 << (_x)) |
| |
| enum BC_STATUS { |
| BC_STS_SUCCESS = 0, |
| BC_STS_INV_ARG = 1, |
| BC_STS_BUSY = 2, |
| BC_STS_NOT_IMPL = 3, |
| BC_STS_PGM_QUIT = 4, |
| BC_STS_NO_ACCESS = 5, |
| BC_STS_INSUFF_RES = 6, |
| BC_STS_IO_ERROR = 7, |
| BC_STS_NO_DATA = 8, |
| BC_STS_VER_MISMATCH = 9, |
| BC_STS_TIMEOUT = 10, |
| BC_STS_FW_CMD_ERR = 11, |
| BC_STS_DEC_NOT_OPEN = 12, |
| BC_STS_ERR_USAGE = 13, |
| BC_STS_IO_USER_ABORT = 14, |
| BC_STS_IO_XFR_ERROR = 15, |
| BC_STS_DEC_NOT_STARTED = 16, |
| BC_STS_FWHEX_NOT_FOUND = 17, |
| BC_STS_FMT_CHANGE = 18, |
| BC_STS_HIF_ACCESS = 19, |
| BC_STS_CMD_CANCELLED = 20, |
| BC_STS_FW_AUTH_FAILED = 21, |
| BC_STS_BOOTLOADER_FAILED = 22, |
| BC_STS_CERT_VERIFY_ERROR = 23, |
| BC_STS_DEC_EXIST_OPEN = 24, |
| BC_STS_PENDING = 25, |
| BC_STS_CLK_NOCHG = 26, |
| |
| /* Must be the last one.*/ |
| BC_STS_ERROR = -1 |
| }; |
| |
| /*------------------------------------------------------* |
| * Registry Key Definitions * |
| *------------------------------------------------------*/ |
| #define BC_REG_KEY_MAIN_PATH "Software\\Broadcom\\MediaPC\\70010" |
| #define BC_REG_KEY_FWPATH "FirmwareFilePath" |
| #define BC_REG_KEY_SEC_OPT "DbgOptions" |
| |
| /* |
| * Options: |
| * |
| * b[5] = Enable RSA KEY in EEPROM Support |
| * b[6] = Enable Old PIB scheme. (0 = Use PIB with video scheme) |
| * |
| * b[12] = Enable send message to NotifyIcon |
| * |
| */ |
| |
| enum BC_SW_OPTIONS { |
| BC_OPT_DOSER_OUT_ENCRYPT = BC_BIT(3), |
| BC_OPT_LINK_OUT_ENCRYPT = BC_BIT(29), |
| }; |
| |
| struct BC_REG_CONFIG { |
| uint32_t DbgOptions; |
| }; |
| |
| #if defined(__KERNEL__) || defined(__LINUX_USER__) |
| #else |
| /* Align data structures */ |
| #define ALIGN(x) __declspec(align(x)) |
| #endif |
| |
| /* mode |
| * b[0]..b[7] = _DtsDeviceOpenMode |
| * b[8] = Load new FW |
| * b[9] = Load file play back FW |
| * b[10] = Disk format (0 for HD DVD and 1 for BLU ray) |
| * b[11]-b[15] = default output resolution |
| * b[16] = Skip TX CPB Buffer Check |
| * b[17] = Adaptive Output Encrypt/Scramble Scheme |
| * b[18]-b[31] = reserved for future use |
| */ |
| |
| /* To allow multiple apps to open the device. */ |
| enum DtsDeviceOpenMode { |
| DTS_PLAYBACK_MODE = 0, |
| DTS_DIAG_MODE, |
| DTS_MONITOR_MODE, |
| DTS_HWINIT_MODE |
| }; |
| |
| /* To enable the filter to selectively enable/disable fixes or erratas */ |
| enum DtsDeviceFixMode { |
| DTS_LOAD_NEW_FW = BC_BIT(8), |
| DTS_LOAD_FILE_PLAY_FW = BC_BIT(9), |
| DTS_DISK_FMT_BD = BC_BIT(10), |
| /* b[11]-b[15] : Default output resolution */ |
| DTS_SKIP_TX_CHK_CPB = BC_BIT(16), |
| DTS_ADAPTIVE_OUTPUT_PER = BC_BIT(17), |
| DTS_INTELLIMAP = BC_BIT(18), |
| /* b[19]-b[21] : select clock frequency */ |
| DTS_PLAYBACK_DROP_RPT_MODE = BC_BIT(22) |
| }; |
| |
| #define DTS_DFLT_RESOLUTION(x) (x<<11) |
| |
| #define DTS_DFLT_CLOCK(x) (x<<19) |
| |
| /* F/W File Version corresponding to S/W Releases */ |
| enum FW_FILE_VER { |
| /* S/W release: 02.04.02 F/W release 2.12.2.0 */ |
| BC_FW_VER_020402 = ((12<<16) | (2<<8) | (0)) |
| }; |
| |
| /*------------------------------------------------------* |
| * Stream Types for DtsOpenDecoder() * |
| *------------------------------------------------------*/ |
| enum DtsOpenDecStreamTypes { |
| BC_STREAM_TYPE_ES = 0, |
| BC_STREAM_TYPE_PES = 1, |
| BC_STREAM_TYPE_TS = 2, |
| BC_STREAM_TYPE_ES_TSTAMP = 6, |
| }; |
| |
| /*------------------------------------------------------* |
| * Video Algorithms for DtsSetVideoParams() * |
| *------------------------------------------------------*/ |
| enum DtsSetVideoParamsAlgo { |
| BC_VID_ALGO_H264 = 0, |
| BC_VID_ALGO_MPEG2 = 1, |
| BC_VID_ALGO_VC1 = 4, |
| BC_VID_ALGO_VC1MP = 7, |
| }; |
| |
| /*------------------------------------------------------* |
| * MPEG Extension to the PPB * |
| *------------------------------------------------------*/ |
| #define BC_MPEG_VALID_PANSCAN (1) |
| |
| struct BC_PIB_EXT_MPEG { |
| uint32_t valid; |
| /* Always valid, defaults to picture size if no |
| * sequence display extension in the stream. */ |
| uint32_t display_horizontal_size; |
| uint32_t display_vertical_size; |
| |
| /* MPEG_VALID_PANSCAN |
| * Offsets are a copy values from the MPEG stream. */ |
| uint32_t offset_count; |
| int32_t horizontal_offset[3]; |
| int32_t vertical_offset[3]; |
| }; |
| |
| /*------------------------------------------------------* |
| * H.264 Extension to the PPB * |
| *------------------------------------------------------*/ |
| /* Bit definitions for 'other.h264.valid' field */ |
| #define H264_VALID_PANSCAN (1) |
| #define H264_VALID_SPS_CROP (2) |
| #define H264_VALID_VUI (4) |
| |
| struct BC_PIB_EXT_H264 { |
| /* 'valid' specifies which fields (or sets of |
| * fields) below are valid. If the corresponding |
| * bit in 'valid' is NOT set then that field(s) |
| * is (are) not initialized. */ |
| uint32_t valid; |
| |
| /* H264_VALID_PANSCAN */ |
| uint32_t pan_scan_count; |
| int32_t pan_scan_left[3]; |
| int32_t pan_scan_right[3]; |
| int32_t pan_scan_top[3]; |
| int32_t pan_scan_bottom[3]; |
| |
| /* H264_VALID_SPS_CROP */ |
| int32_t sps_crop_left; |
| int32_t sps_crop_right; |
| int32_t sps_crop_top; |
| int32_t sps_crop_bottom; |
| |
| /* H264_VALID_VUI */ |
| uint32_t chroma_top; |
| uint32_t chroma_bottom; |
| }; |
| |
| /*------------------------------------------------------* |
| * VC1 Extension to the PPB * |
| *------------------------------------------------------*/ |
| #define VC1_VALID_PANSCAN (1) |
| |
| struct BC_PIB_EXT_VC1 { |
| uint32_t valid; |
| |
| /* Always valid, defaults to picture size if no |
| * sequence display extension in the stream. */ |
| uint32_t display_horizontal_size; |
| uint32_t display_vertical_size; |
| |
| /* VC1 pan scan windows */ |
| uint32_t num_panscan_windows; |
| int32_t ps_horiz_offset[4]; |
| int32_t ps_vert_offset[4]; |
| int32_t ps_width[4]; |
| int32_t ps_height[4]; |
| }; |
| |
| /*------------------------------------------------------* |
| * Picture Information Block * |
| *------------------------------------------------------*/ |
| #if defined(__LINUX_USER__) |
| /* Values for 'pulldown' field. '0' means no pulldown information |
| * was present for this picture. */ |
| enum { |
| vdecNoPulldownInfo = 0, |
| vdecTop = 1, |
| vdecBottom = 2, |
| vdecTopBottom = 3, |
| vdecBottomTop = 4, |
| vdecTopBottomTop = 5, |
| vdecBottomTopBottom = 6, |
| vdecFrame_X2 = 7, |
| vdecFrame_X3 = 8, |
| vdecFrame_X1 = 9, |
| vdecFrame_X4 = 10, |
| }; |
| |
| /* Values for the 'frame_rate' field. */ |
| enum { |
| vdecFrameRateUnknown = 0, |
| vdecFrameRate23_97, |
| vdecFrameRate24, |
| vdecFrameRate25, |
| vdecFrameRate29_97, |
| vdecFrameRate30, |
| vdecFrameRate50, |
| vdecFrameRate59_94, |
| vdecFrameRate60, |
| }; |
| |
| /* Values for the 'aspect_ratio' field. */ |
| enum { |
| vdecAspectRatioUnknown = 0, |
| vdecAspectRatioSquare, |
| vdecAspectRatio12_11, |
| vdecAspectRatio10_11, |
| vdecAspectRatio16_11, |
| vdecAspectRatio40_33, |
| vdecAspectRatio24_11, |
| vdecAspectRatio20_11, |
| vdecAspectRatio32_11, |
| vdecAspectRatio80_33, |
| vdecAspectRatio18_11, |
| vdecAspectRatio15_11, |
| vdecAspectRatio64_33, |
| vdecAspectRatio160_99, |
| vdecAspectRatio4_3, |
| vdecAspectRatio16_9, |
| vdecAspectRatio221_1, |
| vdecAspectRatioOther = 255, |
| }; |
| |
| /* Values for the 'colour_primaries' field. */ |
| enum { |
| vdecColourPrimariesUnknown = 0, |
| vdecColourPrimariesBT709, |
| vdecColourPrimariesUnspecified, |
| vdecColourPrimariesReserved, |
| vdecColourPrimariesBT470_2M = 4, |
| vdecColourPrimariesBT470_2BG, |
| vdecColourPrimariesSMPTE170M, |
| vdecColourPrimariesSMPTE240M, |
| vdecColourPrimariesGenericFilm, |
| }; |
| |
| enum { |
| vdecRESOLUTION_CUSTOM = 0x00000000, /* custom */ |
| vdecRESOLUTION_480i = 0x00000001, /* 480i */ |
| vdecRESOLUTION_1080i = 0x00000002, /* 1080i (1920x1080, 60i) */ |
| vdecRESOLUTION_NTSC = 0x00000003, /* NTSC (720x483, 60i) */ |
| vdecRESOLUTION_480p = 0x00000004, /* 480p (720x480, 60p) */ |
| vdecRESOLUTION_720p = 0x00000005, /* 720p (1280x720, 60p) */ |
| vdecRESOLUTION_PAL1 = 0x00000006, /* PAL_1 (720x576, 50i) */ |
| vdecRESOLUTION_1080i25 = 0x00000007, /* 1080i25 (1920x1080, 50i) */ |
| vdecRESOLUTION_720p50 = 0x00000008, /* 720p50 (1280x720, 50p) */ |
| vdecRESOLUTION_576p = 0x00000009, /* 576p (720x576, 50p) */ |
| vdecRESOLUTION_1080i29_97 = 0x0000000A, /* 1080i (1920x1080, 59.94i) */ |
| vdecRESOLUTION_720p59_94 = 0x0000000B, /* 720p (1280x720, 59.94p) */ |
| vdecRESOLUTION_SD_DVD = 0x0000000C, /* SD DVD (720x483, 60i) */ |
| vdecRESOLUTION_480p656 = 0x0000000D, /* 480p (720x480, 60p), output bus width 8 bit, clock 74.25MHz */ |
| vdecRESOLUTION_1080p23_976 = 0x0000000E, /* 1080p23_976 (1920x1080, 23.976p) */ |
| vdecRESOLUTION_720p23_976 = 0x0000000F, /* 720p23_976 (1280x720p, 23.976p) */ |
| vdecRESOLUTION_240p29_97 = 0x00000010, /* 240p (1440x240, 29.97p ) */ |
| vdecRESOLUTION_240p30 = 0x00000011, /* 240p (1440x240, 30p) */ |
| vdecRESOLUTION_288p25 = 0x00000012, /* 288p (1440x288p, 25p) */ |
| vdecRESOLUTION_1080p29_97 = 0x00000013, /* 1080p29_97 (1920x1080, 29.97p) */ |
| vdecRESOLUTION_1080p30 = 0x00000014, /* 1080p30 (1920x1080, 30p) */ |
| vdecRESOLUTION_1080p24 = 0x00000015, /* 1080p24 (1920x1080, 24p) */ |
| vdecRESOLUTION_1080p25 = 0x00000016, /* 1080p25 (1920x1080, 25p) */ |
| vdecRESOLUTION_720p24 = 0x00000017, /* 720p24 (1280x720, 25p) */ |
| vdecRESOLUTION_720p29_97 = 0x00000018, /* 720p29.97 (1280x720, 29.97p) */ |
| vdecRESOLUTION_480p23_976 = 0x00000019, /* 480p23.976 (720*480, 23.976) */ |
| vdecRESOLUTION_480p29_97 = 0x0000001A, /* 480p29.976 (720*480, 29.97p) */ |
| vdecRESOLUTION_576p25 = 0x0000001B, /* 576p25 (720*576, 25p) */ |
| /* For Zero Frame Rate */ |
| vdecRESOLUTION_480p0 = 0x0000001C, /* 480p (720x480, 0p) */ |
| vdecRESOLUTION_480i0 = 0x0000001D, /* 480i (720x480, 0i) */ |
| vdecRESOLUTION_576p0 = 0x0000001E, /* 576p (720x576, 0p) */ |
| vdecRESOLUTION_720p0 = 0x0000001F, /* 720p (1280x720, 0p) */ |
| vdecRESOLUTION_1080p0 = 0x00000020, /* 1080p (1920x1080, 0p) */ |
| vdecRESOLUTION_1080i0 = 0x00000021, /* 1080i (1920x1080, 0i) */ |
| }; |
| |
| /* Bit definitions for 'flags' field */ |
| #define VDEC_FLAG_EOS (0x0004) |
| |
| #define VDEC_FLAG_FRAME (0x0000) |
| #define VDEC_FLAG_FIELDPAIR (0x0008) |
| #define VDEC_FLAG_TOPFIELD (0x0010) |
| #define VDEC_FLAG_BOTTOMFIELD (0x0018) |
| |
| #define VDEC_FLAG_PROGRESSIVE_SRC (0x0000) |
| #define VDEC_FLAG_INTERLACED_SRC (0x0020) |
| #define VDEC_FLAG_UNKNOWN_SRC (0x0040) |
| |
| #define VDEC_FLAG_BOTTOM_FIRST (0x0080) |
| #define VDEC_FLAG_LAST_PICTURE (0x0100) |
| |
| #define VDEC_FLAG_PICTURE_META_DATA_PRESENT (0x40000) |
| |
| #endif /* __LINUX_USER__ */ |
| |
| enum _BC_OUTPUT_FORMAT { |
| MODE420 = 0x0, |
| MODE422_YUY2 = 0x1, |
| MODE422_UYVY = 0x2, |
| }; |
| |
| struct BC_PIC_INFO_BLOCK { |
| /* Common fields. */ |
| uint64_t timeStamp; /* Timestamp */ |
| uint32_t picture_number; /* Ordinal display number */ |
| uint32_t width; /* pixels */ |
| uint32_t height; /* pixels */ |
| uint32_t chroma_format; /* 0x420, 0x422 or 0x444 */ |
| uint32_t pulldown; |
| uint32_t flags; |
| uint32_t frame_rate; |
| uint32_t aspect_ratio; |
| uint32_t colour_primaries; |
| uint32_t picture_meta_payload; |
| uint32_t sess_num; |
| uint32_t ycom; |
| uint32_t custom_aspect_ratio_width_height; |
| uint32_t n_drop; /* number of non-reference frames remaining to be dropped */ |
| |
| /* Protocol-specific extensions. */ |
| union { |
| struct BC_PIB_EXT_H264 h264; |
| struct BC_PIB_EXT_MPEG mpeg; |
| struct BC_PIB_EXT_VC1 vc1; |
| } other; |
| |
| }; |
| |
| /*------------------------------------------------------* |
| * ProcOut Info * |
| *------------------------------------------------------*/ |
| /* Optional flags for ProcOut Interface.*/ |
| enum POUT_OPTIONAL_IN_FLAGS_ { |
| /* Flags from App to Device */ |
| BC_POUT_FLAGS_YV12 = 0x01, /* Copy Data in YV12 format */ |
| BC_POUT_FLAGS_STRIDE = 0x02, /* Stride size is valid. */ |
| BC_POUT_FLAGS_SIZE = 0x04, /* Take size information from Application */ |
| BC_POUT_FLAGS_INTERLACED = 0x08, /* copy only half the bytes */ |
| BC_POUT_FLAGS_INTERLEAVED = 0x10, /* interleaved frame */ |
| |
| /* Flags from Device to APP */ |
| BC_POUT_FLAGS_FMT_CHANGE = 0x10000, /* Data is not VALID when this flag is set */ |
| BC_POUT_FLAGS_PIB_VALID = 0x20000, /* PIB Information valid */ |
| BC_POUT_FLAGS_ENCRYPTED = 0x40000, /* Data is encrypted. */ |
| BC_POUT_FLAGS_FLD_BOT = 0x80000, /* Bottom Field data */ |
| }; |
| |
| typedef enum BC_STATUS(*dts_pout_callback)(void *shnd, uint32_t width, uint32_t height, uint32_t stride, void *pOut); |
| |
| /* Line 21 Closed Caption */ |
| /* User Data */ |
| #define MAX_UD_SIZE 1792 /* 1920 - 128 */ |
| |
| struct BC_DTS_PROC_OUT { |
| uint8_t *Ybuff; /* Caller Supplied buffer for Y data */ |
| uint32_t YbuffSz; /* Caller Supplied Y buffer size */ |
| uint32_t YBuffDoneSz; /* Transferred Y datasize */ |
| |
| uint8_t *UVbuff; /* Caller Supplied buffer for UV data */ |
| uint32_t UVbuffSz; /* Caller Supplied UV buffer size */ |
| uint32_t UVBuffDoneSz; /* Transferred UV data size */ |
| |
| uint32_t StrideSz; /* Caller supplied Stride Size */ |
| uint32_t PoutFlags; /* Call IN Flags */ |
| |
| uint32_t discCnt; /* Picture discontinuity count */ |
| |
| struct BC_PIC_INFO_BLOCK PicInfo; /* Picture Information Block Data */ |
| |
| /* Line 21 Closed Caption */ |
| /* User Data */ |
| uint32_t UserDataSz; |
| uint8_t UserData[MAX_UD_SIZE]; |
| |
| void *hnd; |
| dts_pout_callback AppCallBack; |
| uint8_t DropFrames; |
| uint8_t b422Mode; /* Picture output Mode */ |
| uint8_t bPibEnc; /* PIB encrypted */ |
| uint8_t bRevertScramble; |
| |
| }; |
| |
| struct BC_DTS_STATUS { |
| uint8_t ReadyListCount; /* Number of frames in ready list (reported by driver) */ |
| uint8_t FreeListCount; /* Number of frame buffers free. (reported by driver) */ |
| uint8_t PowerStateChange; /* Number of active state power transitions (reported by driver) */ |
| uint8_t reserved_[1]; |
| |
| uint32_t FramesDropped; /* Number of frames dropped. (reported by DIL) */ |
| uint32_t FramesCaptured; /* Number of frames captured. (reported by DIL) */ |
| uint32_t FramesRepeated; /* Number of frames repeated. (reported by DIL) */ |
| |
| uint32_t InputCount; /* Times compressed video has been sent to the HW. |
| * i.e. Successful DtsProcInput() calls (reported by DIL) */ |
| uint64_t InputTotalSize; /* Amount of compressed video that has been sent to the HW. |
| * (reported by DIL) */ |
| uint32_t InputBusyCount; /* Times compressed video has attempted to be sent to the HW |
| * but the input FIFO was full. (reported by DIL) */ |
| |
| uint32_t PIBMissCount; /* Amount of times a PIB is invalid. (reported by DIL) */ |
| |
| uint32_t cpbEmptySize; /* supported only for H.264, specifically changed for |
| * Adobe. Report size of CPB buffer available. |
| * Reported by DIL */ |
| uint64_t NextTimeStamp; /* TimeStamp of the next picture that will be returned |
| * by a call to ProcOutput. Added for Adobe. Reported |
| * back from the driver */ |
| uint8_t reserved__[16]; |
| |
| }; |
| |
| #define BC_SWAP32(_v) \ |
| ((((_v) & 0xFF000000)>>24)| \ |
| (((_v) & 0x00FF0000)>>8)| \ |
| (((_v) & 0x0000FF00)<<8)| \ |
| (((_v) & 0x000000FF)<<24)) |
| |
| #define WM_AGENT_TRAYICON_DECODER_OPEN 10001 |
| #define WM_AGENT_TRAYICON_DECODER_CLOSE 10002 |
| #define WM_AGENT_TRAYICON_DECODER_START 10003 |
| #define WM_AGENT_TRAYICON_DECODER_STOP 10004 |
| #define WM_AGENT_TRAYICON_DECODER_RUN 10005 |
| #define WM_AGENT_TRAYICON_DECODER_PAUSE 10006 |
| |
| |
| #endif /* _BC_DTS_DEFS_H_ */ |