MPEG2TSWriter.h revision c751eccad38cf46d7478eca85beefecd2c2b4c3b
1c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber/* 2c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * 4c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * you may not use this file except in compliance with the License. 6c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * You may obtain a copy of the License at 7c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * 8c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * 10c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * See the License for the specific language governing permissions and 14c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber * limitations under the License. 15c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber */ 16c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 17c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#ifndef MPEG2TS_WRITER_H_ 18c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 19c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#define MPEG2TS_WRITER_H_ 20c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 21c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#include <media/stagefright/foundation/ABase.h> 22c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#include <media/stagefright/foundation/AHandlerReflector.h> 23c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#include <media/stagefright/foundation/ALooper.h> 24c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#include <media/stagefright/MediaWriter.h> 25c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 26c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Hubernamespace android { 27c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 28c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huberstruct MPEG2TSWriter : public MediaWriter { 29c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber MPEG2TSWriter(const char *filename); 30c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 31c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t addSource(const sp<MediaSource> &source); 32c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t start(MetaData *param = NULL); 33c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t stop(); 34c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t pause(); 35c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual bool reachedEOS(); 36c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t dump(int fd, const Vector<String16>& args); 37c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 38c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void onMessageReceived(const sp<AMessage> &msg); 39c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 40c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huberprotected: 41c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual ~MPEG2TSWriter(); 42c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 43c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huberprivate: 44c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber enum { 45c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber kWhatSourceNotify = 'noti' 46c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber }; 47c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 48c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber struct SourceInfo; 49c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 50c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber FILE *mFile; 51c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber sp<ALooper> mLooper; 52c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber sp<AHandlerReflector<MPEG2TSWriter> > mReflector; 53c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 54c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber bool mStarted; 55c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 56c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber Vector<sp<SourceInfo> > mSources; 57c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber size_t mNumSourcesDone; 58c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 59c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber int64_t mNumTSPacketsWritten; 60c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber int64_t mNumTSPacketsBeforeMeta; 61c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 62c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeTS(); 63c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeProgramAssociationTable(); 64c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeProgramMap(); 65c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeAccessUnit(int32_t sourceIndex, const sp<ABuffer> &buffer); 66c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 67c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSWriter); 68c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber}; 69c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 70c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber} // namespace android 71c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 72c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#endif // MPEG2TS_WRITER_H_ 73