diff options
author | Andreas Huber <andih@google.com> | 2012-02-29 15:47:17 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2012-03-01 11:30:10 -0800 |
commit | afc16d667afa23f5aa00154ccad62f8c45cf5419 (patch) | |
tree | e7a7573397177303112c1809f0087b25c8a30397 /include | |
parent | df94a547d8036619d15975873a1ff5736b0f14fe (diff) | |
download | frameworks_av-afc16d667afa23f5aa00154ccad62f8c45cf5419.zip frameworks_av-afc16d667afa23f5aa00154ccad62f8c45cf5419.tar.gz frameworks_av-afc16d667afa23f5aa00154ccad62f8c45cf5419.tar.bz2 |
Instead of hardcoding OMX component names in our code, support
a config file instead.
Change-Id: I5835903ab9f1c4a22ccc605ca99ed966767adf57
Diffstat (limited to 'include')
-rw-r--r-- | include/media/stagefright/ACodec.h | 1 | ||||
-rw-r--r-- | include/media/stagefright/MediaCodecList.h | 95 | ||||
-rw-r--r-- | include/media/stagefright/OMXCodec.h | 46 |
3 files changed, 121 insertions, 21 deletions
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h index 6735aff..fa1a416 100644 --- a/include/media/stagefright/ACodec.h +++ b/include/media/stagefright/ACodec.h @@ -118,6 +118,7 @@ private: sp<FlushingState> mFlushingState; AString mComponentName; + uint32_t mQuirks; sp<IOMX> mOMX; IOMX::node_id mNode; sp<MemoryDealer> mDealer[2]; 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_ + diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index e541c18..392ea87 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -26,6 +26,7 @@ namespace android { +struct MediaCodecList; class MemoryDealer; struct OMXCodecObserver; struct CodecProfileLevel; @@ -82,12 +83,35 @@ struct OMXCodec : public MediaSource, // from MediaBufferObserver virtual void signalBufferReturned(MediaBuffer *buffer); + enum Quirks { + kNeedsFlushBeforeDisable = 1, + kWantsNALFragments = 2, + kRequiresLoadedToIdleAfterAllocation = 4, + kRequiresAllocateBufferOnInputPorts = 8, + kRequiresFlushCompleteEmulation = 16, + kRequiresAllocateBufferOnOutputPorts = 32, + kRequiresFlushBeforeShutdown = 64, + kDefersOutputBufferAllocation = 128, + kDecoderLiesAboutNumberOfChannels = 256, + kInputBufferSizesAreBogus = 512, + kSupportsMultipleFramesPerInputBuffer = 1024, + kAvoidMemcopyInputRecordingFrames = 2048, + kRequiresLargerEncoderOutputBuffer = 4096, + kOutputBuffersAreUnreadable = 8192, + }; + // for use by ACodec static void findMatchingCodecs( const char *mime, bool createEncoder, const char *matchComponentName, uint32_t flags, - Vector<String8> *matchingCodecs); + Vector<String8> *matchingCodecs, + Vector<uint32_t> *matchingCodecQuirks = NULL); + + static uint32_t getComponentQuirks( + const MediaCodecList *list, size_t index); + + static bool findCodecQuirks(const char *componentName, uint32_t *quirks); protected: virtual ~OMXCodec(); @@ -125,23 +149,6 @@ private: SHUTTING_DOWN, }; - enum Quirks { - kNeedsFlushBeforeDisable = 1, - kWantsNALFragments = 2, - kRequiresLoadedToIdleAfterAllocation = 4, - kRequiresAllocateBufferOnInputPorts = 8, - kRequiresFlushCompleteEmulation = 16, - kRequiresAllocateBufferOnOutputPorts = 32, - kRequiresFlushBeforeShutdown = 64, - kDefersOutputBufferAllocation = 128, - kDecoderLiesAboutNumberOfChannels = 256, - kInputBufferSizesAreBogus = 512, - kSupportsMultipleFramesPerInputBuffer = 1024, - kAvoidMemcopyInputRecordingFrames = 2048, - kRequiresLargerEncoderOutputBuffer = 4096, - kOutputBuffersAreUnreadable = 8192, - }; - enum BufferStatus { OWNED_BY_US, OWNED_BY_COMPONENT, @@ -327,9 +334,6 @@ private: status_t configureCodec(const sp<MetaData> &meta); - static uint32_t getComponentQuirks( - const char *componentName, bool isEncoder); - void restorePatchedDataPointer(BufferInfo *info); status_t applyRotation(); |