AudioBufferProvider.h revision f0ff908da019a44115109f1b4d1b6864b35a8a29
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Copyright (C) 2007 The Android Open Source Project 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * you may not use this file except in compliance with the License. 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * You may obtain a copy of the License at 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * See the License for the specific language governing permissions and 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * limitations under the License. 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef ANDROID_AUDIO_BUFFER_PROVIDER_H 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define ANDROID_AUDIO_BUFFER_PROVIDER_H 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <utils/Errors.h> 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace android { 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// ---------------------------------------------------------------------------- 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AudioBufferProvider 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)public: 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct Buffer { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Buffer() : raw(NULL), frameCount(0) { } 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) union { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void* raw; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) short* i16; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int8_t* i8; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t frameCount; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)protected: 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AudioBufferProvider() : mValid(kValid) { } 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~AudioBufferProvider() { mValid = kDead; } 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)public: 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // value representing an invalid presentation timestamp 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const int64_t kInvalidPTS = 0x7FFFFFFFFFFFFFFFLL; // <stdint.h> is too painful 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // pts is the local time when the next sample yielded by getNextBuffer 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // will be rendered. 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Pass kInvalidPTS if the PTS is unknown or not applicable. 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual status_t getNextBuffer(Buffer* buffer, int64_t pts = kInvalidPTS) = 0; 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void releaseBuffer(Buffer* buffer) = 0; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int getValid() const { return mValid; } 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const int kValid = 'GOOD'; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const int kDead = 'DEAD'; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)private: 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int mValid; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// ---------------------------------------------------------------------------- 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; // namespace android 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // ANDROID_AUDIO_BUFFER_PROVIDER_H 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)