Loading include/media/IOMX.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -184,6 +184,11 @@ public: uint32_t flags = 0); uint32_t flags = 0); }; }; struct CodecProfileLevel { OMX_U32 mProfile; OMX_U32 mLevel; }; } // namespace android } // namespace android #endif // ANDROID_IOMX_H_ #endif // ANDROID_IOMX_H_ include/media/stagefright/OMXCodec.h +0 −5 Original line number Original line Diff line number Diff line Loading @@ -336,11 +336,6 @@ private: OMXCodec &operator=(const OMXCodec &); OMXCodec &operator=(const OMXCodec &); }; }; struct CodecProfileLevel { OMX_U32 mProfile; OMX_U32 mLevel; }; struct CodecCapabilities { struct CodecCapabilities { String8 mComponentName; String8 mComponentName; Vector<CodecProfileLevel> mProfileLevels; Vector<CodecProfileLevel> mProfileLevels; Loading media/libstagefright/codecs/avc/dec/SoftAVC.cpp +30 −0 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaErrors.h> #include <media/IOMX.h> #include "avcdec_api.h" #include "avcdec_api.h" #include "avcdec_int.h" #include "avcdec_int.h" Loading @@ -31,6 +32,13 @@ namespace android { static const char kStartCode[4] = { 0x00, 0x00, 0x00, 0x01 }; static const char kStartCode[4] = { 0x00, 0x00, 0x00, 0x01 }; static const CodecProfileLevel kProfileLevels[] = { { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1b }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel11 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel12 }, }; template<class T> template<class T> static void InitOMXParams(T *params) { static void InitOMXParams(T *params) { params->nSize = sizeof(T); params->nSize = sizeof(T); Loading Loading @@ -181,6 +189,28 @@ OMX_ERRORTYPE SoftAVC::internalGetParameter( return OMX_ErrorNone; return OMX_ErrorNone; } } case OMX_IndexParamVideoProfileLevelQuerySupported: { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; if (profileLevel->nPortIndex != 0) { // Input port only LOGE("Invalid port index: %ld", profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } size_t index = profileLevel->nProfileIndex; size_t nProfileLevels = sizeof(kProfileLevels) / sizeof(kProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kProfileLevels[index].mProfile; profileLevel->eLevel = kProfileLevels[index].mLevel; return OMX_ErrorNone; } default: default: return SimpleSoftOMXComponent::internalGetParameter(index, params); return SimpleSoftOMXComponent::internalGetParameter(index, params); } } Loading media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp +53 −0 Original line number Original line Diff line number Diff line Loading @@ -23,11 +23,31 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaErrors.h> #include <media/IOMX.h> #include "mp4dec_api.h" #include "mp4dec_api.h" namespace android { namespace android { static const CodecProfileLevel kM4VProfileLevels[] = { { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0 }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0b }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1 }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level2 }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level3 }, }; static const CodecProfileLevel kH263ProfileLevels[] = { { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level10 }, { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level20 }, { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level30 }, { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level45 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level10 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level20 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level30 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level45 }, }; template<class T> template<class T> static void InitOMXParams(T *params) { static void InitOMXParams(T *params) { params->nSize = sizeof(T); params->nSize = sizeof(T); Loading Loading @@ -181,6 +201,39 @@ OMX_ERRORTYPE SoftMPEG4::internalGetParameter( return OMX_ErrorNone; return OMX_ErrorNone; } } case OMX_IndexParamVideoProfileLevelQuerySupported: { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; if (profileLevel->nPortIndex != 0) { // Input port only LOGE("Invalid port index: %ld", profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } size_t index = profileLevel->nProfileIndex; if (mMode == MODE_H263) { size_t nProfileLevels = sizeof(kH263ProfileLevels) / sizeof(kH263ProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kH263ProfileLevels[index].mProfile; profileLevel->eLevel = kH263ProfileLevels[index].mLevel; } else { size_t nProfileLevels = sizeof(kM4VProfileLevels) / sizeof(kM4VProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kM4VProfileLevels[index].mProfile; profileLevel->eLevel = kM4VProfileLevels[index].mLevel; } return OMX_ErrorNone; } default: default: return SimpleSoftOMXComponent::internalGetParameter(index, params); return SimpleSoftOMXComponent::internalGetParameter(index, params); } } Loading media/libstagefright/codecs/on2/h264dec/SoftAVC.cpp +42 −0 Original line number Original line Diff line number Diff line Loading @@ -23,10 +23,30 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaErrors.h> #include <media/IOMX.h> namespace android { namespace android { static const CodecProfileLevel kProfileLevels[] = { { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1b }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel11 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel12 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel13 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel2 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel21 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel22 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel3 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel31 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel32 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel4 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel41 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel42 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel5 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel51 }, }; template<class T> template<class T> static void InitOMXParams(T *params) { static void InitOMXParams(T *params) { params->nSize = sizeof(T); params->nSize = sizeof(T); Loading Loading @@ -177,6 +197,28 @@ OMX_ERRORTYPE SoftAVC::internalGetParameter( return OMX_ErrorNone; return OMX_ErrorNone; } } case OMX_IndexParamVideoProfileLevelQuerySupported: { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; if (profileLevel->nPortIndex != kInputPortIndex) { LOGE("Invalid port index: %ld", profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } size_t index = profileLevel->nProfileIndex; size_t nProfileLevels = sizeof(kProfileLevels) / sizeof(kProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kProfileLevels[index].mProfile; profileLevel->eLevel = kProfileLevels[index].mLevel; return OMX_ErrorNone; } default: default: return SimpleSoftOMXComponent::internalGetParameter(index, params); return SimpleSoftOMXComponent::internalGetParameter(index, params); } } Loading Loading
include/media/IOMX.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -184,6 +184,11 @@ public: uint32_t flags = 0); uint32_t flags = 0); }; }; struct CodecProfileLevel { OMX_U32 mProfile; OMX_U32 mLevel; }; } // namespace android } // namespace android #endif // ANDROID_IOMX_H_ #endif // ANDROID_IOMX_H_
include/media/stagefright/OMXCodec.h +0 −5 Original line number Original line Diff line number Diff line Loading @@ -336,11 +336,6 @@ private: OMXCodec &operator=(const OMXCodec &); OMXCodec &operator=(const OMXCodec &); }; }; struct CodecProfileLevel { OMX_U32 mProfile; OMX_U32 mLevel; }; struct CodecCapabilities { struct CodecCapabilities { String8 mComponentName; String8 mComponentName; Vector<CodecProfileLevel> mProfileLevels; Vector<CodecProfileLevel> mProfileLevels; Loading
media/libstagefright/codecs/avc/dec/SoftAVC.cpp +30 −0 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaErrors.h> #include <media/IOMX.h> #include "avcdec_api.h" #include "avcdec_api.h" #include "avcdec_int.h" #include "avcdec_int.h" Loading @@ -31,6 +32,13 @@ namespace android { static const char kStartCode[4] = { 0x00, 0x00, 0x00, 0x01 }; static const char kStartCode[4] = { 0x00, 0x00, 0x00, 0x01 }; static const CodecProfileLevel kProfileLevels[] = { { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1b }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel11 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel12 }, }; template<class T> template<class T> static void InitOMXParams(T *params) { static void InitOMXParams(T *params) { params->nSize = sizeof(T); params->nSize = sizeof(T); Loading Loading @@ -181,6 +189,28 @@ OMX_ERRORTYPE SoftAVC::internalGetParameter( return OMX_ErrorNone; return OMX_ErrorNone; } } case OMX_IndexParamVideoProfileLevelQuerySupported: { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; if (profileLevel->nPortIndex != 0) { // Input port only LOGE("Invalid port index: %ld", profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } size_t index = profileLevel->nProfileIndex; size_t nProfileLevels = sizeof(kProfileLevels) / sizeof(kProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kProfileLevels[index].mProfile; profileLevel->eLevel = kProfileLevels[index].mLevel; return OMX_ErrorNone; } default: default: return SimpleSoftOMXComponent::internalGetParameter(index, params); return SimpleSoftOMXComponent::internalGetParameter(index, params); } } Loading
media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp +53 −0 Original line number Original line Diff line number Diff line Loading @@ -23,11 +23,31 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaErrors.h> #include <media/IOMX.h> #include "mp4dec_api.h" #include "mp4dec_api.h" namespace android { namespace android { static const CodecProfileLevel kM4VProfileLevels[] = { { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0 }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0b }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1 }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level2 }, { OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level3 }, }; static const CodecProfileLevel kH263ProfileLevels[] = { { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level10 }, { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level20 }, { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level30 }, { OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level45 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level10 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level20 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level30 }, { OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level45 }, }; template<class T> template<class T> static void InitOMXParams(T *params) { static void InitOMXParams(T *params) { params->nSize = sizeof(T); params->nSize = sizeof(T); Loading Loading @@ -181,6 +201,39 @@ OMX_ERRORTYPE SoftMPEG4::internalGetParameter( return OMX_ErrorNone; return OMX_ErrorNone; } } case OMX_IndexParamVideoProfileLevelQuerySupported: { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; if (profileLevel->nPortIndex != 0) { // Input port only LOGE("Invalid port index: %ld", profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } size_t index = profileLevel->nProfileIndex; if (mMode == MODE_H263) { size_t nProfileLevels = sizeof(kH263ProfileLevels) / sizeof(kH263ProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kH263ProfileLevels[index].mProfile; profileLevel->eLevel = kH263ProfileLevels[index].mLevel; } else { size_t nProfileLevels = sizeof(kM4VProfileLevels) / sizeof(kM4VProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kM4VProfileLevels[index].mProfile; profileLevel->eLevel = kM4VProfileLevels[index].mLevel; } return OMX_ErrorNone; } default: default: return SimpleSoftOMXComponent::internalGetParameter(index, params); return SimpleSoftOMXComponent::internalGetParameter(index, params); } } Loading
media/libstagefright/codecs/on2/h264dec/SoftAVC.cpp +42 −0 Original line number Original line Diff line number Diff line Loading @@ -23,10 +23,30 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaErrors.h> #include <media/IOMX.h> namespace android { namespace android { static const CodecProfileLevel kProfileLevels[] = { { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1b }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel11 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel12 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel13 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel2 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel21 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel22 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel3 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel31 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel32 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel4 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel41 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel42 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel5 }, { OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel51 }, }; template<class T> template<class T> static void InitOMXParams(T *params) { static void InitOMXParams(T *params) { params->nSize = sizeof(T); params->nSize = sizeof(T); Loading Loading @@ -177,6 +197,28 @@ OMX_ERRORTYPE SoftAVC::internalGetParameter( return OMX_ErrorNone; return OMX_ErrorNone; } } case OMX_IndexParamVideoProfileLevelQuerySupported: { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; if (profileLevel->nPortIndex != kInputPortIndex) { LOGE("Invalid port index: %ld", profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } size_t index = profileLevel->nProfileIndex; size_t nProfileLevels = sizeof(kProfileLevels) / sizeof(kProfileLevels[0]); if (index >= nProfileLevels) { return OMX_ErrorNoMore; } profileLevel->eProfile = kProfileLevels[index].mProfile; profileLevel->eLevel = kProfileLevels[index].mLevel; return OMX_ErrorNone; } default: default: return SimpleSoftOMXComponent::internalGetParameter(index, params); return SimpleSoftOMXComponent::internalGetParameter(index, params); } } Loading