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)