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, 35d3c079ae9859011d118f94616d0069c2987013edChangwan Ryu AC3, 36386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber MPEG_AUDIO, 37386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber MPEG_VIDEO, 38386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber MPEG4_VIDEO, 3990a92053219ae50ddf4bb54e3d54db2d309e2b8dAndreas Huber PCM_AUDIO, 406a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber }; 41f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber 42f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber enum Flags { 43f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber // Data appended to the queue is always at access unit boundaries. 44f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber kFlag_AlignedData = 1, 45f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber }; 46f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber ElementaryStreamQueue(Mode mode, uint32_t flags = 0); 476a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 486a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber status_t appendData(const void *data, size_t size, int64_t timeUs); 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void clear(bool clearFormat); 506a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 516a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> dequeueAccessUnit(); 526a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 536a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<MetaData> getFormat(); 546a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 556a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberprivate: 56a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber struct RangeInfo { 57a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber int64_t mTimestampUs; 58a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber size_t mLength; 59a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber }; 60a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber 616a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber Mode mMode; 62f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber uint32_t mFlags; 636a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 646a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> mBuffer; 65a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber List<RangeInfo> mRangeInfos; 666a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 676a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<MetaData> mFormat; 686a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 696a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> dequeueAccessUnitH264(); 706a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> dequeueAccessUnitAAC(); 71d3c079ae9859011d118f94616d0069c2987013edChangwan Ryu sp<ABuffer> dequeueAccessUnitAC3(); 72386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber sp<ABuffer> dequeueAccessUnitMPEGAudio(); 73386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber sp<ABuffer> dequeueAccessUnitMPEGVideo(); 74386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber sp<ABuffer> dequeueAccessUnitMPEG4Video(); 7590a92053219ae50ddf4bb54e3d54db2d309e2b8dAndreas Huber sp<ABuffer> dequeueAccessUnitPCMAudio(); 766a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 77a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber // consume a logical (compressed) access unit of size "size", 78a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber // returns its timestamp in us (or -1 if no time information). 79a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber int64_t fetchTimestamp(size_t size); 80666c96d37203fd91ec319b8b499442696f70fd53Robert Shih int64_t fetchTimestampAAC(size_t size); 81a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber 826a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(ElementaryStreamQueue); 836a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber}; 846a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 856a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber} // namespace android 866a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 876a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#endif // ES_QUEUE_H_ 88