Loading media/libmediaplayerservice/nuplayer/GenericSource.cpp +170 −16 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include <media/stagefright/MediaExtractor.h> #include <media/stagefright/MediaExtractor.h> #include <media/stagefright/MediaSource.h> #include <media/stagefright/MediaSource.h> #include <media/stagefright/MetaData.h> #include <media/stagefright/MetaData.h> #include <media/stagefright/Utils.h> #include "../../libstagefright/include/DRMExtractor.h" #include "../../libstagefright/include/DRMExtractor.h" #include "../../libstagefright/include/NuCachedSource2.h" #include "../../libstagefright/include/NuCachedSource2.h" #include "../../libstagefright/include/WVMExtractor.h" #include "../../libstagefright/include/WVMExtractor.h" Loading Loading @@ -318,7 +319,14 @@ void NuPlayer::GenericSource::onPrepareAsync() { } } if (mVideoTrack.mSource != NULL) { if (mVideoTrack.mSource != NULL) { notifyVideoSizeChanged(getFormat(false /* audio */)); sp<MetaData> meta = doGetFormatMeta(false /* audio */); sp<AMessage> msg = new AMessage; err = convertMetaDataToMessage(meta, &msg); if(err != OK) { notifyPreparedAndCleanup(err); return; } notifyVideoSizeChanged(msg); } } notifyFlagsChanged( notifyFlagsChanged( Loading Loading @@ -422,7 +430,7 @@ void NuPlayer::GenericSource::start() { mAudioTrack.mPackets = mAudioTrack.mPackets = new AnotherPacketSource(mAudioTrack.mSource->getFormat()); new AnotherPacketSource(mAudioTrack.mSource->getFormat()); readBuffer(MEDIA_TRACK_TYPE_AUDIO); postReadBuffer(MEDIA_TRACK_TYPE_AUDIO); } } if (mVideoTrack.mSource != NULL) { if (mVideoTrack.mSource != NULL) { Loading @@ -430,7 +438,7 @@ void NuPlayer::GenericSource::start() { mVideoTrack.mPackets = mVideoTrack.mPackets = new AnotherPacketSource(mVideoTrack.mSource->getFormat()); new AnotherPacketSource(mVideoTrack.mSource->getFormat()); readBuffer(MEDIA_TRACK_TYPE_VIDEO); postReadBuffer(MEDIA_TRACK_TYPE_VIDEO); } } setDrmPlaybackStatusIfNeeded(Playback::START, getLastReadPosition() / 1000); setDrmPlaybackStatusIfNeeded(Playback::START, getLastReadPosition() / 1000); Loading Loading @@ -459,6 +467,8 @@ void NuPlayer::GenericSource::setDrmPlaybackStatusIfNeeded(int playbackStatus, i if (mDecryptHandle != NULL) { if (mDecryptHandle != NULL) { mDrmManagerClient->setPlaybackStatus(mDecryptHandle, playbackStatus, position); mDrmManagerClient->setPlaybackStatus(mDecryptHandle, playbackStatus, position); } } mSubtitleTrack.mPackets = new AnotherPacketSource(NULL); mTimedTextTrack.mPackets = new AnotherPacketSource(NULL); } } status_t NuPlayer::GenericSource::feedMoreTSData() { status_t NuPlayer::GenericSource::feedMoreTSData() { Loading Loading @@ -615,6 +625,37 @@ void NuPlayer::GenericSource::onMessageReceived(const sp<AMessage> &msg) { } } break; break; } } case kWhatGetFormat: { onGetFormatMeta(msg); break; } case kWhatGetSelectedTrack: { onGetSelectedTrack(msg); break; } case kWhatSelectTrack: { onSelectTrack(msg); break; } case kWhatSeek: { onSeek(msg); break; } case kWhatReadBuffer: { onReadBuffer(msg); break; } default: default: Source::onMessageReceived(msg); Source::onMessageReceived(msg); break; break; Loading Loading @@ -690,6 +731,34 @@ void NuPlayer::GenericSource::sendTextData( } } sp<MetaData> NuPlayer::GenericSource::getFormatMeta(bool audio) { sp<MetaData> NuPlayer::GenericSource::getFormatMeta(bool audio) { sp<AMessage> msg = new AMessage(kWhatGetFormat, id()); msg->setInt32("audio", audio); sp<AMessage> response; void *format; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findPointer("format", &format)); return (MetaData *)format; } else { return NULL; } } void NuPlayer::GenericSource::onGetFormatMeta(sp<AMessage> msg) const { int32_t audio; CHECK(msg->findInt32("audio", &audio)); sp<AMessage> response = new AMessage; sp<MetaData> format = doGetFormatMeta(audio); response->setPointer("format", format.get()); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } sp<MetaData> NuPlayer::GenericSource::doGetFormatMeta(bool audio) const { sp<MediaSource> source = audio ? mAudioTrack.mSource : mVideoTrack.mSource; sp<MediaSource> source = audio ? mAudioTrack.mSource : mVideoTrack.mSource; if (source == NULL) { if (source == NULL) { Loading @@ -709,7 +778,7 @@ status_t NuPlayer::GenericSource::dequeueAccessUnit( if (mIsWidevine && !audio) { if (mIsWidevine && !audio) { // try to read a buffer as we may not have been able to the last time // try to read a buffer as we may not have been able to the last time readBuffer(MEDIA_TRACK_TYPE_VIDEO, -1ll); postReadBuffer(MEDIA_TRACK_TYPE_VIDEO); } } status_t finalResult; status_t finalResult; Loading @@ -720,18 +789,7 @@ status_t NuPlayer::GenericSource::dequeueAccessUnit( status_t result = track->mPackets->dequeueAccessUnit(accessUnit); status_t result = track->mPackets->dequeueAccessUnit(accessUnit); if (!track->mPackets->hasBufferAvailable(&finalResult)) { if (!track->mPackets->hasBufferAvailable(&finalResult)) { readBuffer(audio? MEDIA_TRACK_TYPE_AUDIO : MEDIA_TRACK_TYPE_VIDEO, -1ll); postReadBuffer(audio? MEDIA_TRACK_TYPE_AUDIO : MEDIA_TRACK_TYPE_VIDEO); } if (mSubtitleTrack.mSource == NULL && mTimedTextTrack.mSource == NULL) { return result; } if (mSubtitleTrack.mSource != NULL) { CHECK(mSubtitleTrack.mPackets != NULL); } if (mTimedTextTrack.mSource != NULL) { CHECK(mTimedTextTrack.mPackets != NULL); } } if (result != OK) { if (result != OK) { Loading Loading @@ -825,6 +883,35 @@ sp<AMessage> NuPlayer::GenericSource::getTrackInfo(size_t trackIndex) const { } } ssize_t NuPlayer::GenericSource::getSelectedTrack(media_track_type type) const { ssize_t NuPlayer::GenericSource::getSelectedTrack(media_track_type type) const { sp<AMessage> msg = new AMessage(kWhatGetSelectedTrack, id()); msg->setInt32("type", type); sp<AMessage> response; int32_t index; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findInt32("index", &index)); return index; } else { return -1; } } void NuPlayer::GenericSource::onGetSelectedTrack(sp<AMessage> msg) const { int32_t tmpType; CHECK(msg->findInt32("type", &tmpType)); media_track_type type = (media_track_type)tmpType; sp<AMessage> response = new AMessage; ssize_t index = doGetSelectedTrack(type); response->setInt32("index", index); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } ssize_t NuPlayer::GenericSource::doGetSelectedTrack(media_track_type type) const { const Track *track = NULL; const Track *track = NULL; switch (type) { switch (type) { case MEDIA_TRACK_TYPE_VIDEO: case MEDIA_TRACK_TYPE_VIDEO: Loading Loading @@ -852,6 +939,34 @@ ssize_t NuPlayer::GenericSource::getSelectedTrack(media_track_type type) const { status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) { status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) { ALOGV("%s track: %zu", select ? "select" : "deselect", trackIndex); ALOGV("%s track: %zu", select ? "select" : "deselect", trackIndex); sp<AMessage> msg = new AMessage(kWhatSelectTrack, id()); msg->setInt32("trackIndex", trackIndex); msg->setInt32("select", trackIndex); sp<AMessage> response; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findInt32("err", &err)); } return err; } void NuPlayer::GenericSource::onSelectTrack(sp<AMessage> msg) { int32_t trackIndex, select; CHECK(msg->findInt32("trackIndex", &trackIndex)); CHECK(msg->findInt32("select", &select)); sp<AMessage> response = new AMessage; status_t err = doSelectTrack(trackIndex, select); response->setInt32("err", err); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select) { if (trackIndex >= mSources.size()) { if (trackIndex >= mSources.size()) { return BAD_INDEX; return BAD_INDEX; } } Loading Loading @@ -922,6 +1037,32 @@ status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) { } } status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { sp<AMessage> msg = new AMessage(kWhatSeek, id()); msg->setInt64("seekTimeUs", seekTimeUs); sp<AMessage> response; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findInt32("err", &err)); } return err; } void NuPlayer::GenericSource::onSeek(sp<AMessage> msg) { int64_t seekTimeUs; CHECK(msg->findInt64("seekTimeUs", &seekTimeUs)); sp<AMessage> response = new AMessage; status_t err = doSeek(seekTimeUs); response->setInt32("err", err); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { if (mVideoTrack.mSource != NULL) { if (mVideoTrack.mSource != NULL) { int64_t actualTimeUs; int64_t actualTimeUs; readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, &actualTimeUs); readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, &actualTimeUs); Loading Loading @@ -1006,6 +1147,19 @@ sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer( return ab; return ab; } } void NuPlayer::GenericSource::postReadBuffer(media_track_type trackType) { sp<AMessage> msg = new AMessage(kWhatReadBuffer, id()); msg->setInt32("trackType", trackType); msg->post(); } void NuPlayer::GenericSource::onReadBuffer(sp<AMessage> msg) { int32_t tmpType; CHECK(msg->findInt32("trackType", &tmpType)); media_track_type trackType = (media_track_type)tmpType; readBuffer(trackType); } void NuPlayer::GenericSource::readBuffer( void NuPlayer::GenericSource::readBuffer( media_track_type trackType, int64_t seekTimeUs, int64_t *actualTimeUs, bool formatChange) { media_track_type trackType, int64_t seekTimeUs, int64_t *actualTimeUs, bool formatChange) { Track *track; Track *track; Loading media/libmediaplayerservice/nuplayer/GenericSource.h +19 −0 Original line number Original line Diff line number Diff line Loading @@ -84,6 +84,11 @@ private: kWhatSendTimedTextData, kWhatSendTimedTextData, kWhatChangeAVSource, kWhatChangeAVSource, kWhatPollBuffering, kWhatPollBuffering, kWhatGetFormat, kWhatGetSelectedTrack, kWhatSelectTrack, kWhatSeek, kWhatReadBuffer, }; }; Vector<sp<MediaSource> > mSources; Vector<sp<MediaSource> > mSources; Loading Loading @@ -140,6 +145,18 @@ private: void notifyPreparedAndCleanup(status_t err); void notifyPreparedAndCleanup(status_t err); void onGetFormatMeta(sp<AMessage> msg) const; sp<MetaData> doGetFormatMeta(bool audio) const; void onGetSelectedTrack(sp<AMessage> msg) const; ssize_t doGetSelectedTrack(media_track_type type) const; void onSelectTrack(sp<AMessage> msg); status_t doSelectTrack(size_t trackIndex, bool select); void onSeek(sp<AMessage> msg); status_t doSeek(int64_t seekTimeUs); void onPrepareAsync(); void onPrepareAsync(); void fetchTextData( void fetchTextData( Loading @@ -155,6 +172,8 @@ private: media_track_type trackType, media_track_type trackType, int64_t *actualTimeUs = NULL); int64_t *actualTimeUs = NULL); void postReadBuffer(media_track_type trackType); void onReadBuffer(sp<AMessage> msg); void readBuffer( void readBuffer( media_track_type trackType, media_track_type trackType, int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); Loading Loading
media/libmediaplayerservice/nuplayer/GenericSource.cpp +170 −16 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include <media/stagefright/MediaExtractor.h> #include <media/stagefright/MediaExtractor.h> #include <media/stagefright/MediaSource.h> #include <media/stagefright/MediaSource.h> #include <media/stagefright/MetaData.h> #include <media/stagefright/MetaData.h> #include <media/stagefright/Utils.h> #include "../../libstagefright/include/DRMExtractor.h" #include "../../libstagefright/include/DRMExtractor.h" #include "../../libstagefright/include/NuCachedSource2.h" #include "../../libstagefright/include/NuCachedSource2.h" #include "../../libstagefright/include/WVMExtractor.h" #include "../../libstagefright/include/WVMExtractor.h" Loading Loading @@ -318,7 +319,14 @@ void NuPlayer::GenericSource::onPrepareAsync() { } } if (mVideoTrack.mSource != NULL) { if (mVideoTrack.mSource != NULL) { notifyVideoSizeChanged(getFormat(false /* audio */)); sp<MetaData> meta = doGetFormatMeta(false /* audio */); sp<AMessage> msg = new AMessage; err = convertMetaDataToMessage(meta, &msg); if(err != OK) { notifyPreparedAndCleanup(err); return; } notifyVideoSizeChanged(msg); } } notifyFlagsChanged( notifyFlagsChanged( Loading Loading @@ -422,7 +430,7 @@ void NuPlayer::GenericSource::start() { mAudioTrack.mPackets = mAudioTrack.mPackets = new AnotherPacketSource(mAudioTrack.mSource->getFormat()); new AnotherPacketSource(mAudioTrack.mSource->getFormat()); readBuffer(MEDIA_TRACK_TYPE_AUDIO); postReadBuffer(MEDIA_TRACK_TYPE_AUDIO); } } if (mVideoTrack.mSource != NULL) { if (mVideoTrack.mSource != NULL) { Loading @@ -430,7 +438,7 @@ void NuPlayer::GenericSource::start() { mVideoTrack.mPackets = mVideoTrack.mPackets = new AnotherPacketSource(mVideoTrack.mSource->getFormat()); new AnotherPacketSource(mVideoTrack.mSource->getFormat()); readBuffer(MEDIA_TRACK_TYPE_VIDEO); postReadBuffer(MEDIA_TRACK_TYPE_VIDEO); } } setDrmPlaybackStatusIfNeeded(Playback::START, getLastReadPosition() / 1000); setDrmPlaybackStatusIfNeeded(Playback::START, getLastReadPosition() / 1000); Loading Loading @@ -459,6 +467,8 @@ void NuPlayer::GenericSource::setDrmPlaybackStatusIfNeeded(int playbackStatus, i if (mDecryptHandle != NULL) { if (mDecryptHandle != NULL) { mDrmManagerClient->setPlaybackStatus(mDecryptHandle, playbackStatus, position); mDrmManagerClient->setPlaybackStatus(mDecryptHandle, playbackStatus, position); } } mSubtitleTrack.mPackets = new AnotherPacketSource(NULL); mTimedTextTrack.mPackets = new AnotherPacketSource(NULL); } } status_t NuPlayer::GenericSource::feedMoreTSData() { status_t NuPlayer::GenericSource::feedMoreTSData() { Loading Loading @@ -615,6 +625,37 @@ void NuPlayer::GenericSource::onMessageReceived(const sp<AMessage> &msg) { } } break; break; } } case kWhatGetFormat: { onGetFormatMeta(msg); break; } case kWhatGetSelectedTrack: { onGetSelectedTrack(msg); break; } case kWhatSelectTrack: { onSelectTrack(msg); break; } case kWhatSeek: { onSeek(msg); break; } case kWhatReadBuffer: { onReadBuffer(msg); break; } default: default: Source::onMessageReceived(msg); Source::onMessageReceived(msg); break; break; Loading Loading @@ -690,6 +731,34 @@ void NuPlayer::GenericSource::sendTextData( } } sp<MetaData> NuPlayer::GenericSource::getFormatMeta(bool audio) { sp<MetaData> NuPlayer::GenericSource::getFormatMeta(bool audio) { sp<AMessage> msg = new AMessage(kWhatGetFormat, id()); msg->setInt32("audio", audio); sp<AMessage> response; void *format; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findPointer("format", &format)); return (MetaData *)format; } else { return NULL; } } void NuPlayer::GenericSource::onGetFormatMeta(sp<AMessage> msg) const { int32_t audio; CHECK(msg->findInt32("audio", &audio)); sp<AMessage> response = new AMessage; sp<MetaData> format = doGetFormatMeta(audio); response->setPointer("format", format.get()); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } sp<MetaData> NuPlayer::GenericSource::doGetFormatMeta(bool audio) const { sp<MediaSource> source = audio ? mAudioTrack.mSource : mVideoTrack.mSource; sp<MediaSource> source = audio ? mAudioTrack.mSource : mVideoTrack.mSource; if (source == NULL) { if (source == NULL) { Loading @@ -709,7 +778,7 @@ status_t NuPlayer::GenericSource::dequeueAccessUnit( if (mIsWidevine && !audio) { if (mIsWidevine && !audio) { // try to read a buffer as we may not have been able to the last time // try to read a buffer as we may not have been able to the last time readBuffer(MEDIA_TRACK_TYPE_VIDEO, -1ll); postReadBuffer(MEDIA_TRACK_TYPE_VIDEO); } } status_t finalResult; status_t finalResult; Loading @@ -720,18 +789,7 @@ status_t NuPlayer::GenericSource::dequeueAccessUnit( status_t result = track->mPackets->dequeueAccessUnit(accessUnit); status_t result = track->mPackets->dequeueAccessUnit(accessUnit); if (!track->mPackets->hasBufferAvailable(&finalResult)) { if (!track->mPackets->hasBufferAvailable(&finalResult)) { readBuffer(audio? MEDIA_TRACK_TYPE_AUDIO : MEDIA_TRACK_TYPE_VIDEO, -1ll); postReadBuffer(audio? MEDIA_TRACK_TYPE_AUDIO : MEDIA_TRACK_TYPE_VIDEO); } if (mSubtitleTrack.mSource == NULL && mTimedTextTrack.mSource == NULL) { return result; } if (mSubtitleTrack.mSource != NULL) { CHECK(mSubtitleTrack.mPackets != NULL); } if (mTimedTextTrack.mSource != NULL) { CHECK(mTimedTextTrack.mPackets != NULL); } } if (result != OK) { if (result != OK) { Loading Loading @@ -825,6 +883,35 @@ sp<AMessage> NuPlayer::GenericSource::getTrackInfo(size_t trackIndex) const { } } ssize_t NuPlayer::GenericSource::getSelectedTrack(media_track_type type) const { ssize_t NuPlayer::GenericSource::getSelectedTrack(media_track_type type) const { sp<AMessage> msg = new AMessage(kWhatGetSelectedTrack, id()); msg->setInt32("type", type); sp<AMessage> response; int32_t index; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findInt32("index", &index)); return index; } else { return -1; } } void NuPlayer::GenericSource::onGetSelectedTrack(sp<AMessage> msg) const { int32_t tmpType; CHECK(msg->findInt32("type", &tmpType)); media_track_type type = (media_track_type)tmpType; sp<AMessage> response = new AMessage; ssize_t index = doGetSelectedTrack(type); response->setInt32("index", index); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } ssize_t NuPlayer::GenericSource::doGetSelectedTrack(media_track_type type) const { const Track *track = NULL; const Track *track = NULL; switch (type) { switch (type) { case MEDIA_TRACK_TYPE_VIDEO: case MEDIA_TRACK_TYPE_VIDEO: Loading Loading @@ -852,6 +939,34 @@ ssize_t NuPlayer::GenericSource::getSelectedTrack(media_track_type type) const { status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) { status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) { ALOGV("%s track: %zu", select ? "select" : "deselect", trackIndex); ALOGV("%s track: %zu", select ? "select" : "deselect", trackIndex); sp<AMessage> msg = new AMessage(kWhatSelectTrack, id()); msg->setInt32("trackIndex", trackIndex); msg->setInt32("select", trackIndex); sp<AMessage> response; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findInt32("err", &err)); } return err; } void NuPlayer::GenericSource::onSelectTrack(sp<AMessage> msg) { int32_t trackIndex, select; CHECK(msg->findInt32("trackIndex", &trackIndex)); CHECK(msg->findInt32("select", &select)); sp<AMessage> response = new AMessage; status_t err = doSelectTrack(trackIndex, select); response->setInt32("err", err); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select) { if (trackIndex >= mSources.size()) { if (trackIndex >= mSources.size()) { return BAD_INDEX; return BAD_INDEX; } } Loading Loading @@ -922,6 +1037,32 @@ status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) { } } status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { sp<AMessage> msg = new AMessage(kWhatSeek, id()); msg->setInt64("seekTimeUs", seekTimeUs); sp<AMessage> response; status_t err = msg->postAndAwaitResponse(&response); if (err == OK && response != NULL) { CHECK(response->findInt32("err", &err)); } return err; } void NuPlayer::GenericSource::onSeek(sp<AMessage> msg) { int64_t seekTimeUs; CHECK(msg->findInt64("seekTimeUs", &seekTimeUs)); sp<AMessage> response = new AMessage; status_t err = doSeek(seekTimeUs); response->setInt32("err", err); uint32_t replyID; CHECK(msg->senderAwaitsResponse(&replyID)); response->postReply(replyID); } status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { if (mVideoTrack.mSource != NULL) { if (mVideoTrack.mSource != NULL) { int64_t actualTimeUs; int64_t actualTimeUs; readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, &actualTimeUs); readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, &actualTimeUs); Loading Loading @@ -1006,6 +1147,19 @@ sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer( return ab; return ab; } } void NuPlayer::GenericSource::postReadBuffer(media_track_type trackType) { sp<AMessage> msg = new AMessage(kWhatReadBuffer, id()); msg->setInt32("trackType", trackType); msg->post(); } void NuPlayer::GenericSource::onReadBuffer(sp<AMessage> msg) { int32_t tmpType; CHECK(msg->findInt32("trackType", &tmpType)); media_track_type trackType = (media_track_type)tmpType; readBuffer(trackType); } void NuPlayer::GenericSource::readBuffer( void NuPlayer::GenericSource::readBuffer( media_track_type trackType, int64_t seekTimeUs, int64_t *actualTimeUs, bool formatChange) { media_track_type trackType, int64_t seekTimeUs, int64_t *actualTimeUs, bool formatChange) { Track *track; Track *track; Loading
media/libmediaplayerservice/nuplayer/GenericSource.h +19 −0 Original line number Original line Diff line number Diff line Loading @@ -84,6 +84,11 @@ private: kWhatSendTimedTextData, kWhatSendTimedTextData, kWhatChangeAVSource, kWhatChangeAVSource, kWhatPollBuffering, kWhatPollBuffering, kWhatGetFormat, kWhatGetSelectedTrack, kWhatSelectTrack, kWhatSeek, kWhatReadBuffer, }; }; Vector<sp<MediaSource> > mSources; Vector<sp<MediaSource> > mSources; Loading Loading @@ -140,6 +145,18 @@ private: void notifyPreparedAndCleanup(status_t err); void notifyPreparedAndCleanup(status_t err); void onGetFormatMeta(sp<AMessage> msg) const; sp<MetaData> doGetFormatMeta(bool audio) const; void onGetSelectedTrack(sp<AMessage> msg) const; ssize_t doGetSelectedTrack(media_track_type type) const; void onSelectTrack(sp<AMessage> msg); status_t doSelectTrack(size_t trackIndex, bool select); void onSeek(sp<AMessage> msg); status_t doSeek(int64_t seekTimeUs); void onPrepareAsync(); void onPrepareAsync(); void fetchTextData( void fetchTextData( Loading @@ -155,6 +172,8 @@ private: media_track_type trackType, media_track_type trackType, int64_t *actualTimeUs = NULL); int64_t *actualTimeUs = NULL); void postReadBuffer(media_track_type trackType); void onReadBuffer(sp<AMessage> msg); void readBuffer( void readBuffer( media_track_type trackType, media_track_type trackType, int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); Loading