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