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

Side by Side Diff: ppapi/proxy/media_stream_audio_track_resource.cc

Issue 290993005: Support configuring number of audio buffers in MediaStream Pepper API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 "ppapi/proxy/media_stream_audio_track_resource.h" 5 #include "ppapi/proxy/media_stream_audio_track_resource.h"
6 6
7 #include "ppapi/proxy/audio_buffer_resource.h" 7 #include "ppapi/proxy/audio_buffer_resource.h"
8 #include "ppapi/proxy/ppapi_messages.h"
9 #include "ppapi/shared_impl/media_stream_audio_track_shared.h"
8 #include "ppapi/shared_impl/media_stream_buffer.h" 10 #include "ppapi/shared_impl/media_stream_buffer.h"
9 #include "ppapi/shared_impl/var.h" 11 #include "ppapi/shared_impl/var.h"
10 12
11 namespace ppapi { 13 namespace ppapi {
12 namespace proxy { 14 namespace proxy {
13 15
14 MediaStreamAudioTrackResource::MediaStreamAudioTrackResource( 16 MediaStreamAudioTrackResource::MediaStreamAudioTrackResource(
15 Connection connection, 17 Connection connection,
16 PP_Instance instance, 18 PP_Instance instance,
17 int pending_renderer_id, 19 int pending_renderer_id,
(...skipping 13 matching lines...) Expand all
31 } 33 }
32 34
33 PP_Var MediaStreamAudioTrackResource::GetId() { 35 PP_Var MediaStreamAudioTrackResource::GetId() {
34 return StringVar::StringToPPVar(id()); 36 return StringVar::StringToPPVar(id());
35 } 37 }
36 38
37 PP_Bool MediaStreamAudioTrackResource::HasEnded() { 39 PP_Bool MediaStreamAudioTrackResource::HasEnded() {
38 return PP_FromBool(has_ended()); 40 return PP_FromBool(has_ended());
39 } 41 }
40 42
41 int32_t MediaStreamAudioTrackResource::Configure( 43 int32_t MediaStreamAudioTrackResource::Configure(
Peng 2014/05/26 14:48:49 Add browser test please. See ppapi/tests/test_medi
thembrown 2014/05/27 10:36:02 Done.
42 const int32_t attrib_list[], 44 const int32_t attrib_list[],
43 scoped_refptr<TrackedCallback> callback) { 45 scoped_refptr<TrackedCallback> callback) {
44 // TODO(penghuang): Implement this function. 46 if (has_ended())
45 return PP_ERROR_NOTSUPPORTED; 47 return PP_ERROR_FAILED;
48
49 if (TrackedCallback::IsPending(configure_callback_) ||
50 TrackedCallback::IsPending(get_buffer_callback_)) {
51 return PP_ERROR_INPROGRESS;
52 }
53
54 // Do not support configure, if audio buffers are hold by plugin.
55 if (!buffers_.empty())
56 return PP_ERROR_INPROGRESS;
57
58 MediaStreamAudioTrackShared::Attributes attributes;
59 int i = 0;
60 for (; attrib_list[i] != PP_MEDIASTREAMAUDIOTRACK_ATTRIB_NONE; i += 2) {
61 switch (attrib_list[i]) {
62 case PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS:
63 attributes.buffers = attrib_list[i + 1];
64 break;
65 case PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_RATE:
66 case PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_SIZE:
67 case PP_MEDIASTREAMAUDIOTRACK_ATTRIB_CHANNELS:
68 case PP_MEDIASTREAMAUDIOTRACK_ATTRIB_DURATION:
69 return PP_ERROR_NOTSUPPORTED;
70 default:
71 return PP_ERROR_BADARGUMENT;
72 }
73 }
74
75 if (!MediaStreamAudioTrackShared::VerifyAttributes(attributes))
76 return PP_ERROR_BADARGUMENT;
77
78 configure_callback_ = callback;
79 Call<PpapiPluginMsg_MediaStreamAudioTrack_ConfigureReply>(
80 RENDERER,
81 PpapiHostMsg_MediaStreamAudioTrack_Configure(attributes),
82 base::Bind(&MediaStreamAudioTrackResource::OnPluginMsgConfigureReply,
83 base::Unretained(this)),
84 callback);
85 return PP_OK_COMPLETIONPENDING;
46 } 86 }
47 87
48 int32_t MediaStreamAudioTrackResource::GetAttrib( 88 int32_t MediaStreamAudioTrackResource::GetAttrib(
49 PP_MediaStreamAudioTrack_Attrib attrib, 89 PP_MediaStreamAudioTrack_Attrib attrib,
50 int32_t* value) { 90 int32_t* value) {
51 // TODO(penghuang): Implement this function. 91 // TODO(penghuang): Implement this function.
52 return PP_ERROR_NOTSUPPORTED; 92 return PP_ERROR_NOTSUPPORTED;
53 } 93 }
54 94
55 int32_t MediaStreamAudioTrackResource::GetBuffer( 95 int32_t MediaStreamAudioTrackResource::GetBuffer(
56 PP_Resource* buffer, 96 PP_Resource* buffer,
57 scoped_refptr<TrackedCallback> callback) { 97 scoped_refptr<TrackedCallback> callback) {
58 if (has_ended()) 98 if (has_ended())
59 return PP_ERROR_FAILED; 99 return PP_ERROR_FAILED;
60 100
61 if (TrackedCallback::IsPending(get_buffer_callback_)) 101 if (TrackedCallback::IsPending(configure_callback_) ||
102 TrackedCallback::IsPending(get_buffer_callback_))
62 return PP_ERROR_INPROGRESS; 103 return PP_ERROR_INPROGRESS;
63 104
64 *buffer = GetAudioBuffer(); 105 *buffer = GetAudioBuffer();
65 if (*buffer) 106 if (*buffer)
66 return PP_OK; 107 return PP_OK;
67 108
68 // TODO(penghuang): Use the callback as hints to determine which thread will 109 // TODO(penghuang): Use the callback as hints to determine which thread will
69 // use the resource, so we could deliver buffers to the target thread directly 110 // use the resource, so we could deliver buffers to the target thread directly
70 // for better performance. 111 // for better performance.
71 get_buffer_output_ = buffer; 112 get_buffer_output_ = buffer;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 void MediaStreamAudioTrackResource::ReleaseBuffers() { 178 void MediaStreamAudioTrackResource::ReleaseBuffers() {
138 BufferMap::iterator it = buffers_.begin(); 179 BufferMap::iterator it = buffers_.begin();
139 while (it != buffers_.end()) { 180 while (it != buffers_.end()) {
140 // Just invalidate and release VideoBufferResorce, but keep PP_Resource. 181 // Just invalidate and release VideoBufferResorce, but keep PP_Resource.
141 // So plugin can still use |RecycleBuffer()|. 182 // So plugin can still use |RecycleBuffer()|.
142 it->second->Invalidate(); 183 it->second->Invalidate();
143 it->second = NULL; 184 it->second = NULL;
144 } 185 }
145 } 186 }
146 187
188 void MediaStreamAudioTrackResource::OnPluginMsgConfigureReply(
189 const ResourceMessageReplyParams& params) {
190 if (TrackedCallback::IsPending(configure_callback_)) {
191 scoped_refptr<TrackedCallback> callback;
192 callback.swap(configure_callback_);
193 callback->Run(params.result());
194 }
195 }
196
147 } // namespace proxy 197 } // namespace proxy
148 } // namespace ppapi 198 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698