15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/media_stream_audio_track.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/ppb_media_stream_audio_track.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/audio_buffer.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/module_impl.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/var.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace pp { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)template <> const char* interface_name<PPB_MediaStreamAudioTrack_0_1>() { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return PPB_MEDIASTREAMAUDIOTRACK_INTERFACE_0_1; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaStreamAudioTrack::MediaStreamAudioTrack() { 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaStreamAudioTrack::MediaStreamAudioTrack( 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MediaStreamAudioTrack& other) : Resource(other) { 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaStreamAudioTrack::MediaStreamAudioTrack(const Resource& resource) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : Resource(resource) { 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PP_DCHECK(IsMediaStreamAudioTrack(resource)); 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaStreamAudioTrack::MediaStreamAudioTrack(PassRef, PP_Resource resource) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : Resource(PASS_REF, resource) { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaStreamAudioTrack::~MediaStreamAudioTrack() { 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t MediaStreamAudioTrack::Configure( 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const int32_t attributes[], 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const CompletionCallback& callback) { 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return get_interface<PPB_MediaStreamAudioTrack_0_1>()->Configure( 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp_resource(), attributes, callback.pp_completion_callback()); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return callback.MayForce(PP_ERROR_NOINTERFACE); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t MediaStreamAudioTrack::GetAttrib(PP_MediaStreamAudioTrack_Attrib attrib, 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int32_t* value) { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return get_interface<PPB_MediaStreamAudioTrack_0_1>()->GetAttrib( 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp_resource(), attrib, value); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return PP_ERROR_NOINTERFACE; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string MediaStreamAudioTrack::GetId() const { 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp::Var id(PASS_REF, get_interface<PPB_MediaStreamAudioTrack_0_1>()->GetId( 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp_resource())); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (id.is_string()) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return id.AsString(); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return std::string(); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool MediaStreamAudioTrack::HasEnded() const { 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return PP_ToBool(get_interface<PPB_MediaStreamAudioTrack_0_1>()->HasEnded( 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp_resource())); 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t MediaStreamAudioTrack::GetBuffer( 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const CompletionCallbackWithOutput<AudioBuffer>& callback) { 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return get_interface<PPB_MediaStreamAudioTrack_0_1>()->GetBuffer( 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp_resource(), callback.output(), callback.pp_completion_callback()); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return callback.MayForce(PP_ERROR_NOINTERFACE); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t MediaStreamAudioTrack::RecycleBuffer(const AudioBuffer& buffer) { 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return get_interface<PPB_MediaStreamAudioTrack_0_1>()->RecycleBuffer( 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp_resource(), buffer.pp_resource()); 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return PP_ERROR_NOINTERFACE; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MediaStreamAudioTrack::Close() { 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) get_interface<PPB_MediaStreamAudioTrack_0_1>()->Close(pp_resource()); 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool MediaStreamAudioTrack::IsMediaStreamAudioTrack(const Resource& resource) { 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (has_interface<PPB_MediaStreamAudioTrack_0_1>()) { 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return PP_ToBool(get_interface<PPB_MediaStreamAudioTrack_0_1>()-> 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsMediaStreamAudioTrack(resource.pp_resource())); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace pp 112