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