ESQueue.h revision f56afa4878694803a44d1b0e9a54762d1d5ab652
16a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber/*
26a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * Copyright (C) 2010 The Android Open Source Project
36a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber *
46a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
56a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * you may not use this file except in compliance with the License.
66a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * You may obtain a copy of the License at
76a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber *
86a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
96a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber *
106a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * Unless required by applicable law or agreed to in writing, software
116a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
126a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * See the License for the specific language governing permissions and
146a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber * limitations under the License.
156a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber */
166a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
176a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#ifndef ES_QUEUE_H_
186a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
196a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#define ES_QUEUE_H_
206a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
216a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#include <media/stagefright/foundation/ABase.h>
2295d7e994c73c17b27c7134ba3cc3acbb5889aa87Mathias Agopian#include <utils/Errors.h>
236a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#include <utils/List.h>
246a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#include <utils/RefBase.h>
256a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
266a63a939601645404fd98f58c19cc38ca818d99eAndreas Hubernamespace android {
276a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
286a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberstruct ABuffer;
296a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberstruct MetaData;
306a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
316a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberstruct ElementaryStreamQueue {
326a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    enum Mode {
336a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber        H264,
34386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber        AAC,
35386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber        MPEG_AUDIO,
36386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber        MPEG_VIDEO,
37386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber        MPEG4_VIDEO,
386a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    };
39f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber
40f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    enum Flags {
41f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber        // Data appended to the queue is always at access unit boundaries.
42f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber        kFlag_AlignedData = 1,
43f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    };
44f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    ElementaryStreamQueue(Mode mode, uint32_t flags = 0);
456a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
466a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    status_t appendData(const void *data, size_t size, int64_t timeUs);
47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void clear(bool clearFormat);
486a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
496a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnit();
506a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
516a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<MetaData> getFormat();
526a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
536a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberprivate:
54a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    struct RangeInfo {
55a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber        int64_t mTimestampUs;
56a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber        size_t mLength;
57a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    };
58a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber
596a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    Mode mMode;
60f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    uint32_t mFlags;
616a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
626a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> mBuffer;
63a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    List<RangeInfo> mRangeInfos;
646a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
656a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<MetaData> mFormat;
666a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
676a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnitH264();
686a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnitAAC();
69386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber    sp<ABuffer> dequeueAccessUnitMPEGAudio();
70386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber    sp<ABuffer> dequeueAccessUnitMPEGVideo();
71386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber    sp<ABuffer> dequeueAccessUnitMPEG4Video();
726a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
73a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    // consume a logical (compressed) access unit of size "size",
74a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    // returns its timestamp in us (or -1 if no time information).
75a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    int64_t fetchTimestamp(size_t size);
76a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber
776a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(ElementaryStreamQueue);
786a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber};
796a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
806a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber}  // namespace android
816a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
826a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#endif  // ES_QUEUE_H_
83