14f1732b8068970b368a89271158ca29daf25650eztenghui/* 24f1732b8068970b368a89271158ca29daf25650eztenghui * Copyright (C) 2013 The Android Open Source Project 34f1732b8068970b368a89271158ca29daf25650eztenghui * 44f1732b8068970b368a89271158ca29daf25650eztenghui * Licensed under the Apache License, Version 2.0 (the "License"); 54f1732b8068970b368a89271158ca29daf25650eztenghui * you may not use this file except in compliance with the License. 64f1732b8068970b368a89271158ca29daf25650eztenghui * You may obtain a copy of the License at 74f1732b8068970b368a89271158ca29daf25650eztenghui * 84f1732b8068970b368a89271158ca29daf25650eztenghui * http://www.apache.org/licenses/LICENSE-2.0 94f1732b8068970b368a89271158ca29daf25650eztenghui * 104f1732b8068970b368a89271158ca29daf25650eztenghui * Unless required by applicable law or agreed to in writing, software 114f1732b8068970b368a89271158ca29daf25650eztenghui * distributed under the License is distributed on an "AS IS" BASIS, 124f1732b8068970b368a89271158ca29daf25650eztenghui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134f1732b8068970b368a89271158ca29daf25650eztenghui * See the License for the specific language governing permissions and 144f1732b8068970b368a89271158ca29daf25650eztenghui * limitations under the License. 154f1732b8068970b368a89271158ca29daf25650eztenghui */ 164f1732b8068970b368a89271158ca29daf25650eztenghui 174f1732b8068970b368a89271158ca29daf25650eztenghui#ifndef MEDIA_ADAPTER_H 184f1732b8068970b368a89271158ca29daf25650eztenghui#define MEDIA_ADAPTER_H 194f1732b8068970b368a89271158ca29daf25650eztenghui 204f1732b8068970b368a89271158ca29daf25650eztenghui#include <media/stagefright/foundation/ABase.h> 214f1732b8068970b368a89271158ca29daf25650eztenghui#include <media/stagefright/MediaSource.h> 224f1732b8068970b368a89271158ca29daf25650eztenghui#include <media/stagefright/MediaBuffer.h> 234f1732b8068970b368a89271158ca29daf25650eztenghui#include <media/stagefright/MetaData.h> 244f1732b8068970b368a89271158ca29daf25650eztenghui#include <utils/threads.h> 254f1732b8068970b368a89271158ca29daf25650eztenghui 264f1732b8068970b368a89271158ca29daf25650eztenghuinamespace android { 274f1732b8068970b368a89271158ca29daf25650eztenghui 284f1732b8068970b368a89271158ca29daf25650eztenghui// Convert the MediaMuxer's push model into MPEG4Writer's pull model. 294f1732b8068970b368a89271158ca29daf25650eztenghui// Used only by the MediaMuxer for now. 304f1732b8068970b368a89271158ca29daf25650eztenghuistruct MediaAdapter : public MediaSource, public MediaBufferObserver { 314f1732b8068970b368a89271158ca29daf25650eztenghuipublic: 324f1732b8068970b368a89271158ca29daf25650eztenghui // MetaData is used to set the format and returned at getFormat. 334f1732b8068970b368a89271158ca29daf25650eztenghui MediaAdapter(const sp<MetaData> &meta); 344f1732b8068970b368a89271158ca29daf25650eztenghui virtual ~MediaAdapter(); 354f1732b8068970b368a89271158ca29daf25650eztenghui ///////////////////////////////////////////////// 364f1732b8068970b368a89271158ca29daf25650eztenghui // Inherited functions from MediaSource 374f1732b8068970b368a89271158ca29daf25650eztenghui ///////////////////////////////////////////////// 384f1732b8068970b368a89271158ca29daf25650eztenghui 394f1732b8068970b368a89271158ca29daf25650eztenghui virtual status_t start(MetaData *params = NULL); 404f1732b8068970b368a89271158ca29daf25650eztenghui virtual status_t stop(); 414f1732b8068970b368a89271158ca29daf25650eztenghui virtual sp<MetaData> getFormat(); 424f1732b8068970b368a89271158ca29daf25650eztenghui virtual status_t read( 434f1732b8068970b368a89271158ca29daf25650eztenghui MediaBuffer **buffer, const ReadOptions *options = NULL); 444f1732b8068970b368a89271158ca29daf25650eztenghui 454f1732b8068970b368a89271158ca29daf25650eztenghui ///////////////////////////////////////////////// 464f1732b8068970b368a89271158ca29daf25650eztenghui // Inherited functions from MediaBufferObserver 474f1732b8068970b368a89271158ca29daf25650eztenghui ///////////////////////////////////////////////// 484f1732b8068970b368a89271158ca29daf25650eztenghui 494f1732b8068970b368a89271158ca29daf25650eztenghui virtual void signalBufferReturned(MediaBuffer *buffer); 504f1732b8068970b368a89271158ca29daf25650eztenghui 514f1732b8068970b368a89271158ca29daf25650eztenghui ///////////////////////////////////////////////// 524f1732b8068970b368a89271158ca29daf25650eztenghui // Non-inherited functions: 534f1732b8068970b368a89271158ca29daf25650eztenghui ///////////////////////////////////////////////// 544f1732b8068970b368a89271158ca29daf25650eztenghui 554f1732b8068970b368a89271158ca29daf25650eztenghui // pushBuffer() will wait for the read() finish, and read() will have a 564f1732b8068970b368a89271158ca29daf25650eztenghui // deep copy, such that after pushBuffer return, the buffer can be re-used. 574f1732b8068970b368a89271158ca29daf25650eztenghui status_t pushBuffer(MediaBuffer *buffer); 584f1732b8068970b368a89271158ca29daf25650eztenghui 594f1732b8068970b368a89271158ca29daf25650eztenghuiprivate: 604f1732b8068970b368a89271158ca29daf25650eztenghui Mutex mAdapterLock; 614f1732b8068970b368a89271158ca29daf25650eztenghui // Make sure the read() wait for the incoming buffer. 624f1732b8068970b368a89271158ca29daf25650eztenghui Condition mBufferReadCond; 634f1732b8068970b368a89271158ca29daf25650eztenghui // Make sure the pushBuffer() wait for the current buffer consumed. 644f1732b8068970b368a89271158ca29daf25650eztenghui Condition mBufferReturnedCond; 654f1732b8068970b368a89271158ca29daf25650eztenghui 664f1732b8068970b368a89271158ca29daf25650eztenghui MediaBuffer *mCurrentMediaBuffer; 674f1732b8068970b368a89271158ca29daf25650eztenghui 684f1732b8068970b368a89271158ca29daf25650eztenghui bool mStarted; 694f1732b8068970b368a89271158ca29daf25650eztenghui sp<MetaData> mOutputFormat; 704f1732b8068970b368a89271158ca29daf25650eztenghui 714f1732b8068970b368a89271158ca29daf25650eztenghui DISALLOW_EVIL_CONSTRUCTORS(MediaAdapter); 724f1732b8068970b368a89271158ca29daf25650eztenghui}; 734f1732b8068970b368a89271158ca29daf25650eztenghui 744f1732b8068970b368a89271158ca29daf25650eztenghui} // namespace android 754f1732b8068970b368a89271158ca29daf25650eztenghui 764f1732b8068970b368a89271158ca29daf25650eztenghui#endif // MEDIA_ADAPTER_H 77