1e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber/* 2e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 4e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * you may not use this file except in compliance with the License. 6e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * You may obtain a copy of the License at 7e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 8e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 10e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Unless required by applicable law or agreed to in writing, software 11e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * See the License for the specific language governing permissions and 14e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * limitations under the License. 15e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber */ 16e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 17e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#ifndef AMR_WRITER_H_ 18e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 19e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#define AMR_WRITER_H_ 20e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 21e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#include <stdio.h> 22e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 23b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <media/IMediaSource.h> 242dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#include <media/stagefright/MediaWriter.h> 25e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#include <utils/threads.h> 26e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 27e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Hubernamespace android { 28e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 29ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass MetaData; 30e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 312dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberstruct AMRWriter : public MediaWriter { 32e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber AMRWriter(int fd); 33e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 34e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber status_t initCheck() const; 35e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 36b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen virtual status_t addSource(const sp<IMediaSource> &source); 372dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber virtual bool reachedEOS(); 382dec2b5be2056c6d9428897dc672185872d30d17James Dong virtual status_t start(MetaData *params = NULL); 398bcc65c753085fe3328592cceda0cf0e8f8b0a45James Dong virtual status_t stop() { return reset(); } 4037187916a486504acaf83bea30147eb5fbf46ae5James Dong virtual status_t pause(); 41e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 42e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huberprotected: 43e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber virtual ~AMRWriter(); 44e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 45e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huberprivate: 46c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong int mFd; 47e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber status_t mInitCheck; 48b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen sp<IMediaSource> mSource; 49e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber bool mStarted; 50a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong volatile bool mPaused; 51a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong volatile bool mResumed; 52e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber volatile bool mDone; 53ebe87f32e442c9a8fb2931632311d6c5a126eddbAndreas Huber volatile bool mReachedEOS; 54e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber pthread_t mThread; 55d599cd4573b5a2d5914c5040e0565ef866749b77James Dong int64_t mEstimatedSizeBytes; 56d599cd4573b5a2d5914c5040e0565ef866749b77James Dong int64_t mEstimatedDurationUs; 57e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 58e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber static void *ThreadWrapper(void *); 5937187916a486504acaf83bea30147eb5fbf46ae5James Dong status_t threadFunc(); 60d599cd4573b5a2d5914c5040e0565ef866749b77James Dong bool exceedsFileSizeLimit(); 61d599cd4573b5a2d5914c5040e0565ef866749b77James Dong bool exceedsFileDurationLimit(); 628bcc65c753085fe3328592cceda0cf0e8f8b0a45James Dong status_t reset(); 63e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 64e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber AMRWriter(const AMRWriter &); 65e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber AMRWriter &operator=(const AMRWriter &); 66e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber}; 67e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 68e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber} // namespace android 69e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 70e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#endif // AMR_WRITER_H_ 71