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