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 289adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huberstruct ABuffer; 299adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber 30c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huberstruct MPEG2TSWriter : public MediaWriter { 319adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber MPEG2TSWriter(int fd); 32c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber MPEG2TSWriter(const char *filename); 33c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 34c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t addSource(const sp<MediaSource> &source); 35c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t start(MetaData *param = NULL); 36c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t stop(); 37c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t pause(); 38c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual bool reachedEOS(); 39c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual status_t dump(int fd, const Vector<String16>& args); 40c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 41c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void onMessageReceived(const sp<AMessage> &msg); 42c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 43c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huberprotected: 44c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber virtual ~MPEG2TSWriter(); 45c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 46c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huberprivate: 47c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber enum { 48c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber kWhatSourceNotify = 'noti' 49c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber }; 50c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 51c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber struct SourceInfo; 52c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 53c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber FILE *mFile; 54c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber sp<ALooper> mLooper; 55c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber sp<AHandlerReflector<MPEG2TSWriter> > mReflector; 56c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 57c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber bool mStarted; 58c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 59c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber Vector<sp<SourceInfo> > mSources; 60c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber size_t mNumSourcesDone; 61c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 62c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber int64_t mNumTSPacketsWritten; 63c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber int64_t mNumTSPacketsBeforeMeta; 64c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 659adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber void init(); 669adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber 67c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeTS(); 68c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeProgramAssociationTable(); 69c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeProgramMap(); 70c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber void writeAccessUnit(int32_t sourceIndex, const sp<ABuffer> &buffer); 71c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 72c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSWriter); 73c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber}; 74c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 75c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber} // namespace android 76c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber 77c751eccad38cf46d7478eca85beefecd2c2b4c3bAndreas Huber#endif // MPEG2TS_WRITER_H_ 78