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 3 // found in the LICENSE file. 4 5 #ifndef PPAPI_PROXY_MEDIA_STREAM_AUDIO_TRACK_RESOURCE_H_ 6 #define PPAPI_PROXY_MEDIA_STREAM_AUDIO_TRACK_RESOURCE_H_ 7 8 #include <stdint.h> 9 10 #include <map> 11 #include <string> 12 13 #include "base/macros.h" 14 #include "base/memory/ref_counted.h" 15 #include "ppapi/proxy/media_stream_track_resource_base.h" 16 #include "ppapi/proxy/ppapi_proxy_export.h" 17 #include "ppapi/thunk/ppb_media_stream_audio_track_api.h" 18 19 namespace ppapi { 20 namespace proxy { 21 22 class AudioBufferResource; 23 24 class PPAPI_PROXY_EXPORT MediaStreamAudioTrackResource 25 : public MediaStreamTrackResourceBase, 26 public thunk::PPB_MediaStreamAudioTrack_API { 27 public: 28 MediaStreamAudioTrackResource(Connection connection, 29 PP_Instance instance, 30 int pending_renderer_id, 31 const std::string& id); 32 33 ~MediaStreamAudioTrackResource() override; 34 35 // Resource overrides: 36 thunk::PPB_MediaStreamAudioTrack_API* AsPPB_MediaStreamAudioTrack_API() 37 override; 38 39 // PPB_MediaStreamAudioTrack_API overrides: 40 PP_Var GetId() override; 41 PP_Bool HasEnded() override; 42 int32_t Configure(const int32_t attrib_list[], 43 scoped_refptr<TrackedCallback> callback) override; 44 int32_t GetAttrib(PP_MediaStreamAudioTrack_Attrib attrib, 45 int32_t* value) override; 46 int32_t GetBuffer(PP_Resource* buffer, 47 scoped_refptr<TrackedCallback> callback) override; 48 int32_t RecycleBuffer(PP_Resource buffer) override; 49 void Close() override; 50 51 // MediaStreamBufferManager::Delegate overrides: 52 void OnNewBufferEnqueued() override; 53 54 private: 55 PP_Resource GetAudioBuffer(); 56 57 void ReleaseBuffers(); 58 59 // IPC message handlers. 60 void OnPluginMsgConfigureReply(const ResourceMessageReplyParams& params); 61 62 // Allocated buffer resources by |GetBuffer()|. 63 typedef std::map<PP_Resource, scoped_refptr<AudioBufferResource> > BufferMap; 64 BufferMap buffers_; 65 66 PP_Resource* get_buffer_output_; 67 68 scoped_refptr<TrackedCallback> configure_callback_; 69 70 scoped_refptr<TrackedCallback> get_buffer_callback_; 71 72 DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioTrackResource); 73 }; 74 75 } // namespace proxy 76 } // namespace ppapi 77 78 #endif // PPAPI_PROXY_MEDIA_STREAM_AUDIO_TRACK_RESOURCE_H_ 79