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; 2986a58cabe322b746ab0eb17f0cade34ed68ba60eBernhard Rosenkränzerclass 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, 400852843d304006e3ab333081fddda13b07193de8Robert Shih METADATA, 416a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber }; 42f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber 43f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber enum Flags { 44f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber // Data appended to the queue is always at access unit boundaries. 45f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber kFlag_AlignedData = 1, 46f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber }; 47f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber ElementaryStreamQueue(Mode mode, uint32_t flags = 0); 486a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 496a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber status_t appendData(const void *data, size_t size, int64_t timeUs); 50be9634d071e79b72a42a4504f64eda9e2a0bceb8Marco Nelissen void signalEOS(); 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void clear(bool clearFormat); 526a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 536a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> dequeueAccessUnit(); 546a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 556a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<MetaData> getFormat(); 566a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 576a63a939601645404fd98f58c19cc38ca818d99eAndreas Huberprivate: 58a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber struct RangeInfo { 59a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber int64_t mTimestampUs; 60a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber size_t mLength; 61a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber }; 62a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber 636a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber Mode mMode; 64f56afa4878694803a44d1b0e9a54762d1d5ab652Andreas Huber uint32_t mFlags; 65be9634d071e79b72a42a4504f64eda9e2a0bceb8Marco Nelissen bool mEOSReached; 666a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 676a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> mBuffer; 68a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber List<RangeInfo> mRangeInfos; 696a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 706a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<MetaData> mFormat; 716a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 726a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> dequeueAccessUnitH264(); 736a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber sp<ABuffer> dequeueAccessUnitAAC(); 74d3c079ae9859011d118f94616d0069c2987013edChangwan Ryu sp<ABuffer> dequeueAccessUnitAC3(); 75386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber sp<ABuffer> dequeueAccessUnitMPEGAudio(); 76386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber sp<ABuffer> dequeueAccessUnitMPEGVideo(); 77386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber sp<ABuffer> dequeueAccessUnitMPEG4Video(); 7890a92053219ae50ddf4bb54e3d54db2d309e2b8dAndreas Huber sp<ABuffer> dequeueAccessUnitPCMAudio(); 790852843d304006e3ab333081fddda13b07193de8Robert Shih sp<ABuffer> dequeueAccessUnitMetadata(); 806a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 81a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber // consume a logical (compressed) access unit of size "size", 82a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber // returns its timestamp in us (or -1 if no time information). 83a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber int64_t fetchTimestamp(size_t size); 84a093f92042cf65060d1474c0fe116c12f8981717Andreas Huber 856a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(ElementaryStreamQueue); 866a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber}; 876a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 886a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber} // namespace android 896a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber 906a63a939601645404fd98f58c19cc38ca818d99eAndreas Huber#endif // ES_QUEUE_H_ 91