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

Side by Side Diff: media/cdm/cdm_adapter.cc

Issue 1888603002: Add CdmFileIOProvider interface for use by cdm_adapter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: callback Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "media/cdm/cdm_adapter.h" 5 #include "media/cdm/cdm_adapter.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
14 #include "base/thread_task_runner_handle.h" 14 #include "base/thread_task_runner_handle.h"
15 #include "base/time/time.h" 15 #include "base/time/time.h"
16 #include "media/base/audio_decoder_config.h" 16 #include "media/base/audio_decoder_config.h"
17 #include "media/base/cdm_initialized_promise.h" 17 #include "media/base/cdm_initialized_promise.h"
18 #include "media/base/cdm_key_information.h" 18 #include "media/base/cdm_key_information.h"
19 #include "media/base/channel_layout.h" 19 #include "media/base/channel_layout.h"
20 #include "media/base/decoder_buffer.h" 20 #include "media/base/decoder_buffer.h"
21 #include "media/base/decrypt_config.h" 21 #include "media/base/decrypt_config.h"
22 #include "media/base/limits.h" 22 #include "media/base/limits.h"
23 #include "media/base/sample_format.h" 23 #include "media/base/sample_format.h"
24 #include "media/base/video_codecs.h" 24 #include "media/base/video_codecs.h"
25 #include "media/base/video_decoder_config.h" 25 #include "media/base/video_decoder_config.h"
26 #include "media/base/video_frame.h" 26 #include "media/base/video_frame.h"
27 #include "media/base/video_types.h" 27 #include "media/base/video_types.h"
28 #include "media/cdm/cdm_allocator.h" 28 #include "media/cdm/cdm_allocator.h"
29 #include "media/cdm/cdm_file_io.h"
29 #include "media/cdm/cdm_helpers.h" 30 #include "media/cdm/cdm_helpers.h"
30 #include "media/cdm/cdm_wrapper.h" 31 #include "media/cdm/cdm_wrapper.h"
31 #include "ui/gfx/geometry/rect.h" 32 #include "ui/gfx/geometry/rect.h"
32 33
33 namespace media { 34 namespace media {
34 35
35 namespace { 36 namespace {
36 37
37 cdm::SessionType ToCdmSessionType(MediaKeys::SessionType session_type) { 38 cdm::SessionType ToCdmSessionType(MediaKeys::SessionType session_type) {
38 switch (session_type) { 39 switch (session_type) {
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 } 327 }
327 328
328 } // namespace 329 } // namespace
329 330
330 // static 331 // static
331 void CdmAdapter::Create( 332 void CdmAdapter::Create(
332 const std::string& key_system, 333 const std::string& key_system,
333 const base::FilePath& cdm_path, 334 const base::FilePath& cdm_path,
334 const CdmConfig& cdm_config, 335 const CdmConfig& cdm_config,
335 scoped_ptr<CdmAllocator> allocator, 336 scoped_ptr<CdmAllocator> allocator,
337 const CdmFileIOProviderCB& file_io_provider_cb,
336 const SessionMessageCB& session_message_cb, 338 const SessionMessageCB& session_message_cb,
337 const SessionClosedCB& session_closed_cb, 339 const SessionClosedCB& session_closed_cb,
338 const LegacySessionErrorCB& legacy_session_error_cb, 340 const LegacySessionErrorCB& legacy_session_error_cb,
339 const SessionKeysChangeCB& session_keys_change_cb, 341 const SessionKeysChangeCB& session_keys_change_cb,
340 const SessionExpirationUpdateCB& session_expiration_update_cb, 342 const SessionExpirationUpdateCB& session_expiration_update_cb,
341 const CdmCreatedCB& cdm_created_cb) { 343 const CdmCreatedCB& cdm_created_cb) {
342 DCHECK(!key_system.empty()); 344 DCHECK(!key_system.empty());
343 DCHECK(!session_message_cb.is_null()); 345 DCHECK(!session_message_cb.is_null());
344 DCHECK(!session_closed_cb.is_null()); 346 DCHECK(!session_closed_cb.is_null());
345 DCHECK(!legacy_session_error_cb.is_null()); 347 DCHECK(!legacy_session_error_cb.is_null());
346 DCHECK(!session_keys_change_cb.is_null()); 348 DCHECK(!session_keys_change_cb.is_null());
347 DCHECK(!session_expiration_update_cb.is_null()); 349 DCHECK(!session_expiration_update_cb.is_null());
348 350
349 scoped_refptr<CdmAdapter> cdm = new CdmAdapter( 351 scoped_refptr<CdmAdapter> cdm = new CdmAdapter(
350 key_system, cdm_config, std::move(allocator), session_message_cb, 352 key_system, cdm_config, std::move(allocator), file_io_provider_cb,
351 session_closed_cb, legacy_session_error_cb, session_keys_change_cb, 353 session_message_cb, session_closed_cb, legacy_session_error_cb,
352 session_expiration_update_cb); 354 session_keys_change_cb, session_expiration_update_cb);
353 355
354 // |cdm| ownership passed to the promise. 356 // |cdm| ownership passed to the promise.
355 scoped_ptr<CdmInitializedPromise> cdm_created_promise( 357 scoped_ptr<CdmInitializedPromise> cdm_created_promise(
356 new CdmInitializedPromise(cdm_created_cb, cdm)); 358 new CdmInitializedPromise(cdm_created_cb, cdm));
357 359
358 cdm->Initialize(cdm_path, std::move(cdm_created_promise)); 360 cdm->Initialize(cdm_path, std::move(cdm_created_promise));
359 } 361 }
360 362
361 CdmAdapter::CdmAdapter( 363 CdmAdapter::CdmAdapter(
362 const std::string& key_system, 364 const std::string& key_system,
363 const CdmConfig& cdm_config, 365 const CdmConfig& cdm_config,
364 scoped_ptr<CdmAllocator> allocator, 366 scoped_ptr<CdmAllocator> allocator,
367 const CdmFileIOProviderCB& file_io_provider_cb,
365 const SessionMessageCB& session_message_cb, 368 const SessionMessageCB& session_message_cb,
366 const SessionClosedCB& session_closed_cb, 369 const SessionClosedCB& session_closed_cb,
367 const LegacySessionErrorCB& legacy_session_error_cb, 370 const LegacySessionErrorCB& legacy_session_error_cb,
368 const SessionKeysChangeCB& session_keys_change_cb, 371 const SessionKeysChangeCB& session_keys_change_cb,
369 const SessionExpirationUpdateCB& session_expiration_update_cb) 372 const SessionExpirationUpdateCB& session_expiration_update_cb)
370 : key_system_(key_system), 373 : key_system_(key_system),
371 cdm_config_(cdm_config), 374 cdm_config_(cdm_config),
372 session_message_cb_(session_message_cb), 375 session_message_cb_(session_message_cb),
373 session_closed_cb_(session_closed_cb), 376 session_closed_cb_(session_closed_cb),
374 legacy_session_error_cb_(legacy_session_error_cb), 377 legacy_session_error_cb_(legacy_session_error_cb),
375 session_keys_change_cb_(session_keys_change_cb), 378 session_keys_change_cb_(session_keys_change_cb),
376 session_expiration_update_cb_(session_expiration_update_cb), 379 session_expiration_update_cb_(session_expiration_update_cb),
377 audio_samples_per_second_(0), 380 audio_samples_per_second_(0),
378 audio_channel_layout_(CHANNEL_LAYOUT_NONE), 381 audio_channel_layout_(CHANNEL_LAYOUT_NONE),
379 allocator_(std::move(allocator)), 382 allocator_(std::move(allocator)),
383 file_io_provider_cb_(file_io_provider_cb),
380 task_runner_(base::ThreadTaskRunnerHandle::Get()), 384 task_runner_(base::ThreadTaskRunnerHandle::Get()),
381 weak_factory_(this) { 385 weak_factory_(this) {
382 DCHECK(!key_system_.empty()); 386 DCHECK(!key_system_.empty());
383 DCHECK(!session_message_cb_.is_null()); 387 DCHECK(!session_message_cb_.is_null());
384 DCHECK(!session_closed_cb_.is_null()); 388 DCHECK(!session_closed_cb_.is_null());
385 DCHECK(!legacy_session_error_cb_.is_null()); 389 DCHECK(!legacy_session_error_cb_.is_null());
386 DCHECK(!session_keys_change_cb_.is_null()); 390 DCHECK(!session_keys_change_cb_.is_null());
387 DCHECK(!session_expiration_update_cb_.is_null()); 391 DCHECK(!session_expiration_update_cb_.is_null());
388 DCHECK(allocator_); 392 DCHECK(allocator_);
389 } 393 }
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 return; 888 return;
885 case cdm::kStreamTypeVideo: 889 case cdm::kStreamTypeVideo:
886 base::ResetAndReturn(&video_init_cb_) 890 base::ResetAndReturn(&video_init_cb_)
887 .Run(decoder_status == cdm::kSuccess); 891 .Run(decoder_status == cdm::kSuccess);
888 return; 892 return;
889 } 893 }
890 894
891 NOTREACHED() << "Unexpected cdm::StreamType " << stream_type; 895 NOTREACHED() << "Unexpected cdm::StreamType " << stream_type;
892 } 896 }
893 897
894 // The CDM owns the returned object and must call FileIO::Close() to release it.
895 cdm::FileIO* CdmAdapter::CreateFileIO(cdm::FileIOClient* client) { 898 cdm::FileIO* CdmAdapter::CreateFileIO(cdm::FileIOClient* client) {
896 DCHECK(task_runner_->BelongsToCurrentThread()); 899 DCHECK(task_runner_->BelongsToCurrentThread());
897 900
898 // TODO(jrummell): This should use the mojo FileIO client. 901 // The CDM owns the returned object and must call FileIO::Close()
899 NOTIMPLEMENTED(); 902 // to release it.
xhwang 2016/04/18 21:09:22 nit: Move this comment to right above the "return"
jrummell 2016/04/19 23:59:28 Done.
900 return nullptr; 903 std::unique_ptr<CdmFileIO> file_io = file_io_provider_cb_.Run(client);
904 return file_io.release();
901 } 905 }
902 906
903 bool CdmAdapter::AudioFramesDataToAudioFrames( 907 bool CdmAdapter::AudioFramesDataToAudioFrames(
904 scoped_ptr<AudioFramesImpl> audio_frames, 908 scoped_ptr<AudioFramesImpl> audio_frames,
905 Decryptor::AudioFrames* result_frames) { 909 Decryptor::AudioFrames* result_frames) {
906 const uint8_t* data = audio_frames->FrameBuffer()->Data(); 910 const uint8_t* data = audio_frames->FrameBuffer()->Data();
907 const size_t data_size = audio_frames->FrameBuffer()->Size(); 911 const size_t data_size = audio_frames->FrameBuffer()->Size();
908 size_t bytes_left = data_size; 912 size_t bytes_left = data_size;
909 const SampleFormat sample_format = 913 const SampleFormat sample_format =
910 ToMediaSampleFormat(audio_frames->Format()); 914 ToMediaSampleFormat(audio_frames->Format());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 result_frames->push_back(frame); 957 result_frames->push_back(frame);
954 958
955 data += frame_size; 959 data += frame_size;
956 bytes_left -= frame_size; 960 bytes_left -= frame_size;
957 } while (bytes_left > 0); 961 } while (bytes_left > 0);
958 962
959 return true; 963 return true;
960 } 964 }
961 965
962 } // namespace media 966 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698