OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/mojo/common/media_type_converters.h" | 5 #include "media/mojo/common/media_type_converters.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "base/numerics/safe_conversions.h" | 11 #include "base/numerics/safe_conversions.h" |
12 #include "media/base/audio_buffer.h" | 12 #include "media/base/audio_buffer.h" |
13 #include "media/base/audio_decoder_config.h" | 13 #include "media/base/audio_decoder_config.h" |
14 #include "media/base/buffering_state.h" | 14 #include "media/base/buffering_state.h" |
15 #include "media/base/cdm_config.h" | 15 #include "media/base/cdm_config.h" |
16 #include "media/base/cdm_key_information.h" | 16 #include "media/base/cdm_key_information.h" |
17 #include "media/base/decode_status.h" | 17 #include "media/base/decode_status.h" |
18 #include "media/base/decoder_buffer.h" | 18 #include "media/base/decoder_buffer.h" |
19 #include "media/base/decrypt_config.h" | 19 #include "media/base/decrypt_config.h" |
20 #include "media/base/decryptor.h" | 20 #include "media/base/decryptor.h" |
21 #include "media/base/demuxer_stream.h" | 21 #include "media/base/demuxer_stream.h" |
22 #include "media/base/encryption_scheme.h" | 22 #include "media/base/encryption_scheme.h" |
23 #include "media/base/media_keys.h" | 23 #include "media/base/media_keys.h" |
24 #include "media/base/video_decoder_config.h" | 24 #include "media/base/video_decoder_config.h" |
25 #include "media/base/video_frame.h" | 25 #include "media/base/video_frame.h" |
26 #include "media/mojo/common/mojo_shared_buffer_video_frame.h" | 26 #include "media/mojo/common/mojo_shared_buffer_video_frame.h" |
27 #include "media/mojo/interfaces/demuxer_stream.mojom.h" | 27 #include "media/mojo/interfaces/demuxer_stream.mojom.h" |
28 #include "mojo/public/cpp/system/buffer.h" | 28 #include "mojo/public/cpp/system/buffer.h" |
29 #include "ui/gfx/geometry/mojo/geometry_type_converters.h" | |
30 | 29 |
31 namespace mojo { | 30 namespace mojo { |
32 | 31 |
33 #define ASSERT_ENUM_EQ(media_enum, media_prefix, mojo_prefix, value) \ | 32 #define ASSERT_ENUM_EQ(media_enum, media_prefix, mojo_prefix, value) \ |
34 static_assert(media::media_prefix##value == \ | 33 static_assert(media::media_prefix##value == \ |
35 static_cast<media::media_enum>( \ | 34 static_cast<media::media_enum>( \ |
36 media::mojom::media_enum::mojo_prefix##value), \ | 35 media::mojom::media_enum::mojo_prefix##value), \ |
37 "Mismatched enum: " #media_prefix #value " != " #media_enum \ | 36 "Mismatched enum: " #media_prefix #value " != " #media_enum \ |
38 "::" #mojo_prefix #value) | 37 "::" #mojo_prefix #value) |
39 | 38 |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 TypeConverter<media::mojom::VideoDecoderConfigPtr, media::VideoDecoderConfig>:: | 543 TypeConverter<media::mojom::VideoDecoderConfigPtr, media::VideoDecoderConfig>:: |
545 Convert(const media::VideoDecoderConfig& input) { | 544 Convert(const media::VideoDecoderConfig& input) { |
546 media::mojom::VideoDecoderConfigPtr config( | 545 media::mojom::VideoDecoderConfigPtr config( |
547 media::mojom::VideoDecoderConfig::New()); | 546 media::mojom::VideoDecoderConfig::New()); |
548 config->codec = static_cast<media::mojom::VideoCodec>(input.codec()); | 547 config->codec = static_cast<media::mojom::VideoCodec>(input.codec()); |
549 config->profile = | 548 config->profile = |
550 static_cast<media::mojom::VideoCodecProfile>(input.profile()); | 549 static_cast<media::mojom::VideoCodecProfile>(input.profile()); |
551 config->format = static_cast<media::mojom::VideoFormat>(input.format()); | 550 config->format = static_cast<media::mojom::VideoFormat>(input.format()); |
552 config->color_space = | 551 config->color_space = |
553 static_cast<media::mojom::ColorSpace>(input.color_space()); | 552 static_cast<media::mojom::ColorSpace>(input.color_space()); |
554 config->coded_size = Size::From(input.coded_size()); | 553 config->coded_size = input.coded_size(); |
555 config->visible_rect = Rect::From(input.visible_rect()); | 554 config->visible_rect = input.visible_rect(); |
556 config->natural_size = Size::From(input.natural_size()); | 555 config->natural_size = input.natural_size(); |
557 if (!input.extra_data().empty()) { | 556 if (!input.extra_data().empty()) { |
558 config->extra_data = mojo::Array<uint8_t>::From(input.extra_data()); | 557 config->extra_data = mojo::Array<uint8_t>::From(input.extra_data()); |
559 } | 558 } |
560 config->encryption_scheme = | 559 config->encryption_scheme = |
561 media::mojom::EncryptionScheme::From(input.encryption_scheme()); | 560 media::mojom::EncryptionScheme::From(input.encryption_scheme()); |
562 return config; | 561 return config; |
563 } | 562 } |
564 | 563 |
565 // static | 564 // static |
566 media::VideoDecoderConfig | 565 media::VideoDecoderConfig |
567 TypeConverter<media::VideoDecoderConfig, media::mojom::VideoDecoderConfigPtr>:: | 566 TypeConverter<media::VideoDecoderConfig, media::mojom::VideoDecoderConfigPtr>:: |
568 Convert(const media::mojom::VideoDecoderConfigPtr& input) { | 567 Convert(const media::mojom::VideoDecoderConfigPtr& input) { |
569 media::VideoDecoderConfig config; | 568 media::VideoDecoderConfig config; |
570 config.Initialize( | 569 config.Initialize(static_cast<media::VideoCodec>(input->codec), |
571 static_cast<media::VideoCodec>(input->codec), | 570 static_cast<media::VideoCodecProfile>(input->profile), |
572 static_cast<media::VideoCodecProfile>(input->profile), | 571 static_cast<media::VideoPixelFormat>(input->format), |
573 static_cast<media::VideoPixelFormat>(input->format), | 572 static_cast<media::ColorSpace>(input->color_space), |
574 static_cast<media::ColorSpace>(input->color_space), | 573 input->coded_size, input->visible_rect, input->natural_size, |
575 input->coded_size.To<gfx::Size>(), input->visible_rect.To<gfx::Rect>(), | 574 input->extra_data.storage(), |
576 input->natural_size.To<gfx::Size>(), input->extra_data.storage(), | 575 input->encryption_scheme.To<media::EncryptionScheme>()); |
577 input->encryption_scheme.To<media::EncryptionScheme>()); | |
578 return config; | 576 return config; |
579 } | 577 } |
580 | 578 |
581 // static | 579 // static |
582 media::mojom::CdmKeyInformationPtr TypeConverter< | 580 media::mojom::CdmKeyInformationPtr TypeConverter< |
583 media::mojom::CdmKeyInformationPtr, | 581 media::mojom::CdmKeyInformationPtr, |
584 media::CdmKeyInformation>::Convert(const media::CdmKeyInformation& input) { | 582 media::CdmKeyInformation>::Convert(const media::CdmKeyInformation& input) { |
585 media::mojom::CdmKeyInformationPtr info( | 583 media::mojom::CdmKeyInformationPtr info( |
586 media::mojom::CdmKeyInformation::New()); | 584 media::mojom::CdmKeyInformation::New()); |
587 std::vector<uint8_t> key_id_copy(input.key_id); | 585 std::vector<uint8_t> key_id_copy(input.key_id); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 input->storage_type()); | 686 input->storage_type()); |
689 media::MojoSharedBufferVideoFrame* input_frame = | 687 media::MojoSharedBufferVideoFrame* input_frame = |
690 static_cast<media::MojoSharedBufferVideoFrame*>(input.get()); | 688 static_cast<media::MojoSharedBufferVideoFrame*>(input.get()); |
691 mojo::ScopedSharedBufferHandle duplicated_handle; | 689 mojo::ScopedSharedBufferHandle duplicated_handle; |
692 const MojoResult result = | 690 const MojoResult result = |
693 DuplicateBuffer(input_frame->Handle(), nullptr, &duplicated_handle); | 691 DuplicateBuffer(input_frame->Handle(), nullptr, &duplicated_handle); |
694 CHECK_EQ(MOJO_RESULT_OK, result); | 692 CHECK_EQ(MOJO_RESULT_OK, result); |
695 CHECK(duplicated_handle.is_valid()); | 693 CHECK(duplicated_handle.is_valid()); |
696 | 694 |
697 frame->format = static_cast<media::mojom::VideoFormat>(input->format()); | 695 frame->format = static_cast<media::mojom::VideoFormat>(input->format()); |
698 frame->coded_size = Size::From(input->coded_size()); | 696 frame->coded_size = input->coded_size(); |
699 frame->visible_rect = Rect::From(input->visible_rect()); | 697 frame->visible_rect = input->visible_rect(); |
700 frame->natural_size = Size::From(input->natural_size()); | 698 frame->natural_size = input->natural_size(); |
701 frame->timestamp_usec = input->timestamp().InMicroseconds(); | 699 frame->timestamp_usec = input->timestamp().InMicroseconds(); |
702 frame->frame_data = std::move(duplicated_handle); | 700 frame->frame_data = std::move(duplicated_handle); |
703 frame->frame_data_size = input_frame->MappedSize(); | 701 frame->frame_data_size = input_frame->MappedSize(); |
704 frame->y_stride = input_frame->stride(media::VideoFrame::kYPlane); | 702 frame->y_stride = input_frame->stride(media::VideoFrame::kYPlane); |
705 frame->u_stride = input_frame->stride(media::VideoFrame::kUPlane); | 703 frame->u_stride = input_frame->stride(media::VideoFrame::kUPlane); |
706 frame->v_stride = input_frame->stride(media::VideoFrame::kVPlane); | 704 frame->v_stride = input_frame->stride(media::VideoFrame::kVPlane); |
707 frame->y_offset = input_frame->PlaneOffset(media::VideoFrame::kYPlane); | 705 frame->y_offset = input_frame->PlaneOffset(media::VideoFrame::kYPlane); |
708 frame->u_offset = input_frame->PlaneOffset(media::VideoFrame::kUPlane); | 706 frame->u_offset = input_frame->PlaneOffset(media::VideoFrame::kUPlane); |
709 frame->v_offset = input_frame->PlaneOffset(media::VideoFrame::kVPlane); | 707 frame->v_offset = input_frame->PlaneOffset(media::VideoFrame::kVPlane); |
710 return frame; | 708 return frame; |
711 } | 709 } |
712 | 710 |
713 // static | 711 // static |
714 scoped_refptr<media::VideoFrame> | 712 scoped_refptr<media::VideoFrame> |
715 TypeConverter<scoped_refptr<media::VideoFrame>, media::mojom::VideoFramePtr>:: | 713 TypeConverter<scoped_refptr<media::VideoFrame>, media::mojom::VideoFramePtr>:: |
716 Convert(const media::mojom::VideoFramePtr& input) { | 714 Convert(const media::mojom::VideoFramePtr& input) { |
717 if (input->end_of_stream) | 715 if (input->end_of_stream) |
718 return media::VideoFrame::CreateEOSFrame(); | 716 return media::VideoFrame::CreateEOSFrame(); |
719 | 717 |
720 return media::MojoSharedBufferVideoFrame::Create( | 718 return media::MojoSharedBufferVideoFrame::Create( |
721 static_cast<media::VideoPixelFormat>(input->format), | 719 static_cast<media::VideoPixelFormat>(input->format), input->coded_size, |
722 input->coded_size.To<gfx::Size>(), input->visible_rect.To<gfx::Rect>(), | 720 input->visible_rect, input->natural_size, std::move(input->frame_data), |
723 input->natural_size.To<gfx::Size>(), std::move(input->frame_data), | |
724 base::saturated_cast<size_t>(input->frame_data_size), | 721 base::saturated_cast<size_t>(input->frame_data_size), |
725 base::saturated_cast<size_t>(input->y_offset), | 722 base::saturated_cast<size_t>(input->y_offset), |
726 base::saturated_cast<size_t>(input->u_offset), | 723 base::saturated_cast<size_t>(input->u_offset), |
727 base::saturated_cast<size_t>(input->v_offset), input->y_stride, | 724 base::saturated_cast<size_t>(input->v_offset), input->y_stride, |
728 input->u_stride, input->v_stride, | 725 input->u_stride, input->v_stride, |
729 base::TimeDelta::FromMicroseconds(input->timestamp_usec)); | 726 base::TimeDelta::FromMicroseconds(input->timestamp_usec)); |
730 } | 727 } |
731 | 728 |
732 } // namespace mojo | 729 } // namespace mojo |
OLD | NEW |