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

Side by Side Diff: media/mojo/common/media_type_converters.cc

Issue 1899363002: Finish plumbing MojoVideoDecoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove CHECKs on GPU side. Created 4 years, 7 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698