ESQueue.h revision 90a92053219ae50ddf4bb54e3d54db2d309e2b8d
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,
3890a92053219ae50ddf4bb54e3d54db2d309e2b8dAndreas Huber        PCM_AUDIO,
396a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    };
40f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber
41f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    enum Flags {
42f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber        // Data appended to the queue is always at access unit boundaries.
43f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber        kFlag_AlignedData = 1,
44f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    };
45f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    ElementaryStreamQueue(Mode mode, uint32_t flags = 0);
466a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
476a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    status_t appendData(const void *data, size_t size, int64_t timeUs);
48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void clear(bool clearFormat);
496a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
506a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnit();
516a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
526a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<MetaData> getFormat();
536a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
546a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberprivate:
55a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    struct RangeInfo {
56a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber        int64_t mTimestampUs;
57a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber        size_t mLength;
58a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    };
59a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber
606a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    Mode mMode;
61f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber    uint32_t mFlags;
626a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
636a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> mBuffer;
64a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    List<RangeInfo> mRangeInfos;
656a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
666a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<MetaData> mFormat;
676a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
686a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnitH264();
696a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnitAAC();
70386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber    sp<ABuffer> dequeueAccessUnitMPEGAudio();
71386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber    sp<ABuffer> dequeueAccessUnitMPEGVideo();
72386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber    sp<ABuffer> dequeueAccessUnitMPEG4Video();
7390a92053219ae50ddf4bb54e3d54db2d309e2b8dAndreas Huber    sp<ABuffer> dequeueAccessUnitPCMAudio();
746a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
75a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    // consume a logical (compressed) access unit of size "size",
76a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    // returns its timestamp in us (or -1 if no time information).
77a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    int64_t fetchTimestamp(size_t size);
78a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber
796a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(ElementaryStreamQueue);
806a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber};
816a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
826a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber}  // namespace android
836a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
846a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#endif  // ES_QUEUE_H_
85