| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef WEBKIT_MEDIA_CRYPTO_PPAPI_CLEAR_KEY_CDM_H_ | 5 #ifndef WEBKIT_MEDIA_CRYPTO_PPAPI_CLEAR_KEY_CDM_H_ |
| 6 #define WEBKIT_MEDIA_CRYPTO_PPAPI_CLEAR_KEY_CDM_H_ | 6 #define WEBKIT_MEDIA_CRYPTO_PPAPI_CLEAR_KEY_CDM_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/compiler_specific.h" | 11 #include "base/compiler_specific.h" |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/synchronization/lock.h" | 14 #include "base/synchronization/lock.h" |
| 15 #include "media/base/decryptor_client.h" | 15 #include "media/base/decryptor_client.h" |
| 16 #include "media/crypto/aes_decryptor.h" | 16 #include "media/crypto/aes_decryptor.h" |
| 17 #include "webkit/media/crypto/ppapi/content_decryption_module.h" | 17 #include "webkit/media/crypto/ppapi/content_decryption_module.h" |
| 18 | 18 |
| 19 // Enable this to use the fake decoder for testing. | 19 // Enable this to use the fake decoder for testing. |
| 20 // TODO(xhwang): Move fake decoders into separate classes. | 20 // TODO(tomfinegan): Move fake audio decoder into a separate class. |
| 21 #if 0 | 21 #if 0 |
| 22 #define CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER | 22 #define CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER |
| 23 #endif | 23 #endif |
| 24 | 24 |
| 25 #if 0 | |
| 26 #define CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER | |
| 27 #endif | |
| 28 | |
| 29 #if defined(CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER) | |
| 30 #undef CLEAR_KEY_CDM_USE_FFMPEG_DECODER | |
| 31 #endif | |
| 32 | |
| 33 namespace media { | 25 namespace media { |
| 34 class DecoderBuffer; | 26 class DecoderBuffer; |
| 35 } | 27 } |
| 36 | 28 |
| 37 namespace webkit_media { | 29 namespace webkit_media { |
| 38 | 30 |
| 31 class CdmVideoDecoder; |
| 39 class FFmpegCdmAudioDecoder; | 32 class FFmpegCdmAudioDecoder; |
| 40 class FFmpegCdmVideoDecoder; | |
| 41 | 33 |
| 42 // Clear key implementation of the cdm::ContentDecryptionModule interface. | 34 // Clear key implementation of the cdm::ContentDecryptionModule interface. |
| 43 class ClearKeyCdm : public cdm::ContentDecryptionModule { | 35 class ClearKeyCdm : public cdm::ContentDecryptionModule { |
| 44 public: | 36 public: |
| 45 ClearKeyCdm(cdm::Allocator* allocator, cdm::CdmHost* cdm_host); | 37 ClearKeyCdm(cdm::Allocator* allocator, cdm::CdmHost* cdm_host); |
| 46 virtual ~ClearKeyCdm(); | 38 virtual ~ClearKeyCdm(); |
| 47 | 39 |
| 48 // ContentDecryptionModule implementation. | 40 // ContentDecryptionModule implementation. |
| 49 virtual cdm::Status GenerateKeyRequest( | 41 virtual cdm::Status GenerateKeyRequest( |
| 50 const char* type, int type_size, | 42 const char* type, int type_size, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 | 128 |
| 137 // Generates fake video frames with |duration_in_microseconds|. | 129 // Generates fake video frames with |duration_in_microseconds|. |
| 138 // Returns the number of samples generated in the |audio_frames|. | 130 // Returns the number of samples generated in the |audio_frames|. |
| 139 int GenerateFakeAudioFramesFromDuration(int64 duration_in_microseconds, | 131 int GenerateFakeAudioFramesFromDuration(int64 duration_in_microseconds, |
| 140 cdm::AudioFrames* audio_frames) const; | 132 cdm::AudioFrames* audio_frames) const; |
| 141 | 133 |
| 142 // Generates fake video frames given |input_timestamp|. | 134 // Generates fake video frames given |input_timestamp|. |
| 143 // Returns cdm::kSuccess if any audio frame is successfully generated. | 135 // Returns cdm::kSuccess if any audio frame is successfully generated. |
| 144 cdm::Status GenerateFakeAudioFrames(int64 timestamp_in_microseconds, | 136 cdm::Status GenerateFakeAudioFrames(int64 timestamp_in_microseconds, |
| 145 cdm::AudioFrames* audio_frames); | 137 cdm::AudioFrames* audio_frames); |
| 146 #endif // CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER | 138 #endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER |
| 147 | |
| 148 #if defined(CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER) | |
| 149 // Generates a fake video frame with |video_size_| and |timestamp|. | |
| 150 void GenerateFakeVideoFrame(base::TimeDelta timestamp, | |
| 151 cdm::VideoFrame* video_frame); | |
| 152 #endif // CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER | |
| 153 | 139 |
| 154 Client client_; | 140 Client client_; |
| 155 media::AesDecryptor decryptor_; | 141 media::AesDecryptor decryptor_; |
| 156 | 142 |
| 157 // Protects the |client_| from being accessed by the |decryptor_| | 143 // Protects the |client_| from being accessed by the |decryptor_| |
| 158 // simultaneously. | 144 // simultaneously. |
| 159 base::Lock client_lock_; | 145 base::Lock client_lock_; |
| 160 | 146 |
| 161 cdm::Allocator* const allocator_; | 147 cdm::Allocator* const allocator_; |
| 162 cdm::CdmHost* cdm_host_; | 148 cdm::CdmHost* cdm_host_; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 173 #if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER) | 159 #if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER) |
| 174 int channel_count_; | 160 int channel_count_; |
| 175 int bits_per_channel_; | 161 int bits_per_channel_; |
| 176 int samples_per_second_; | 162 int samples_per_second_; |
| 177 int64 output_timestamp_base_in_microseconds_; | 163 int64 output_timestamp_base_in_microseconds_; |
| 178 int total_samples_generated_; | 164 int total_samples_generated_; |
| 179 #endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER | 165 #endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER |
| 180 | 166 |
| 181 #if defined(CLEAR_KEY_CDM_USE_FFMPEG_DECODER) | 167 #if defined(CLEAR_KEY_CDM_USE_FFMPEG_DECODER) |
| 182 scoped_ptr<FFmpegCdmAudioDecoder> audio_decoder_; | 168 scoped_ptr<FFmpegCdmAudioDecoder> audio_decoder_; |
| 183 scoped_ptr<FFmpegCdmVideoDecoder> video_decoder_; | |
| 184 #endif // CLEAR_KEY_CDM_USE_FFMPEG_DECODER | 169 #endif // CLEAR_KEY_CDM_USE_FFMPEG_DECODER |
| 185 | 170 |
| 186 #if defined(CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER) | 171 scoped_ptr<CdmVideoDecoder> video_decoder_; |
| 187 cdm::Size video_size_; | 172 |
| 188 #endif // CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER | 173 DISALLOW_COPY_AND_ASSIGN(ClearKeyCdm); |
| 189 }; | 174 }; |
| 190 | 175 |
| 191 } // namespace webkit_media | 176 } // namespace webkit_media |
| 192 | 177 |
| 193 #endif // WEBKIT_MEDIA_CRYPTO_PPAPI_CLEAR_KEY_CDM_H_ | 178 #endif // WEBKIT_MEDIA_CRYPTO_PPAPI_CLEAR_KEY_CDM_H_ |
| OLD | NEW |