Merge "Upgrade of Widevine libraries from 4.5.0 to 6.0.0"
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
41
proprietary/streamcontrol/include/WVControlSettings.h
Normal file
41
proprietary/streamcontrol/include/WVControlSettings.h
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
/****************************************************************************************************
|
||||||
|
* WVControlSettings.h
|
||||||
|
*
|
||||||
|
* (c) Copyright 2011-2012 Google, Inc.
|
||||||
|
*
|
||||||
|
* Widevine API types
|
||||||
|
***************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __WVCONTROLSETTINGS_H__
|
||||||
|
#define __WVCONTROLSETTINGS_H__
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
/* WVCredentials is used in both WVPlaybackAPI and WVStreamControlAPI. */
|
||||||
|
struct WVCredentials {
|
||||||
|
std::string deviceID; // unique player device ID from CinemaNow
|
||||||
|
std::string streamID; // unique streamID from CinemaNow
|
||||||
|
std::string clientIP; // IP address of client
|
||||||
|
std::string drmServerURL; // URL for DRM server
|
||||||
|
std::string userData; // Additional optional user data, TBD
|
||||||
|
std::string portal; // Identifies the operator
|
||||||
|
std::string storefront; // Identifies store run by operator
|
||||||
|
std::string drmAckServerURL; // URL for server that receives
|
||||||
|
// entitlement confirmations
|
||||||
|
std::string heartbeatURL; // URL to receive client heartbeats
|
||||||
|
unsigned int heartbeatPeriod;// Duration between consecutive heartbeats in
|
||||||
|
// seconds. 0 indicates no heatbeats requested
|
||||||
|
unsigned int cnDeviceType; // device type identifier defined by CinemaNow
|
||||||
|
};
|
||||||
|
|
||||||
|
/* WVProxySettings is used in both WVPlaybackAPI and WVStreamControlAPI. */
|
||||||
|
struct WVProxySettings {
|
||||||
|
bool enable; // If true, proxy use is enable, otherwise disabled
|
||||||
|
std::string ipAddr; // IP address of proxy server, e.g. "1.2.3.4" or host name
|
||||||
|
unsigned short ipPort; // IP port number
|
||||||
|
std::string userId; // User ID if authentication is needed, otherwise "" to disable authentication
|
||||||
|
std::string password; // Password if userID is not ""
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __WVCONTROLSETTINGS_H__
|
||||||
176
proprietary/streamcontrol/include/WVDictionaryKeys.h
Normal file
176
proprietary/streamcontrol/include/WVDictionaryKeys.h
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
/****************************************************************************************************
|
||||||
|
* WVDictionaryKeys.h
|
||||||
|
*
|
||||||
|
* Key and value constants for dictionaries
|
||||||
|
*
|
||||||
|
* (c) Copyright 2011 Google, Inc.
|
||||||
|
***************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __WVDICTIONARYKEYS_H__
|
||||||
|
#define __WVDICTIONARYKEYS_H__
|
||||||
|
|
||||||
|
|
||||||
|
// Keys for Credentials dictionary
|
||||||
|
#define kCredentialsKey_DeviceId "CredentialsKey_DeviceId" // Device ID (WVString)
|
||||||
|
#define kCredentialsKey_ClientId "CredentialsKey_ClientId" // Client ID (WVString)
|
||||||
|
#define kCredentialsKey_StreamId "CredentialsKey_StreamId" // Stream ID (WVString)
|
||||||
|
#define kCredentialsKey_SessionId "CredentialsKey_SessionId" // Session ID (WVString)
|
||||||
|
#define kCredentialsKey_ClientIp "CredentialsKey_ClientIp" // Client IP (WVString)
|
||||||
|
#define kCredentialsKey_Portal "CredentialsKey_Portal" // Media portal (WVString)
|
||||||
|
#define kCredentialsKey_Storefront "CredentialsKey_Storefront" // Media storefront (WVString)
|
||||||
|
#define kCredentialsKey_OptionalData "CredentialsKey_OptionalData" // Optional data (WVString)
|
||||||
|
#define kCredentialsKey_AssetRegistryId "CredentialsKey_AssetRegistryId" // Asset Registry ID to store/retrieve licenses (WVString)
|
||||||
|
#define kCredentialsKey_DrmServerUrl "CredentialsKey_DrmServerUrl" // DRM server URL to retrieve entitlements (WVString)
|
||||||
|
#define kCredentialsKey_DrmAckServerUrl "CredentialsKey_DrmAckServerUrl" // DRM ACK server URL (WVString)
|
||||||
|
#define kCredentialsKey_HeartbeatUrl "CredentialsKey_HeartbeatUrl" // Heartbeat sever URL (WVString)
|
||||||
|
#define kCredentialsKey_DrmLicenseUsageUrl "CredentialsKey_DrmLicenseUsageUrl" // DRM License usage URL (WVString)
|
||||||
|
#define kCredentialsKey_SignOnUrl "CredentialsKey_SignOnUrl" // Sign-on server URL (WVString)
|
||||||
|
#define kCredentialsKey_AppSignatureUrl "CredentialsKey_AppSignatureUrl" // DCP application signature URL (WVString)
|
||||||
|
#define kCredentialsKey_DcpLogUrl "CredentialsKey_DcpLogUrl" // DCP logging URL (WVString)
|
||||||
|
#define kCredentialsKey_HeartbeatPeriod "CredentialsKey_HeartbeatPeriod" // Heartbeat period (WVUnsignedInt)
|
||||||
|
#define kCredentialsKey_UserAgent "CredentialsKey_UserAgent" // UserAgent for HTTP requests (WVString)
|
||||||
|
#define kCredentialsKey_PreloadTimeout "CredentialsKey_PreloadTimeout" // Preload timeout in microseconds (WVUnsignedInt)
|
||||||
|
#define kCredentialsKey_CacheSize "CredentialsKey_CacheSize" // Size of donwload/adaptive cache in bytes (WVUnsignedInt).
|
||||||
|
#define kCredentialsKey_DataStorePath "CredentialsKey_DataStorePath" // Optional path to license data store (WVString)
|
||||||
|
#define kCredentialsKey_PlaybackMode "CredentialsKey_PlaybackMode" // Playback mode (WVUnsignedInt), see kPlaybackMode constants
|
||||||
|
#define kCredentialsKey_CaToken "CredentialsKey_CaToken" // Conditional access token
|
||||||
|
#define kCredentialsKey_CommandChannel "CredentialsKey_CommandChannel" // Enable control back channel (WVBoolean).
|
||||||
|
#define kCredentialsKey_Pda "CredentialsKey_Pda" // Enable player-driven adaptation (WVBoolean)
|
||||||
|
#define kCredentialsKey_AssetFsRoot "CredentialsKey_AssetFsRoot" // File system root directory for assets (WVString)
|
||||||
|
#define kCredentialsKey_UseJSON "CredentialsKey_UseJSON" // Use JSON format for EMM (WVBoolean)
|
||||||
|
|
||||||
|
// Keys for Asset Registry query results dictionary
|
||||||
|
#define kAssetRegistryKey_AssetPath "AssetRegistryKey_AssetPath" // Asset path (WVString)
|
||||||
|
#define kAssetRegistryKey_AssetStatus "AssetRegistryKey_AssetStatus" // Asset status (WVUnsignedInt)
|
||||||
|
|
||||||
|
|
||||||
|
// Keys for asset information containing dictionaries
|
||||||
|
#define kAssetInfoKey_SystemId "AssetInfoKey_SystemId" // CA system ID (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_AssetId "AssetInfoKey_AssetId" // CA asset ID (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_KeyIndex "AssetInfoKey_KeyIndex" // CA key index (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_DistributionTimeRemaining "AssetInfoKey_DistributionTimeRemaining" // Distribution time remaining (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_PurchaseTimeRemaining "AssetInfoKey_PurchaseTimeRemaining" // Purchase time reaminng (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_LicenseTimeRemaining "AssetInfoKey_LicenseTimeRemaining" // License time remaining (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_LicenseExpiryTimeRemaining "AssetInfoKey_LicenseExpiryTimeRemaining" // Overall time remaining before license expires (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_TimeSinceFirstPlayback "AssetInfoKey_TimeSinceFirstPlayback" // Time since first playback (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_CAError "AssetInfoKey_CAError" // License retrieval error (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_MaxBitrate "AssetInfoKey_MaxBitrate" // Max bitrate (WVUnsignedInt)
|
||||||
|
#define kAssetInfoKey_MinBitrate "AssetInfoKey_MinBitrate" // Min bitrate (WVUnsignedInt)
|
||||||
|
|
||||||
|
// Keys for error information containing dictionaries
|
||||||
|
#define kErrorKey_WVStatus "ErrorKey_WVStatus" // WVStatus code (WVUnsignedInt)
|
||||||
|
#define kErrorKey_AdditionalInfo "ErrorKey_AdditionalInfo" // Error additional information (WVString)
|
||||||
|
|
||||||
|
|
||||||
|
// Keys for track information
|
||||||
|
#define kTrackInfoKey_CypherVersion "TrackInfoKey_CypherVersion" // Cypher version (WVString)
|
||||||
|
#define kTrackInfoKey_Id "TrackInfoKey_Id" // Track ID (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_Version "TrackInfoKey_Version" // Track version (WVUnsignedInt) INTERNAL
|
||||||
|
#define kTrackInfoKey_BitRate "TrackInfoKey_BitRate" // Required bandwidth it bits/sec (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_Offset "TrackInfoKey_Offset" // Track byte offset (WVUnsignedLong) INTERNAL
|
||||||
|
#define kTrackInfoKey_Size "TrackInfoKey_Size" // Track size (WVUnsignedLong) INTERNAL
|
||||||
|
#define kTrackInfoKey_Duration "TrackInfoKey_Duration" // Track duration in us (WVUnsignedLong)
|
||||||
|
#define kTrackInfoKey_AdaptationInterval "TrackInfoKey_AdaptationInterval" // Nominal adaptation interval, in seconds (WVFloat)
|
||||||
|
#define kTrackInfoKey_TrickPlayRate "TrackInfoKey_TrickPlayRate" // Trick-play rate (WVSignedInt)
|
||||||
|
#define kTrackInfoKey_Flags "TrackInfoKey_Flags" // Track flags (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_Source "TrackInfoKey_Source" // Source for media (WVString)
|
||||||
|
#define kTrackInfoKey_TimingOffset "TrackInfoKey_TimingOffset" // Track timing adjustment in seconds (WVFloat)
|
||||||
|
|
||||||
|
// Video track information
|
||||||
|
#define kTrackInfoKey_VideoFormat "TrackInfoKey_VideoFormat" // Type of video, valid values below (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoProfile "TrackInfoKey_VideoProfile" // Video profile indicator (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoLevel "TrackInfoKey_VideoLevel" // Video leve indicator (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoWidth "TrackInfoKey_VideoWidth" // Video width, in pixels (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoHeight "TrackInfoKey_VideoHeight" // Video height, in lines (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoPixelWidth "TrackInfoKey_VideoPixelWidth" // Video pixel aspect ratio width (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoPixelHeight "TrackInfoKey_VideoPixelHeight" // Video pixel aspect ratio height (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoFrameRate "TrackInfoKey_VideoFrameRate" // Video frame rate (WVFloat)
|
||||||
|
#define kTrackInfoKey_VideoBitRate "TrackInfoKey_VideoBitRate" // Video bit rate, bits/sec (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoMpegStreamType "TrackInfoKey_VideoMpegStreamType" // Video MPEG ES stream type (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoMpegStreamId "TrackInfoKey_VideoMpegStreamId" // Video MPEG PES stream ID (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_VideoMpegStreamPid "TrackInfoKey_VideoMpegStreamPid" // Video MPEG2-TS PID (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AVCDecoderConfigurationRecord "TrackInfoKey_AVCDecoderConfigurationRecord" // h.264 AVCDecoderConfigurationRecord (WVDataBlob)
|
||||||
|
|
||||||
|
// Audio track information
|
||||||
|
#define kTrackInfoKey_AudioFormat "TrackInfoKey_AudioFormat" // Type of audio, valid values below (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioProfile "TrackInfoKey_AudioProfile" // Audio profile indicator (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioNumChannels "TrackInfoKey_AudioNumChannels" // Number of audio channels (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioSampleFrequency "TrackInfoKey_AudioSampleFrequency" // Audio sampling frequency, in hertz (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioSampleSize "TrackInfoKey_AudioSampleSize" // Audio sample size, in bits (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioBitRate "TrackInfoKey_AudioBitRate" // Audio bit rate (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioMpegStreamType "TrackInfoKey_AudioMpegStreamType" // Audio MPEG ES stream type (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioMpegStreamId "TrackInfoKey_AudioMpegStreamId" // Audio MPEG PES stream ID (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioMpegStreamPid "TrackInfoKey_AudioMpegStreamPid" // Audio MPEG2-TS PID (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_AudioEsDescriptor "TrackInfoKey_AudioEsDescriptor" // Audio ES_Descriptor (WVDataBlob)
|
||||||
|
#define kTrackInfoKey_AudioEC3SpecificData "TrackInfoKey_AudioEC3SpecificData" // E-AC3 audio contents of dec3 box (WVDataBlob)
|
||||||
|
#define kTrackInfoKey_AudioIdentifier "TrackInfoKey_AudioIdentifier" // Audio track indentifier/language code (WVString)
|
||||||
|
|
||||||
|
// Subtitle track information
|
||||||
|
#define kTrackInfoKey_SubtitleFormat "TrackInfoKey_SubtitleFormat" // Type of subtitle, valid values below (WVUnsignedInt)
|
||||||
|
#define kTrackInfoKey_SubtitleIdentifier "TrackInfoKey_SubtitleIdentifier" // Subtitle track identifier/language code (WVString)
|
||||||
|
|
||||||
|
// Keys for chapter information
|
||||||
|
#define kChapterInfoKey_SeqNum "ChapterInfoKey_SeqNum" // Chapter sequence number (WVUnsignedInt, 0 start)
|
||||||
|
#define kChapterInfoKey_ChapterTimeIndex "ChapterInfoKey_StartTimeIndex" // Chapter start time index (WVUnsignedInt, milliseconds)
|
||||||
|
#define kChapterInfoKey_Title "ChapterInfoKey_Title" // Chapter title (WVString)
|
||||||
|
#define kChapterInfoKey_Thumbnail "ChapterInfoKey_Thumbnail" // Chapter thumbnail image (WVDataBlob, JPEG)
|
||||||
|
|
||||||
|
// Keys for copy control information
|
||||||
|
#define kCopyControlInfoKey "CopyControlInfoKey" // CCI Information (WVUnsignedInt)
|
||||||
|
#define kCopyControlInfoKey_EMI "CopyControlInfoKey_EMI" // EMI restrictions (WVUnsignedInt, below)
|
||||||
|
#define kCopyControlInfoKey_APS "CopyControlInfoKey_APS" // APS restrictions (WVUnsignedInt, below)
|
||||||
|
#define kCopyControlInfoKey_CIT "CopyControlInfoKey_CIT" // Constrain Image Trigger enabled (WVBoolean)
|
||||||
|
#define kCopyControlInfoKey_HDCP "CopyControlInfoKey_HDCP" // HDCP enabled (WVBoolean)
|
||||||
|
#define kCopyControlInfoKey_Heartbeats "CopyControlInfoKey_Heartbeats" // Heartbeats enabled (WVBoolean)
|
||||||
|
|
||||||
|
// Keys for DCP flags (please use enums and inlines in WVEmm.h to extract fields)
|
||||||
|
#define kDCPKey_DCPFlags "DCPKey_DCPFlags" // DCP Flags (WVUnsignedInt)
|
||||||
|
|
||||||
|
// Key to indicate whether to check if the license needs to be refreshed
|
||||||
|
#define kLicenseKey_CheckLicenseRefresh "LicenseKey_CheckLicenseRefresh" // License refresh flag (WVBoolean)
|
||||||
|
|
||||||
|
// Keys for stats query
|
||||||
|
#define kStatsKey_VideoStreamingBufferSize "StatsKey_VideoStreamingBufferSize" // Size of adaptive video streaming buffer (WVUnsignedInt)
|
||||||
|
#define kStatsKey_VideoStreamingBufferUsed "StatsKey_VideoStreamingBufferUsed" // Number of bytes in video streaming buffer (WVUnsignedInt)
|
||||||
|
#define kStatsKey_VideoTimeBuffered "StatsKey_VideoTimeBuffered" // Duration of currently buffered video, in seconds (WVFloat)
|
||||||
|
#define kStatsKey_AudioStreamingBufferSize "StatsKey_AudioStreamingBufferSize" // Size of separate audio streaming buffer (WVUnsignedInt)
|
||||||
|
#define kStatsKey_AudioStreamingBufferUsed "StatsKey_AudioStreamingBufferUsed" // Number of bytes in separate audio streaming buffer (WVUnsignedInt)
|
||||||
|
#define kStatsKey_AudioTimeBuffered "StatsKey_AudioTimeBuffered" // Duration of currently buffered separate audio, in seconds (WVFloat)
|
||||||
|
#define kStatsKey_MeasuredBandwidth "StatsKey_MeasuredBandwidth" // Last measured bandwidth, in bits/sec (WVUnsignedInt)
|
||||||
|
#define kStatsKey_VideoBitRate "StatsKey_VideoBitRate" // Current video bit rate in bits/sec (WVUnsignedInt)
|
||||||
|
#define kStatsKey_AudioBitRate "StatsKey_AudioBitRate" // Current audio bit rate in bits/sec (WVUnsignedInt)
|
||||||
|
#define kStatsKey_AudioIdentifier "StatsKey_AudioIdentifier" // Identifier of current audio track (WVString)
|
||||||
|
|
||||||
|
|
||||||
|
// Constant values for kCredentialsKey_PlaybackMode
|
||||||
|
#define kPlaybackModeValue_Streaming WVUnsignedInt(1) // Streaming playback
|
||||||
|
#define kPlaybackModeValue_Offline WVUnsignedInt(2) // Playback from local file
|
||||||
|
#define kPlaybackMode_OfflineAndStreaming WVUnsignedInt(3) // Streaming and local file playback
|
||||||
|
|
||||||
|
|
||||||
|
// Constant values for kCopyControlInfoKey_EMI
|
||||||
|
#define kCopyControlInfoValue_EMI_NoRestricions WVUnsignedInt(0)
|
||||||
|
#define kCopyControlInfoValue_EMI_NoFurtherCopying WVUnsignedInt(1)
|
||||||
|
#define kCopyControlInfoValue_EMI_OneGenerationCopyingPermitted WVUnsignedInt(2)
|
||||||
|
#define kCopyControlInfoValue_EMI_NoCopy WVUnsignedInt(3)
|
||||||
|
|
||||||
|
|
||||||
|
// Constant values for kCopyControlInfoKey_APS
|
||||||
|
#define kCopyControlInfoValue_APS_NoRestricions WVUnsignedInt(0)
|
||||||
|
#define kCopyControlInfoValue_APS_ACGOn WVUnsignedInt(1)
|
||||||
|
#define kCopyControlInfoValue_APS_ACGOn2 WVUnsignedInt(2)
|
||||||
|
#define kCopyControlInfoValue_APS_ACGOn4 WVUnsignedInt(3)
|
||||||
|
|
||||||
|
|
||||||
|
// Constant values for kTrackInfoKey_VideoFormat
|
||||||
|
#define kVideoFormatValue_H264 WVUnsignedInt(1)
|
||||||
|
|
||||||
|
|
||||||
|
// Constant values for kTrackInfoKey_AudioFormat
|
||||||
|
#define kAudioFormatValue_AAC WVUnsignedInt(1)
|
||||||
|
#define kAudioFormatValue_EAC3 WVUnsignedInt(2)
|
||||||
|
|
||||||
|
// Constant values for kTrackInfoKey_SubtitleFormat
|
||||||
|
#define kSubtitleFormatValue_TTML WVUnsignedInt(1)
|
||||||
|
|
||||||
|
#endif // __WVDICTIONARYKEYS_H__
|
||||||
248
proprietary/streamcontrol/include/WVStatus.h
Normal file
248
proprietary/streamcontrol/include/WVStatus.h
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
/****************************************************************************************************
|
||||||
|
* WVStatus.h
|
||||||
|
*
|
||||||
|
* (c) Copyright 2011-2012 Google, Inc.
|
||||||
|
*
|
||||||
|
* Widevine API status (return) codes
|
||||||
|
***************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __WVSTATUS_H__
|
||||||
|
#define __WVSTATUS_H__
|
||||||
|
|
||||||
|
typedef enum WVStatus {
|
||||||
|
WV_Status_Unknown = 0, // INTERNAL
|
||||||
|
|
||||||
|
// CA CGI
|
||||||
|
WV_Status_CA_OK = 1,
|
||||||
|
WV_Status_CA_AssetNotFound = 2,
|
||||||
|
WV_Status_CA_AssetSaveFailed = 3,
|
||||||
|
WV_Status_CA_AssetDeleteFailed = 4,
|
||||||
|
WV_Status_CA_AssetAlreadyExist = 5,
|
||||||
|
WV_Status_CA_InternalError = 6,
|
||||||
|
WV_Status_CA_OperationNotAllowed = 7,
|
||||||
|
WV_Status_CA_AssetBlocked = 8,
|
||||||
|
WV_Status_CA_OutsideLicenseWindow = 9,
|
||||||
|
WV_Status_CA_OutsideRegion = 10,
|
||||||
|
WV_Status_CA_SignatureMissing = 11,
|
||||||
|
WV_Status_CA_SignatureNotValid = 12,
|
||||||
|
WV_Status_CA_ProviderUnknown = 13,
|
||||||
|
WV_Status_CA_NetworkErr = 14,
|
||||||
|
WV_Status_CA_EntitlementMessageErr = 15,
|
||||||
|
WV_Status_CA_EntitlementDecodeFailed = 16,
|
||||||
|
WV_Status_CA_ClientNetworkingErr = 17,
|
||||||
|
WV_Status_CA_RequestAborted = 18,
|
||||||
|
WV_Status_CA_ClientKeyMissing = 19,
|
||||||
|
WV_Status_CA_RegServerNotResponding = 20,
|
||||||
|
WV_Status_CA_RegServerDown = 21,
|
||||||
|
WV_Status_CA_PortalMissing = 22,
|
||||||
|
WV_Status_CA_PortalUnknown = 23,
|
||||||
|
WV_Status_CA_AssetIdMissing = 24,
|
||||||
|
WV_Status_CA_OwnerMissing = 25,
|
||||||
|
WV_Status_CA_ProviderMissing = 26,
|
||||||
|
WV_Status_CA_NameMissing = 27,
|
||||||
|
WV_Status_CA_InvalidCCI = 28,
|
||||||
|
WV_Status_CA_InvalidDCP = 29,
|
||||||
|
WV_Status_CA_InvalidLicenseWindow = 30,
|
||||||
|
WV_Status_CA_PolicyNotFound = 31,
|
||||||
|
WV_Status_CA_PolicyRejected = 32,
|
||||||
|
WV_Status_CA_PolicyServerNotResponding = 33,
|
||||||
|
WV_Status_CA_ErrorProcessingClientToken = 34,
|
||||||
|
WV_Status_CA_InvalidRegion = 35,
|
||||||
|
WV_Status_CA_InvalidNonce = 36,
|
||||||
|
WV_Status_CA_InvalidHWID = 37,
|
||||||
|
WV_Status_CA_InvalidToken = 38,
|
||||||
|
WV_Status_CA_InvalidAssetId = 39,
|
||||||
|
WV_Status_CA_InvalidName = 40,
|
||||||
|
WV_Status_CA_InvalidDiversity = 41,
|
||||||
|
WV_Status_CA_InvalidKeyId = 42,
|
||||||
|
WV_Status_CA_ModelNotSupported = 43,
|
||||||
|
WV_Status_CA_InvalidKeyboxSystemID = 44,
|
||||||
|
WV_Status_CA_NoDeviceLicenseAvailable = 45,
|
||||||
|
WV_Status_CA_UnknownCode = 46,
|
||||||
|
WV_Status_CA_InvalidAccessCriteria = 47,
|
||||||
|
WV_Status_CA_RegionMissing = 48,
|
||||||
|
WV_Status_CA_KeyVerificationFailed = 49,
|
||||||
|
WV_Status_CA_STBKeyHashFailed = 50,
|
||||||
|
WV_Status_CA_UnableToGetSharedKey = 51,
|
||||||
|
WV_Status_CA_WrongSystemID = 52,
|
||||||
|
WV_Status_CA_RevokedClientVersion = 53,
|
||||||
|
WV_Status_CA_ClientVersionTampered = 54,
|
||||||
|
WV_Status_CA_ClientVersionMissing = 55,
|
||||||
|
WV_Status_CA_AssetProviderAlreadyExist = 56,
|
||||||
|
WV_Status_CA_DiversityMissing = 57,
|
||||||
|
WV_Status_CA_TokenMissing = 58,
|
||||||
|
WV_Status_CA_ClientModelTampered = 59,
|
||||||
|
WV_Status_CA_AssetKeyTooLarge = 60,
|
||||||
|
WV_Status_CA_DecryptFailed = 61,
|
||||||
|
WV_Status_CA_TooManyAssets = 62,
|
||||||
|
WV_Status_CA_MakeNotSupported = 63,
|
||||||
|
WV_Status_CA_PolicyAlreadyExist = 64,
|
||||||
|
WV_Status_CA_InvalidXML = 65,
|
||||||
|
WV_Status_CA_ProviderViolation = 66,
|
||||||
|
WV_Status_CA_PortalVerificationFailed = 67,
|
||||||
|
WV_Status_CA_PortalOverrideNotAllowed = 68,
|
||||||
|
WV_Status_CA_PortalTimeNotSynced = 69,
|
||||||
|
WV_Status_CA_ClientSignatureMissing = 70,
|
||||||
|
WV_Status_CA_ClientSignatureNotValid = 71,
|
||||||
|
WV_Status_CA_AssetNameTooLarge = 72,
|
||||||
|
WV_Status_CA_UsageUrlMissing = 73,
|
||||||
|
WV_Status_CA_AssetIdExceedsLimit = 74,
|
||||||
|
WV_Status_CA_AssetIdInUsedRange = 75,
|
||||||
|
WV_Status_CA_DeviceServerNotResponding = 76,
|
||||||
|
WV_Status_CA_MakeMissing = 77,
|
||||||
|
WV_Status_CA_ModelMissing = 78,
|
||||||
|
WV_Status_CA_DeviceInfoAlreadyExist = 79,
|
||||||
|
WV_Status_CA_DeviceInfoNotFound = 80,
|
||||||
|
WV_Status_CA_InvalidAccess = 81,
|
||||||
|
WV_Status_CA_AccessMissing = 82,
|
||||||
|
WV_Status_CA_InvalidDate = 83,
|
||||||
|
WV_Status_CA_PortalNotSupported = 84,
|
||||||
|
WV_Status_CA_PortalDeniedByDevice = 85,
|
||||||
|
WV_Status_CA_AddDeviceNotAllowed = 86,
|
||||||
|
WV_Status_CA_PortalNotFound = 87,
|
||||||
|
WV_Status_CA_PortalAlreadyExist = 88,
|
||||||
|
WV_Status_CA_PortalServerNotResponding = 89,
|
||||||
|
WV_Status_CA_PortalFlagsMissing = 90,
|
||||||
|
WV_Status_CA_AssetDeleted = 91,
|
||||||
|
WV_Status_CA_AssetUpdated = 92,
|
||||||
|
WV_Status_CA_AssetUpdateFailed = 93,
|
||||||
|
WV_Status_CA_IPNotAllowedByPolicy = 94,
|
||||||
|
WV_Status_CA_AckUrlMissing = 95,
|
||||||
|
WV_Status_CA_HeartbeatUrlMissing = 96,
|
||||||
|
WV_Status_CA_SystemIDMissing = 97,
|
||||||
|
WV_Status_CA_PlatformMissing = 98,
|
||||||
|
WV_Status_CA_OwnerUnknown = 99,
|
||||||
|
WV_Status_CA_InvalidBitrate = 100,
|
||||||
|
WV_Status_CA_InvalidSystemID = 101,
|
||||||
|
WV_Status_CA_DeviceKeyNotFound = 102,
|
||||||
|
WV_Status_CA_DeviceKeyServerNotResponding = 103,
|
||||||
|
WV_Status_CA_AssetKeyNotFound = 104,
|
||||||
|
WV_Status_CA_MediaDigestSignatureMissing = 105,
|
||||||
|
WV_Status_CA_MediaDigestSignatureNotValid = 106,
|
||||||
|
|
||||||
|
// Status OK (no error)
|
||||||
|
WV_Status_OK = 200,
|
||||||
|
|
||||||
|
// HTTP Result codes
|
||||||
|
WV_Status_Bad_Request = 400,
|
||||||
|
WV_Status_Unauthorized = 401,
|
||||||
|
WV_Status_Not_Found = 404,
|
||||||
|
WV_Status_Method_Not_Allowed = 405,
|
||||||
|
WV_Status_Request_Timeout = 408,
|
||||||
|
WV_Status_Unsupported_Media_Type = 415,
|
||||||
|
WV_Status_Requested_Range_Not_Satisfiable = 416,
|
||||||
|
WV_Status_Invalid_Parameter = 451,
|
||||||
|
WV_Status_Session_Not_Found = 454,
|
||||||
|
WV_Status_Method_Not_Valid_In_This_State = 455,
|
||||||
|
WV_Status_Invalid_Range = 457,
|
||||||
|
WV_Status_Unsupported_Transport = 461,
|
||||||
|
WV_Status_Destination_Unreachable = 462,
|
||||||
|
WV_Status_Terminate_Requested = 463,
|
||||||
|
WV_Status_Internal_Server_Error = 500,
|
||||||
|
WV_Status_Not_Implemented = 501,
|
||||||
|
WV_Status_Service_Unavailable = 503,
|
||||||
|
WV_Status_Service_Response_Error = 504,
|
||||||
|
|
||||||
|
// Range 512 - 768 Reserved for customers. License-revoking codes
|
||||||
|
WV_Status_Min_TP_Error = 512,
|
||||||
|
WV_Status_Max_TP_Error = 768,
|
||||||
|
|
||||||
|
// Range 769 - 999 Reserved for customers. Non-license revoking codes
|
||||||
|
WV_Status_Min_TP_NoRevoke_Error = 769,
|
||||||
|
WV_Status_Max_TP_NoRevoke_Error = 999,
|
||||||
|
|
||||||
|
// WidevineMediaKit
|
||||||
|
WV_Status_End_Of_Media = 1000,
|
||||||
|
WV_Status_Invalid_Data_Format = 1001,
|
||||||
|
WV_Status_Invalid_Data_Version = 1002,
|
||||||
|
WV_Status_Parse_Error = 1003,
|
||||||
|
WV_Status_Tamper_Detected = 1004,
|
||||||
|
WV_Status_Truncated_Media = 1005,
|
||||||
|
WV_Status_WVMK_Internal_Error = 1006,
|
||||||
|
WV_Status_Entitlement_Error = 1007,
|
||||||
|
WV_Status_Key_Error = 1008,
|
||||||
|
WV_Status_Value_Out_Of_Range = 1009,
|
||||||
|
WV_Status_System_Error = 1010,
|
||||||
|
WV_Status_Invalid_Response = 1011,
|
||||||
|
WV_Status_Unsupported_Transport_Type = 1012,
|
||||||
|
WV_Status_FileSystem_Error = 1013,
|
||||||
|
WV_Status_User_Cancel = 1014,
|
||||||
|
WV_Status_InvalidState = 1015,
|
||||||
|
WV_Status_InvalidPiggybackFile = 1016,
|
||||||
|
WV_Status_Configuration_Error = 1017,
|
||||||
|
WV_Status_Error_NoAdaptiveTracks = 1018,
|
||||||
|
WV_Status_Invalid_Credentials = 1019,
|
||||||
|
WV_Status_InitializationFailed = 1020,
|
||||||
|
WV_Status_AlreadyInitialized = 1021,
|
||||||
|
WV_Status_NotInitialized = 1022,
|
||||||
|
WV_Status_NoLicenseManagerInstance = 1023,
|
||||||
|
WV_Status_Invalid_Track = 1024,
|
||||||
|
WV_Status_Invalid_Timestamp = 1025,
|
||||||
|
WV_Status_Cannot_TrickPlay = 1026,
|
||||||
|
WV_Status_NotYetSupported = 1027,
|
||||||
|
WV_Status_Invalid_Key = 1028,
|
||||||
|
WV_Status_Invalid_Manifest = 1029,
|
||||||
|
WV_Status_Key_Mismatch = 1030,
|
||||||
|
|
||||||
|
WV_Status_Warning_Download_Stalled = 2000,
|
||||||
|
WV_Status_Warning_Need_Key = 2001,
|
||||||
|
WV_Status_Warning_Not_Available = 2002,
|
||||||
|
WV_Status_Checking_Bandwidth = 2003,
|
||||||
|
WV_Status_Error_Download_Stalled = 2004,
|
||||||
|
WV_Status_Error_Need_Key = 2005,
|
||||||
|
WV_Status_Error_Out_Of_Memory = 2006,
|
||||||
|
WV_Status_Uninitialized = 2007,
|
||||||
|
WV_Status_Internal_Error = 2008,
|
||||||
|
WV_Status_Error_Invalid_Chapter = 2009,
|
||||||
|
WV_Status_Heartbeat_Configuration_Error = 2010,
|
||||||
|
WV_Status_Invalid_Keybox = 2011,
|
||||||
|
WV_Status_Warning_CantVerifyIntegrity = 2012,
|
||||||
|
WV_Status_Warning_ContinuityCounterError = 2014,
|
||||||
|
WV_Status_Warning_Emm_Expired = 2015,
|
||||||
|
|
||||||
|
// PDL
|
||||||
|
WV_Status_PDL_Invalid_State = 3000,
|
||||||
|
WV_Status_PDL_Invalid_Path = 3001,
|
||||||
|
WV_Status_PDL_Already_Exists = 3002,
|
||||||
|
WV_Status_PDL_Invalid_Track = 3003,
|
||||||
|
WV_Status_PDL_DownloadIncomplete = 3004,
|
||||||
|
WV_Status_PDL_AlreadyFinalized = 3005,
|
||||||
|
|
||||||
|
// License Manager
|
||||||
|
WV_Status_LicMgr_OutOfMemory = 4001,
|
||||||
|
WV_Status_LicMgr_LicenseAbsent = 4002,
|
||||||
|
WV_Status_LicMgr_LicenseExpired = 4003,
|
||||||
|
WV_Status_LicMgr_LicenseCorrupted = 4004,
|
||||||
|
WV_Status_LicMgr_LicenseOptionalFieldsMissing = 4005,
|
||||||
|
WV_Status_LicMgr_OutsideLicenseWindow = 4006,
|
||||||
|
WV_Status_LicMgr_OutsidePurchaseWindow = 4007,
|
||||||
|
WV_Status_LicMgr_OutsideDistributionWindow = 4008,
|
||||||
|
WV_Status_LicMgr_DataStoreCorrupted = 4009,
|
||||||
|
WV_Status_LicMgr_DataStoreReadFailed = 4010,
|
||||||
|
WV_Status_LicMgr_DataStoreWriteFailed = 4011,
|
||||||
|
WV_Status_LicMgr_DataStoreFileDoesNotExist = 4012,
|
||||||
|
WV_Status_LicMgr_ClockTamperDetected = 4013,
|
||||||
|
WV_Status_LicMgr_EMMError = 4014,
|
||||||
|
WV_Status_LicMgr_NoEMMsPresent = 4015,
|
||||||
|
WV_Status_LicMgr_CACGIError = 4016,
|
||||||
|
WV_Status_LicMgr_AssetNotRegistered = 4017,
|
||||||
|
WV_Status_LicMgr_LicenseRevoked = 4018,
|
||||||
|
WV_Status_LicMgr_CACGIStatusError = 4019,
|
||||||
|
WV_Status_LicMgr_ObserversNotFound = 4020,
|
||||||
|
WV_Status_LicMgr_PendingServerNotification = 4021,
|
||||||
|
WV_Status_LicMgr_DuplicateAsset = 4022,
|
||||||
|
WV_Status_LicMgr_PlaybackModeNotAllowed = 4023,
|
||||||
|
WV_Status_LicMgr_LicenseRefreshRequired = 4023,
|
||||||
|
|
||||||
|
// Asset Registry API
|
||||||
|
WV_Status_AR_AssetAlreadyRegistered = 4100,
|
||||||
|
|
||||||
|
// Media Transformer API
|
||||||
|
WV_Status_Transformer_InvalidSession = 4200,
|
||||||
|
WV_Status_Transformer_UnsupportedConfiguration = 4201
|
||||||
|
|
||||||
|
} WVStatus;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __WVSTATUS_H__
|
||||||
@@ -1,14 +1,17 @@
|
|||||||
/*
|
//
|
||||||
* Copyright 2011 Widevine Technologies, Inc., All Rights Reserved
|
// Declarations for Widevine Adaptive Streaming API
|
||||||
*
|
//
|
||||||
* Declarations for Widevine Adaptive Streaming API
|
// Copyright 2011 Widevine Technologies, Inc., All Rights Reserved
|
||||||
*/
|
//
|
||||||
|
|
||||||
#ifndef __WV_STREAM_CONTROL_API_H__
|
#ifndef __WV_STREAM_CONTROL_API_H__
|
||||||
#define __WV_STREAM_CONTROL_API_H__
|
#define __WV_STREAM_CONTROL_API_H__
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "WVStatus.h"
|
||||||
|
#include "WVTypes.h"
|
||||||
|
#include "WVControlSettings.h"
|
||||||
|
|
||||||
#if OS_WIN
|
#if OS_WIN
|
||||||
#ifdef CLIENTAPI_EXPORTS
|
#ifdef CLIENTAPI_EXPORTS
|
||||||
@@ -27,68 +30,12 @@ typedef enum WVLogging {
|
|||||||
WV_Logging_ParseOutput = 2,
|
WV_Logging_ParseOutput = 2,
|
||||||
} WVLogging;
|
} WVLogging;
|
||||||
|
|
||||||
typedef enum WVStatus {
|
|
||||||
WV_Status_OK = 200,
|
|
||||||
WV_Status_Bad_Request = 400,
|
|
||||||
WV_Status_Unauthorized = 401,
|
|
||||||
WV_Status_Not_Found = 404,
|
|
||||||
WV_Status_Method_Not_Allowed = 405,
|
|
||||||
WV_Status_Request_Timeout = 408,
|
|
||||||
WV_Status_Unsupported_Media_Type = 415,
|
|
||||||
WV_Status_Requested_Range_Not_Satisfiable = 416,
|
|
||||||
WV_Status_Invalid_Parameter = 451,
|
|
||||||
WV_Status_Session_Not_Found = 454,
|
|
||||||
WV_Status_Method_Not_Valid_In_This_State = 455,
|
|
||||||
WV_Status_Invalid_Range = 457,
|
|
||||||
WV_Status_Unsupported_Transport = 461,
|
|
||||||
WV_Status_Destination_Unreachable = 462,
|
|
||||||
WV_Status_Terminate_Requested = 463,
|
|
||||||
WV_Status_Internal_Server_Error = 500,
|
|
||||||
WV_Status_Not_Implemented = 501,
|
|
||||||
WV_Status_Service_Unavailable = 503,
|
|
||||||
WV_Status_Service_Response_Error = 504,
|
|
||||||
WV_Status_Min_TP_Error = 512, // Error codes 512-768 are reserved for
|
|
||||||
WV_Status_Max_TP_Error = 768, // Third Party apps (Cinema Now)
|
|
||||||
WV_Status_End_Of_Media = 1000,
|
|
||||||
WV_Status_Invalid_Data_Format = 1001,
|
|
||||||
WV_Status_Invalid_Data_Version = 1002,
|
|
||||||
WV_Status_Parse_Error = 1003,
|
|
||||||
WV_Status_Tamper_Detected = 1004,
|
|
||||||
WV_Status_Truncated_Media = 1005,
|
|
||||||
WV_Status_WVMK_Internal_Error = 1006,
|
|
||||||
WV_Status_Entitlement_Error = 1007,
|
|
||||||
WV_Status_Key_Error = 1008,
|
|
||||||
WV_Status_Value_Out_Of_Range = 1009,
|
|
||||||
WV_Status_System_Error = 1010,
|
|
||||||
WV_Status_Invalid_Response = 1011,
|
|
||||||
WV_Status_Unsupported_Transport_Type = 1012,
|
|
||||||
WV_Status_FileSystem_Error = 1013,
|
|
||||||
WV_Status_User_Cancel = 1014,
|
|
||||||
WV_Status_InvalidState = 1015,
|
|
||||||
WV_Status_InvalidPiggybackFile = 1016,
|
|
||||||
WV_Status_Configuration_Error= 1017,
|
|
||||||
WV_Status_Warning_Download_Stalled = 2000,
|
|
||||||
WV_Status_Warning_Need_Key = 2001,
|
|
||||||
WV_Status_Warning_Not_Available = 2002,
|
|
||||||
WV_Status_Checking_Bandwidth = 2003,
|
|
||||||
WV_Status_Error_Download_Stalled = 2004,
|
|
||||||
WV_Status_Error_Need_Key = 2005,
|
|
||||||
WV_Status_Error_Out_Of_Memory = 2006,
|
|
||||||
WV_Status_Uninitialized = 2007,
|
|
||||||
WV_Status_Internal_Error = 2008,
|
|
||||||
WV_Status_Error_Invalid_Chapter = 2009,
|
|
||||||
WV_Status_Heartbeat_Configuration_Error = 2010,
|
|
||||||
WV_Status_Invalid_Keybox = 2011,
|
|
||||||
WV_Status_Error_NoAdaptiveTracks = 2012,
|
|
||||||
WV_Status_Warning_ContinuityErrorCounter = 2014,
|
|
||||||
} WVStatus;
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum WVOutputFormat {
|
typedef enum WVOutputFormat {
|
||||||
WV_OutputFormat_PS = 0, // Generic program stream
|
WV_OutputFormat_PS = 0, // Generic program stream
|
||||||
WV_OutputFormat_DVD_Video = 1, // DVD-Video program stream
|
WV_OutputFormat_DVD_Video = 1, // DVD-Video program stream
|
||||||
WV_OutputFormat_TS = 2, // Transport Stream
|
WV_OutputFormat_TS = 2, // Transport Stream
|
||||||
WV_OutputFormat_ES = 3 // Elementary Streams
|
WV_OutputFormat_ES = 3, // Elementary Streams
|
||||||
|
WV_OutputFormat_DVD_Video_No_EAC3_Framing = 4 // DVD-Video without Dolby Digital+ audio framing
|
||||||
} WVOutputFormat;
|
} WVOutputFormat;
|
||||||
|
|
||||||
|
|
||||||
@@ -99,46 +46,61 @@ typedef enum WVEsSelector {
|
|||||||
} WVEsSelector;
|
} WVEsSelector;
|
||||||
|
|
||||||
|
|
||||||
struct WVCredentials {
|
#define UNSPECIFIED_TRACK_ID WVUnsignedInt(0)
|
||||||
std::string deviceID; // unique player device ID from CinemaNow
|
|
||||||
std::string streamID; // unique streamID from CinemaNow
|
|
||||||
std::string clientIP; // IP address of client
|
|
||||||
std::string drmServerURL; // URL for DRM server
|
|
||||||
std::string userData; // Additional optional user data, TBD
|
|
||||||
std::string portal; // Identifies the operator
|
|
||||||
std::string storefront; // Identifies store run by operator
|
|
||||||
std::string drmAckServerURL; // URL for server that receives
|
|
||||||
// entitlement confirmations
|
|
||||||
std::string heartbeatURL; // URL to receive client heartbeats
|
|
||||||
unsigned int heartbeatPeriod;// Duration between consecutive heartbeats in
|
|
||||||
// seconds. 0 indicates no heatbeats requested
|
|
||||||
unsigned int cnDeviceType; // device type identifier defined by CinemaNow
|
|
||||||
};
|
|
||||||
|
|
||||||
struct WVProxySettings {
|
|
||||||
bool enable; // If true, proxy use is enable, otherwise disabled
|
|
||||||
std::string ipAddr; // IP address of proxy server, e.g. "1.2.3.4" or host name
|
|
||||||
unsigned short ipPort; // IP port number
|
|
||||||
std::string userId; // User ID if authentication is needed, otherwise "" to disable authentication
|
|
||||||
std::string password; // Password if userID is not ""
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class WVSession;
|
class WVSession;
|
||||||
|
|
||||||
//
|
|
||||||
// Callbacks used for RTSP direct function call implementation and/or
|
|
||||||
// direct function call push data model.
|
|
||||||
// Also buffer allocation routines for using an external allocator
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef void (*WVDecryptCallback)(WVEsSelector esType, void* input, void* output, size_t length, int key);
|
|
||||||
|
|
||||||
// Provide info on socket open/close operations for bandwidth attribution
|
// Provide info on socket open/close operations for bandwidth attribution
|
||||||
// status: {0=open, 1=close}
|
// status: {0=open, 1=close}
|
||||||
typedef void (*WVSocketInfoCallback)(int fd, int status, void *context);
|
typedef void (*WVSocketInfoCallback)(int fd, int status, void * context);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CALLBACK: WVDecryptCallback
|
||||||
|
//
|
||||||
|
// Gets called to decrypt individual crypto units
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] es_type - Type of elementary stream, indicating audio or video
|
||||||
|
// [in] input - Pointer to encrypted crypto unit
|
||||||
|
// [in] output - Pointer or handle to receive decrypted crypto unit
|
||||||
|
// [in] length - Length of crypto unit
|
||||||
|
// [in] key - ID of key to use for decryption
|
||||||
|
// [in] dts - Decode timestamp, 90 KHz clock
|
||||||
|
// [in] pts - Presentation timestamp, 90 KHz clock
|
||||||
|
// [in] au_end - Indicates end of Access Unit (last CU in frame)
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// - WV_Status_OK: Decryption succeeded
|
||||||
|
// - WV_Status_Warning_Need_Key: Indicates key not yet available, will
|
||||||
|
// be retried
|
||||||
|
// - Error code indicating problem. Causes playback to halt.
|
||||||
|
//
|
||||||
|
typedef WVStatus (*WVDecryptCallback)(WVEsSelector es_type, void* input, void* output, size_t length,
|
||||||
|
int key, unsigned long long dts, unsigned long long pts, bool au_end);
|
||||||
|
|
||||||
|
enum WVDecryptCallbackMode {
|
||||||
|
WVDecryptCallbackMode_MultiCU = 0, // WVDecryptCallback called repeatedly until buffer exhausted
|
||||||
|
WVDecryptCallbackMode_SingleCU = 1, // WVDecryptCallback called once
|
||||||
|
WVDecryptCallbackMode_WholeAU = 2, // WVDecryptCallback called repeatedly until AU complete
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class WVCallbacks {
|
||||||
|
public:
|
||||||
|
WVCallbacks() :
|
||||||
|
pushData(NULL),
|
||||||
|
response(NULL),
|
||||||
|
allocBuffer(NULL),
|
||||||
|
freeBuffer(NULL),
|
||||||
|
getDeviceID(NULL),
|
||||||
|
getKeyboxPath(NULL),
|
||||||
|
decrypt(NULL),
|
||||||
|
decryptMode(WVDecryptCallbackMode_MultiCU),
|
||||||
|
socketInfo(NULL)
|
||||||
|
{}
|
||||||
|
|
||||||
struct WVCallbacks {
|
|
||||||
void (*pushData)(unsigned short port, void *buffer, size_t length);
|
void (*pushData)(unsigned short port, void *buffer, size_t length);
|
||||||
void (*response)(WVSession *session, const std::string &response);
|
void (*response)(WVSession *session, const std::string &response);
|
||||||
void *(*allocBuffer)(size_t);
|
void *(*allocBuffer)(size_t);
|
||||||
@@ -148,12 +110,15 @@ struct WVCallbacks {
|
|||||||
int (*getDeviceID)(char *buffer, size_t size);
|
int (*getDeviceID)(char *buffer, size_t size);
|
||||||
|
|
||||||
int (*getKeyboxPath)(char* path, size_t size);
|
int (*getKeyboxPath)(char* path, size_t size);
|
||||||
|
|
||||||
WVDecryptCallback decrypt;
|
WVDecryptCallback decrypt;
|
||||||
|
WVDecryptCallbackMode decryptMode;
|
||||||
|
|
||||||
// publish info about descriptors used for streaming for accounting purposes
|
// publish info about descriptors used for streaming for accounting purposes
|
||||||
WVSocketInfoCallback socketInfo;
|
WVSocketInfoCallback socketInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// METHOD: WV_Initialize
|
// METHOD: WV_Initialize
|
||||||
//
|
//
|
||||||
@@ -433,16 +398,16 @@ WV_CheckBandwidth(const std::string &url, unsigned long *bandwidth, const WVProx
|
|||||||
//This form is deprecated and may be removed in a future release
|
//This form is deprecated and may be removed in a future release
|
||||||
CLIENT_API WVStatus
|
CLIENT_API WVStatus
|
||||||
WV_Setup(WVSession *&session, const std::string &url,
|
WV_Setup(WVSession *&session, const std::string &url,
|
||||||
const std::string &transport, WVCredentials &credentials,
|
const std::string &transport, WVCredentials &credentials,
|
||||||
WVOutputFormat outputFormat = WV_OutputFormat_PS,
|
WVOutputFormat outputFormat = WV_OutputFormat_PS,
|
||||||
unsigned long bufferSize = 10 * 1024 * 1024, void *context = NULL);
|
unsigned long bufferSize = 10 * 1024 * 1024, void *context = NULL);
|
||||||
|
|
||||||
// Setup using a proxy
|
// Setup using a proxy
|
||||||
CLIENT_API WVStatus
|
CLIENT_API WVStatus
|
||||||
WV_Setup(WVSession *&session, const std::string &url,
|
WV_Setup(WVSession *&session, const std::string &url,
|
||||||
const std::string &transport, WVCredentials &credentials,
|
const std::string &transport, WVCredentials &credentials,
|
||||||
WVProxySettings &proxy, WVOutputFormat outputFormat = WV_OutputFormat_PS,
|
WVProxySettings &proxy, WVOutputFormat outputFormat = WV_OutputFormat_PS,
|
||||||
unsigned long bufferSize = 10 * 1024 * 1024, void *context = NULL);
|
unsigned long bufferSize = 10 * 1024 * 1024, void *context = NULL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// An alternate form of WV_Setup that receives data from a file source instead of accessing
|
// An alternate form of WV_Setup that receives data from a file source instead of accessing
|
||||||
@@ -578,12 +543,20 @@ WV_Teardown(WVSession *&session);
|
|||||||
// version. This is needed since neither absolute time nor zero time
|
// version. This is needed since neither absolute time nor zero time
|
||||||
// are appropriate for this case.
|
// are appropriate for this case.
|
||||||
//
|
//
|
||||||
|
// [in] audioTrack - The ID of the audio track to be used. This value can be
|
||||||
|
// from the audio track dictionaries obtained via WV_Info_GetAudioTracks.
|
||||||
|
// This value is optional. If UNSPECIFIED_TRACK_ID is used, the default
|
||||||
|
// audio track, which is the first encoded into the media package, or
|
||||||
|
// the last selected audio track is used.
|
||||||
|
//
|
||||||
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// WV_Status_OK on success, otherwise one of the WVStatus values
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
// indicating the specific error.
|
// indicating the specific error.
|
||||||
//
|
//
|
||||||
CLIENT_API WVStatus
|
CLIENT_API WVStatus
|
||||||
WV_Play(WVSession *session, float scale_requested, float *scale_used, const std::string &range);
|
WV_Play(WVSession *session, float scale_requested, float *scale_used,
|
||||||
|
const std::string &range, WVUnsignedInt audioTrack = UNSPECIFIED_TRACK_ID);
|
||||||
|
|
||||||
//
|
//
|
||||||
// METHOD: WV_Pause
|
// METHOD: WV_Pause
|
||||||
@@ -715,7 +688,6 @@ WV_GetData(WVSession *session, unsigned char *buffer, size_t request_size,
|
|||||||
// This method is used when the client chooses to receive elementary stream data directly via
|
// This method is used when the client chooses to receive elementary stream data directly via
|
||||||
// function call using a pull data model. This method always returns data corresponding to
|
// function call using a pull data model. This method always returns data corresponding to
|
||||||
// at most one single access unit.
|
// at most one single access unit.
|
||||||
|
|
||||||
//
|
//
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// [in] session - The session from which data is requested
|
// [in] session - The session from which data is requested
|
||||||
@@ -729,8 +701,6 @@ WV_GetData(WVSession *session, unsigned char *buffer, size_t request_size,
|
|||||||
//
|
//
|
||||||
// [out] return_size - On return, set to the number of bytes written into the buffer
|
// [out] return_size - On return, set to the number of bytes written into the buffer
|
||||||
//
|
//
|
||||||
// [out] au_start - On return, indicates whether the data belongs to the next access unit.
|
|
||||||
//
|
|
||||||
// [out] dts - On return, set to MPEG-2 access unit decoding timestamp (DTS)
|
// [out] dts - On return, set to MPEG-2 access unit decoding timestamp (DTS)
|
||||||
//
|
//
|
||||||
// [out] pts - On return, set to MPEG-2 access unit presentation timestamp (PTS)
|
// [out] pts - On return, set to MPEG-2 access unit presentation timestamp (PTS)
|
||||||
@@ -738,6 +708,8 @@ WV_GetData(WVSession *session, unsigned char *buffer, size_t request_size,
|
|||||||
// [out] sync_frame - On return, indicates whether the data belongs to a sync frame
|
// [out] sync_frame - On return, indicates whether the data belongs to a sync frame
|
||||||
// (video key frame, or audio frame).
|
// (video key frame, or audio frame).
|
||||||
//
|
//
|
||||||
|
// [out] au_end - On return, indicates whether the data belongs to the end of the access unit.
|
||||||
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// WV_Status_OK on success, otherwise one of the WVStatus values
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
// indicating the specific error.
|
// indicating the specific error.
|
||||||
@@ -745,7 +717,33 @@ WV_GetData(WVSession *session, unsigned char *buffer, size_t request_size,
|
|||||||
CLIENT_API WVStatus
|
CLIENT_API WVStatus
|
||||||
WV_GetEsData(WVSession *session, WVEsSelector es_selector,
|
WV_GetEsData(WVSession *session, WVEsSelector es_selector,
|
||||||
unsigned char *buffer, size_t request_size, size_t& return_size,
|
unsigned char *buffer, size_t request_size, size_t& return_size,
|
||||||
bool& au_start, unsigned long long& dts, unsigned long long& pts, bool& sync_frame);
|
unsigned long long& dts, unsigned long long& pts, bool& sync_frame, bool& au_end);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_GetNextEsDataBufferSize
|
||||||
|
//
|
||||||
|
// This method returns the optimal size of the buffer size that should be used in the next
|
||||||
|
// call to WV_GetEsData. Calculation is dependent on whether a decryption callback is used
|
||||||
|
// and if so, the decrypt callback mode (WVDecryptCallbackMode), returning the total size of
|
||||||
|
// remaining crypto units in the current access unit (no decrypt callback or
|
||||||
|
// WVDecryptCallbackMode_MultiCU specified), the size of the next crypto unit
|
||||||
|
// (decrypt callback and WVDecryptCallbackMode_SingleCU specified), or the size of the next
|
||||||
|
// access unit (decrypt callback and WVDecryptCallbackMode_WholeAU specified)
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session from which data is requested
|
||||||
|
//
|
||||||
|
// [in] es_selector - Selector specifying the elementary stream targetted.
|
||||||
|
//
|
||||||
|
// [out] buffer_size - The size of the buffer
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_GetNextEsDataBufferSize(WVSession* session, WVEsSelector es_selector, size_t &buffer_size);
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1067,6 +1065,28 @@ CLIENT_API WVStatus
|
|||||||
WV_Info_TimeBuffered(WVSession *session, float *secondsBuffered);
|
WV_Info_TimeBuffered(WVSession *session, float *secondsBuffered);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_Info_GetStats
|
||||||
|
//
|
||||||
|
// This method is used to query current stats from the Widevine
|
||||||
|
// adaptive client.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to query
|
||||||
|
//
|
||||||
|
// [in,out] stats - Dictionary containing placeholders for the
|
||||||
|
// stats to be queried. On return the available
|
||||||
|
// stats will be filled in.
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_Info_GetStats(WVSession *session, WVDictionary& stats);
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// METHOD: WV_Info_GetAdaptiveBitrates
|
// METHOD: WV_Info_GetAdaptiveBitrates
|
||||||
//
|
//
|
||||||
@@ -1297,7 +1317,7 @@ WV_SkipChapters(WVSession *session, std::string currentTime, long chapters);
|
|||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// METHOD: WV_SkipToChapter
|
// METHOD: WV_GoToChapter
|
||||||
//
|
//
|
||||||
// This method causes the stream to skip to a specified chapter.
|
// This method causes the stream to skip to a specified chapter.
|
||||||
//
|
//
|
||||||
@@ -1315,4 +1335,143 @@ WV_SkipChapters(WVSession *session, std::string currentTime, long chapters);
|
|||||||
CLIENT_API WVStatus
|
CLIENT_API WVStatus
|
||||||
WV_GoToChapter(WVSession *session, unsigned long chapterSeqNum);
|
WV_GoToChapter(WVSession *session, unsigned long chapterSeqNum);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_Info_GetVideoTracks
|
||||||
|
//
|
||||||
|
// This method populates a WVTypedValueArray containing a WVDictionary entry
|
||||||
|
// for each adaptive video track in the media. These dicionaries contain all
|
||||||
|
// the information available for the video, as well as the track ID.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to control
|
||||||
|
//
|
||||||
|
// [out] tracks - WVTypedValueArray which on return will contain an array
|
||||||
|
// of video track info WVDictionary(s).
|
||||||
|
////
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_Info_GetVideoTracks(WVSession *session, WVTypedValueArray& tracks);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_Info_GetAudioTracks
|
||||||
|
//
|
||||||
|
// This method populates a WVTypedValueArray containing a WVDictionary entry
|
||||||
|
// for each separate audio track in the media. These dicionaries contain all
|
||||||
|
// the information available for the audio, as well as the track ID.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to control
|
||||||
|
//
|
||||||
|
// [out] tracks - WVTypedValueArray which on return will contain an array
|
||||||
|
// of audio track info WVDictionary(s).
|
||||||
|
////
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_Info_GetAudioTracks(WVSession *session, WVTypedValueArray& tracks);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_Info_GetSubtitleTracks
|
||||||
|
//
|
||||||
|
// This method populates a WVTypedValueArray containing a WVDictionary entry
|
||||||
|
// for each separate subtitle track in the media. These dicionaries contain all
|
||||||
|
// the information available for subtitle.
|
||||||
|
//
|
||||||
|
// NOTE: Subtitle tracks cannot be selected. They are meant to be rendered by
|
||||||
|
// the device media player.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to control
|
||||||
|
//
|
||||||
|
// [out] tracks - WVTypedValueArray which on return will contain an array
|
||||||
|
// of subtile track info WVDictionary(s).
|
||||||
|
////
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_Info_GetSubtitleTracks(WVSession *session, WVTypedValueArray& tracks);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_Info_GetCurrentVideoTrack
|
||||||
|
//
|
||||||
|
// This method populates a WVDicionary all the information available for the
|
||||||
|
// current adaptive video track, as well as its track ID.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to control
|
||||||
|
//
|
||||||
|
// [out] track - WVDictionary which on return will contain the information
|
||||||
|
// available for the current adaptive video track
|
||||||
|
////
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_Info_GetCurrentVideoTrack(WVSession *session, WVDictionary& track);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_Info_GetCurrentAudioTrack
|
||||||
|
//
|
||||||
|
// This method populates a WVDicionary all the information available for the
|
||||||
|
// current separate audio track, as well as its track ID.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to control
|
||||||
|
//
|
||||||
|
// [out] track - WVDictionary which on return will contain the information
|
||||||
|
// available for the current adaptive video track
|
||||||
|
////
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error. This function returns the status
|
||||||
|
// WV_Status_Warning_Not_Available if separate audio is not available.
|
||||||
|
//
|
||||||
|
|
||||||
|
CLIENT_API WVStatus
|
||||||
|
WV_Info_GetCurrentAudioTrack(WVSession *session, WVDictionary& track);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// METHOD: WV_SelectTrack
|
||||||
|
//
|
||||||
|
// This method is used to explicitly select an adaptive video track or
|
||||||
|
// separate audio track.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// [in] session - The session to control
|
||||||
|
//
|
||||||
|
// [out] trackId - The track ID for the track to be selected.
|
||||||
|
// If an adaptive video track ID is specified, then a
|
||||||
|
// video track change will be effected. Specifying
|
||||||
|
// UNSPECIFIED_TRACK_ID will resume normal adaptive
|
||||||
|
// video behavior.
|
||||||
|
// If a separate audio track ID is specified, then
|
||||||
|
// an audio track change will be effected.
|
||||||
|
////
|
||||||
|
// Returns:
|
||||||
|
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||||
|
// indicating the specific error.
|
||||||
|
//
|
||||||
|
CLIENT_API WVStatus WV_SelectTrack(WVSession* session, WVUnsignedInt trackId);
|
||||||
|
|
||||||
|
|
||||||
#endif // __WV_STREAM_CONTROL_API_H__
|
#endif // __WV_STREAM_CONTROL_API_H__
|
||||||
|
|||||||
248
proprietary/streamcontrol/include/WVTypes.h
Normal file
248
proprietary/streamcontrol/include/WVTypes.h
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
/****************************************************************************************************
|
||||||
|
* WVTypes.h
|
||||||
|
*
|
||||||
|
* (c) Copyright 2011-2012 Google, Inc.
|
||||||
|
*
|
||||||
|
* Widevine API types
|
||||||
|
***************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __WVTYPES_H__
|
||||||
|
#define __WVTYPES_H__
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// Unsigned and signed integer types (32 bits)
|
||||||
|
typedef uint32_t WVUnsignedInt;
|
||||||
|
typedef int32_t WVSignedInt;
|
||||||
|
typedef uint64_t WVUnsignedLong;
|
||||||
|
typedef int64_t WVSignedLong;
|
||||||
|
typedef float WVFloat;
|
||||||
|
typedef bool WVBoolean;
|
||||||
|
|
||||||
|
// String type
|
||||||
|
typedef std::string WVString;
|
||||||
|
|
||||||
|
// Array of strings
|
||||||
|
typedef std::vector<WVString> WVStringArray;
|
||||||
|
typedef std::vector<uint8_t> WVDataBlob;
|
||||||
|
|
||||||
|
// Forward declarations
|
||||||
|
class WVDictionary;
|
||||||
|
class WVTypedValueRep;
|
||||||
|
class WVTypedValueArray;
|
||||||
|
|
||||||
|
|
||||||
|
// Classs to hold a typed value to be stored in a WVTypedValueArray or a WVDictionary
|
||||||
|
class WVTypedValue
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Type {
|
||||||
|
Type_Null = 0,
|
||||||
|
Type_UnsignedInt = 1,
|
||||||
|
Type_SignedInt = 2,
|
||||||
|
Type_UnsignedLong = 3,
|
||||||
|
Type_SignedLong = 4,
|
||||||
|
Type_Float = 5,
|
||||||
|
Type_WVBoolean = 6,
|
||||||
|
Type_String = 7,
|
||||||
|
Type_Array = 8,
|
||||||
|
Type_Dictionary = 9,
|
||||||
|
Type_DataBlob = 10
|
||||||
|
};
|
||||||
|
|
||||||
|
// Constructs Type_Null value
|
||||||
|
WVTypedValue();
|
||||||
|
|
||||||
|
// Copy constructor and assignment operator
|
||||||
|
WVTypedValue(WVTypedValue const& original);
|
||||||
|
WVTypedValue const& operator=(WVTypedValue const& rhs);
|
||||||
|
|
||||||
|
// Constructors for various typed values
|
||||||
|
WVTypedValue(WVUnsignedInt value);
|
||||||
|
WVTypedValue(WVSignedInt value);
|
||||||
|
WVTypedValue(WVUnsignedLong value);
|
||||||
|
WVTypedValue(WVSignedLong value);
|
||||||
|
WVTypedValue(WVFloat value);
|
||||||
|
WVTypedValue(WVBoolean value);
|
||||||
|
WVTypedValue(WVString const& value);
|
||||||
|
WVTypedValue(WVTypedValueArray const& value);
|
||||||
|
WVTypedValue(WVDictionary const& value);
|
||||||
|
WVTypedValue(WVDataBlob const& value);
|
||||||
|
|
||||||
|
~WVTypedValue();
|
||||||
|
|
||||||
|
// Returns the type of the value held in the object
|
||||||
|
Type GetType() const { return(mType); }
|
||||||
|
|
||||||
|
// Accessors to retrieve the value. Returns false if asked for a value of the wrong type
|
||||||
|
WVBoolean GetValue(WVUnsignedInt& value) const;
|
||||||
|
WVBoolean GetValue(WVSignedInt& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedLong& value) const;
|
||||||
|
WVBoolean GetValue(WVSignedLong& value) const;
|
||||||
|
WVBoolean GetValue(WVFloat& value) const;
|
||||||
|
WVBoolean GetValue(WVBoolean& value) const;
|
||||||
|
WVBoolean GetValue(WVString const*& value) const;
|
||||||
|
WVBoolean GetValue(WVTypedValueArray const*& value) const;
|
||||||
|
WVBoolean GetValue(WVDictionary const*& value) const;
|
||||||
|
WVBoolean GetValue(WVDataBlob const*& value) const;
|
||||||
|
|
||||||
|
// Accessors to set the value. Can be used to change both the value and the type
|
||||||
|
void SetUnsignedIntValue(WVUnsignedInt value);
|
||||||
|
void SetSignedIntValue(WVSignedInt value);
|
||||||
|
void SetUnsignedLongValue(WVUnsignedLong value);
|
||||||
|
void SetSignedLongValue(WVSignedLong value);
|
||||||
|
void SetFloatValue(WVFloat value);
|
||||||
|
void SetBooleanValue(WVBoolean value);
|
||||||
|
void SetStringValue(WVString const& value);
|
||||||
|
void SetArrayValue(WVTypedValueArray const& value);
|
||||||
|
void SetDictionaryValue(WVDictionary const& value);
|
||||||
|
void SetDataBlobValue(WVDataBlob const& value);
|
||||||
|
|
||||||
|
// Serialize into WVDataBlob
|
||||||
|
void Serialize(WVDataBlob& intoBlob) const;
|
||||||
|
|
||||||
|
// Deserialize from WVDataBlob. Returns bytes used, 0 on failure
|
||||||
|
WVUnsignedInt Deserialize(WVDataBlob const& fromBlob, WVUnsignedInt fromIndex = 0);
|
||||||
|
|
||||||
|
// Dump value in human-readable format to toString
|
||||||
|
void Dump(WVString const& prefix, WVString& toString) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
union Representation {
|
||||||
|
WVUnsignedInt uUnsignedIntValue;
|
||||||
|
WVSignedInt uSignedIntValue;
|
||||||
|
WVUnsignedLong uUnsignedLongValue;
|
||||||
|
WVSignedLong uSignedLongValue;
|
||||||
|
WVFloat uFloatValue;
|
||||||
|
WVBoolean uBooleanValue;
|
||||||
|
WVTypedValueRep* uOtherValue;
|
||||||
|
};
|
||||||
|
Type mType;
|
||||||
|
Representation mValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Class which holds an array of WVTypedValue. Types of values stored may vary
|
||||||
|
class WVTypedValueArray
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Returns the number of entries in the array
|
||||||
|
WVUnsignedInt Size() const { return mArray.size(); }
|
||||||
|
bool Empty() const { return mArray.empty(); }
|
||||||
|
|
||||||
|
// Disposes of all entries in the array
|
||||||
|
void Clear() { mArray.clear(); }
|
||||||
|
|
||||||
|
// Returns a pointer to an element in an array. NULL if the index is out of range
|
||||||
|
WVTypedValue const* operator[](WVUnsignedInt index) const;
|
||||||
|
|
||||||
|
// Iterator type and boundary methods for typed value array
|
||||||
|
typedef std::vector<WVTypedValue>::const_iterator Iterator;
|
||||||
|
Iterator Begin() const { return(mArray.begin()); }
|
||||||
|
Iterator End() const { return(mArray.end()); }
|
||||||
|
|
||||||
|
// Adds a typed value to the end of the array
|
||||||
|
void Push(WVTypedValue const& entry) { mArray.push_back(entry); }
|
||||||
|
|
||||||
|
// Accessors for typed values stored in the array. Returns false if index is out of range,
|
||||||
|
// or if trying to retrieve a value of the incorrect type.
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVUnsignedInt& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVSignedInt& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVUnsignedLong& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVSignedLong& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVFloat& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVBoolean& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVString const*& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVTypedValueArray const*& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVDictionary const*& value) const;
|
||||||
|
WVBoolean GetValue(WVUnsignedInt index, WVDataBlob const*& value) const;
|
||||||
|
|
||||||
|
// Serialize into WVDataBlob
|
||||||
|
void Serialize(WVDataBlob& intoBlob) const;
|
||||||
|
|
||||||
|
// Deserialize from WVDataBlob. Returns bytes used, 0 on failure
|
||||||
|
WVUnsignedInt Deserialize(WVDataBlob const& fromBlob, WVUnsignedInt fromIndex = 0);
|
||||||
|
|
||||||
|
// Dump values in human-readable format to toString
|
||||||
|
void Dump(WVString const& prefix, WVString& toString) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<WVTypedValue> mArray;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Object which holds named typed value pairs. Types of values stored may vary
|
||||||
|
class WVDictionary
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Returns the number of entries in the dictionary
|
||||||
|
WVUnsignedInt Size() const { return mMap.size(); }
|
||||||
|
bool Empty() const { return mMap.empty(); }
|
||||||
|
|
||||||
|
// Disposes of all entries in the dictionary
|
||||||
|
void Clear() { mMap.clear(); }
|
||||||
|
|
||||||
|
// Iterator type and bounary methods for dictionary.
|
||||||
|
typedef std::map<WVString, WVTypedValue>::const_iterator Iterator;
|
||||||
|
Iterator Begin() const { return(mMap.begin()); }
|
||||||
|
Iterator End() const { return(mMap.end()); }
|
||||||
|
|
||||||
|
// Store a typed value for the specified key. Replaces any previous value stored for the key
|
||||||
|
void SetEntry(WVString const& key, WVTypedValue const& entry = WVTypedValue()) { mMap[key] = entry; }
|
||||||
|
|
||||||
|
// Remove the typed value for the specified key. Fails silently if value is not present
|
||||||
|
void RemoveEntry(WVString const& key);
|
||||||
|
|
||||||
|
// Copy an entry from another dictionary
|
||||||
|
void CopyEntryFrom(WVString const& key, WVDictionary const& fromDict, bool removeIfNotFound = false);
|
||||||
|
|
||||||
|
// Merge two dictionaries
|
||||||
|
void Merge(WVDictionary const& fromDict, bool replaceDuplicates);
|
||||||
|
|
||||||
|
// Returns a pointer to a stored value for a specified key. Returns NULL if value not present
|
||||||
|
WVTypedValue const* GetEntry(WVString const& key) const;
|
||||||
|
|
||||||
|
// Accessor methods for typed values stored in the dictionary. Returns false if the value
|
||||||
|
// is not present, or if trying to retrieve a value of the incorrect type
|
||||||
|
WVBoolean GetValue(WVString const& key, WVUnsignedInt& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVSignedInt& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVUnsignedLong& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVSignedLong& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVFloat& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVBoolean& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVString const*& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVTypedValueArray const*& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVDictionary const*& value) const;
|
||||||
|
WVBoolean GetValue(WVString const& key, WVDataBlob const*& value) const;
|
||||||
|
|
||||||
|
// Convenience accessors. Return default values if not found or wrong type specified
|
||||||
|
WVUnsignedInt GetUnsignedIntValue(WVString const& key, WVUnsignedInt defaultValue = 0) const;
|
||||||
|
WVSignedInt GetSignedIntValue(WVString const& key, WVSignedInt defaultValue = 0) const;
|
||||||
|
WVUnsignedLong GetUnsignedLongValue(WVString const& key, WVUnsignedLong defaultValue = 0) const;
|
||||||
|
WVSignedLong GetSignedLongValue(WVString const& key, WVSignedLong defaultValue = 0) const;
|
||||||
|
WVFloat GetFloatValue(WVString const& key, WVFloat defaultValue = 0) const;
|
||||||
|
WVBoolean GetBooleanValue(WVString const& key, WVBoolean defaultValue = 0) const;
|
||||||
|
WVString GetStringValue(WVString const& key, WVString const& defaultValue = "") const;
|
||||||
|
|
||||||
|
// Serialize into WVDataBlob
|
||||||
|
void Serialize(WVDataBlob& intoBlob) const;
|
||||||
|
|
||||||
|
// Deserialize from WVDataBlob. Returns bytes used, 0 on failure
|
||||||
|
WVUnsignedInt Deserialize(WVDataBlob const& fromBlob, WVUnsignedInt fromIndex = 0);
|
||||||
|
|
||||||
|
// Merge dictionary into current one
|
||||||
|
WVDictionary const& operator+=(WVDictionary const& rhs);
|
||||||
|
|
||||||
|
// Dumps values in human-readable format to toString
|
||||||
|
void Dump(WVString const& prefix, WVString& toString) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::map<WVString, WVTypedValue> mMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WVTYPES_H__
|
||||||
Binary file not shown.
Binary file not shown.
@@ -132,14 +132,19 @@ void WVMExtractorImpl::Initialize()
|
|||||||
|
|
||||||
#ifdef REQUIRE_SECURE_BUFFERS
|
#ifdef REQUIRE_SECURE_BUFFERS
|
||||||
if (!mIsLiveStream) {
|
if (!mIsLiveStream) {
|
||||||
WVCallbacks callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, WVMMediaSource::DecryptCallback, SocketInfoCallback};
|
//ALOGD("WVMExtractorImpl::Initialize setting DecryptCallback\n");
|
||||||
|
WVCallbacks callbacks;
|
||||||
|
callbacks.decrypt = WVMMediaSource::DecryptCallback;
|
||||||
|
callbacks.socketInfo = SocketInfoCallback;
|
||||||
result = WV_Initialize(&callbacks);
|
result = WV_Initialize(&callbacks);
|
||||||
} else {
|
} else {
|
||||||
WVCallbacks callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, SocketInfoCallback};
|
WVCallbacks callbacks;
|
||||||
|
callbacks.socketInfo = SocketInfoCallback;
|
||||||
result = WV_Initialize(&callbacks);
|
result = WV_Initialize(&callbacks);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
WVCallbacks callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, SocketInfoCallback};
|
WVCallbacks callbacks;
|
||||||
|
callbacks.socketInfo = SocketInfoCallback;
|
||||||
result = WV_Initialize(&callbacks);
|
result = WV_Initialize(&callbacks);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -352,7 +357,7 @@ status_t WVMExtractorImpl::readESDSMetaData(sp<MetaData> audioMetaData)
|
|||||||
int limit = 500;
|
int limit = 500;
|
||||||
do {
|
do {
|
||||||
size_t bytesRead;
|
size_t bytesRead;
|
||||||
bool auStart, sync;
|
bool auEnd, sync;
|
||||||
unsigned long long dts, pts;
|
unsigned long long dts, pts;
|
||||||
unsigned char buf[1];
|
unsigned char buf[1];
|
||||||
size_t bufSize = 0;
|
size_t bufSize = 0;
|
||||||
@@ -362,7 +367,7 @@ status_t WVMExtractorImpl::readESDSMetaData(sp<MetaData> audioMetaData)
|
|||||||
// pull some audio data. But we can't use it yet, so just request 0 bytes.
|
// pull some audio data. But we can't use it yet, so just request 0 bytes.
|
||||||
//
|
//
|
||||||
(void)WV_GetEsData(mSession, WV_EsSelector_Audio, buf, bufSize,
|
(void)WV_GetEsData(mSession, WV_EsSelector_Audio, buf, bufSize,
|
||||||
bytesRead, auStart, dts, pts, sync);
|
bytesRead, dts, pts, sync, auEnd);
|
||||||
|
|
||||||
result = WV_Info_GetCodecConfig(mSession, WV_CodecConfigType_ESDS, config, size);
|
result = WV_Info_GetCodecConfig(mSession, WV_CodecConfigType_ESDS, config, size);
|
||||||
if (result != WV_Status_OK)
|
if (result != WV_Status_OK)
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t bytesRead;
|
size_t bytesRead;
|
||||||
bool auStart;
|
bool auEnd;
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
int64_t keyTime;
|
int64_t keyTime;
|
||||||
|
|
||||||
@@ -259,7 +259,7 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
|||||||
size_t size = mediaBuf->size() - offset;
|
size_t size = mediaBuf->size() - offset;
|
||||||
|
|
||||||
WVStatus result = WV_GetEsData(mSession, mESSelector, (uint8_t *)mediaBuf->data() + offset,
|
WVStatus result = WV_GetEsData(mSession, mESSelector, (uint8_t *)mediaBuf->data() + offset,
|
||||||
size, bytesRead, auStart, mDts, mPts, syncFrame);
|
size, bytesRead, mDts, mPts, syncFrame, auEnd);
|
||||||
|
|
||||||
if (result != WV_Status_OK &&
|
if (result != WV_Status_OK &&
|
||||||
result != WV_Status_Warning_Need_Key &&
|
result != WV_Status_Warning_Need_Key &&
|
||||||
@@ -399,14 +399,15 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
|||||||
|
|
||||||
WVMMediaSource::DecryptContext WVMMediaSource::sDecryptContext[2] = {};
|
WVMMediaSource::DecryptContext WVMMediaSource::sDecryptContext[2] = {};
|
||||||
|
|
||||||
void WVMMediaSource::DecryptCallback(WVEsSelector esType, void* input, void* output,
|
WVStatus WVMMediaSource::DecryptCallback(WVEsSelector esType, void* input, void* output, size_t length,
|
||||||
size_t length, int key)
|
int key, unsigned long long dts, unsigned long long pts, bool au_end)
|
||||||
{
|
{
|
||||||
//ALOGD("DecryptCallback(type=%d, in=%p, out=%p, len=%d, key=%d\n",
|
//ALOGD("DecryptCallback(type=%d, in=%p, out=%p, len=%d, key=%d\n",
|
||||||
// (int)esType, input, output, length, key);
|
// (int)esType, input, output, length, key);
|
||||||
DecryptContext &context = sDecryptContext[esType];
|
DecryptContext &context = sDecryptContext[esType];
|
||||||
OEMCrypto_UINT32 copied = length;
|
OEMCrypto_UINT32 copied = length;
|
||||||
OEMCryptoResult result;
|
OEMCryptoResult result;
|
||||||
|
WVStatus status;
|
||||||
unsigned char *iv = NULL;
|
unsigned char *iv = NULL;
|
||||||
|
|
||||||
if (key)
|
if (key)
|
||||||
@@ -422,11 +423,17 @@ void WVMMediaSource::DecryptCallback(WVEsSelector esType, void* input, void* out
|
|||||||
&copied);
|
&copied);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != OEMCrypto_SUCCESS) {
|
if (result == OEMCrypto_SUCCESS) {
|
||||||
|
status = WV_Status_OK;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
status = WV_Status_Unknown;
|
||||||
ALOGD("OEMCrypto decrypt failure: %d", result);
|
ALOGD("OEMCrypto decrypt failure: %d", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.mOffset += copied;
|
context.mOffset += copied;
|
||||||
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -53,8 +53,9 @@ public:
|
|||||||
static const int kCryptoBlockSize = 16;
|
static const int kCryptoBlockSize = 16;
|
||||||
unsigned char mIV[kCryptoBlockSize];
|
unsigned char mIV[kCryptoBlockSize];
|
||||||
};
|
};
|
||||||
static void DecryptCallback(WVEsSelector esType, void* input, void* output,
|
static WVStatus DecryptCallback(WVEsSelector esType, void* input, void* output, size_t length,
|
||||||
size_t length, int key);
|
int key, unsigned long long dts, unsigned long long pts, bool au_end);
|
||||||
|
|
||||||
static DecryptContext sDecryptContext[2]; // audio vs. video
|
static DecryptContext sDecryptContext[2]; // audio vs. video
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user