/* * Copyright 2012, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MEDIA_CODEC_LIST_H_ #define MEDIA_CODEC_LIST_H_ #include #include #include #include #include #include #include #include #include #include namespace android { extern const char *kMaxEncoderInputBuffers; struct AMessage; struct MediaCodecList : public BnMediaCodecList { static sp getInstance(); virtual ssize_t findCodecByType( const char *type, bool encoder, size_t startIndex = 0) const; virtual ssize_t findCodecByName(const char *name) const; virtual size_t countCodecs() const; virtual sp getCodecInfo(size_t index) const { if (index >= mCodecInfos.size()) { ALOGE("b/24445127"); return NULL; } return mCodecInfos.itemAt(index); } virtual const sp getGlobalSettings() const; // to be used by MediaPlayerService alone static sp getLocalInstance(); // only to be used by getLocalInstance static void *profilerThreadWrapper(void * /*arg*/); // only to be used by MediaPlayerService void parseTopLevelXMLFile(const char *path, bool ignore_errors = false); private: class BinderDeathObserver : public IBinder::DeathRecipient { void binderDied(const wp &the_late_who __unused); }; static sp sBinderDeathObserver; enum Section { SECTION_TOPLEVEL, SECTION_SETTINGS, SECTION_DECODERS, SECTION_DECODER, SECTION_DECODER_TYPE, SECTION_ENCODERS, SECTION_ENCODER, SECTION_ENCODER_TYPE, SECTION_INCLUDE, }; static sp sCodecList; static sp sRemoteList; status_t mInitCheck; Section mCurrentSection; bool mUpdate; Vector
mPastSections; int32_t mDepth; AString mHrefBase; sp mGlobalSettings; KeyedVector mOverrides; Vector > mCodecInfos; sp mCurrentInfo; sp mOMX; MediaCodecList(); ~MediaCodecList(); status_t initCheck() const; void parseXMLFile(const char *path); static void StartElementHandlerWrapper( void *me, const char *name, const char **attrs); static void EndElementHandlerWrapper(void *me, const char *name); void startElementHandler(const char *name, const char **attrs); void endElementHandler(const char *name); status_t includeXMLFile(const char **attrs); status_t addSettingFromAttributes(const char **attrs); status_t addMediaCodecFromAttributes(bool encoder, const char **attrs); void addMediaCodec(bool encoder, const char *name, const char *type = NULL); void setCurrentCodecInfo(bool encoder, const char *name, const char *type); status_t addQuirk(const char **attrs); status_t addTypeFromAttributes(const char **attrs); status_t addLimit(const char **attrs); status_t addFeature(const char **attrs); void addType(const char *name); status_t initializeCapabilities(const char *type); DISALLOW_EVIL_CONSTRUCTORS(MediaCodecList); }; } // namespace android #endif // MEDIA_CODEC_LIST_H_