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_audio_buffer.idl modified Thu Feb  6 15:31:48 2014.
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/ppb_audio_buffer.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/enter.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/ppapi_thunk_export.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/ppb_audio_buffer_api.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ppapi {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace thunk {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_Bool IsAudioBuffer(PP_Resource resource) {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::IsAudioBuffer()";
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(resource, false);
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return PP_FromBool(enter.succeeded());
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_TimeDelta GetTimestamp(PP_Resource buffer) {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetTimestamp()";
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return 0.0;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetTimestamp();
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SetTimestamp(PP_Resource buffer, PP_TimeDelta timestamp) {
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::SetTimestamp()";
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  enter.object()->SetTimestamp(timestamp);
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_AudioBuffer_SampleRate GetSampleRate(PP_Resource buffer) {
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetSampleRate()";
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return PP_AUDIOBUFFER_SAMPLERATE_UNKNOWN;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetSampleRate();
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_AudioBuffer_SampleSize GetSampleSize(PP_Resource buffer) {
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetSampleSize()";
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return PP_AUDIOBUFFER_SAMPLESIZE_UNKNOWN;
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetSampleSize();
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)uint32_t GetNumberOfChannels(PP_Resource buffer) {
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetNumberOfChannels()";
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return 0;
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetNumberOfChannels();
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)uint32_t GetNumberOfSamples(PP_Resource buffer) {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetNumberOfSamples()";
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return 0;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetNumberOfSamples();
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void* GetDataBuffer(PP_Resource buffer) {
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetDataBuffer()";
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return NULL;
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetDataBuffer();
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)uint32_t GetDataBufferSize(PP_Resource buffer) {
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_AudioBuffer::GetDataBufferSize()";
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResource<PPB_AudioBuffer_API> enter(buffer, true);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return 0;
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.object()->GetDataBufferSize();
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_AudioBuffer_0_1 g_ppb_audiobuffer_thunk_0_1 = {
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &IsAudioBuffer,
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetTimestamp,
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &SetTimestamp,
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetSampleRate,
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetSampleSize,
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetNumberOfChannels,
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetNumberOfSamples,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetDataBuffer,
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetDataBufferSize
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PPAPI_THUNK_EXPORT const PPB_AudioBuffer_0_1* GetPPB_AudioBuffer_0_1_Thunk() {
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return &g_ppb_audiobuffer_thunk_0_1;
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace thunk
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ppapi
109