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