Skip to content

Commit

Permalink
droidmedia: Add function to query if codec is supported.
Browse files Browse the repository at this point in the history
[droidmedia] Add function to query if codec is supported. JB#47657
  • Loading branch information
mlehtima committed Oct 9, 2019
1 parent 4c8eea4 commit 8b06bde
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 21 deletions.
65 changes: 44 additions & 21 deletions droidmediacodec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,27 @@ class DroidMediaCodecBuilder {
}
}

static uint32_t flags(DroidMediaCodecMetaData *meta, uint32_t currentFlags) {
// We will not do any validation for the flags. Stagefright should take care of that.
if (meta->flags & DROID_MEDIA_CODEC_SW_ONLY) {
#if ANDROID_MAJOR < 7
currentFlags |= android::OMXCodec::kSoftwareCodecsOnly;
#else
currentFlags |= android::MediaCodecList::kPreferSoftwareCodecs;
#endif
}

if (meta->flags & DROID_MEDIA_CODEC_HW_ONLY) {
#if ANDROID_MAJOR < 7
currentFlags |= android::OMXCodec::kHardwareCodecsOnly;
#else
currentFlags |= android::MediaCodecList::kHardwareCodecsOnly;
#endif
}

return currentFlags;
}

private:
android::sp<android::MetaData> buildMetaData(DroidMediaCodecEncoderMetaData *meta) {
android::sp<android::MetaData> md(new android::MetaData);
Expand Down Expand Up @@ -579,27 +600,6 @@ class DroidMediaCodecBuilder {
return md;
}

uint32_t flags(DroidMediaCodecMetaData *meta, uint32_t currentFlags) {
// We will not do any validation for the flags. Stagefright should take care of that.
if (meta->flags & DROID_MEDIA_CODEC_SW_ONLY) {
#if ANDROID_MAJOR < 7
currentFlags |= android::OMXCodec::kSoftwareCodecsOnly;
#else
currentFlags |= android::MediaCodecList::kPreferSoftwareCodecs;
#endif
}

if (meta->flags & DROID_MEDIA_CODEC_HW_ONLY) {
#if ANDROID_MAJOR < 7
currentFlags |= android::OMXCodec::kHardwareCodecsOnly;
#else
currentFlags |= android::MediaCodecList::kHardwareCodecsOnly;
#endif
}

return currentFlags;
}

DroidMediaCodecEncoderMetaData *m_enc;
DroidMediaCodecDecoderMetaData *m_dec;
};
Expand Down Expand Up @@ -694,6 +694,29 @@ DroidMediaCodec *droid_media_codec_create_encoder(DroidMediaCodecEncoderMetaData
return droid_media_codec_create(builder);
}

bool droid_media_codec_is_supported(DroidMediaCodecMetaData *meta, bool encoder)
{
#if ANDROID_MAJOR == 4 && ANDROID_MINOR < 2
android::Vector<android::String8> matchingCodecs;
#elif ANDROID_MAJOR < 7
android::Vector<android::OMXCodec::CodecNameAndQuirks> matchingCodecs;
#else
android::Vector<android::AString> matchingCodecs;
#endif

#if ANDROID_MAJOR < 7
android::OMXCodec::findMatchingCodecs(
meta->type, encoder, NULL,
#else
android::MediaCodecList::findMatchingCodecs(
meta->type, encoder,
#endif
DroidMediaCodecBuilder::flags(meta, 0),
&matchingCodecs);

return matchingCodecs.size() > 0;
}

bool droid_media_codec_start(DroidMediaCodec *codec)
{
#if ANDROID_MAJOR < 7
Expand Down
1 change: 1 addition & 0 deletions droidmediacodec.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ typedef struct {
DroidMediaBufferQueue *droid_media_codec_get_buffer_queue (DroidMediaCodec *codec);
DroidMediaCodec *droid_media_codec_create_decoder(DroidMediaCodecDecoderMetaData *meta);
DroidMediaCodec *droid_media_codec_create_encoder(DroidMediaCodecEncoderMetaData *meta);
bool droid_media_codec_is_supported(DroidMediaCodecMetaData *meta, bool encoder);

void droid_media_codec_set_callbacks(DroidMediaCodec *codec, DroidMediaCodecCallbacks *cb, void *data);
void droid_media_codec_set_data_callbacks(DroidMediaCodec *codec,
Expand Down
1 change: 1 addition & 0 deletions hybris.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ HYBRIS_WRAPPER_1_1(uint32_t,DroidMediaBuffer*,droid_media_buffer_get_height);
HYBRIS_WRAPPER_1_1(const void*,DroidMediaBuffer*,droid_media_buffer_get_handle);
HYBRIS_WRAPPER_1_1(DroidMediaCodec*,DroidMediaCodecDecoderMetaData*,droid_media_codec_create_decoder);
HYBRIS_WRAPPER_1_1(DroidMediaCodec*,DroidMediaCodecEncoderMetaData*,droid_media_codec_create_encoder);
HYBRIS_WRAPPER_1_2(bool,DroidMediaCodecMetaData*,bool,droid_media_codec_is_supported);
HYBRIS_WRAPPER_1_1(bool,DroidMediaCodec*,droid_media_codec_start);
HYBRIS_WRAPPER_0_1(DroidMediaCodec*,droid_media_codec_stop);
HYBRIS_WRAPPER_0_1(DroidMediaCodec *,droid_media_codec_destroy);
Expand Down

0 comments on commit 8b06bde

Please sign in to comment.