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

Side by Side Diff: content_decryption_module.h

Issue 218493008: Remove CDM_1 and CDM_2 interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/cdm
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 CDM_CONTENT_DECRYPTION_MODULE_H_ 5 #ifndef CDM_CONTENT_DECRYPTION_MODULE_H_
6 #define CDM_CONTENT_DECRYPTION_MODULE_H_ 6 #define CDM_CONTENT_DECRYPTION_MODULE_H_
7 7
8 #if defined(_MSC_VER) 8 #if defined(_MSC_VER)
9 typedef unsigned char uint8_t; 9 typedef unsigned char uint8_t;
10 typedef unsigned int uint32_t; 10 typedef unsigned int uint32_t;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 CDM_EXPORT void* CreateCdmInstance( 68 CDM_EXPORT void* CreateCdmInstance(
69 int cdm_interface_version, 69 int cdm_interface_version,
70 const char* key_system, uint32_t key_system_size, 70 const char* key_system, uint32_t key_system_size,
71 GetCdmHostFunc get_cdm_host_func, void* user_data); 71 GetCdmHostFunc get_cdm_host_func, void* user_data);
72 72
73 CDM_EXPORT const char* GetCdmVersion(); 73 CDM_EXPORT const char* GetCdmVersion();
74 } 74 }
75 75
76 namespace cdm { 76 namespace cdm {
77 77
78 class AudioFrames_1;
79 class AudioFrames_2; 78 class AudioFrames_2;
80 typedef AudioFrames_2 AudioFrames; 79 typedef AudioFrames_2 AudioFrames;
81 80
82 class Host_1;
83 class Host_2;
84 class Host_4; 81 class Host_4;
85 82
86 class DecryptedBlock; 83 class DecryptedBlock;
87 class VideoFrame; 84 class VideoFrame;
88 85
89 enum Status { 86 enum Status {
90 kSuccess = 0, 87 kSuccess = 0,
91 kNeedMoreData, // Decoder needs more data to produce a decoded frame/sample. 88 kNeedMoreData, // Decoder needs more data to produce a decoded frame/sample.
92 kNoKey, // The required decryption key is not available. 89 kNoKey, // The required decryption key is not available.
93 kSessionError, // Session management error. 90 kSessionError, // Session management error.
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 // - kError indicates write failure, e.g. the storage isn't open or cannot be 369 // - kError indicates write failure, e.g. the storage isn't open or cannot be
373 // fully written. Upon write failure, the contents of the file should be 370 // fully written. Upon write failure, the contents of the file should be
374 // regarded as corrupt and should not used. 371 // regarded as corrupt and should not used.
375 virtual void OnWriteComplete(Status status) = 0; 372 virtual void OnWriteComplete(Status status) = 0;
376 373
377 protected: 374 protected:
378 FileIOClient() {} 375 FileIOClient() {}
379 virtual ~FileIOClient() {} 376 virtual ~FileIOClient() {}
380 }; 377 };
381 378
382 // WARNING: Deprecated. Will be removed in the near future. CDMs should
383 // implement ContentDecryptionModule_2 instead.
384
385 // ContentDecryptionModule interface that all CDMs need to implement.
386 // The interface is versioned for backward compatibility.
387 // Note: ContentDecryptionModule implementations must use the allocator
388 // provided in CreateCdmInstance() to allocate any Buffer that needs to
389 // be passed back to the caller. Implementations must call Buffer::Destroy()
390 // when a Buffer is created that will never be returned to the caller.
391 class ContentDecryptionModule_1 {
392 public:
393 static const int kVersion = 1;
394 typedef Host_1 Host;
395
396 // Generates a |key_request| given |type| and |init_data|.
397 //
398 // Returns kSuccess if the key request was successfully generated, in which
399 // case the CDM must send the key message by calling Host::SendKeyMessage().
400 // Returns kSessionError if any error happened, in which case the CDM must
401 // send a key error by calling Host::SendKeyError().
402 virtual Status GenerateKeyRequest(
403 const char* type, uint32_t type_size,
404 const uint8_t* init_data, uint32_t init_data_size) = 0;
405
406 // Adds the |key| to the CDM to be associated with |key_id|.
407 //
408 // Returns kSuccess if the key was successfully added, kSessionError
409 // otherwise.
410 virtual Status AddKey(const char* session_id, uint32_t session_id_size,
411 const uint8_t* key, uint32_t key_size,
412 const uint8_t* key_id, uint32_t key_id_size) = 0;
413
414 // Cancels any pending key request made to the CDM for |session_id|.
415 //
416 // Returns kSuccess if all pending key requests for |session_id| were
417 // successfully canceled or there was no key request to be canceled,
418 // kSessionError otherwise.
419 virtual Status CancelKeyRequest(
420 const char* session_id, uint32_t session_id_size) = 0;
421
422 // Performs scheduled operation with |context| when the timer fires.
423 virtual void TimerExpired(void* context) = 0;
424
425 // Decrypts the |encrypted_buffer|.
426 //
427 // Returns kSuccess if decryption succeeded, in which case the callee
428 // should have filled the |decrypted_buffer| and passed the ownership of
429 // |data| in |decrypted_buffer| to the caller.
430 // Returns kNoKey if the CDM did not have the necessary decryption key
431 // to decrypt.
432 // Returns kDecryptError if any other error happened.
433 // If the return value is not kSuccess, |decrypted_buffer| should be ignored
434 // by the caller.
435 virtual Status Decrypt(const InputBuffer& encrypted_buffer,
436 DecryptedBlock* decrypted_buffer) = 0;
437
438 // Initializes the CDM audio decoder with |audio_decoder_config|. This
439 // function must be called before DecryptAndDecodeSamples() is called.
440 //
441 // Returns kSuccess if the |audio_decoder_config| is supported and the CDM
442 // audio decoder is successfully initialized.
443 // Returns kSessionError if |audio_decoder_config| is not supported. The CDM
444 // may still be able to do Decrypt().
445 virtual Status InitializeAudioDecoder(
446 const AudioDecoderConfig& audio_decoder_config) = 0;
447
448 // Initializes the CDM video decoder with |video_decoder_config|. This
449 // function must be called before DecryptAndDecodeFrame() is called.
450 //
451 // Returns kSuccess if the |video_decoder_config| is supported and the CDM
452 // video decoder is successfully initialized.
453 // Returns kSessionError if |video_decoder_config| is not supported. The CDM
454 // may still be able to do Decrypt().
455 virtual Status InitializeVideoDecoder(
456 const VideoDecoderConfig& video_decoder_config) = 0;
457
458 // De-initializes the CDM decoder and sets it to an uninitialized state. The
459 // caller can initialize the decoder again after this call to re-initialize
460 // it. This can be used to reconfigure the decoder if the configuration
461 // changes.
462 virtual void DeinitializeDecoder(StreamType decoder_type) = 0;
463
464 // Resets the CDM decoder to an initialized clean state. All internal buffers
465 // MUST be flushed.
466 virtual void ResetDecoder(StreamType decoder_type) = 0;
467
468 // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a
469 // |video_frame|. Upon end-of-stream, the caller should call this function
470 // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty
471 // |video_frame| (|format| == kEmptyVideoFrame) is produced.
472 //
473 // Returns kSuccess if decryption and decoding both succeeded, in which case
474 // the callee will have filled the |video_frame| and passed the ownership of
475 // |frame_buffer| in |video_frame| to the caller.
476 // Returns kNoKey if the CDM did not have the necessary decryption key
477 // to decrypt.
478 // Returns kNeedMoreData if more data was needed by the decoder to generate
479 // a decoded frame (e.g. during initialization and end-of-stream).
480 // Returns kDecryptError if any decryption error happened.
481 // Returns kDecodeError if any decoding error happened.
482 // If the return value is not kSuccess, |video_frame| should be ignored by
483 // the caller.
484 virtual Status DecryptAndDecodeFrame(const InputBuffer& encrypted_buffer,
485 VideoFrame* video_frame) = 0;
486
487 // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into
488 // |audio_frames|. Upon end-of-stream, the caller should call this function
489 // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty
490 // |audio_frames| is produced.
491 //
492 // Returns kSuccess if decryption and decoding both succeeded, in which case
493 // the callee will have filled |audio_frames| and passed the ownership of
494 // |data| in |audio_frames| to the caller.
495 // Returns kNoKey if the CDM did not have the necessary decryption key
496 // to decrypt.
497 // Returns kNeedMoreData if more data was needed by the decoder to generate
498 // audio samples (e.g. during initialization and end-of-stream).
499 // Returns kDecryptError if any decryption error happened.
500 // Returns kDecodeError if any decoding error happened.
501 // If the return value is not kSuccess, |audio_frames| should be ignored by
502 // the caller.
503 virtual Status DecryptAndDecodeSamples(const InputBuffer& encrypted_buffer,
504 AudioFrames_1* audio_frames) = 0;
505
506 // Destroys the object in the same context as it was created.
507 virtual void Destroy() = 0;
508
509 protected:
510 ContentDecryptionModule_1() {}
511 virtual ~ContentDecryptionModule_1() {}
512 };
513
514 // ContentDecryptionModule interface that all CDMs need to implement. 379 // ContentDecryptionModule interface that all CDMs need to implement.
515 // The interface is versioned for backward compatibility. 380 // The interface is versioned for backward compatibility.
516 // Note: ContentDecryptionModule implementations must use the allocator 381 // Note: ContentDecryptionModule implementations must use the allocator
517 // provided in CreateCdmInstance() to allocate any Buffer that needs to
518 // be passed back to the caller. Implementations must call Buffer::Destroy()
519 // when a Buffer is created that will never be returned to the caller.
520 class ContentDecryptionModule_2 {
521 public:
522 static const int kVersion = 2;
523 typedef Host_2 Host;
524
525 // Generates a |key_request| given |type| and |init_data|.
526 //
527 // Returns kSuccess if the key request was successfully generated, in which
528 // case the CDM must send the key message by calling Host::SendKeyMessage().
529 // Returns kSessionError if any error happened, in which case the CDM must
530 // send a key error by calling Host::SendKeyError().
531 virtual Status GenerateKeyRequest(
532 const char* type, uint32_t type_size,
533 const uint8_t* init_data, uint32_t init_data_size) = 0;
534
535 // Adds the |key| to the CDM to be associated with |key_id|.
536 //
537 // Returns kSuccess if the key was successfully added, kSessionError
538 // otherwise.
539 virtual Status AddKey(const char* session_id, uint32_t session_id_size,
540 const uint8_t* key, uint32_t key_size,
541 const uint8_t* key_id, uint32_t key_id_size) = 0;
542
543 // Cancels any pending key request made to the CDM for |session_id|.
544 //
545 // Returns kSuccess if all pending key requests for |session_id| were
546 // successfully canceled or there was no key request to be canceled,
547 // kSessionError otherwise.
548 virtual Status CancelKeyRequest(
549 const char* session_id, uint32_t session_id_size) = 0;
550
551 // Performs scheduled operation with |context| when the timer fires.
552 virtual void TimerExpired(void* context) = 0;
553
554 // Decrypts the |encrypted_buffer|.
555 //
556 // Returns kSuccess if decryption succeeded, in which case the callee
557 // should have filled the |decrypted_buffer| and passed the ownership of
558 // |data| in |decrypted_buffer| to the caller.
559 // Returns kNoKey if the CDM did not have the necessary decryption key
560 // to decrypt.
561 // Returns kDecryptError if any other error happened.
562 // If the return value is not kSuccess, |decrypted_buffer| should be ignored
563 // by the caller.
564 virtual Status Decrypt(const InputBuffer& encrypted_buffer,
565 DecryptedBlock* decrypted_buffer) = 0;
566
567 // Initializes the CDM audio decoder with |audio_decoder_config|. This
568 // function must be called before DecryptAndDecodeSamples() is called.
569 //
570 // Returns kSuccess if the |audio_decoder_config| is supported and the CDM
571 // audio decoder is successfully initialized.
572 // Returns kSessionError if |audio_decoder_config| is not supported. The CDM
573 // may still be able to do Decrypt().
574 // Returns kDeferredInitialization if the CDM is not ready to initialize the
575 // decoder at this time. Must call Host::OnDeferredInitializationDone() once
576 // initialization is complete.
577 virtual Status InitializeAudioDecoder(
578 const AudioDecoderConfig& audio_decoder_config) = 0;
579
580 // Initializes the CDM video decoder with |video_decoder_config|. This
581 // function must be called before DecryptAndDecodeFrame() is called.
582 //
583 // Returns kSuccess if the |video_decoder_config| is supported and the CDM
584 // video decoder is successfully initialized.
585 // Returns kSessionError if |video_decoder_config| is not supported. The CDM
586 // may still be able to do Decrypt().
587 // Returns kDeferredInitialization if the CDM is not ready to initialize the
588 // decoder at this time. Must call Host::OnDeferredInitializationDone() once
589 // initialization is complete.
590 virtual Status InitializeVideoDecoder(
591 const VideoDecoderConfig& video_decoder_config) = 0;
592
593 // De-initializes the CDM decoder and sets it to an uninitialized state. The
594 // caller can initialize the decoder again after this call to re-initialize
595 // it. This can be used to reconfigure the decoder if the configuration
596 // changes.
597 virtual void DeinitializeDecoder(StreamType decoder_type) = 0;
598
599 // Resets the CDM decoder to an initialized clean state. All internal buffers
600 // MUST be flushed.
601 virtual void ResetDecoder(StreamType decoder_type) = 0;
602
603 // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a
604 // |video_frame|. Upon end-of-stream, the caller should call this function
605 // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty
606 // |video_frame| (|format| == kEmptyVideoFrame) is produced.
607 //
608 // Returns kSuccess if decryption and decoding both succeeded, in which case
609 // the callee will have filled the |video_frame| and passed the ownership of
610 // |frame_buffer| in |video_frame| to the caller.
611 // Returns kNoKey if the CDM did not have the necessary decryption key
612 // to decrypt.
613 // Returns kNeedMoreData if more data was needed by the decoder to generate
614 // a decoded frame (e.g. during initialization and end-of-stream).
615 // Returns kDecryptError if any decryption error happened.
616 // Returns kDecodeError if any decoding error happened.
617 // If the return value is not kSuccess, |video_frame| should be ignored by
618 // the caller.
619 virtual Status DecryptAndDecodeFrame(const InputBuffer& encrypted_buffer,
620 VideoFrame* video_frame) = 0;
621
622 // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into
623 // |audio_frames|. Upon end-of-stream, the caller should call this function
624 // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty
625 // |audio_frames| is produced.
626 //
627 // Returns kSuccess if decryption and decoding both succeeded, in which case
628 // the callee will have filled |audio_frames| and passed the ownership of
629 // |data| in |audio_frames| to the caller.
630 // Returns kNoKey if the CDM did not have the necessary decryption key
631 // to decrypt.
632 // Returns kNeedMoreData if more data was needed by the decoder to generate
633 // audio samples (e.g. during initialization and end-of-stream).
634 // Returns kDecryptError if any decryption error happened.
635 // Returns kDecodeError if any decoding error happened.
636 // If the return value is not kSuccess, |audio_frames| should be ignored by
637 // the caller.
638 virtual Status DecryptAndDecodeSamples(const InputBuffer& encrypted_buffer,
639 AudioFrames* audio_frames) = 0;
640
641 // Called by the host after a platform challenge was initiated via
642 // Host::SendPlatformChallenge().
643 virtual void OnPlatformChallengeResponse(
644 const PlatformChallengeResponse& response) = 0;
645
646 // Called by the host after a call to Host::QueryOutputProtectionStatus(). The
647 // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask|
648 // is a bit mask of OutputProtectionMethods.
649 virtual void OnQueryOutputProtectionStatus(
650 uint32_t link_mask, uint32_t output_protection_mask) = 0;
651
652 // Destroys the object in the same context as it was created.
653 virtual void Destroy() = 0;
654
655 protected:
656 ContentDecryptionModule_2() {}
657 virtual ~ContentDecryptionModule_2() {}
658 };
659
660 // ContentDecryptionModule interface that all CDMs need to implement.
661 // The interface is versioned for backward compatibility.
662 // Note: ContentDecryptionModule implementations must use the allocator
663 // provided in CreateCdmInstance() to allocate any Buffer that needs to 382 // provided in CreateCdmInstance() to allocate any Buffer that needs to
664 // be passed back to the caller. Implementations must call Buffer::Destroy() 383 // be passed back to the caller. Implementations must call Buffer::Destroy()
665 // when a Buffer is created that will never be returned to the caller. 384 // when a Buffer is created that will never be returned to the caller.
666 class ContentDecryptionModule_4 { 385 class ContentDecryptionModule_4 {
667 public: 386 public:
668 static const int kVersion = 4; 387 static const int kVersion = 4;
669 typedef Host_4 Host; 388 typedef Host_4 Host;
670 389
671 // CreateSession(), UpdateSession(), and ReleaseSession() get passed a 390 // CreateSession(), UpdateSession(), and ReleaseSession() get passed a
672 // |session_id| for a MediaKeySession object. It must be used in the reply via 391 // |session_id| for a MediaKeySession object. It must be used in the reply via
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 536
818 protected: 537 protected:
819 Buffer() {} 538 Buffer() {}
820 virtual ~Buffer() {} 539 virtual ~Buffer() {}
821 540
822 private: 541 private:
823 Buffer(const Buffer&); 542 Buffer(const Buffer&);
824 void operator=(const Buffer&); 543 void operator=(const Buffer&);
825 }; 544 };
826 545
827 // Host interface that the CDM can call into to access browser side services.
828 // Host interfaces are versioned for backward compatibility. CDM should use
829 // HostFactory object to request a Host interface of a particular version.
830 class Host_1 {
831 public:
832 static const int kVersion = 1;
833
834 // Returns a Buffer* containing non-zero members upon success, or NULL on
835 // failure. The caller owns the Buffer* after this call. The buffer is not
836 // guaranteed to be zero initialized. The capacity of the allocated Buffer
837 // is guaranteed to be not less than |capacity|.
838 virtual Buffer* Allocate(uint32_t capacity) = 0;
839
840 // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms|
841 // from now with |context|.
842 virtual void SetTimer(int64_t delay_ms, void* context) = 0;
843
844 // Returns the current epoch wall time in seconds.
845 virtual double GetCurrentWallTimeInSeconds() = 0;
846
847 // Sends a keymessage event to the application.
848 // Length parameters should not include null termination.
849 virtual void SendKeyMessage(
850 const char* session_id, uint32_t session_id_length,
851 const char* message, uint32_t message_length,
852 const char* default_url, uint32_t default_url_length) = 0;
853
854 // Sends a keyerror event to the application.
855 // |session_id_length| should not include null termination.
856 virtual void SendKeyError(const char* session_id,
857 uint32_t session_id_length,
858 MediaKeyError error_code,
859 uint32_t system_code) = 0;
860
861 // Get private data from the host. This function is limited to internal use.
862 typedef const void* (*GetPrivateInterface)(const char* interface_name);
863 virtual void GetPrivateData(int32_t* instance,
864 GetPrivateInterface* get_interface) = 0;
865
866 protected:
867 Host_1() {}
868 virtual ~Host_1() {}
869 };
870
871 class Host_2 {
872 public:
873 static const int kVersion = 2;
874
875 // Returns a Buffer* containing non-zero members upon success, or NULL on
876 // failure. The caller owns the Buffer* after this call. The buffer is not
877 // guaranteed to be zero initialized. The capacity of the allocated Buffer
878 // is guaranteed to be not less than |capacity|.
879 virtual Buffer* Allocate(uint32_t capacity) = 0;
880
881 // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms|
882 // from now with |context|.
883 virtual void SetTimer(int64_t delay_ms, void* context) = 0;
884
885 // Returns the current epoch wall time in seconds.
886 virtual double GetCurrentWallTimeInSeconds() = 0;
887
888 // Sends a keymessage event to the application.
889 // Length parameters should not include null termination.
890 virtual void SendKeyMessage(
891 const char* session_id, uint32_t session_id_length,
892 const char* message, uint32_t message_length,
893 const char* default_url, uint32_t default_url_length) = 0;
894
895 // Sends a keyerror event to the application.
896 // |session_id_length| should not include null termination.
897 virtual void SendKeyError(const char* session_id,
898 uint32_t session_id_length,
899 MediaKeyError error_code,
900 uint32_t system_code) = 0;
901
902 // Get private data from the host. This function is limited to internal use.
903 virtual void GetPrivateData(int32_t* instance,
904 Host_1::GetPrivateInterface* get_interface) = 0;
905
906 // Sends a platform challenge for the given |service_id|. |challenge| is at
907 // most 256 bits of data to be signed. Once the challenge has been completed,
908 // the host will call ContentDecryptionModule::OnPlatformChallengeResponse()
909 // with the signed challenge response and platform certificate. Length
910 // parameters should not include null termination.
911 virtual void SendPlatformChallenge(
912 const char* service_id, uint32_t service_id_length,
913 const char* challenge, uint32_t challenge_length) = 0;
914
915 // Attempts to enable output protection (e.g. HDCP) on the display link. The
916 // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No
917 // status callback is issued, the CDM must call QueryOutputProtectionStatus()
918 // periodically to ensure the desired protections are applied.
919 virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0;
920
921 // Requests the current output protection status. Once the host has the status
922 // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus().
923 virtual void QueryOutputProtectionStatus() = 0;
924
925 // Must be called by the CDM if it returned kDeferredInitialization during
926 // InitializeAudioDecoder() or InitializeVideoDecoder().
927 virtual void OnDeferredInitializationDone(StreamType stream_type,
928 Status decoder_status) = 0;
929
930 protected:
931 Host_2() {}
932 virtual ~Host_2() {}
933 };
934
935 class Host_4 { 546 class Host_4 {
936 public: 547 public:
937 static const int kVersion = 4; 548 static const int kVersion = 4;
938 549
939 // Returns a Buffer* containing non-zero members upon success, or NULL on 550 // Returns a Buffer* containing non-zero members upon success, or NULL on
940 // failure. The caller owns the Buffer* after this call. The buffer is not 551 // failure. The caller owns the Buffer* after this call. The buffer is not
941 // guaranteed to be zero initialized. The capacity of the allocated Buffer 552 // guaranteed to be zero initialized. The capacity of the allocated Buffer
942 // is guaranteed to be not less than |capacity|. 553 // is guaranteed to be not less than |capacity|.
943 virtual Buffer* Allocate(uint32_t capacity) = 0; 554 virtual Buffer* Allocate(uint32_t capacity) = 0;
944 555
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 virtual uint32_t Stride(VideoPlane plane) = 0; 670 virtual uint32_t Stride(VideoPlane plane) = 0;
1060 671
1061 virtual void SetTimestamp(int64_t timestamp) = 0; 672 virtual void SetTimestamp(int64_t timestamp) = 0;
1062 virtual int64_t Timestamp() const = 0; 673 virtual int64_t Timestamp() const = 0;
1063 674
1064 protected: 675 protected:
1065 VideoFrame() {} 676 VideoFrame() {}
1066 virtual ~VideoFrame() {} 677 virtual ~VideoFrame() {}
1067 }; 678 };
1068 679
1069 //
1070 // WARNING: Deprecated. Will be removed in the near future. CDMs should be
1071 // implementing ContentDecryptionModule_2 instead which uses AudioFrames_2.
1072 //
1073 // Represents decrypted and decoded audio frames. AudioFrames can contain 680 // Represents decrypted and decoded audio frames. AudioFrames can contain
1074 // multiple audio output buffers, which are serialized into this format: 681 // multiple audio output buffers, which are serialized into this format:
1075 // 682 //
1076 // |<------------------- serialized audio buffer ------------------->| 683 // |<------------------- serialized audio buffer ------------------->|
1077 // | int64_t timestamp | int64_t length | length bytes of audio data | 684 // | int64_t timestamp | int64_t length | length bytes of audio data |
1078 // 685 //
1079 // For example, with three audio output buffers, the AudioFrames will look 686 // For example, with three audio output buffers, the AudioFrames will look
1080 // like this: 687 // like this:
1081 // 688 //
1082 // |<----------------- AudioFrames ------------------>| 689 // |<----------------- AudioFrames ------------------>|
1083 // | audio buffer 0 | audio buffer 1 | audio buffer 2 | 690 // | audio buffer 0 | audio buffer 1 | audio buffer 2 |
1084 class AudioFrames_1 {
1085 public:
1086 virtual void SetFrameBuffer(Buffer* buffer) = 0;
1087 virtual Buffer* FrameBuffer() = 0;
1088
1089 protected:
1090 AudioFrames_1() {}
1091 virtual ~AudioFrames_1() {}
1092 };
1093
1094 // Same as AudioFrames except the format of the data may be specified to avoid
1095 // unnecessary conversion steps. Planar data should be stored end to end; e.g.,
1096 // |ch1 sample1||ch1 sample2|....|ch1 sample_last||ch2 sample1|...
1097 class AudioFrames_2 { 691 class AudioFrames_2 {
1098 public: 692 public:
1099 virtual void SetFrameBuffer(Buffer* buffer) = 0; 693 virtual void SetFrameBuffer(Buffer* buffer) = 0;
1100 virtual Buffer* FrameBuffer() = 0; 694 virtual Buffer* FrameBuffer() = 0;
1101 695
1102 // The CDM must call this method, providing a valid format, when providing 696 // The CDM must call this method, providing a valid format, when providing
1103 // frame buffers. 697 // frame buffers. Planar data should be stored end to end; e.g.,
698 // |ch1 sample1||ch1 sample2|....|ch1 sample_last||ch2 sample1|...
1104 virtual void SetFormat(AudioFormat format) = 0; 699 virtual void SetFormat(AudioFormat format) = 0;
1105 virtual AudioFormat Format() const = 0; 700 virtual AudioFormat Format() const = 0;
1106 701
1107 protected: 702 protected:
1108 AudioFrames_2() {} 703 AudioFrames_2() {}
1109 virtual ~AudioFrames_2() {} 704 virtual ~AudioFrames_2() {}
1110 }; 705 };
1111 706
1112 } // namespace cdm 707 } // namespace cdm
1113 708
1114 #endif // CDM_CONTENT_DECRYPTION_MODULE_H_ 709 #endif // CDM_CONTENT_DECRYPTION_MODULE_H_
OLDNEW
« 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