Loading include/media/MediaCodecInfo.h +19 −3 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ namespace android { struct AMessage; class Parcel; struct CodecCapabilities; typedef KeyedVector<AString, AString> CodecSettings; Loading @@ -44,12 +43,19 @@ struct MediaCodecInfo : public RefBase { }; struct Capabilities : public RefBase { enum { // decoder flags kFlagSupportsAdaptivePlayback = 1 << 0, kFlagSupportsSecurePlayback = 1 << 1, kFlagSupportsTunneledPlayback = 1 << 2, }; void getSupportedProfileLevels(Vector<ProfileLevel> *profileLevels) const; void getSupportedColorFormats(Vector<uint32_t> *colorFormats) const; uint32_t getFlags() const; const sp<AMessage> getDetails() const; private: protected: Vector<ProfileLevel> mProfileLevels; Vector<uint32_t> mColorFormats; uint32_t mFlags; Loading @@ -57,6 +63,7 @@ struct MediaCodecInfo : public RefBase { Capabilities(); private: // read object from parcel even if object creation fails static sp<Capabilities> FromParcel(const Parcel &parcel); status_t writeToParcel(Parcel *parcel) const; Loading @@ -66,6 +73,14 @@ struct MediaCodecInfo : public RefBase { friend class MediaCodecInfo; }; // Use a subclass to allow setting fields on construction without allowing // to do the same throughout the framework. struct CapabilitiesBuilder : public Capabilities { void addProfileLevel(uint32_t profile, uint32_t level); void addColorFormat(uint32_t format); void addFlags(uint32_t flags); }; bool isEncoder() const; bool hasQuirk(const char *name) const; void getSupportedMimes(Vector<AString> *mimes) const; Loading Loading @@ -107,7 +122,8 @@ private: void addQuirk(const char *name); status_t addMime(const char *mime); status_t updateMime(const char *mime); status_t initializeCapabilities(const CodecCapabilities &caps); // after this call Capabilities will be owned by MediaCodecInfo status_t setCapabilities(const sp<Capabilities> &caps); void addDetail(const AString &key, const AString &value); void addFeature(const AString &key, int32_t value); void addFeature(const AString &key, const char *value); Loading include/media/stagefright/ACodec.h +8 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,10 @@ struct ACodec : public AHierarchicalStateMachine, public CodecBase { virtual void initiateStart(); virtual void initiateShutdown(bool keepComponentAllocated = false); virtual status_t queryCapabilities( const AString &name, const AString &mime, bool isEncoder, sp<MediaCodecInfo::Capabilities> *caps); virtual status_t setSurface(const sp<Surface> &surface); virtual void signalFlush(); Loading Loading @@ -309,6 +313,10 @@ private: ssize_t *index = NULL); status_t setComponentRole(bool isEncoder, const char *mime); static const char *getComponentRole(bool isEncoder, const char *mime); static status_t setComponentRole( const sp<IOMX> &omx, IOMX::node_id node, const char *role); status_t configureCodec(const char *mime, const sp<AMessage> &msg); status_t configureTunneledVideoPlayback(int32_t audioHwSync, Loading include/media/stagefright/CodecBase.h +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <stdint.h> #include <media/IOMX.h> #include <media/MediaCodecInfo.h> #include <media/stagefright/foundation/AHandler.h> namespace android { Loading Loading @@ -59,6 +60,10 @@ struct CodecBase : public AHandler { // require an explicit message handler virtual void onMessageReceived(const sp<AMessage> &msg) = 0; virtual status_t queryCapabilities( const AString &name, const AString &mime, bool isEncoder, sp<MediaCodecInfo::Capabilities> *caps /* nonnull */) { return INVALID_OPERATION; } virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; } virtual void signalFlush() = 0; Loading include/media/stagefright/MediaCodec.h +8 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <gui/IGraphicBufferProducer.h> #include <media/hardware/CryptoAPI.h> #include <media/MediaCodecInfo.h> #include <media/MediaResource.h> #include <media/stagefright/foundation/AHandler.h> #include <media/stagefright/FrameRenderTracker.h> Loading Loading @@ -73,6 +74,11 @@ struct MediaCodec : public AHandler { static sp<PersistentSurface> CreatePersistentInputSurface(); // utility method to query capabilities static status_t QueryCapabilities( const AString &name, const AString &mime, bool isEncoder, sp<MediaCodecInfo::Capabilities> *caps /* nonnull */); status_t configure( const sp<AMessage> &format, const sp<Surface> &nativeWindow, Loading Loading @@ -339,6 +345,8 @@ private: MediaCodec(const sp<ALooper> &looper, pid_t pid); static sp<CodecBase> GetCodecBase(const AString &name, bool nameIsType = false); static status_t PostAndAwaitResponse( const sp<AMessage> &msg, sp<AMessage> *response); Loading media/libmedia/MediaCodecInfo.cpp +17 −22 Original line number Diff line number Diff line Loading @@ -26,8 +26,6 @@ #include <media/stagefright/foundation/AMessage.h> #include <binder/Parcel.h> #include <media/stagefright/OMXCodec.h> namespace android { void MediaCodecInfo::Capabilities::getSupportedProfileLevels( Loading Loading @@ -101,6 +99,21 @@ status_t MediaCodecInfo::Capabilities::writeToParcel(Parcel *parcel) const { return OK; } void MediaCodecInfo::CapabilitiesBuilder::addProfileLevel(uint32_t profile, uint32_t level) { ProfileLevel profileLevel; profileLevel.mProfile = profile; profileLevel.mLevel = level; mProfileLevels.push_back(profileLevel); } void MediaCodecInfo::CapabilitiesBuilder::addColorFormat(uint32_t format) { mColorFormats.push(format); } void MediaCodecInfo::CapabilitiesBuilder::addFlags(uint32_t flags) { mFlags |= flags; } bool MediaCodecInfo::isEncoder() const { return mIsEncoder; } Loading Loading @@ -225,26 +238,8 @@ void MediaCodecInfo::removeMime(const char *mime) { } } status_t MediaCodecInfo::initializeCapabilities(const CodecCapabilities &caps) { mCurrentCaps->mProfileLevels.clear(); mCurrentCaps->mColorFormats.clear(); for (size_t i = 0; i < caps.mProfileLevels.size(); ++i) { const CodecProfileLevel &src = caps.mProfileLevels.itemAt(i); ProfileLevel profileLevel; profileLevel.mProfile = src.mProfile; profileLevel.mLevel = src.mLevel; mCurrentCaps->mProfileLevels.push_back(profileLevel); } for (size_t i = 0; i < caps.mColorFormats.size(); ++i) { mCurrentCaps->mColorFormats.push_back(caps.mColorFormats.itemAt(i)); } mCurrentCaps->mFlags = caps.mFlags; mCurrentCaps->mDetails = new AMessage; status_t MediaCodecInfo::setCapabilities(const sp<Capabilities> &caps) { mCurrentCaps = caps; return OK; } Loading Loading
include/media/MediaCodecInfo.h +19 −3 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ namespace android { struct AMessage; class Parcel; struct CodecCapabilities; typedef KeyedVector<AString, AString> CodecSettings; Loading @@ -44,12 +43,19 @@ struct MediaCodecInfo : public RefBase { }; struct Capabilities : public RefBase { enum { // decoder flags kFlagSupportsAdaptivePlayback = 1 << 0, kFlagSupportsSecurePlayback = 1 << 1, kFlagSupportsTunneledPlayback = 1 << 2, }; void getSupportedProfileLevels(Vector<ProfileLevel> *profileLevels) const; void getSupportedColorFormats(Vector<uint32_t> *colorFormats) const; uint32_t getFlags() const; const sp<AMessage> getDetails() const; private: protected: Vector<ProfileLevel> mProfileLevels; Vector<uint32_t> mColorFormats; uint32_t mFlags; Loading @@ -57,6 +63,7 @@ struct MediaCodecInfo : public RefBase { Capabilities(); private: // read object from parcel even if object creation fails static sp<Capabilities> FromParcel(const Parcel &parcel); status_t writeToParcel(Parcel *parcel) const; Loading @@ -66,6 +73,14 @@ struct MediaCodecInfo : public RefBase { friend class MediaCodecInfo; }; // Use a subclass to allow setting fields on construction without allowing // to do the same throughout the framework. struct CapabilitiesBuilder : public Capabilities { void addProfileLevel(uint32_t profile, uint32_t level); void addColorFormat(uint32_t format); void addFlags(uint32_t flags); }; bool isEncoder() const; bool hasQuirk(const char *name) const; void getSupportedMimes(Vector<AString> *mimes) const; Loading Loading @@ -107,7 +122,8 @@ private: void addQuirk(const char *name); status_t addMime(const char *mime); status_t updateMime(const char *mime); status_t initializeCapabilities(const CodecCapabilities &caps); // after this call Capabilities will be owned by MediaCodecInfo status_t setCapabilities(const sp<Capabilities> &caps); void addDetail(const AString &key, const AString &value); void addFeature(const AString &key, int32_t value); void addFeature(const AString &key, const char *value); Loading
include/media/stagefright/ACodec.h +8 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,10 @@ struct ACodec : public AHierarchicalStateMachine, public CodecBase { virtual void initiateStart(); virtual void initiateShutdown(bool keepComponentAllocated = false); virtual status_t queryCapabilities( const AString &name, const AString &mime, bool isEncoder, sp<MediaCodecInfo::Capabilities> *caps); virtual status_t setSurface(const sp<Surface> &surface); virtual void signalFlush(); Loading Loading @@ -309,6 +313,10 @@ private: ssize_t *index = NULL); status_t setComponentRole(bool isEncoder, const char *mime); static const char *getComponentRole(bool isEncoder, const char *mime); static status_t setComponentRole( const sp<IOMX> &omx, IOMX::node_id node, const char *role); status_t configureCodec(const char *mime, const sp<AMessage> &msg); status_t configureTunneledVideoPlayback(int32_t audioHwSync, Loading
include/media/stagefright/CodecBase.h +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <stdint.h> #include <media/IOMX.h> #include <media/MediaCodecInfo.h> #include <media/stagefright/foundation/AHandler.h> namespace android { Loading Loading @@ -59,6 +60,10 @@ struct CodecBase : public AHandler { // require an explicit message handler virtual void onMessageReceived(const sp<AMessage> &msg) = 0; virtual status_t queryCapabilities( const AString &name, const AString &mime, bool isEncoder, sp<MediaCodecInfo::Capabilities> *caps /* nonnull */) { return INVALID_OPERATION; } virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; } virtual void signalFlush() = 0; Loading
include/media/stagefright/MediaCodec.h +8 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <gui/IGraphicBufferProducer.h> #include <media/hardware/CryptoAPI.h> #include <media/MediaCodecInfo.h> #include <media/MediaResource.h> #include <media/stagefright/foundation/AHandler.h> #include <media/stagefright/FrameRenderTracker.h> Loading Loading @@ -73,6 +74,11 @@ struct MediaCodec : public AHandler { static sp<PersistentSurface> CreatePersistentInputSurface(); // utility method to query capabilities static status_t QueryCapabilities( const AString &name, const AString &mime, bool isEncoder, sp<MediaCodecInfo::Capabilities> *caps /* nonnull */); status_t configure( const sp<AMessage> &format, const sp<Surface> &nativeWindow, Loading Loading @@ -339,6 +345,8 @@ private: MediaCodec(const sp<ALooper> &looper, pid_t pid); static sp<CodecBase> GetCodecBase(const AString &name, bool nameIsType = false); static status_t PostAndAwaitResponse( const sp<AMessage> &msg, sp<AMessage> *response); Loading
media/libmedia/MediaCodecInfo.cpp +17 −22 Original line number Diff line number Diff line Loading @@ -26,8 +26,6 @@ #include <media/stagefright/foundation/AMessage.h> #include <binder/Parcel.h> #include <media/stagefright/OMXCodec.h> namespace android { void MediaCodecInfo::Capabilities::getSupportedProfileLevels( Loading Loading @@ -101,6 +99,21 @@ status_t MediaCodecInfo::Capabilities::writeToParcel(Parcel *parcel) const { return OK; } void MediaCodecInfo::CapabilitiesBuilder::addProfileLevel(uint32_t profile, uint32_t level) { ProfileLevel profileLevel; profileLevel.mProfile = profile; profileLevel.mLevel = level; mProfileLevels.push_back(profileLevel); } void MediaCodecInfo::CapabilitiesBuilder::addColorFormat(uint32_t format) { mColorFormats.push(format); } void MediaCodecInfo::CapabilitiesBuilder::addFlags(uint32_t flags) { mFlags |= flags; } bool MediaCodecInfo::isEncoder() const { return mIsEncoder; } Loading Loading @@ -225,26 +238,8 @@ void MediaCodecInfo::removeMime(const char *mime) { } } status_t MediaCodecInfo::initializeCapabilities(const CodecCapabilities &caps) { mCurrentCaps->mProfileLevels.clear(); mCurrentCaps->mColorFormats.clear(); for (size_t i = 0; i < caps.mProfileLevels.size(); ++i) { const CodecProfileLevel &src = caps.mProfileLevels.itemAt(i); ProfileLevel profileLevel; profileLevel.mProfile = src.mProfile; profileLevel.mLevel = src.mLevel; mCurrentCaps->mProfileLevels.push_back(profileLevel); } for (size_t i = 0; i < caps.mColorFormats.size(); ++i) { mCurrentCaps->mColorFormats.push_back(caps.mColorFormats.itemAt(i)); } mCurrentCaps->mFlags = caps.mFlags; mCurrentCaps->mDetails = new AMessage; status_t MediaCodecInfo::setCapabilities(const sp<Capabilities> &caps) { mCurrentCaps = caps; return OK; } Loading