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

Side by Side Diff: media/mojo/services/mojo_video_decoder_service.cc

Issue 1899363002: Finish plumbing MojoVideoDecoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/mojo/services/mojo_video_decoder_service.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/logging.h"
10 #include "media/base/decoder_buffer.h"
11 #include "media/base/video_decoder.h"
12 #include "media/base/video_decoder_config.h"
13 #include "media/mojo/common/media_type_converters.h"
14 #include "media/mojo/services/mojo_media_client.h"
15
16 namespace media {
17
18 MojoVideoDecoderService::MojoVideoDecoderService(
19 mojo::InterfaceRequest<interfaces::VideoDecoder> request,
20 MojoMediaClient* mojo_media_client)
21 : binding_(this, std::move(request)),
22 mojo_media_client_(mojo_media_client),
23 weak_factory_(this) {
24 weak_this_ = weak_factory_.GetWeakPtr();
25 }
26
27 MojoVideoDecoderService::~MojoVideoDecoderService() {}
28
29 void MojoVideoDecoderService::Initialize(
30 interfaces::VideoDecoderClientPtr client,
31 mojo::ScopedDataPipeConsumerHandle decoder_buffer_consumer) {
32 DVLOG(1) << __FUNCTION__;
33 CHECK(!decoder_);
34
35 // TODO(sandersd): Handle nullptr (by killing the connection).
36 decoder_ = mojo_media_client_->CreateVideoDecoder();
37
38 client_ = std::move(client);
39 decoder_buffer_consumer_ = std::move(decoder_buffer_consumer);
40 }
41
42 void MojoVideoDecoderService::Configure(
43 interfaces::VideoDecoderConfigPtr config,
44 bool low_delay,
45 const ConfigureCallback& callback) {
46 DVLOG(1) << __FUNCTION__;
47 CHECK(decoder_);
48
49 VideoDecoderConfig media_config = config.To<VideoDecoderConfig>();
50
51 // decoder_->Initialize(media_config, low_delay, nullptr, ?, ?)
52 callback.Run();
53 }
54
55 void MojoVideoDecoderService::Decode(interfaces::DecoderBufferPtr buffer,
56 const DecodeCallback& callback) {
57 DVLOG(1) << __FUNCTION__;
58 CHECK(decoder_);
59
60 scoped_refptr<DecoderBuffer> media_buffer(
61 buffer.To<scoped_refptr<DecoderBuffer>>());
62 if (!media_buffer->end_of_stream()) {
63 MojoHandleSignalsState state;
64 CHECK_EQ(
65 MojoWait(decoder_buffer_consumer_.get().value(),
66 MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE, &state),
67 MOJO_RESULT_OK);
68 CHECK_EQ(state.satisfied_signals, MOJO_HANDLE_SIGNAL_READABLE);
69 uint32_t data_size =
70 base::checked_cast<uint32_t>(media_buffer->data_size());
71 DCHECK_GT(data_size, 0u);
72 uint32_t bytes_read = data_size;
73 CHECK_EQ(ReadDataRaw(decoder_buffer_consumer_.get(),
74 media_buffer->writable_data(), &bytes_read,
75 MOJO_READ_DATA_FLAG_ALL_OR_NONE),
76 MOJO_RESULT_OK);
77 CHECK_EQ(bytes_read, data_size);
78 }
79
80 // decoder_->Decode(media_buffer, ?);
81 callback.Run(interfaces::DecodeStatus::OK);
82 }
83
84 void MojoVideoDecoderService::Reset(const ResetCallback& callback) {
85 DVLOG(1) << __FUNCTION__;
86 CHECK(decoder_);
87 // decoder_->Reset(?);
88 callback.Run();
89 }
90
91 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698