MPEG2TSWriter.h revision 0da4dab0a45a2bc1d95cbc6ef6a4850ed2569584
10da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber/* 20da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * Copyright (C) 2010 The Android Open Source Project 30da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * 40da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 50da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * you may not use this file except in compliance with the License. 60da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * You may obtain a copy of the License at 70da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * 80da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 90da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * 100da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * Unless required by applicable law or agreed to in writing, software 110da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 120da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * See the License for the specific language governing permissions and 140da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber * limitations under the License. 150da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber */ 160da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 170da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#ifndef MPEG2TS_WRITER_H_ 180da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 190da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#define MPEG2TS_WRITER_H_ 200da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 210da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#include <media/stagefright/foundation/ABase.h> 220da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#include <media/stagefright/foundation/AHandlerReflector.h> 230da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#include <media/stagefright/foundation/ALooper.h> 240da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#include <media/stagefright/MediaWriter.h> 250da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 260da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Hubernamespace android { 270da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 280da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huberstruct MPEG2TSWriter : public MediaWriter { 290da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber MPEG2TSWriter(const char *filename); 300da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 310da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual status_t addSource(const sp<MediaSource> &source); 320da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual status_t start(MetaData *param = NULL); 330da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual status_t stop(); 340da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual status_t pause(); 350da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual bool reachedEOS(); 360da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual status_t dump(int fd, const Vector<String16>& args); 370da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 380da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber void onMessageReceived(const sp<AMessage> &msg); 390da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 400da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huberprotected: 410da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber virtual ~MPEG2TSWriter(); 420da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 430da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huberprivate: 440da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber enum { 450da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber kWhatSourceNotify = 'noti' 460da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber }; 470da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 480da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber struct SourceInfo; 490da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 500da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber FILE *mFile; 510da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber sp<ALooper> mLooper; 520da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber sp<AHandlerReflector<MPEG2TSWriter> > mReflector; 530da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 540da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber bool mStarted; 550da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 560da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber Vector<sp<SourceInfo> > mSources; 570da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber size_t mNumSourcesDone; 580da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 590da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber int64_t mNumTSPacketsWritten; 600da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber int64_t mNumTSPacketsBeforeMeta; 610da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 620da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber void writeTS(); 630da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber void writeProgramAssociationTable(); 640da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber void writeProgramMap(); 650da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber void writeAccessUnit(int32_t sourceIndex, const sp<ABuffer> &buffer); 660da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 670da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSWriter); 680da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber}; 690da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 700da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber} // namespace android 710da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber 720da4dab0a45a2bc1d95cbc6ef6a4850ed2569584Andreas Huber#endif // MPEG2TS_WRITER_H_ 73