/**@class android.media.MediaCodec.CryptoInfo @extends java.lang.Object Metadata describing the structure of an encrypted input sample. <p> A buffer's data is considered to be partitioned into "subSamples". Each subSample starts with a run of plain, unencrypted bytes followed by a run of encrypted bytes. Either of these runs may be empty. If pattern encryption applies, each of the encrypted runs is encrypted only partly, according to a repeating pattern of "encrypt" and "skip" blocks. {@link #numBytesOfClearData} can be null to indicate that all data is encrypted, and {@link #numBytesOfEncryptedData} can be null to indicate that all data is clear. At least one of {@link #numBytesOfClearData} and {@link #numBytesOfEncryptedData} must be non-null. <p> This information encapsulates per-sample metadata as outlined in ISO/IEC FDIS 23001-7:2016 "Common encryption in ISO base media file format files". <p> <h3>ISO-CENC Schemes</h3> ISO/IEC FDIS 23001-7:2016 defines four possible schemes by which media may be encrypted, corresponding to each possible combination of an AES mode with the presence or absence of patterned encryption. <table style="width: 0%"> <thead> <tr> <th> </th> <th>AES-CTR</th> <th>AES-CBC</th> </tr> </thead> <tbody> <tr> <th>Without Patterns</th> <td>cenc</td> <td>cbc1</td> </tr><tr> <th>With Patterns</th> <td>cens</td> <td>cbcs</td> </tr> </tbody> </table> For {@code CryptoInfo}, the scheme is selected implicitly by the combination of the {@link #mode} field and the value set with {@link #setPattern}. For the pattern, setting the pattern to all zeroes (that is, both {@code blocksToEncrypt} and {@code blocksToSkip} are zero) is interpreted as turning patterns off completely. A scheme that does not use patterns will be selected, either cenc or cbc1. Setting the pattern to any nonzero value will choose one of the pattern-supporting schemes, cens or cbcs. The default pattern if {@link #setPattern} is never called is all zeroes. <p> <h4>HLS SAMPLE-AES Audio</h4> HLS SAMPLE-AES audio is encrypted in a manner compatible with the cbcs scheme, except that it does not use patterned encryption. However, if {@link #setPattern} is used to set the pattern to all zeroes, this will be interpreted as selecting the cbc1 scheme. The cbc1 scheme cannot successfully decrypt HLS SAMPLE-AES audio because of differences in how the IVs are handled. For this reason, it is recommended that a pattern of {@code 1} encrypted block and {@code 0} skip blocks be used with HLS SAMPLE-AES audio. This will trigger decryption to use cbcs mode while still decrypting every block. */ var CryptoInfo = { /** The number of subSamples that make up the buffer's contents. */ numSubSamples : "null", /** The number of leading unencrypted bytes in each subSample. If null, all bytes are treated as encrypted and {@link #numBytesOfEncryptedData} must be specified. */ numBytesOfClearData : "null", /** The number of trailing encrypted bytes in each subSample. If null, all bytes are treated as clear and {@link #numBytesOfClearData} must be specified. */ numBytesOfEncryptedData : "null", /** A 16-byte key id */ key : "null", /** A 16-byte initialization vector */ iv : "null", /** The type of encryption that has been applied, see {@link #CRYPTO_MODE_UNENCRYPTED}, {@link #CRYPTO_MODE_AES_CTR} and {@link #CRYPTO_MODE_AES_CBC} */ mode : "null", /**Set the subsample count, clear/encrypted sizes, key, IV and mode fields of a {@link android.media.MediaCodec.CryptoInfo} instance. */ set : function( ) {}, /**Set the encryption pattern on a {@link android.media.MediaCodec.CryptoInfo} instance. See {@link android.media.MediaCodec.CryptoInfo.Pattern}. */ setPattern : function( ) {}, /** */ toString : function( ) {}, };