diff options
Diffstat (limited to 'include/media/stagefright/MediaCodecList.h')
-rw-r--r-- | include/media/stagefright/MediaCodecList.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/include/media/stagefright/MediaCodecList.h b/include/media/stagefright/MediaCodecList.h new file mode 100644 index 0000000..14dc1b8 --- /dev/null +++ b/include/media/stagefright/MediaCodecList.h @@ -0,0 +1,95 @@ +/* + * 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 <media/stagefright/foundation/ABase.h> +#include <media/stagefright/foundation/AString.h> + +#include <sys/types.h> +#include <utils/Errors.h> +#include <utils/KeyedVector.h> +#include <utils/Vector.h> + +namespace android { + +struct MediaCodecList { + static const MediaCodecList *getInstance(); + + ssize_t findCodecByType( + const char *type, bool encoder, size_t startIndex = 0) const; + + ssize_t findCodecByName(const char *name) const; + + const char *getCodecName(size_t index) const; + bool codecHasQuirk(size_t index, const char *quirkName) const; + +private: + enum Section { + SECTION_TOPLEVEL, + SECTION_DECODERS, + SECTION_DECODER, + SECTION_ENCODERS, + SECTION_ENCODER, + }; + + struct CodecInfo { + AString mName; + bool mIsEncoder; + uint32_t mTypes; + uint32_t mQuirks; + }; + + static MediaCodecList *sCodecList; + + status_t mInitCheck; + Section mCurrentSection; + int32_t mDepth; + + Vector<CodecInfo> mCodecInfos; + KeyedVector<AString, size_t> mCodecQuirks; + KeyedVector<AString, size_t> mTypes; + + MediaCodecList(); + ~MediaCodecList(); + + status_t initCheck() const; + void parseXMLFile(FILE *file); + + 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 addMediaCodecFromAttributes(bool encoder, const char **attrs); + void addMediaCodec(bool encoder, const char *name, const char *type = NULL); + + status_t addQuirk(const char **attrs); + status_t addTypeFromAttributes(const char **attrs); + void addType(const char *name); + + DISALLOW_EVIL_CONSTRUCTORS(MediaCodecList); +}; + +} // namespace android + +#endif // MEDIA_CODEC_LIST_H_ + |