diff --git a/cmds/stagefright/audioloop.cpp b/cmds/stagefright/audioloop.cpp index ed44b4da2b..67017eba2c 100644 --- a/cmds/stagefright/audioloop.cpp +++ b/cmds/stagefright/audioloop.cpp @@ -112,7 +112,7 @@ int main(int argc, char* argv[]) looper->setName("audioloop"); looper->start(); - sp encoder = MediaCodecSource::Create(looper, meta, source); + sp encoder = MediaCodecSource::Create(looper, meta, source); if (fileOut != NULL) { // target file specified, write encoded AMR output @@ -128,7 +128,7 @@ int main(int argc, char* argv[]) writer->stop(); } else { // otherwise decode to speaker - sp decoder = SimpleDecodingSource::Create(encoder); + sp decoder = SimpleDecodingSource::Create(encoder); if (playToSpeaker) { AudioPlayer *player = new AudioPlayer(NULL); diff --git a/cmds/stagefright/record.cpp b/cmds/stagefright/record.cpp index 94c2e96335..69b00c9772 100644 --- a/cmds/stagefright/record.cpp +++ b/cmds/stagefright/record.cpp @@ -320,7 +320,7 @@ int main(int /* argc */, char ** /* argv */) { looper->setName("record"); looper->start(); - sp encoder = + sp encoder = MediaCodecSource::Create(looper, encMeta, audioSource); encoder->start(); diff --git a/cmds/stagefright/recordvideo.cpp b/cmds/stagefright/recordvideo.cpp index 7a3c84282e..af39d4624b 100644 --- a/cmds/stagefright/recordvideo.cpp +++ b/cmds/stagefright/recordvideo.cpp @@ -303,7 +303,7 @@ int main(int argc, char **argv) { looper->setName("recordvideo"); looper->start(); - sp encoder = + sp encoder = MediaCodecSource::Create( looper, enc_meta, source, NULL /* consumer */, preferSoftwareCodec ? MediaCodecSource::FLAG_PREFER_SOFTWARE_CODEC : 0); diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index d70282b375..7a5d12931b 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -141,7 +141,7 @@ static void displayAVCProfileLevelIfPossible(const sp& meta) { } } -static void dumpSource(const sp &source, const String8 &filename) { +static void dumpSource(const sp &source, const String8 &filename) { FILE *out = fopen(filename.string(), "wb"); CHECK_EQ((status_t)OK, source->start()); @@ -174,13 +174,13 @@ static void dumpSource(const sp &source, const String8 &filename) out = NULL; } -static void playSource(sp &source) { +static void playSource(sp &source) { sp meta = source->getFormat(); const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); - sp rawSource; + sp rawSource; if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_RAW, mime)) { rawSource = source; } else { @@ -404,7 +404,7 @@ static void playSource(sp &source) { //////////////////////////////////////////////////////////////////////////////// struct DetectSyncSource : public MediaSource { - explicit DetectSyncSource(const sp &source); + explicit DetectSyncSource(const sp &source); virtual status_t start(MetaData *params = NULL); virtual status_t stop(); @@ -421,14 +421,14 @@ private: OTHER, }; - sp mSource; + sp mSource; StreamType mStreamType; bool mSawFirstIDRFrame; DISALLOW_EVIL_CONSTRUCTORS(DetectSyncSource); }; -DetectSyncSource::DetectSyncSource(const sp &source) +DetectSyncSource::DetectSyncSource(const sp &source) : mSource(source), mStreamType(OTHER), mSawFirstIDRFrame(false) { @@ -510,7 +510,7 @@ status_t DetectSyncSource::read( //////////////////////////////////////////////////////////////////////////////// static void writeSourcesToMP4( - Vector > &sources, bool syncInfoPresent) { + Vector > &sources, bool syncInfoPresent) { #if 0 sp writer = new MPEG4Writer(gWriteMP4Filename.string()); @@ -528,7 +528,7 @@ static void writeSourcesToMP4( writer->setMaxFileDuration(60000000ll); for (size_t i = 0; i < sources.size(); ++i) { - sp source = sources.editItemAt(i); + sp source = sources.editItemAt(i); CHECK_EQ(writer->addSource( syncInfoPresent ? source : new DetectSyncSource(source)), @@ -545,7 +545,7 @@ static void writeSourcesToMP4( writer->stop(); } -static void performSeekTest(const sp &source) { +static void performSeekTest(const sp &source) { CHECK_EQ((status_t)OK, source->start()); int64_t durationUs; @@ -1002,8 +1002,8 @@ int main(int argc, char **argv) { isJPEG = true; } - Vector > mediaSources; - sp mediaSource; + Vector > mediaSources; + sp mediaSource; if (isJPEG) { mediaSource = new JPEGSource(dataSource); @@ -1049,7 +1049,8 @@ int main(int argc, char **argv) { bool haveAudio = false; bool haveVideo = false; for (size_t i = 0; i < numTracks; ++i) { - sp source = extractor->getTrack(i); + sp source = MediaSource::CreateFromIMediaSource( + extractor->getTrack(i)); if (source == nullptr) { fprintf(stderr, "skip NULL track %zu, track count %zu.\n", i, numTracks); continue; @@ -1115,7 +1116,7 @@ int main(int argc, char **argv) { thumbTimeUs, thumbTimeUs / 1E6); } - mediaSource = extractor->getTrack(i); + mediaSource = MediaSource::CreateFromIMediaSource(extractor->getTrack(i)); if (mediaSource == nullptr) { fprintf(stderr, "skip NULL track %zu, total tracks %zu.\n", i, numTracks); return -1; @@ -1128,7 +1129,7 @@ int main(int argc, char **argv) { } else if (dumpStream) { dumpSource(mediaSource, dumpStreamFilename); } else if (dumpPCMStream) { - sp decSource = SimpleDecodingSource::Create(mediaSource); + sp decSource = SimpleDecodingSource::Create(mediaSource); dumpSource(decSource, dumpStreamFilename); } else if (seekTest) { performSeekTest(mediaSource); diff --git a/cmds/stagefright/stream.cpp b/cmds/stagefright/stream.cpp index 2e1d24073c..3b7a0e0aa6 100644 --- a/cmds/stagefright/stream.cpp +++ b/cmds/stagefright/stream.cpp @@ -182,7 +182,7 @@ MyConvertingStreamSource::MyConvertingStreamSource(const char *filename) continue; } - sp track = extractor->getTrack(i); + sp track = MediaSource::CreateFromIMediaSource(extractor->getTrack(i)); if (track == nullptr) { fprintf(stderr, "skip NULL track %zu, total tracks %zu\n", i, numTracks); continue; diff --git a/media/libstagefright/AACExtractor.cpp b/media/libstagefright/AACExtractor.cpp index 7449aa7d90..30fb5fe60a 100644 --- a/media/libstagefright/AACExtractor.cpp +++ b/media/libstagefright/AACExtractor.cpp @@ -213,7 +213,7 @@ size_t AACExtractor::countTracks() { return mInitCheck == OK ? 1 : 0; } -sp AACExtractor::getTrack(size_t index) { +sp AACExtractor::getTrack(size_t index) { if (mInitCheck != OK || index != 0) { return NULL; } diff --git a/media/libstagefright/AACWriter.cpp b/media/libstagefright/AACWriter.cpp index 8b1e1c35e1..9d90dbdbd8 100644 --- a/media/libstagefright/AACWriter.cpp +++ b/media/libstagefright/AACWriter.cpp @@ -67,7 +67,7 @@ status_t AACWriter::initCheck() const { } -status_t AACWriter::addSource(const sp &source) { +status_t AACWriter::addSource(const sp &source) { if (mInitCheck != OK) { return mInitCheck; } diff --git a/media/libstagefright/AMRExtractor.cpp b/media/libstagefright/AMRExtractor.cpp index 2892520c07..8b4d14d42d 100644 --- a/media/libstagefright/AMRExtractor.cpp +++ b/media/libstagefright/AMRExtractor.cpp @@ -186,7 +186,7 @@ size_t AMRExtractor::countTracks() { return mInitCheck == OK ? 1 : 0; } -sp AMRExtractor::getTrack(size_t index) { +sp AMRExtractor::getTrack(size_t index) { if (mInitCheck != OK || index != 0) { return NULL; } diff --git a/media/libstagefright/AMRWriter.cpp b/media/libstagefright/AMRWriter.cpp index 961b57fa9b..f53d7f0bba 100644 --- a/media/libstagefright/AMRWriter.cpp +++ b/media/libstagefright/AMRWriter.cpp @@ -54,7 +54,7 @@ status_t AMRWriter::initCheck() const { return mInitCheck; } -status_t AMRWriter::addSource(const sp &source) { +status_t AMRWriter::addSource(const sp &source) { if (mInitCheck != OK) { return mInitCheck; } diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp index 77a40c946a..5481ae054e 100644 --- a/media/libstagefright/Android.bp +++ b/media/libstagefright/Android.bp @@ -19,6 +19,7 @@ cc_library_shared { "BufferImpl.cpp", "CodecBase.cpp", "CallbackDataSource.cpp", + "CallbackMediaSource.cpp", "CameraSource.cpp", "CameraSourceTimeLapse.cpp", "DataConverter.cpp", @@ -53,6 +54,8 @@ cc_library_shared { "OMXClient.cpp", "OmxInfoBuilder.cpp", "OggExtractor.cpp", + "RemoteMediaExtractor.cpp", + "RemoteMediaSource.cpp", "SampleIterator.cpp", "SampleTable.cpp", "SimpleDecodingSource.cpp", diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp index b3fb8d4906..1d441eb31f 100644 --- a/media/libstagefright/AudioPlayer.cpp +++ b/media/libstagefright/AudioPlayer.cpp @@ -67,7 +67,7 @@ AudioPlayer::~AudioPlayer() { } } -void AudioPlayer::setSource(const sp &source) { +void AudioPlayer::setSource(const sp &source) { CHECK(mSource == NULL); mSource = source; } @@ -363,7 +363,7 @@ void AudioPlayer::reset() { // When offloading, the OMX component is not used so this hack // is not needed if (!useOffload()) { - wp tmp = mSource; + wp tmp = mSource; mSource.clear(); while (tmp.promote() != NULL) { usleep(1000); diff --git a/media/libstagefright/CallbackMediaSource.cpp b/media/libstagefright/CallbackMediaSource.cpp new file mode 100644 index 0000000000..cc7147e6a5 --- /dev/null +++ b/media/libstagefright/CallbackMediaSource.cpp @@ -0,0 +1,50 @@ +/* + * Copyright 2017, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +namespace android { + +CallbackMediaSource::CallbackMediaSource(const sp &source) + :mSource(source) {} + +CallbackMediaSource::~CallbackMediaSource() {} + +status_t CallbackMediaSource::start(MetaData *params) { + return mSource->start(params); +} + +status_t CallbackMediaSource::stop() { + return mSource->stop(); +} + +sp CallbackMediaSource::getFormat() { + return mSource->getFormat(); +} + +status_t CallbackMediaSource::read(MediaBuffer **buffer, const ReadOptions *options) { + return mSource->read(buffer, reinterpret_cast(options)); +} + +status_t CallbackMediaSource::pause() { + return mSource->pause(); +} + +status_t CallbackMediaSource::setBuffers(const Vector &buffers) { + return mSource->setBuffers(buffers); +} + +} // namespace android diff --git a/media/libstagefright/FLACExtractor.cpp b/media/libstagefright/FLACExtractor.cpp index 1b88e5d25d..99315d62a6 100644 --- a/media/libstagefright/FLACExtractor.cpp +++ b/media/libstagefright/FLACExtractor.cpp @@ -811,7 +811,7 @@ size_t FLACExtractor::countTracks() return mInitCheck == OK ? 1 : 0; } -sp FLACExtractor::getTrack(size_t index) +sp FLACExtractor::getTrack(size_t index) { if (mInitCheck != OK || index > 0) { return NULL; diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp index 22df522445..2c696e5529 100644 --- a/media/libstagefright/MP3Extractor.cpp +++ b/media/libstagefright/MP3Extractor.cpp @@ -407,7 +407,7 @@ size_t MP3Extractor::countTracks() { return mInitCheck != OK ? 0 : 1; } -sp MP3Extractor::getTrack(size_t index) { +sp MP3Extractor::getTrack(size_t index) { if (mInitCheck != OK || index != 0) { return NULL; } diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp index 03ea959868..7ed8fceb86 100644 --- a/media/libstagefright/MPEG2TSWriter.cpp +++ b/media/libstagefright/MPEG2TSWriter.cpp @@ -35,7 +35,7 @@ namespace android { struct MPEG2TSWriter::SourceInfo : public AHandler { - explicit SourceInfo(const sp &source); + explicit SourceInfo(const sp &source); void start(const sp ¬ify, const sp ¶ms); void stop(); @@ -69,7 +69,7 @@ private: kWhatRead = 'read', }; - sp mSource; + sp mSource; sp mLooper; sp mNotify; @@ -91,7 +91,7 @@ private: DISALLOW_EVIL_CONSTRUCTORS(SourceInfo); }; -MPEG2TSWriter::SourceInfo::SourceInfo(const sp &source) +MPEG2TSWriter::SourceInfo::SourceInfo(const sp &source) : mSource(source), mLooper(new ALooper), mEOSReceived(false), @@ -499,7 +499,7 @@ MPEG2TSWriter::~MPEG2TSWriter() { } } -status_t MPEG2TSWriter::addSource(const sp &source) { +status_t MPEG2TSWriter::addSource(const sp &source) { CHECK(!mStarted); sp meta = source->getFormat(); diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index f112b1008a..e130b4a22b 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -3344,7 +3344,7 @@ void MPEG4Extractor::parseID3v2MetaData(off64_t offset) { } } -sp MPEG4Extractor::getTrack(size_t index) { +sp MPEG4Extractor::getTrack(size_t index) { status_t err; if ((err = readMetaData()) != OK) { return NULL; diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 7786c4de0c..8c121b38c3 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -100,7 +100,7 @@ static const uint8_t kHevcNalUnitTypes[5] = { class MPEG4Writer::Track { public: - Track(MPEG4Writer *owner, const sp &source, size_t trackId); + Track(MPEG4Writer *owner, const sp &source, size_t trackId); ~Track(); @@ -271,7 +271,7 @@ private: MPEG4Writer *mOwner; sp mMeta; - sp mSource; + sp mSource; volatile bool mDone; volatile bool mPaused; volatile bool mResumed; @@ -572,7 +572,7 @@ const char *MPEG4Writer::Track::getFourCCForMime(const char *mime) { return NULL; } -status_t MPEG4Writer::addSource(const sp &source) { +status_t MPEG4Writer::addSource(const sp &source) { Mutex::Autolock l(mLock); if (mStarted) { ALOGE("Attempt to add source AFTER recording is started"); @@ -1626,7 +1626,7 @@ size_t MPEG4Writer::numTracks() { //////////////////////////////////////////////////////////////////////////////// MPEG4Writer::Track::Track( - MPEG4Writer *owner, const sp &source, size_t trackId) + MPEG4Writer *owner, const sp &source, size_t trackId) : mOwner(owner), mMeta(source->getFormat()), mSource(source), diff --git a/media/libstagefright/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp index 26b8fd3d32..14e6251fc5 100644 --- a/media/libstagefright/MediaExtractor.cpp +++ b/media/libstagefright/MediaExtractor.cpp @@ -43,7 +43,10 @@ #include #include #include +#include +#include #include +#include #include #include #include @@ -92,6 +95,10 @@ MediaExtractor::~MediaExtractor() { } } +sp MediaExtractor::asIMediaExtractor() { + return RemoteMediaExtractor::wrap(sp(this)); +} + sp MediaExtractor::getMetaData() { return new MetaData; } @@ -125,7 +132,8 @@ sp MediaExtractor::Create( if (!property_get_bool("media.stagefright.extractremote", true)) { // local extractor ALOGW("creating media extractor in calling process"); - return CreateFromService(source, mime); + sp extractor = CreateFromService(source, mime); + return (extractor.get() == nullptr) ? nullptr : extractor->asIMediaExtractor(); } else { // remote extractor ALOGV("get service manager"); diff --git a/media/libstagefright/MediaSource.cpp b/media/libstagefright/MediaSource.cpp index a17757a8eb..8b92a6be6c 100644 --- a/media/libstagefright/MediaSource.cpp +++ b/media/libstagefright/MediaSource.cpp @@ -14,7 +14,9 @@ * limitations under the License. */ +#include #include +#include namespace android { @@ -22,4 +24,16 @@ MediaSource::MediaSource() {} MediaSource::~MediaSource() {} +// static +sp MediaSource::CreateFromIMediaSource(const sp &source) { + if (source == nullptr) { + return nullptr; + } + return new CallbackMediaSource(source); +} + +sp MediaSource::asIMediaSource() { + return RemoteMediaSource::wrap(sp(this)); +} + } // namespace android diff --git a/media/libstagefright/MidiExtractor.cpp b/media/libstagefright/MidiExtractor.cpp index 7930bbb63c..89cfa3c7d3 100644 --- a/media/libstagefright/MidiExtractor.cpp +++ b/media/libstagefright/MidiExtractor.cpp @@ -282,7 +282,7 @@ size_t MidiExtractor::countTracks() return mInitCheck == OK ? 1 : 0; } -sp MidiExtractor::getTrack(size_t index) +sp MidiExtractor::getTrack(size_t index) { if (mInitCheck != OK || index > 0) { return NULL; diff --git a/media/libstagefright/OggExtractor.cpp b/media/libstagefright/OggExtractor.cpp index 810b0d63aa..0e09ccb291 100644 --- a/media/libstagefright/OggExtractor.cpp +++ b/media/libstagefright/OggExtractor.cpp @@ -1344,7 +1344,7 @@ size_t OggExtractor::countTracks() { return mInitCheck != OK ? 0 : 1; } -sp OggExtractor::getTrack(size_t index) { +sp OggExtractor::getTrack(size_t index) { if (index >= 1) { return NULL; } diff --git a/media/libstagefright/RemoteMediaExtractor.cpp b/media/libstagefright/RemoteMediaExtractor.cpp new file mode 100644 index 0000000000..db2c20c5e0 --- /dev/null +++ b/media/libstagefright/RemoteMediaExtractor.cpp @@ -0,0 +1,82 @@ +/* + * Copyright 2017, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace android { + +RemoteMediaExtractor::RemoteMediaExtractor(const sp &extractor) + :mExtractor(extractor) {} + +RemoteMediaExtractor::~RemoteMediaExtractor() {} + +size_t RemoteMediaExtractor::countTracks() { + return mExtractor->countTracks(); +} + +sp RemoteMediaExtractor::getTrack(size_t index) { + sp source = mExtractor->getTrack(index); + return (source.get() == nullptr) ? nullptr : source->asIMediaSource(); +} + +sp RemoteMediaExtractor::getTrackMetaData(size_t index, uint32_t flags) { + return mExtractor->getTrackMetaData(index, flags); +} + +sp RemoteMediaExtractor::getMetaData() { + return mExtractor->getMetaData(); +} + +status_t RemoteMediaExtractor::getMetrics(Parcel *reply) { + return mExtractor->getMetrics(reply); +} + +uint32_t RemoteMediaExtractor::flags() const { + return mExtractor->flags(); +} + +char* RemoteMediaExtractor::getDrmTrackInfo(size_t trackID, int * len) { + return mExtractor->getDrmTrackInfo(trackID, len); +} + +void RemoteMediaExtractor::setUID(uid_t uid) { + return mExtractor->setUID(uid); +} + +status_t RemoteMediaExtractor::setMediaCas(const HInterfaceToken &casToken) { + return mExtractor->setMediaCas(casToken); +} + +const char * RemoteMediaExtractor::name() { + return mExtractor->name(); +} + +void RemoteMediaExtractor::release() { + return mExtractor->release(); +} + +//////////////////////////////////////////////////////////////////////////////// + +// static +sp RemoteMediaExtractor::wrap(const sp &extractor) { + if (extractor.get() == nullptr) { + return nullptr; + } + return new RemoteMediaExtractor(extractor); +} + +} // namespace android diff --git a/media/libstagefright/RemoteMediaSource.cpp b/media/libstagefright/RemoteMediaSource.cpp new file mode 100644 index 0000000000..4060526e9e --- /dev/null +++ b/media/libstagefright/RemoteMediaSource.cpp @@ -0,0 +1,64 @@ +/* + * Copyright 2017, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +namespace android { + +RemoteMediaSource::RemoteMediaSource(const sp &source) + :mSource(source) {} + +RemoteMediaSource::~RemoteMediaSource() {} + +status_t RemoteMediaSource::start(MetaData *params) { + return mSource->start(params); +} + +status_t RemoteMediaSource::stop() { + return mSource->stop(); +} + +sp RemoteMediaSource::getFormat() { + return mSource->getFormat(); +} + +status_t RemoteMediaSource::read(MediaBuffer **buffer, const ReadOptions *options) { + return mSource->read(buffer, reinterpret_cast(options)); +} + +status_t RemoteMediaSource::pause() { + return mSource->pause(); +} + +status_t RemoteMediaSource::setBuffers(const Vector &buffers) { + return mSource->setBuffers(buffers); +} + +status_t RemoteMediaSource::setStopTimeUs(int64_t stopTimeUs) { + return mSource->setStopTimeUs(stopTimeUs); +} + +//////////////////////////////////////////////////////////////////////////////// + +// static +sp RemoteMediaSource::wrap(const sp &source) { + if (source.get() == nullptr) { + return nullptr; + } + return new RemoteMediaSource(source); +} + +} // namespace android diff --git a/media/libstagefright/SimpleDecodingSource.cpp b/media/libstagefright/SimpleDecodingSource.cpp index 90b8603864..67e6748422 100644 --- a/media/libstagefright/SimpleDecodingSource.cpp +++ b/media/libstagefright/SimpleDecodingSource.cpp @@ -36,13 +36,13 @@ const int64_t kTimeoutWaitForInputUs = 5000; // 5 milliseconds //static sp SimpleDecodingSource::Create( - const sp &source, uint32_t flags) { + const sp &source, uint32_t flags) { return SimpleDecodingSource::Create(source, flags, nullptr, nullptr); } //static sp SimpleDecodingSource::Create( - const sp &source, uint32_t flags, const sp &nativeWindow, + const sp &source, uint32_t flags, const sp &nativeWindow, const char *desiredCodec) { sp surface = static_cast(nativeWindow.get()); const char *mime = NULL; @@ -99,7 +99,7 @@ sp SimpleDecodingSource::Create( } SimpleDecodingSource::SimpleDecodingSource( - const sp &codec, const sp &source, const sp &looper, + const sp &codec, const sp &source, const sp &looper, bool usingSurface, bool isVorbis, const sp &format) : mCodec(codec), mSource(source), @@ -212,7 +212,7 @@ status_t SimpleDecodingSource::doRead( status_t res; // flush codec on seek - IMediaSource::ReadOptions::SeekMode mode; + MediaSource::ReadOptions::SeekMode mode; if (options != NULL && options->getSeekTo(&out_pts, &mode)) { me->mQueuedInputEOS = false; me->mGotOutputEOS = false; diff --git a/media/libstagefright/WAVExtractor.cpp b/media/libstagefright/WAVExtractor.cpp index 780b746359..18bf4ae78e 100644 --- a/media/libstagefright/WAVExtractor.cpp +++ b/media/libstagefright/WAVExtractor.cpp @@ -120,7 +120,7 @@ size_t WAVExtractor::countTracks() { return mInitCheck == OK ? 1 : 0; } -sp WAVExtractor::getTrack(size_t index) { +sp WAVExtractor::getTrack(size_t index) { if (mInitCheck != OK || index > 0) { return NULL; } diff --git a/media/libstagefright/include/AACExtractor.h b/media/libstagefright/include/AACExtractor.h index bd4c41c579..91e2eed2cc 100644 --- a/media/libstagefright/include/AACExtractor.h +++ b/media/libstagefright/include/AACExtractor.h @@ -32,7 +32,7 @@ public: AACExtractor(const sp &source, const sp &meta); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/AMRExtractor.h b/media/libstagefright/include/AMRExtractor.h index 8abcb12d81..06cd387351 100644 --- a/media/libstagefright/include/AMRExtractor.h +++ b/media/libstagefright/include/AMRExtractor.h @@ -32,7 +32,7 @@ public: explicit AMRExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/FLACExtractor.h b/media/libstagefright/include/FLACExtractor.h index 51bc139f41..e945cf6ade 100644 --- a/media/libstagefright/include/FLACExtractor.h +++ b/media/libstagefright/include/FLACExtractor.h @@ -32,7 +32,7 @@ public: explicit FLACExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/MP3Extractor.h b/media/libstagefright/include/MP3Extractor.h index 2fd04f28c2..2b16c24a75 100644 --- a/media/libstagefright/include/MP3Extractor.h +++ b/media/libstagefright/include/MP3Extractor.h @@ -34,7 +34,7 @@ public: MP3Extractor(const sp &source, const sp &meta); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/MPEG2PSExtractor.h b/media/libstagefright/include/MPEG2PSExtractor.h index f5471b3186..75e134640c 100644 --- a/media/libstagefright/include/MPEG2PSExtractor.h +++ b/media/libstagefright/include/MPEG2PSExtractor.h @@ -34,7 +34,7 @@ struct MPEG2PSExtractor : public MediaExtractor { explicit MPEG2PSExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/MPEG2TSExtractor.h b/media/libstagefright/include/MPEG2TSExtractor.h index ac93b5efb7..1702157c5c 100644 --- a/media/libstagefright/include/MPEG2TSExtractor.h +++ b/media/libstagefright/include/MPEG2TSExtractor.h @@ -40,7 +40,7 @@ struct MPEG2TSExtractor : public MediaExtractor { explicit MPEG2TSExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/MPEG4Extractor.h b/media/libstagefright/include/MPEG4Extractor.h index 214a3dec10..bd404d2fcf 100644 --- a/media/libstagefright/include/MPEG4Extractor.h +++ b/media/libstagefright/include/MPEG4Extractor.h @@ -56,7 +56,7 @@ public: explicit MPEG4Extractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/MidiExtractor.h b/media/libstagefright/include/MidiExtractor.h index 94d2d086f0..87a4a0270a 100644 --- a/media/libstagefright/include/MidiExtractor.h +++ b/media/libstagefright/include/MidiExtractor.h @@ -56,7 +56,7 @@ public: explicit MidiExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/OggExtractor.h b/media/libstagefright/include/OggExtractor.h index 55aafed1d0..c01850f1bc 100644 --- a/media/libstagefright/include/OggExtractor.h +++ b/media/libstagefright/include/OggExtractor.h @@ -34,7 +34,7 @@ struct OggExtractor : public MediaExtractor { explicit OggExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/WAVExtractor.h b/media/libstagefright/include/WAVExtractor.h index 12ad441cd3..dbcbe86eff 100644 --- a/media/libstagefright/include/WAVExtractor.h +++ b/media/libstagefright/include/WAVExtractor.h @@ -33,7 +33,7 @@ public: explicit WAVExtractor(const sp &source); virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData(size_t index, uint32_t flags); virtual sp getMetaData(); diff --git a/media/libstagefright/include/media/stagefright/AACWriter.h b/media/libstagefright/include/media/stagefright/AACWriter.h index a1f63d7ec1..aa60a19453 100644 --- a/media/libstagefright/include/media/stagefright/AACWriter.h +++ b/media/libstagefright/include/media/stagefright/AACWriter.h @@ -31,7 +31,7 @@ struct AACWriter : public MediaWriter { status_t initCheck() const; - virtual status_t addSource(const sp &source); + virtual status_t addSource(const sp &source); virtual bool reachedEOS(); virtual status_t start(MetaData *params = NULL); virtual status_t stop() { return reset(); } @@ -48,7 +48,7 @@ private: int mFd; status_t mInitCheck; - sp mSource; + sp mSource; bool mStarted; volatile bool mPaused; volatile bool mResumed; diff --git a/media/libstagefright/include/media/stagefright/AMRWriter.h b/media/libstagefright/include/media/stagefright/AMRWriter.h index fbbdf2e436..7d2c879b69 100644 --- a/media/libstagefright/include/media/stagefright/AMRWriter.h +++ b/media/libstagefright/include/media/stagefright/AMRWriter.h @@ -20,7 +20,6 @@ #include -#include #include #include @@ -33,7 +32,7 @@ struct AMRWriter : public MediaWriter { status_t initCheck() const; - virtual status_t addSource(const sp &source); + virtual status_t addSource(const sp &source); virtual bool reachedEOS(); virtual status_t start(MetaData *params = NULL); virtual status_t stop() { return reset(); } @@ -45,7 +44,7 @@ protected: private: int mFd; status_t mInitCheck; - sp mSource; + sp mSource; bool mStarted; volatile bool mPaused; volatile bool mResumed; diff --git a/media/libstagefright/include/media/stagefright/AudioPlayer.h b/media/libstagefright/include/media/stagefright/AudioPlayer.h index f7499b6afc..581ead9872 100644 --- a/media/libstagefright/include/media/stagefright/AudioPlayer.h +++ b/media/libstagefright/include/media/stagefright/AudioPlayer.h @@ -18,9 +18,9 @@ #define AUDIO_PLAYER_H_ -#include #include #include +#include #include namespace android { @@ -50,7 +50,7 @@ public: virtual ~AudioPlayer(); // Caller retains ownership of "source". - void setSource(const sp &source); + void setSource(const sp &source); status_t start(bool sourceAlreadyStarted = false); @@ -66,7 +66,7 @@ public: status_t getPlaybackRate(AudioPlaybackRate *rate /* nonnull */); private: - sp mSource; + sp mSource; sp mAudioTrack; MediaBuffer *mInputBuffer; diff --git a/media/libstagefright/include/media/stagefright/CallbackMediaSource.h b/media/libstagefright/include/media/stagefright/CallbackMediaSource.h new file mode 100644 index 0000000000..17fca4eb99 --- /dev/null +++ b/media/libstagefright/include/media/stagefright/CallbackMediaSource.h @@ -0,0 +1,46 @@ +/* + * Copyright 2017, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CALLBACK_MEDIA_SOURCE_H_ +#define CALLBACK_MEDIA_SOURCE_H_ + +#include +#include + +namespace android { + +// A stagefright MediaSource that wraps a binder IMediaSource. +class CallbackMediaSource : public MediaSource { +public: + explicit CallbackMediaSource(const sp &source); + virtual ~CallbackMediaSource(); + virtual status_t start(MetaData *params = NULL); + virtual status_t stop(); + virtual sp getFormat(); + virtual status_t read( + MediaBuffer **buffer, const ReadOptions *options = NULL); + virtual status_t pause(); + virtual status_t setBuffers(const Vector &buffers); + +private: + sp mSource; + + DISALLOW_EVIL_CONSTRUCTORS(CallbackMediaSource); +}; + +} // namespace android + +#endif // CALLBACK_MEDIA_SOURCE_H_ diff --git a/media/libstagefright/include/media/stagefright/MPEG2TSWriter.h b/media/libstagefright/include/media/stagefright/MPEG2TSWriter.h index 4516fb6ddc..3d7960bd2a 100644 --- a/media/libstagefright/include/media/stagefright/MPEG2TSWriter.h +++ b/media/libstagefright/include/media/stagefright/MPEG2TSWriter.h @@ -34,7 +34,7 @@ struct MPEG2TSWriter : public MediaWriter { void *cookie, ssize_t (*write)(void *cookie, const void *data, size_t size)); - virtual status_t addSource(const sp &source); + virtual status_t addSource(const sp &source); virtual status_t start(MetaData *param = NULL); virtual status_t stop() { return reset(); } virtual status_t pause(); diff --git a/media/libstagefright/include/media/stagefright/MPEG4Writer.h b/media/libstagefright/include/media/stagefright/MPEG4Writer.h index 1c7b4a6a84..eba3b328f0 100644 --- a/media/libstagefright/include/media/stagefright/MPEG4Writer.h +++ b/media/libstagefright/include/media/stagefright/MPEG4Writer.h @@ -20,7 +20,6 @@ #include -#include #include #include #include @@ -40,7 +39,7 @@ public: // Limitations // No more than one video and/or one audio source can be added, but // multiple metadata sources can be added. - virtual status_t addSource(const sp &source); + virtual status_t addSource(const sp &source); // Returns INVALID_OPERATION if there is no source or track. virtual status_t start(MetaData *param = NULL); diff --git a/media/libstagefright/include/media/stagefright/MediaExtractor.h b/media/libstagefright/include/media/stagefright/MediaExtractor.h index 6ec7eafc7d..f8eb7fddd0 100644 --- a/media/libstagefright/include/media/stagefright/MediaExtractor.h +++ b/media/libstagefright/include/media/stagefright/MediaExtractor.h @@ -19,15 +19,15 @@ #define MEDIA_EXTRACTOR_H_ #include -#include #include namespace android { + class DataSource; struct MediaSource; class MetaData; -class MediaExtractor : public BnMediaExtractor { +class MediaExtractor : public RefBase { public: static sp Create( const sp &source, const char *mime = NULL); @@ -35,7 +35,7 @@ public: const sp &source, const char *mime = NULL); virtual size_t countTracks() = 0; - virtual sp getTrack(size_t index) = 0; + virtual sp getTrack(size_t index) = 0; enum GetTrackMetaDataFlags { kIncludeExtensiveMetaData = 1 @@ -60,13 +60,16 @@ public: // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE virtual uint32_t flags() const; + // Creates an IMediaExtractor wrapper to this MediaExtractor. + virtual sp asIMediaExtractor(); + // for DRM virtual char* getDrmTrackInfo(size_t /*trackID*/, int * /*len*/) { return NULL; } virtual void setUID(uid_t /*uid*/) { } - virtual status_t setMediaCas(const HInterfaceToken &/*casToken*/) override { + virtual status_t setMediaCas(const HInterfaceToken &/*casToken*/) { return INVALID_OPERATION; } diff --git a/media/libstagefright/include/media/stagefright/MediaSource.h b/media/libstagefright/include/media/stagefright/MediaSource.h index 14adb0524a..7e30e308e8 100644 --- a/media/libstagefright/include/media/stagefright/MediaSource.h +++ b/media/libstagefright/include/media/stagefright/MediaSource.h @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -29,8 +30,18 @@ namespace android { class MediaBuffer; class MetaData; +class IMediaSource; + +struct MediaSource : public virtual RefBase { + // TODO: Move ReadOptions implementation from IMediaSource to MediaSource + // once this class moves to a separate extractor lib on which both libmedia + // and libstagefright rely. For now, alias is added to avoid circular + // dependency. + using ReadOptions = IMediaSource::ReadOptions; + + // Creates a MediaSource which wraps the given IMediaSource object. + static sp CreateFromIMediaSource(const sp &source); -struct MediaSource : public BnMediaSource { MediaSource(); // To be called before any other methods on this object, except @@ -92,6 +103,9 @@ struct MediaSource : public BnMediaSource { return ERROR_UNSUPPORTED; } + // Creates an IMediaSource wrapper to this MediaSource. + virtual sp asIMediaSource(); + protected: virtual ~MediaSource(); diff --git a/media/libstagefright/include/media/stagefright/MediaWriter.h b/media/libstagefright/include/media/stagefright/MediaWriter.h index cd4af4d22a..80c535854c 100644 --- a/media/libstagefright/include/media/stagefright/MediaWriter.h +++ b/media/libstagefright/include/media/stagefright/MediaWriter.h @@ -20,7 +20,7 @@ #include #include -#include +#include namespace android { @@ -32,7 +32,7 @@ struct MediaWriter : public RefBase { mMaxFileDurationLimitUs(0) { } - virtual status_t addSource(const sp &source) = 0; + virtual status_t addSource(const sp &source) = 0; virtual bool reachedEOS() = 0; virtual status_t start(MetaData *params = NULL) = 0; virtual status_t stop() = 0; diff --git a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h new file mode 100644 index 0000000000..96611d1e3c --- /dev/null +++ b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h @@ -0,0 +1,53 @@ +/* + * Copyright 2017, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef REMOTE_MEDIA_EXTRACTOR_H_ +#define REMOTE_MEDIA_EXTRACTOR_H_ + +#include +#include + +namespace android { + +// IMediaExtractor wrapper to the MediaExtractor. +class RemoteMediaExtractor : public BnMediaExtractor { +public: + static sp wrap(const sp &extractor); + + virtual ~RemoteMediaExtractor(); + virtual size_t countTracks(); + virtual sp getTrack(size_t index); + virtual sp getTrackMetaData(size_t index, uint32_t flags = 0); + virtual sp getMetaData(); + virtual status_t getMetrics(Parcel *reply); + virtual uint32_t flags() const; + virtual char* getDrmTrackInfo(size_t trackID, int * len); + virtual void setUID(uid_t uid); + virtual status_t setMediaCas(const HInterfaceToken &casToken); + virtual const char * name(); + virtual void release(); + +private: + sp mExtractor; + + explicit RemoteMediaExtractor(const sp &extractor); + + DISALLOW_EVIL_CONSTRUCTORS(RemoteMediaExtractor); +}; + +} // namespace android + +#endif // REMOTE_MEDIA_EXTRACTOR_H_ diff --git a/media/libstagefright/include/media/stagefright/RemoteMediaSource.h b/media/libstagefright/include/media/stagefright/RemoteMediaSource.h new file mode 100644 index 0000000000..273111417e --- /dev/null +++ b/media/libstagefright/include/media/stagefright/RemoteMediaSource.h @@ -0,0 +1,50 @@ +/* + * Copyright 2017, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef REMOTE_MEDIA_SOURCE_H_ +#define REMOTE_MEDIA_SOURCE_H_ + +#include +#include +#include + +namespace android { + +// IMediaSrouce wrapper to the MediaSource. +class RemoteMediaSource : public BnMediaSource { +public: + static sp wrap(const sp &source); + virtual ~RemoteMediaSource(); + virtual status_t start(MetaData *params = NULL); + virtual status_t stop(); + virtual sp getFormat(); + virtual status_t read( + MediaBuffer **buffer, const ReadOptions *options = NULL); + virtual status_t pause(); + virtual status_t setBuffers(const Vector &buffers); + virtual status_t setStopTimeUs(int64_t stopTimeUs); + +private: + sp mSource; + + explicit RemoteMediaSource(const sp &source); + + DISALLOW_EVIL_CONSTRUCTORS(RemoteMediaSource); +}; + +} // namespace android + +#endif // REMOTE_MEDIA_SOURCE_H_ diff --git a/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h b/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h index a000fdea82..b8d141a029 100644 --- a/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h +++ b/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h @@ -45,12 +45,12 @@ public: // does not support secure input or pausing. // if |desiredCodec| is given, use this specific codec. static sp Create( - const sp &source, uint32_t flags, + const sp &source, uint32_t flags, const sp &nativeWindow, const char *desiredCodec = NULL); static sp Create( - const sp &source, uint32_t flags = 0); + const sp &source, uint32_t flags = 0); virtual ~SimpleDecodingSource(); @@ -73,11 +73,11 @@ public: private: // Construct this using a codec, source and looper. SimpleDecodingSource( - const sp &codec, const sp &source, const sp &looper, + const sp &codec, const sp &source, const sp &looper, bool usingSurface, bool isVorbis, const sp &format); sp mCodec; - sp mSource; + sp mSource; sp mLooper; bool mUsingSurface; bool mIsVorbis; diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp index 4b38906dc7..487603cc0c 100644 --- a/media/libstagefright/matroska/MatroskaExtractor.cpp +++ b/media/libstagefright/matroska/MatroskaExtractor.cpp @@ -899,7 +899,7 @@ size_t MatroskaExtractor::countTracks() { return mTracks.size(); } -sp MatroskaExtractor::getTrack(size_t index) { +sp MatroskaExtractor::getTrack(size_t index) { if (index >= mTracks.size()) { return NULL; } diff --git a/media/libstagefright/matroska/MatroskaExtractor.h b/media/libstagefright/matroska/MatroskaExtractor.h index 19775ce808..832463fffc 100644 --- a/media/libstagefright/matroska/MatroskaExtractor.h +++ b/media/libstagefright/matroska/MatroskaExtractor.h @@ -38,7 +38,7 @@ struct MatroskaExtractor : public MediaExtractor { virtual size_t countTracks(); - virtual sp getTrack(size_t index); + virtual sp getTrack(size_t index); virtual sp getTrackMetaData( size_t index, uint32_t flags); diff --git a/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp index 078a5f0cae..0f18facf19 100644 --- a/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp +++ b/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp @@ -125,7 +125,7 @@ size_t MPEG2PSExtractor::countTracks() { return mTracks.size(); } -sp MPEG2PSExtractor::getTrack(size_t index) { +sp MPEG2PSExtractor::getTrack(size_t index) { if (index >= mTracks.size()) { return NULL; } diff --git a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp index 9d684e0d4b..b66af7bcf0 100644 --- a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp +++ b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp @@ -129,7 +129,7 @@ size_t MPEG2TSExtractor::countTracks() { return mSourceImpls.size(); } -sp MPEG2TSExtractor::getTrack(size_t index) { +sp MPEG2TSExtractor::getTrack(size_t index) { if (index >= mSourceImpls.size()) { return NULL; } diff --git a/media/libstagefright/omx/tests/OMXHarness.cpp b/media/libstagefright/omx/tests/OMXHarness.cpp index 326643907a..4b624f2f33 100644 --- a/media/libstagefright/omx/tests/OMXHarness.cpp +++ b/media/libstagefright/omx/tests/OMXHarness.cpp @@ -543,7 +543,7 @@ static const char *GetURLForMime(const char *mime) { return NULL; } -static sp CreateSourceForMime(const char *mime) { +static sp CreateSourceForMime(const char *mime) { const char *url = GetURLForMime(mime); if (url == NULL) { @@ -564,7 +564,7 @@ static sp CreateSourceForMime(const char *mime) { CHECK(meta->findCString(kKeyMIMEType, &trackMime)); if (!strcasecmp(mime, trackMime)) { - return extractor->getTrack(i); + return MediaSource::CreateFromIMediaSource(extractor->getTrack(i)); } } @@ -610,7 +610,7 @@ status_t Harness::testSeek( return OK; } - sp source = CreateSourceForMime(mime); + sp source = CreateSourceForMime(mime); if (source == NULL) { printf(" * Unable to open test content for type '%s', " @@ -620,14 +620,14 @@ status_t Harness::testSeek( return OK; } - sp seekSource = CreateSourceForMime(mime); + sp seekSource = CreateSourceForMime(mime); if (source == NULL || seekSource == NULL) { return UNKNOWN_ERROR; } CHECK_EQ(seekSource->start(), (status_t)OK); - sp codec = SimpleDecodingSource::Create( + sp codec = SimpleDecodingSource::Create( source, 0 /* flags */, NULL /* nativeWindow */, componentName); CHECK(codec != NULL); diff --git a/media/libstagefright/rtsp/ARTPWriter.cpp b/media/libstagefright/rtsp/ARTPWriter.cpp index 1f6b6f7de1..56c4aa6ec3 100644 --- a/media/libstagefright/rtsp/ARTPWriter.cpp +++ b/media/libstagefright/rtsp/ARTPWriter.cpp @@ -104,7 +104,7 @@ ARTPWriter::~ARTPWriter() { mFd = -1; } -status_t ARTPWriter::addSource(const sp &source) { +status_t ARTPWriter::addSource(const sp &source) { mSource = source; return OK; } diff --git a/media/libstagefright/rtsp/ARTPWriter.h b/media/libstagefright/rtsp/ARTPWriter.h index 3c7042e5be..92a64f278d 100644 --- a/media/libstagefright/rtsp/ARTPWriter.h +++ b/media/libstagefright/rtsp/ARTPWriter.h @@ -37,7 +37,7 @@ class MediaBuffer; struct ARTPWriter : public MediaWriter { explicit ARTPWriter(int fd); - virtual status_t addSource(const sp &source); + virtual status_t addSource(const sp &source); virtual bool reachedEOS(); virtual status_t start(MetaData *params); virtual status_t stop(); @@ -72,7 +72,7 @@ private: int mRTCPFd; #endif - sp mSource; + sp mSource; sp mLooper; sp > mReflector; diff --git a/media/libstagefright/webm/WebmFrameThread.cpp b/media/libstagefright/webm/WebmFrameThread.cpp index 71bfbc90c8..420890b152 100644 --- a/media/libstagefright/webm/WebmFrameThread.cpp +++ b/media/libstagefright/webm/WebmFrameThread.cpp @@ -252,7 +252,7 @@ void WebmFrameMediaSourceThread::clearFlags() { } WebmFrameMediaSourceThread::WebmFrameMediaSourceThread( - const sp& source, + const sp& source, int type, LinkedBlockingQueue >& sink, uint64_t timeCodeScale, diff --git a/media/libstagefright/webm/WebmFrameThread.h b/media/libstagefright/webm/WebmFrameThread.h index 528984fd53..d65d9b7582 100644 --- a/media/libstagefright/webm/WebmFrameThread.h +++ b/media/libstagefright/webm/WebmFrameThread.h @@ -123,7 +123,7 @@ public: class WebmFrameMediaSourceThread: public WebmFrameSourceThread { public: WebmFrameMediaSourceThread( - const sp& source, + const sp& source, int type, LinkedBlockingQueue >& sink, uint64_t timeCodeScale, @@ -142,7 +142,7 @@ public: } private: - const sp mSource; + const sp mSource; const uint64_t mTimeCodeScale; uint64_t mStartTimeUs; diff --git a/media/libstagefright/webm/WebmWriter.cpp b/media/libstagefright/webm/WebmWriter.cpp index d6c6930cae..4d73eb8ea4 100644 --- a/media/libstagefright/webm/WebmWriter.cpp +++ b/media/libstagefright/webm/WebmWriter.cpp @@ -360,7 +360,7 @@ status_t WebmWriter::reset() { return err; } -status_t WebmWriter::addSource(const sp &source) { +status_t WebmWriter::addSource(const sp &source) { Mutex::Autolock l(mLock); if (mStarted) { ALOGE("Attempt to add source AFTER recording is started"); diff --git a/media/libstagefright/webm/WebmWriter.h b/media/libstagefright/webm/WebmWriter.h index 9f3b19fb0c..ed5bc4c93e 100644 --- a/media/libstagefright/webm/WebmWriter.h +++ b/media/libstagefright/webm/WebmWriter.h @@ -40,7 +40,7 @@ public: ~WebmWriter() { reset(); } - virtual status_t addSource(const sp &source); + virtual status_t addSource(const sp &source); virtual status_t start(MetaData *param = NULL); virtual status_t stop(); virtual status_t pause(); @@ -85,7 +85,7 @@ private: const char *mName; sp (*mMakeTrack)(const sp&); - sp mSource; + sp mSource; sp mTrackEntry; sp mThread; LinkedBlockingQueue > mSink; diff --git a/services/mediaextractor/MediaExtractorService.cpp b/services/mediaextractor/MediaExtractorService.cpp index 08cbef692a..50a41913bd 100644 --- a/services/mediaextractor/MediaExtractorService.cpp +++ b/services/mediaextractor/MediaExtractorService.cpp @@ -33,17 +33,18 @@ sp MediaExtractorService::makeExtractor( sp localSource = DataSource::CreateFromIDataSource(remoteSource); - sp ret = MediaExtractor::CreateFromService(localSource, mime); + sp extractor = MediaExtractor::CreateFromService(localSource, mime); ALOGV("extractor service created %p (%s)", - ret.get(), - ret == NULL ? "" : ret->name()); + extractor.get(), + extractor == nullptr ? "" : extractor->name()); - if (ret != NULL) { + if (extractor != nullptr) { + sp ret = extractor->asIMediaExtractor(); registerMediaExtractor(ret, localSource, mime); + return ret; } - - return ret; + return nullptr; } sp MediaExtractorService::makeIDataSource(int fd, int64_t offset, int64_t length)