1f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson/* 2f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * Copyright (C) 2009 The Android Open Source Project 3f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * 4f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * Licensed under the Apache License, Version 2.0 (the "License"); 5f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * you may not use this file except in compliance with the License. 6f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * You may obtain a copy of the License at 7f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * 8f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * http://www.apache.org/licenses/LICENSE-2.0 9f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * 10f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * Unless required by applicable law or agreed to in writing, software 11f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * distributed under the License is distributed on an "AS IS" BASIS, 12f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * See the License for the specific language governing permissions and 14f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson * limitations under the License. 15f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson */ 16f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 17f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#ifndef MEDIA_BUFFER_GROUP_H_ 18f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 19f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#define MEDIA_BUFFER_GROUP_H_ 20f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 21f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <media/stagefright/MediaBuffer.h> 22f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <utils/Errors.h> 23f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <utils/threads.h> 24f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 25f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonnamespace android { 26f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 27f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonclass MediaBuffer; 28f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonclass MetaData; 29f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 30f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonclass MediaBufferGroup : public MediaBufferObserver { 31f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonpublic: 32f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson MediaBufferGroup(); 33f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson ~MediaBufferGroup(); 34f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 35f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson void add_buffer(MediaBuffer *buffer); 36f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 37f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson // If nonBlocking is false, it blocks until a buffer is available and 38f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson // passes it to the caller in *buffer, while returning OK. 39f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson // The returned buffer will have a reference count of 1. 40f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson // If nonBlocking is true and a buffer is not immediately available, 41f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson // buffer is set to NULL and it returns WOULD_BLOCK. 42f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson status_t acquire_buffer(MediaBuffer **buffer, bool nonBlocking = false); 43f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 44f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonprotected: 45f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson virtual void signalBufferReturned(MediaBuffer *buffer); 46f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 47f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonprivate: 48f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson friend class MediaBuffer; 49f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 50f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson Mutex mLock; 51f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson Condition mCondition; 52f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 53f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson MediaBuffer *mFirstBuffer, *mLastBuffer; 54f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 55f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson MediaBufferGroup(const MediaBufferGroup &); 56f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson MediaBufferGroup &operator=(const MediaBufferGroup &); 57f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}; 58f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 59f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson} // namespace android 60f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson 61f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#endif // MEDIA_BUFFER_GROUP_H_ 62f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson