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