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__
|
||||
#define __WV_STREAM_CONTROL_API_H__
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "WVStatus.h"
|
||||
#include "WVTypes.h"
|
||||
#include "WVControlSettings.h"
|
||||
|
||||
#if OS_WIN
|
||||
#ifdef CLIENTAPI_EXPORTS
|
||||
@@ -27,68 +30,12 @@ typedef enum WVLogging {
|
||||
WV_Logging_ParseOutput = 2,
|
||||
} 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 {
|
||||
WV_OutputFormat_PS = 0, // Generic program stream
|
||||
WV_OutputFormat_DVD_Video = 1, // DVD-Video program 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;
|
||||
|
||||
|
||||
@@ -99,46 +46,61 @@ typedef enum WVEsSelector {
|
||||
} WVEsSelector;
|
||||
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
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 ""
|
||||
};
|
||||
#define UNSPECIFIED_TRACK_ID WVUnsignedInt(0)
|
||||
|
||||
|
||||
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
|
||||
// status: {0=open, 1=close}
|
||||
typedef void (*WVSocketInfoCallback)(int fd, int status, void * context);
|
||||
|
||||
struct WVCallbacks {
|
||||
//
|
||||
// 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)
|
||||
{}
|
||||
|
||||
void (*pushData)(unsigned short port, void *buffer, size_t length);
|
||||
void (*response)(WVSession *session, const std::string &response);
|
||||
void *(*allocBuffer)(size_t);
|
||||
@@ -148,12 +110,15 @@ struct WVCallbacks {
|
||||
int (*getDeviceID)(char *buffer, size_t size);
|
||||
|
||||
int (*getKeyboxPath)(char* path, size_t size);
|
||||
|
||||
WVDecryptCallback decrypt;
|
||||
WVDecryptCallbackMode decryptMode;
|
||||
|
||||
// publish info about descriptors used for streaming for accounting purposes
|
||||
WVSocketInfoCallback socketInfo;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// METHOD: WV_Initialize
|
||||
//
|
||||
@@ -578,12 +543,20 @@ WV_Teardown(WVSession *&session);
|
||||
// version. This is needed since neither absolute time nor zero time
|
||||
// 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:
|
||||
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||
// indicating the specific error.
|
||||
//
|
||||
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
|
||||
@@ -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
|
||||
// function call using a pull data model. This method always returns data corresponding to
|
||||
// at most one single access unit.
|
||||
|
||||
//
|
||||
// Parameters:
|
||||
// [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] 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] 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
|
||||
// (video key frame, or audio frame).
|
||||
//
|
||||
// [out] au_end - On return, indicates whether the data belongs to the end of the access unit.
|
||||
//
|
||||
// Returns:
|
||||
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||
// indicating the specific error.
|
||||
@@ -745,7 +717,33 @@ WV_GetData(WVSession *session, unsigned char *buffer, size_t request_size,
|
||||
CLIENT_API WVStatus
|
||||
WV_GetEsData(WVSession *session, WVEsSelector es_selector,
|
||||
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);
|
||||
|
||||
|
||||
//
|
||||
// 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
|
||||
//
|
||||
@@ -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.
|
||||
//
|
||||
@@ -1315,4 +1335,143 @@ WV_SkipChapters(WVSession *session, std::string currentTime, long chapters);
|
||||
CLIENT_API WVStatus
|
||||
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__
|
||||
|
||||
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
|
||||
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);
|
||||
} else {
|
||||
WVCallbacks callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, SocketInfoCallback};
|
||||
WVCallbacks callbacks;
|
||||
callbacks.socketInfo = SocketInfoCallback;
|
||||
result = WV_Initialize(&callbacks);
|
||||
}
|
||||
#else
|
||||
WVCallbacks callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, SocketInfoCallback};
|
||||
WVCallbacks callbacks;
|
||||
callbacks.socketInfo = SocketInfoCallback;
|
||||
result = WV_Initialize(&callbacks);
|
||||
#endif
|
||||
|
||||
@@ -352,7 +357,7 @@ status_t WVMExtractorImpl::readESDSMetaData(sp<MetaData> audioMetaData)
|
||||
int limit = 500;
|
||||
do {
|
||||
size_t bytesRead;
|
||||
bool auStart, sync;
|
||||
bool auEnd, sync;
|
||||
unsigned long long dts, pts;
|
||||
unsigned char buf[1];
|
||||
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.
|
||||
//
|
||||
(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);
|
||||
if (result != WV_Status_OK)
|
||||
|
||||
@@ -243,7 +243,7 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
||||
#endif
|
||||
|
||||
size_t bytesRead;
|
||||
bool auStart;
|
||||
bool auEnd;
|
||||
size_t offset = 0;
|
||||
int64_t keyTime;
|
||||
|
||||
@@ -259,7 +259,7 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
||||
size_t size = mediaBuf->size() - 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 &&
|
||||
result != WV_Status_Warning_Need_Key &&
|
||||
@@ -399,14 +399,15 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
||||
|
||||
WVMMediaSource::DecryptContext WVMMediaSource::sDecryptContext[2] = {};
|
||||
|
||||
void WVMMediaSource::DecryptCallback(WVEsSelector esType, void* input, void* output,
|
||||
size_t length, int key)
|
||||
WVStatus WVMMediaSource::DecryptCallback(WVEsSelector esType, void* input, void* output, size_t length,
|
||||
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",
|
||||
// (int)esType, input, output, length, key);
|
||||
DecryptContext &context = sDecryptContext[esType];
|
||||
OEMCrypto_UINT32 copied = length;
|
||||
OEMCryptoResult result;
|
||||
WVStatus status;
|
||||
unsigned char *iv = NULL;
|
||||
|
||||
if (key)
|
||||
@@ -422,11 +423,17 @@ void WVMMediaSource::DecryptCallback(WVEsSelector esType, void* input, void* out
|
||||
&copied);
|
||||
}
|
||||
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
if (result == OEMCrypto_SUCCESS) {
|
||||
status = WV_Status_OK;
|
||||
}
|
||||
else {
|
||||
status = WV_Status_Unknown;
|
||||
ALOGD("OEMCrypto decrypt failure: %d", result);
|
||||
}
|
||||
|
||||
context.mOffset += copied;
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -53,8 +53,9 @@ public:
|
||||
static const int kCryptoBlockSize = 16;
|
||||
unsigned char mIV[kCryptoBlockSize];
|
||||
};
|
||||
static void DecryptCallback(WVEsSelector esType, void* input, void* output,
|
||||
size_t length, int key);
|
||||
static WVStatus DecryptCallback(WVEsSelector esType, void* input, void* output, size_t length,
|
||||
int key, unsigned long long dts, unsigned long long pts, bool au_end);
|
||||
|
||||
static DecryptContext sDecryptContext[2]; // audio vs. video
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user