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/decoder_buffer.h" | 18 #include "media/base/decoder_buffer.h" |
18 #include "media/base/decrypt_config.h" | 19 #include "media/base/decrypt_config.h" |
19 #include "media/base/decryptor.h" | 20 #include "media/base/decryptor.h" |
20 #include "media/base/demuxer_stream.h" | 21 #include "media/base/demuxer_stream.h" |
21 #include "media/base/encryption_scheme.h" | 22 #include "media/base/encryption_scheme.h" |
22 #include "media/base/media_keys.h" | 23 #include "media/base/media_keys.h" |
23 #include "media/base/video_decoder_config.h" | 24 #include "media/base/video_decoder_config.h" |
24 #include "media/base/video_frame.h" | 25 #include "media/base/video_frame.h" |
25 #include "media/mojo/common/mojo_shared_buffer_video_frame.h" | 26 #include "media/mojo/common/mojo_shared_buffer_video_frame.h" |
26 #include "media/mojo/interfaces/demuxer_stream.mojom.h" | 27 #include "media/mojo/interfaces/demuxer_stream.mojom.h" |
27 #include "mojo/converters/geometry/geometry_type_converters.h" | 28 #include "mojo/converters/geometry/geometry_type_converters.h" |
28 #include "mojo/public/cpp/system/buffer.h" | 29 #include "mojo/public/cpp/system/buffer.h" |
29 | 30 |
30 namespace mojo { | 31 namespace mojo { |
31 | 32 |
32 #define ASSERT_ENUM_EQ(media_enum, media_prefix, mojo_prefix, value) \ | 33 #define ASSERT_ENUM_EQ(media_enum, media_prefix, mojo_prefix, value) \ |
33 static_assert(media::media_prefix##value == \ | 34 static_assert(media::media_prefix##value == \ |
34 static_cast<media::media_enum>( \ | 35 static_cast<media::media_enum>( \ |
35 media::mojom::media_enum::mojo_prefix##value), \ | 36 media::mojom::media_enum::mojo_prefix##value), \ |
36 "Mismatched enum: " #media_prefix #value " != " #media_enum \ | 37 "Mismatched enum: " #media_prefix #value " != " #media_enum \ |
37 "::" #mojo_prefix #value) | 38 "::" #mojo_prefix #value) |
38 | 39 |
39 #define ASSERT_ENUM_EQ_RAW(media_enum, media_enum_value, mojo_enum_value) \ | 40 #define ASSERT_ENUM_EQ_RAW(media_enum, media_enum_value, mojo_enum_value) \ |
40 static_assert(media::media_enum_value == static_cast<media::media_enum>( \ | 41 static_assert(media::media_enum_value == static_cast<media::media_enum>( \ |
41 media::mojom::mojo_enum_value), \ | 42 media::mojom::mojo_enum_value), \ |
42 "Mismatched enum: " #media_enum_value " != " #mojo_enum_value) | 43 "Mismatched enum: " #media_enum_value " != " #mojo_enum_value) |
43 | 44 |
45 #define ASSERT_ENUM_CLASS_EQ(media_enum, value) \ | |
46 static_assert( \ | |
47 media::media_enum::value == \ | |
48 static_cast<media::media_enum>(media::mojom::media_enum::value), \ | |
49 "Mismatched enum: " #media_enum #value) | |
50 | |
44 // BufferingState. | 51 // BufferingState. |
45 ASSERT_ENUM_EQ(BufferingState, BUFFERING_, , HAVE_NOTHING); | 52 ASSERT_ENUM_EQ(BufferingState, BUFFERING_, , HAVE_NOTHING); |
46 ASSERT_ENUM_EQ(BufferingState, BUFFERING_, , HAVE_ENOUGH); | 53 ASSERT_ENUM_EQ(BufferingState, BUFFERING_, , HAVE_ENOUGH); |
47 | 54 |
55 // DecodeStatus. | |
56 ASSERT_ENUM_CLASS_EQ(DecodeStatus, OK); | |
57 ASSERT_ENUM_CLASS_EQ(DecodeStatus, ABORTED); | |
58 ASSERT_ENUM_CLASS_EQ(DecodeStatus, DECODE_ERROR); | |
59 | |
48 // AudioCodec. | 60 // AudioCodec. |
49 ASSERT_ENUM_EQ_RAW(AudioCodec, kUnknownAudioCodec, AudioCodec::UNKNOWN); | 61 ASSERT_ENUM_EQ_RAW(AudioCodec, kUnknownAudioCodec, AudioCodec::UNKNOWN); |
50 ASSERT_ENUM_EQ(AudioCodec, kCodec, , AAC); | 62 ASSERT_ENUM_EQ(AudioCodec, kCodec, , AAC); |
51 ASSERT_ENUM_EQ(AudioCodec, kCodec, , MP3); | 63 ASSERT_ENUM_EQ(AudioCodec, kCodec, , MP3); |
52 ASSERT_ENUM_EQ(AudioCodec, kCodec, , PCM); | 64 ASSERT_ENUM_EQ(AudioCodec, kCodec, , PCM); |
53 ASSERT_ENUM_EQ(AudioCodec, kCodec, , Vorbis); | 65 ASSERT_ENUM_EQ(AudioCodec, kCodec, , Vorbis); |
54 ASSERT_ENUM_EQ(AudioCodec, kCodec, , FLAC); | 66 ASSERT_ENUM_EQ(AudioCodec, kCodec, , FLAC); |
55 ASSERT_ENUM_EQ(AudioCodec, kCodec, , AMR_NB); | 67 ASSERT_ENUM_EQ(AudioCodec, kCodec, , AMR_NB); |
56 ASSERT_ENUM_EQ(AudioCodec, kCodec, , PCM_MULAW); | 68 ASSERT_ENUM_EQ(AudioCodec, kCodec, , PCM_MULAW); |
57 ASSERT_ENUM_EQ(AudioCodec, kCodec, , GSM_MS); | 69 ASSERT_ENUM_EQ(AudioCodec, kCodec, , GSM_MS); |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
420 | 432 |
421 media::mojom::DecoderBufferPtr mojo_buffer( | 433 media::mojom::DecoderBufferPtr mojo_buffer( |
422 media::mojom::DecoderBuffer::New()); | 434 media::mojom::DecoderBuffer::New()); |
423 if (input->end_of_stream()) | 435 if (input->end_of_stream()) |
424 return mojo_buffer; | 436 return mojo_buffer; |
425 | 437 |
426 mojo_buffer->timestamp_usec = input->timestamp().InMicroseconds(); | 438 mojo_buffer->timestamp_usec = input->timestamp().InMicroseconds(); |
427 mojo_buffer->duration_usec = input->duration().InMicroseconds(); | 439 mojo_buffer->duration_usec = input->duration().InMicroseconds(); |
428 mojo_buffer->is_key_frame = input->is_key_frame(); | 440 mojo_buffer->is_key_frame = input->is_key_frame(); |
429 mojo_buffer->data_size = base::checked_cast<uint32_t>(input->data_size()); | 441 mojo_buffer->data_size = base::checked_cast<uint32_t>(input->data_size()); |
430 mojo_buffer->side_data_size = | |
431 base::checked_cast<uint32_t>(input->side_data_size()); | |
dcheng
2016/05/20 21:18:22
Can we wholly remove this field from the mojom in
sandersd (OOO until July 31)
2016/05/20 22:27:14
I already did that; was this comment intended for
dcheng
2016/05/20 22:52:59
Oops, I missed that.
| |
432 mojo_buffer->front_discard_usec = | 442 mojo_buffer->front_discard_usec = |
433 input->discard_padding().first.InMicroseconds(); | 443 input->discard_padding().first.InMicroseconds(); |
434 mojo_buffer->back_discard_usec = | 444 mojo_buffer->back_discard_usec = |
435 input->discard_padding().second.InMicroseconds(); | 445 input->discard_padding().second.InMicroseconds(); |
436 mojo_buffer->splice_timestamp_usec = | 446 mojo_buffer->splice_timestamp_usec = |
437 input->splice_timestamp().InMicroseconds(); | 447 input->splice_timestamp().InMicroseconds(); |
438 | 448 |
439 // Note: The side data is always small, so this copy is okay. | 449 // Note: The side data is always small, so this copy is okay. |
440 std::vector<uint8_t> side_data(input->side_data(), | 450 std::vector<uint8_t> side_data(input->side_data(), |
441 input->side_data() + input->side_data_size()); | 451 input->side_data() + input->side_data_size()); |
(...skipping 14 matching lines...) Expand all Loading... | |
456 // static | 466 // static |
457 scoped_refptr<media::DecoderBuffer> | 467 scoped_refptr<media::DecoderBuffer> |
458 TypeConverter<scoped_refptr<media::DecoderBuffer>, | 468 TypeConverter<scoped_refptr<media::DecoderBuffer>, |
459 media::mojom::DecoderBufferPtr>:: | 469 media::mojom::DecoderBufferPtr>:: |
460 Convert(const media::mojom::DecoderBufferPtr& input) { | 470 Convert(const media::mojom::DecoderBufferPtr& input) { |
461 if (!input->data_size) | 471 if (!input->data_size) |
462 return media::DecoderBuffer::CreateEOSBuffer(); | 472 return media::DecoderBuffer::CreateEOSBuffer(); |
463 | 473 |
464 scoped_refptr<media::DecoderBuffer> buffer( | 474 scoped_refptr<media::DecoderBuffer> buffer( |
465 new media::DecoderBuffer(input->data_size)); | 475 new media::DecoderBuffer(input->data_size)); |
466 if (input->side_data_size) | 476 |
467 buffer->CopySideDataFrom(&input->side_data.front(), input->side_data_size); | 477 buffer->CopySideDataFrom(&input->side_data.front(), input->side_data.size()); |
dcheng
2016/05/20 21:18:22
Existing semantics don't copy this data if it's ze
sandersd (OOO until July 31)
2016/05/20 22:27:14
That's correct, the media::DecoderBuffer structure
| |
468 | 478 |
469 buffer->set_timestamp( | 479 buffer->set_timestamp( |
470 base::TimeDelta::FromMicroseconds(input->timestamp_usec)); | 480 base::TimeDelta::FromMicroseconds(input->timestamp_usec)); |
471 buffer->set_duration(base::TimeDelta::FromMicroseconds(input->duration_usec)); | 481 buffer->set_duration(base::TimeDelta::FromMicroseconds(input->duration_usec)); |
472 | 482 |
473 if (input->is_key_frame) | 483 if (input->is_key_frame) |
474 buffer->set_is_key_frame(true); | 484 buffer->set_is_key_frame(true); |
475 | 485 |
476 if (input->decrypt_config) { | 486 if (input->decrypt_config) { |
477 buffer->set_decrypt_config( | 487 buffer->set_decrypt_config( |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
713 input->natural_size.To<gfx::Size>(), std::move(input->frame_data), | 723 input->natural_size.To<gfx::Size>(), std::move(input->frame_data), |
714 base::saturated_cast<size_t>(input->frame_data_size), | 724 base::saturated_cast<size_t>(input->frame_data_size), |
715 base::saturated_cast<size_t>(input->y_offset), | 725 base::saturated_cast<size_t>(input->y_offset), |
716 base::saturated_cast<size_t>(input->u_offset), | 726 base::saturated_cast<size_t>(input->u_offset), |
717 base::saturated_cast<size_t>(input->v_offset), input->y_stride, | 727 base::saturated_cast<size_t>(input->v_offset), input->y_stride, |
718 input->u_stride, input->v_stride, | 728 input->u_stride, input->v_stride, |
719 base::TimeDelta::FromMicroseconds(input->timestamp_usec)); | 729 base::TimeDelta::FromMicroseconds(input->timestamp_usec)); |
720 } | 730 } |
721 | 731 |
722 } // namespace mojo | 732 } // namespace mojo |
OLD | NEW |