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

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

Issue 2544113002: Example MojoVideoDecoder decoder using the command buffer.
Patch Set: Created 4 years 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 2016 The Chromium Authors. All rights reserved. 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 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/services/mojo_video_decoder_service.h" 5 #include "media/mojo/services/mojo_video_decoder_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 13 matching lines...) Expand all
24 MojoVideoDecoderService::MojoVideoDecoderService( 24 MojoVideoDecoderService::MojoVideoDecoderService(
25 MojoMediaClient* mojo_media_client) 25 MojoMediaClient* mojo_media_client)
26 : mojo_media_client_(mojo_media_client), weak_factory_(this) { 26 : mojo_media_client_(mojo_media_client), weak_factory_(this) {
27 weak_this_ = weak_factory_.GetWeakPtr(); 27 weak_this_ = weak_factory_.GetWeakPtr();
28 } 28 }
29 29
30 MojoVideoDecoderService::~MojoVideoDecoderService() {} 30 MojoVideoDecoderService::~MojoVideoDecoderService() {}
31 31
32 void MojoVideoDecoderService::Construct( 32 void MojoVideoDecoderService::Construct(
33 mojom::VideoDecoderClientAssociatedPtrInfo client, 33 mojom::VideoDecoderClientAssociatedPtrInfo client,
34 mojo::ScopedDataPipeConsumerHandle decoder_buffer_pipe) { 34 mojo::ScopedDataPipeConsumerHandle decoder_buffer_pipe,
35 DVLOG(1) << __FUNCTION__; 35 mojom::CommandBufferIdPtr command_buffer_id) {
36 DVLOG(1) << __func__;
36 37
38 // TODO(sandersd): Enter an error state.
37 if (decoder_) 39 if (decoder_)
38 return; 40 return;
39 41
40 // TODO(sandersd): Provide callback for requesting a GpuCommandBufferStub.
41 decoder_ = mojo_media_client_->CreateVideoDecoder( 42 decoder_ = mojo_media_client_->CreateVideoDecoder(
42 base::ThreadTaskRunnerHandle::Get()); 43 base::ThreadTaskRunnerHandle::Get(), std::move(command_buffer_id));
43 44
44 client_.Bind(std::move(client)); 45 client_.Bind(std::move(client));
45 46
46 mojo_decoder_buffer_reader_.reset( 47 mojo_decoder_buffer_reader_.reset(
47 new MojoDecoderBufferReader(std::move(decoder_buffer_pipe))); 48 new MojoDecoderBufferReader(std::move(decoder_buffer_pipe)));
48 } 49 }
49 50
50 void MojoVideoDecoderService::Initialize(mojom::VideoDecoderConfigPtr config, 51 void MojoVideoDecoderService::Initialize(mojom::VideoDecoderConfigPtr config,
51 bool low_delay, 52 bool low_delay,
52 const InitializeCallback& callback) { 53 const InitializeCallback& callback) {
53 DVLOG(1) << __FUNCTION__; 54 DVLOG(1) << __func__;
54 55
55 if (!decoder_) { 56 if (!decoder_) {
56 callback.Run(false, false, 1); 57 callback.Run(false, false, 1);
57 return; 58 return;
58 } 59 }
59 60
60 decoder_->Initialize( 61 decoder_->Initialize(
61 config.To<VideoDecoderConfig>(), low_delay, nullptr, 62 config.To<VideoDecoderConfig>(), low_delay, nullptr,
62 base::Bind(&MojoVideoDecoderService::OnDecoderInitialized, weak_this_, 63 base::Bind(&MojoVideoDecoderService::OnDecoderInitialized, weak_this_,
63 callback), 64 callback),
64 base::Bind(&MojoVideoDecoderService::OnDecoderOutput, weak_this_)); 65 base::Bind(&MojoVideoDecoderService::OnDecoderOutput, weak_this_));
65 } 66 }
66 67
67 void MojoVideoDecoderService::Decode(mojom::DecoderBufferPtr buffer, 68 void MojoVideoDecoderService::Decode(mojom::DecoderBufferPtr buffer,
68 const DecodeCallback& callback) { 69 const DecodeCallback& callback) {
69 DVLOG(2) << __FUNCTION__; 70 DVLOG(2) << __func__;
70 71
71 if (!decoder_) { 72 if (!decoder_) {
72 callback.Run(DecodeStatus::DECODE_ERROR); 73 callback.Run(DecodeStatus::DECODE_ERROR);
73 return; 74 return;
74 } 75 }
75 76
76 mojo_decoder_buffer_reader_->ReadDecoderBuffer( 77 mojo_decoder_buffer_reader_->ReadDecoderBuffer(
77 std::move(buffer), base::BindOnce(&MojoVideoDecoderService::OnDecoderRead, 78 std::move(buffer), base::BindOnce(&MojoVideoDecoderService::OnDecoderRead,
78 weak_this_, callback)); 79 weak_this_, callback));
79 } 80 }
80 81
81 void MojoVideoDecoderService::Reset(const ResetCallback& callback) { 82 void MojoVideoDecoderService::Reset(const ResetCallback& callback) {
82 DVLOG(1) << __FUNCTION__; 83 DVLOG(1) << __func__;
83 84
84 if (!decoder_) { 85 if (!decoder_) {
85 callback.Run(); 86 callback.Run();
86 return; 87 return;
87 } 88 }
88 89
89 decoder_->Reset(base::Bind(&MojoVideoDecoderService::OnDecoderReset, 90 decoder_->Reset(base::Bind(&MojoVideoDecoderService::OnDecoderReset,
90 weak_this_, callback)); 91 weak_this_, callback));
91 } 92 }
92 93
93 void MojoVideoDecoderService::OnDecoderInitialized( 94 void MojoVideoDecoderService::OnDecoderInitialized(
94 const InitializeCallback& callback, 95 const InitializeCallback& callback,
95 bool success) { 96 bool success) {
96 DVLOG(1) << __FUNCTION__; 97 DVLOG(1) << __func__;
97 DCHECK(decoder_); 98 DCHECK(decoder_);
98 callback.Run(success, decoder_->NeedsBitstreamConversion(), 99 callback.Run(success, decoder_->NeedsBitstreamConversion(),
99 decoder_->GetMaxDecodeRequests()); 100 decoder_->GetMaxDecodeRequests());
100 } 101 }
101 102
102 void MojoVideoDecoderService::OnDecoderRead( 103 void MojoVideoDecoderService::OnDecoderRead(
103 const DecodeCallback& callback, 104 const DecodeCallback& callback,
104 scoped_refptr<DecoderBuffer> buffer) { 105 scoped_refptr<DecoderBuffer> buffer) {
105 // TODO(sandersd): After a decode error, we should enter an error state and 106 // TODO(sandersd): After a decode error, we should enter an error state and
106 // reject all future method calls. 107 // reject all future method calls.
107 if (!buffer) { 108 if (!buffer) {
108 callback.Run(DecodeStatus::DECODE_ERROR); 109 callback.Run(DecodeStatus::DECODE_ERROR);
109 return; 110 return;
110 } 111 }
111 112
112 decoder_->Decode( 113 decoder_->Decode(
113 buffer, base::Bind(&MojoVideoDecoderService::OnDecoderDecoded, weak_this_, 114 buffer, base::Bind(&MojoVideoDecoderService::OnDecoderDecoded, weak_this_,
114 callback)); 115 callback));
115 } 116 }
116 117
117 void MojoVideoDecoderService::OnDecoderDecoded(const DecodeCallback& callback, 118 void MojoVideoDecoderService::OnDecoderDecoded(const DecodeCallback& callback,
118 DecodeStatus status) { 119 DecodeStatus status) {
119 DVLOG(2) << __FUNCTION__; 120 DVLOG(2) << __func__;
120 DCHECK(decoder_); 121 DCHECK(decoder_);
121 DCHECK(decoder_->CanReadWithoutStalling()); 122 DCHECK(decoder_->CanReadWithoutStalling());
122 callback.Run(status); 123 callback.Run(status);
123 } 124 }
124 125
125 void MojoVideoDecoderService::OnDecoderReset(const ResetCallback& callback) { 126 void MojoVideoDecoderService::OnDecoderReset(const ResetCallback& callback) {
126 DVLOG(1) << __FUNCTION__; 127 DVLOG(1) << __func__;
127 callback.Run(); 128 callback.Run();
128 } 129 }
129 130
130 void MojoVideoDecoderService::OnDecoderOutput( 131 void MojoVideoDecoderService::OnDecoderOutput(
131 const scoped_refptr<VideoFrame>& frame) { 132 const scoped_refptr<VideoFrame>& frame) {
132 DVLOG(2) << __FUNCTION__; 133 DVLOG(2) << __func__;
133 DCHECK(client_); 134 DCHECK(client_);
134 client_->OnVideoFrameDecoded(mojom::VideoFrame::From(frame)); 135 client_->OnVideoFrameDecoded(mojom::VideoFrame::From(frame));
135 } 136 }
136 137
137 } // namespace media 138 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/mojo_video_decoder_service.h ('k') | media/renderers/gpu_video_accelerator_factories.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698