MediaBufferGroup.h revision 4d0c0a8942de184f07fdd6c918c6355e5771bdff
1bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang/* 2bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * Copyright (C) 2009 The Android Open Source Project 3bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * 4bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * you may not use this file except in compliance with the License. 6bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * You may obtain a copy of the License at 7bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * 8bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * http://www.apache.org/licenses/LICENSE-2.0 9bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * 10bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * Unless required by applicable law or agreed to in writing, software 11bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * distributed under the License is distributed on an "AS IS" BASIS, 12bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * See the License for the specific language governing permissions and 14bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang * limitations under the License. 15bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang */ 16bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 17bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang#ifndef MEDIA_BUFFER_GROUP_H_ 18bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 19bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang#define MEDIA_BUFFER_GROUP_H_ 20bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 21bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang#include <media/stagefright/MediaBuffer.h> 22bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 23bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kangnamespace android { 24bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 25bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kangclass MediaBuffer; 26bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 27bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kangclass MediaBufferGroup : public MediaBufferObserver { 28bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kangpublic: 29bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang MediaBufferGroup(size_t growthLimit = 0); 30bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 31bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // create a media buffer group with preallocated buffers 32bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang MediaBufferGroup(size_t buffers, size_t buffer_size, size_t growthLimit = 0); 33bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 34bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang ~MediaBufferGroup(); 35bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 36bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang void add_buffer(MediaBuffer *buffer); 37bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 38bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang bool has_buffers(); 39bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 40bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // If nonBlocking is false, it blocks until a buffer is available and 41bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // passes it to the caller in *buffer, while returning OK. 42bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // The returned buffer will have a reference count of 1. 43bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // If nonBlocking is true and a buffer is not immediately available, 44bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // buffer is set to NULL and it returns WOULD_BLOCK. 45bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // If requestedSize is 0, any free MediaBuffer will be returned. 46bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // If requestedSize is > 0, the returned MediaBuffer should have buffer 47bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // size of at least requstedSize. 48bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang status_t acquire_buffer( 49bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang MediaBuffer **buffer, bool nonBlocking = false, size_t requestedSize = 0); 50bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 514d0c0a8942de184f07fdd6c918c6355e5771bdffDongwon Kang size_t buffers() const; 52bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 53bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang // If buffer is nullptr, have acquire_buffer() check for remote release. 54bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang virtual void signalBufferReturned(MediaBuffer *buffer); 55bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 56bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kangprivate: 57bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang friend class MediaBuffer; 58bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 594d0c0a8942de184f07fdd6c918c6355e5771bdffDongwon Kang struct InternalData; 604d0c0a8942de184f07fdd6c918c6355e5771bdffDongwon Kang InternalData *mInternal; 61bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 62bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang MediaBufferGroup(const MediaBufferGroup &); 63bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang MediaBufferGroup &operator=(const MediaBufferGroup &); 64bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang}; 65bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 66bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang} // namespace android 67bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang 68bc8f53b8c1c220d9ce01526b6e3834f14af98ed5Dongwon Kang#endif // MEDIA_BUFFER_GROUP_H_ 69