ESQueue.h revision a093f92042cf65060d1474c0fe116c12f8981717
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>
226a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#include <utils/List.h>
236a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#include <utils/RefBase.h>
246a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
256a63a939601645404fd98f58c19cc38ca818d99eAndreas Hubernamespace android {
266a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
276a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberstruct ABuffer;
286a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberstruct MetaData;
296a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
306a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberstruct ElementaryStreamQueue {
316a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    enum Mode {
326a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber        H264,
336a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber        AAC
346a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    };
356a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    ElementaryStreamQueue(Mode mode);
366a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
376a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    status_t appendData(const void *data, size_t size, int64_t timeUs);
382a4d22d79e927f2245537921e10fc5fda1c47a29Andreas Huber    void clear();
396a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
406a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnit();
416a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
426a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<MetaData> getFormat();
436a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
446a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberprivate:
45a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    struct RangeInfo {
46a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber        int64_t mTimestampUs;
47a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber        size_t mLength;
48a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    };
49a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber
506a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    Mode mMode;
516a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
526a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> mBuffer;
53a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    List<RangeInfo> mRangeInfos;
546a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
556a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<MetaData> mFormat;
566a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
576a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnitH264();
586a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    sp<ABuffer> dequeueAccessUnitAAC();
596a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
60a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    // consume a logical (compressed) access unit of size "size",
61a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    // returns its timestamp in us (or -1 if no time information).
62a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber    int64_t fetchTimestamp(size_t size);
63a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber
646a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    static sp<MetaData> MakeAACCodecSpecificData(
656a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber            unsigned profile, unsigned sampling_freq_index,
666a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber            unsigned channel_configuration);
676a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
686a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(ElementaryStreamQueue);
696a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber};
706a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
716a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber}  // namespace android
726a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber
736a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#endif  // ES_QUEUE_H_
74