Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Unified Diff: webkit/media/crypto/content_decryption_module.h

Issue 10823299: Add ContentDecryptionModule interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/media/crypto/content_decryption_module.h
diff --git a/webkit/media/crypto/content_decryption_module.h b/webkit/media/crypto/content_decryption_module.h
new file mode 100644
index 0000000000000000000000000000000000000000..84ffd10dc1cc6c2b244e670806b1a2a624443314
--- /dev/null
+++ b/webkit/media/crypto/content_decryption_module.h
@@ -0,0 +1,89 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_MEDIA_CRYPTO_CONTENT_DECRYPTION_MODULE_H_
+#define WEBKIT_MEDIA_CRYPTO_CONTENT_DECRYPTION_MODULE_H_
+
+#include <stdint.h>
ddorwin 2012/08/13 23:28:20 This may fail MSVC 2008. See https://groups.google
xhwang 2012/08/14 16:26:07 Summary of the discussion: - stdint types are avai
+
+class ContentDecryptionModule;
+
+extern ContentDecryptionModule* CdmCreateInstance(const void* config_data,
+ uint32_t config_data_size);
+extern const char* CdmGetVersion();
+
+enum CdmStatus {
+ kCdmStatusSuccess = 0,
ddorwin 2012/08/13 23:28:20 "Though the Google C++ Style Guide says to use kCo
xhwang 2012/08/14 16:26:07 We are already using kConstantNaming at least in m
+ kCdmStatusErrorUnknown = 1,
+ kCdmStatusErrorClient = 2,
+ kCdmStatusErrorService = 3,
+ kCdmStatusErrorOutput = 4,
+ kCdmStatusErrorHardwareChange = 5,
+ kCdmStatusErrorDomain = 6
+};
+
+// The Common Encryption spec supports subsample encryption, where portions
ddorwin 2012/08/13 23:28:20 The ISO... But, I think we should just define thi
xhwang 2012/08/14 16:26:07 Updated comment with examples and w/o mentioning I
+// of a sample are set in cleartext. A SubsampleEntry specifies the number of
+// clear and encrypted bytes in each subsample. For decryption, all of the
+// encrypted bytes in a sample should be considered a single logical stream,
+// regardless of how they are divided into subsamples, and the clear bytes
+// should not be considered as part of decryption. This is logically equivalent
+// to concatenating all 'cypher_bytes' portions of subsamples, decrypting that
+// result, and then copying each byte from the decrypted block over the
+// position of the corresponding encrypted byte.
+struct SubsampleEntry {
+ uint32_t clear_bytes;
+ uint32_t cypher_bytes;
+};
+
+struct InputBuffer {
+ uint8_t* data; // Pointer to the beginning of the input data.
+ uint32_t data_size; // Size (in bytes) of |data|.
+ uint32_t data_offset; // Number of bytes to be discarded before decryption.
+ uint8_t* key_id; // Key ID to identify the decryption key.
+ uint32_t key_id_size; // Size (in bytes) of |key_id|.
+ uint8_t* iv; // Initialization vector.
+ uint32_t iv_len; // Size (in bytes) of |iv|.
+ uint8_t* checksum; // Pointer to the beginning of the checksum.
+ uint32_t checksum_size; // Size (in bytes) of the |checksum|.
+ // Subsamples as specified in ISO common encryption.
ddorwin 2012/08/13 23:28:20 Same. No need for a comment really since it's alre
xhwang 2012/08/14 16:26:07 Done.
+ struct SubsampleEntry* subsamples;
+ uint32_t num_subsamples; // Number of subsamples in |subsamples|.
+ int64_t timestamp; // Presentation timestamp in milliseconds.
ddorwin 2012/08/13 23:28:20 Any idea what the CDM does with this value and the
xhwang 2012/08/14 16:26:07 We need timestamp to track buffers since buffer ca
+ int64_t duration; // Duration in milliseconds.
+};
+
+struct OutputBuffer {
+ uint8_t* data; // Pointer to the beginning of the output data.
ddorwin 2012/08/13 23:28:20 This assumes the caller is allocating the output b
xhwang 2012/08/14 16:26:07 In Decrypt(), the OutputBuffer is passed in as "Ou
ddorwin 2012/08/14 22:52:11 Probably worth commenting this somewhere. Decrypt(
xhwang 2012/08/15 01:18:26 Done.
+ uint32_t data_size; // Size (in bytes) of |data|.
+ int64_t timestamp; // Presentation timestamp in milliseconds.
+ int64_t duration; // Duration in milliseconds.
+};
+
+class ContentDecryptionModule {
+ public:
+ virtual CdmStatus GenerateKeyRequest(const uint8_t* init_data,
+ uint32_t init_data_size,
+ char** session_id,
+ uint32_t* session_id_size,
+ uint8_t** key_request,
+ uint32_t* key_request_size) = 0;
+
+ virtual CdmStatus AddKey(const char* session_id,
+ uint32_t session_id_size,
+ const uint8_t* init_data,
ddorwin 2012/08/13 23:28:20 key, not init_data. EME supports init_data today,
xhwang 2012/08/14 16:26:07 Done.
+ uint32_t init_data_size) = 0;
+
+ virtual CdmStatus CancelKeyRequest(const char* session_id,
+ uint32_t session_id_size) = 0;
+
+ virtual CdmStatus Decrypt(const char* session_id,
+ uint32_t session_id_size,
+ const InputBuffer &encrypted_buffer,
+ OutputBuffer* decrypted_buffer) = 0;
ddorwin 2012/08/13 23:28:20 space after &
+
+ virtual ~ContentDecryptionModule() {};
+};
+
+#endif // WEBKIT_MEDIA_CRYPTO_CONTENT_DECRYPTION_MODULE_H_
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698