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)// From ppb_media_stream_audio_track.idl modified Thu Feb  6 15:43:37 2014.
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/ppb_media_stream_audio_track.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/enter.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/ppapi_thunk_export.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/ppb_media_stream_audio_track_api.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ppapi {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace thunk {
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_Bool IsMediaStreamAudioTrack(PP_Resource resource) {
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::IsMediaStreamAudioTrack()";
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(resource, false);
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return PP_FromBool(enter.succeeded());
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t Configure(PP_Resource audio_track,
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  const int32_t attrib_list[],
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  struct PP_CompletionCallback callback) {
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::Configure()";
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track,
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                     callback,
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                     true);
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return enter.retval();
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.SetResult(enter.object()->Configure(attrib_list,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                   enter.callback()));
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t GetAttrib(PP_Resource audio_track,
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  PP_MediaStreamAudioTrack_Attrib attrib,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  int32_t* value) {
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::GetAttrib()";
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track, true);
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return enter.retval();
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetAttrib(attrib, value);
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct PP_Var GetId(PP_Resource audio_track) {
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::GetId()";
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track, true);
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return PP_MakeUndefined();
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetId();
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_Bool HasEnded(PP_Resource audio_track) {
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::HasEnded()";
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track, true);
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return PP_TRUE;
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->HasEnded();
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t GetBuffer(PP_Resource audio_track,
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  PP_Resource* buffer,
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  struct PP_CompletionCallback callback) {
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::GetBuffer()";
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track,
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                     callback,
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                     true);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return enter.retval();
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.SetResult(enter.object()->GetBuffer(buffer, enter.callback()));
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t RecycleBuffer(PP_Resource audio_track, PP_Resource buffer) {
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::RecycleBuffer()";
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track, true);
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return enter.retval();
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->RecycleBuffer(buffer);
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void Close(PP_Resource audio_track) {
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_MediaStreamAudioTrack::Close()";
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_MediaStreamAudioTrack_API> enter(audio_track, true);
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  enter.object()->Close();
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_MediaStreamAudioTrack_0_1 g_ppb_mediastreamaudiotrack_thunk_0_1 = {
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &IsMediaStreamAudioTrack,
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Configure,
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetAttrib,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetId,
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &HasEnded,
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetBuffer,
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &RecycleBuffer,
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Close
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PPAPI_THUNK_EXPORT const PPB_MediaStreamAudioTrack_0_1*
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GetPPB_MediaStreamAudioTrack_0_1_Thunk() {
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return &g_ppb_mediastreamaudiotrack_thunk_0_1;
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace thunk
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ppapi
113