Loading include/media/stagefright/MediaCodecSource.h +5 −3 Original line number Diff line number Diff line Loading @@ -21,14 +21,15 @@ #include <media/stagefright/foundation/AHandlerReflector.h> #include <media/stagefright/MediaSource.h> #include <gui/IGraphicBufferConsumer.h> namespace android { struct ALooper; class AMessage; struct AMessage; struct AReplyToken; class IGraphicBufferProducer; class IGraphicBufferConsumer; class MediaCodec; struct MediaCodec; class MetaData; struct MediaCodecSource : public MediaSource, Loading @@ -36,6 +37,7 @@ struct MediaCodecSource : public MediaSource, enum FlagBits { FLAG_USE_SURFACE_INPUT = 1, FLAG_USE_METADATA_INPUT = 2, FLAG_PREFER_SOFTWARE_CODEC = 4, // used for testing only }; static sp<MediaCodecSource> Create( Loading media/libstagefright/MediaCodecSource.cpp +29 −13 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaCodecList.h> #include <media/stagefright/MediaCodecSource.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaSource.h> Loading Loading @@ -408,11 +409,19 @@ status_t MediaCodecSource::initEncoder() { AString outputMIME; CHECK(mOutputFormat->findString("mime", &outputMIME)); mEncoder = MediaCodec::CreateByType( mCodecLooper, outputMIME.c_str(), true /* encoder */); Vector<AString> matchingCodecs; MediaCodecList::findMatchingCodecs( outputMIME.c_str(), true /* encoder */, ((mFlags & FLAG_PREFER_SOFTWARE_CODEC) ? MediaCodecList::kPreferSoftwareCodecs : 0), &matchingCodecs); status_t err = NO_INIT; for (size_t ix = 0; ix < matchingCodecs.size(); ++ix) { mEncoder = MediaCodec::CreateByComponentName( mCodecLooper, matchingCodecs[ix]); if (mEncoder == NULL) { return NO_INIT; continue; } ALOGV("output format is '%s'", mOutputFormat->debugString(0).c_str()); Loading @@ -420,12 +429,19 @@ status_t MediaCodecSource::initEncoder() { mEncoderActivityNotify = new AMessage(kWhatEncoderActivity, mReflector); mEncoder->setCallback(mEncoderActivityNotify); status_t err = mEncoder->configure( err = mEncoder->configure( mOutputFormat, NULL /* nativeWindow */, NULL /* crypto */, MediaCodec::CONFIGURE_FLAG_ENCODE); if (err == OK) { break; } mEncoder->release(); mEncoder = NULL; } if (err != OK) { return err; } Loading Loading
include/media/stagefright/MediaCodecSource.h +5 −3 Original line number Diff line number Diff line Loading @@ -21,14 +21,15 @@ #include <media/stagefright/foundation/AHandlerReflector.h> #include <media/stagefright/MediaSource.h> #include <gui/IGraphicBufferConsumer.h> namespace android { struct ALooper; class AMessage; struct AMessage; struct AReplyToken; class IGraphicBufferProducer; class IGraphicBufferConsumer; class MediaCodec; struct MediaCodec; class MetaData; struct MediaCodecSource : public MediaSource, Loading @@ -36,6 +37,7 @@ struct MediaCodecSource : public MediaSource, enum FlagBits { FLAG_USE_SURFACE_INPUT = 1, FLAG_USE_METADATA_INPUT = 2, FLAG_PREFER_SOFTWARE_CODEC = 4, // used for testing only }; static sp<MediaCodecSource> Create( Loading
media/libstagefright/MediaCodecSource.cpp +29 −13 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaCodecList.h> #include <media/stagefright/MediaCodecSource.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaSource.h> Loading Loading @@ -408,11 +409,19 @@ status_t MediaCodecSource::initEncoder() { AString outputMIME; CHECK(mOutputFormat->findString("mime", &outputMIME)); mEncoder = MediaCodec::CreateByType( mCodecLooper, outputMIME.c_str(), true /* encoder */); Vector<AString> matchingCodecs; MediaCodecList::findMatchingCodecs( outputMIME.c_str(), true /* encoder */, ((mFlags & FLAG_PREFER_SOFTWARE_CODEC) ? MediaCodecList::kPreferSoftwareCodecs : 0), &matchingCodecs); status_t err = NO_INIT; for (size_t ix = 0; ix < matchingCodecs.size(); ++ix) { mEncoder = MediaCodec::CreateByComponentName( mCodecLooper, matchingCodecs[ix]); if (mEncoder == NULL) { return NO_INIT; continue; } ALOGV("output format is '%s'", mOutputFormat->debugString(0).c_str()); Loading @@ -420,12 +429,19 @@ status_t MediaCodecSource::initEncoder() { mEncoderActivityNotify = new AMessage(kWhatEncoderActivity, mReflector); mEncoder->setCallback(mEncoderActivityNotify); status_t err = mEncoder->configure( err = mEncoder->configure( mOutputFormat, NULL /* nativeWindow */, NULL /* crypto */, MediaCodec::CONFIGURE_FLAG_ENCODE); if (err == OK) { break; } mEncoder->release(); mEncoder = NULL; } if (err != OK) { return err; } Loading