Created
November 26, 2013 01:46
-
-
Save itlodge/7652195 to your computer and use it in GitHub Desktop.
Get vendor codecs for android 4.0. Link this program with ``-ldl -lutils``. Add ``-fno-rtti`` to g++.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <dlfcn.h> | |
#include <stdio.h> | |
typedef char * OMX_STRING; | |
typedef unsigned int OMX_U32; | |
typedef enum OMX_ERRORTYPE { | |
OMX_ErrorNone = 0, | |
OMX_ErrorNoMore = 0x8000100E | |
} OMX_ERRORTYPE; | |
namespace android { | |
class String8 { | |
public: | |
String8(); | |
String8(const String8& o); | |
~String8(); | |
inline String8& operator=(const String8& other); | |
inline const char* string() const | |
{ return mString; } | |
private: | |
const char* mString; | |
}; | |
class VectorImpl { | |
public: | |
VectorImpl(size_t itemSize, uint32_t flags); | |
VectorImpl(const VectorImpl& rhs); | |
virtual ~VectorImpl(); | |
VectorImpl& operator = (const VectorImpl& rhs); | |
inline const void *arrayImpl() const { return mStorage; } | |
protected: | |
virtual void do_construct(void* storage, size_t num) const = 0; | |
virtual void do_destroy(void* storage, size_t num) const = 0; | |
virtual void do_copy(void* dest, const void* from, size_t num) const = 0; | |
virtual void do_splat(void* dest, const void* item, size_t num) const = 0; | |
virtual void do_move_forward(void* dest, const void* from, size_t num) const = 0; | |
virtual void do_move_backward(void* dest, const void* from, size_t num) const = 0; | |
// take care of FBC... | |
virtual void reservedVectorImpl1(); | |
virtual void reservedVectorImpl2(); | |
virtual void reservedVectorImpl3(); | |
virtual void reservedVectorImpl4(); | |
virtual void reservedVectorImpl5(); | |
virtual void reservedVectorImpl6(); | |
virtual void reservedVectorImpl7(); | |
virtual void reservedVectorImpl8(); | |
private: | |
void *mStorage; // base address of the vector | |
size_t mCount; // number of items | |
const uint32_t mFlags; | |
const size_t mItemSize; | |
}; | |
template <class TYPE> | |
class Vector : private VectorImpl { | |
public: | |
Vector() | |
: VectorImpl(sizeof(TYPE), 0) | |
{ } | |
Vector(const Vector<TYPE>& rhs); | |
virtual ~Vector(); | |
const Vector<TYPE>& operator = (const Vector<TYPE>& rhs) const; | |
Vector<TYPE>& operator = (const Vector<TYPE>& rhs); | |
inline const TYPE& operator [] (size_t index) const | |
{ return *(array() + index); } | |
inline const TYPE* array() const | |
{ return static_cast<const TYPE *>(arrayImpl()); } | |
protected: | |
virtual void do_construct(void* storage, size_t num) const; | |
virtual void do_destroy(void* storage, size_t num) const; | |
virtual void do_copy(void* dest, const void* from, size_t num) const; | |
virtual void do_splat(void* dest, const void* item, size_t num) const; | |
virtual void do_move_forward(void* dest, const void* from, size_t num) const; | |
virtual void do_move_backward(void* dest, const void* from, size_t num) const; | |
}; | |
}; | |
struct OMXPluginBase { | |
OMXPluginBase() {} | |
virtual ~OMXPluginBase() {} | |
virtual void dummy1() = 0; | |
virtual void dummy2() = 0; | |
virtual OMX_ERRORTYPE enumerateComponents( | |
OMX_STRING name, | |
size_t size, | |
OMX_U32 index) = 0; | |
virtual OMX_ERRORTYPE getRolesOfComponent( | |
const char *name, | |
android::Vector<android::String8> *roles) = 0; | |
private: | |
OMXPluginBase(const OMXPluginBase &); | |
OMXPluginBase &operator=(const OMXPluginBase &); | |
}; | |
void *__gxx_personality_v0; | |
int | |
main(int argc, char *argv[]) | |
{ | |
void *handle = dlopen("libstagefrighthw.so", RTLD_NOW); | |
if (handle == NULL) { | |
return -1; | |
} | |
typedef OMXPluginBase *(*CreateOMXPluginFunc)(); | |
CreateOMXPluginFunc createOMXPlugin = | |
(CreateOMXPluginFunc)dlsym(handle, "createOMXPlugin"); | |
if (!createOMXPlugin) { | |
createOMXPlugin = (CreateOMXPluginFunc)dlsym( | |
handle, "_ZN7android15createOMXPluginEv"); | |
} | |
OMXPluginBase *plugin = (*createOMXPlugin)(); | |
if (plugin) { | |
OMX_U32 index = -1; | |
char name[128]; | |
android::Vector<android::String8> roles; | |
OMX_ERRORTYPE err; | |
while ((err = plugin->enumerateComponents(name, sizeof(name), | |
++index)) == OMX_ErrorNone) { | |
if ((err = plugin->getRolesOfComponent(name, &roles)) | |
== OMX_ErrorNone) { | |
printf("%s -- %s\n", name, roles[0].string()); | |
} else { | |
printf("0x%x\n", err); | |
} | |
} | |
if (err != OMX_ErrorNoMore) { | |
printf("0x%x\n", err); | |
} | |
} | |
dlclose(handle); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment