Loading include/media/stagefright/MetaData.h +7 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,13 @@ enum { kKeyCryptoDefaultIVSize = 'cryS', // int32_t kKeyPssh = 'pssh', // raw data // Please see MediaFormat.KEY_IS_AUTOSELECT. kKeyTrackIsAutoselect = 'auto', // bool (int32_t) // Please see MediaFormat.KEY_IS_DEFAULT. kKeyTrackIsDefault = 'dflt', // bool (int32_t) // Similar to MediaFormat.KEY_IS_FORCED_SUBTITLE but pertains to av tracks as well. kKeyTrackIsForced = 'frcd', // bool (int32_t) }; enum { Loading media/libmediaplayerservice/nuplayer/GenericSource.cpp +56 −3 Original line number Diff line number Diff line Loading @@ -81,11 +81,12 @@ void NuPlayer::GenericSource::initFromDataSource( const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); sp<MediaSource> track; sp<MediaSource> track = extractor->getTrack(i); if (!strncasecmp(mime, "audio/", 6)) { if (mAudioTrack.mSource == NULL) { mAudioTrack.mSource = track = extractor->getTrack(i); mAudioTrack.mIndex = i; mAudioTrack.mSource = track; if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_VORBIS)) { mAudioIsVorbis = true; Loading @@ -95,11 +96,13 @@ void NuPlayer::GenericSource::initFromDataSource( } } else if (!strncasecmp(mime, "video/", 6)) { if (mVideoTrack.mSource == NULL) { mVideoTrack.mSource = track = extractor->getTrack(i); mVideoTrack.mIndex = i; mVideoTrack.mSource = track; } } if (track != NULL) { mSources.push(track); int64_t durationUs; if (meta->findInt64(kKeyDuration, &durationUs)) { if (durationUs > mDurationUs) { Loading Loading @@ -194,6 +197,56 @@ status_t NuPlayer::GenericSource::getDuration(int64_t *durationUs) { return OK; } size_t NuPlayer::GenericSource::getTrackCount() const { return mSources.size(); } sp<AMessage> NuPlayer::GenericSource::getTrackInfo(size_t trackIndex) const { size_t trackCount = mSources.size(); if (trackIndex >= trackCount) { return NULL; } sp<AMessage> format = new AMessage(); sp<MetaData> meta = mSources.itemAt(trackIndex)->getFormat(); const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); int32_t trackType; if (!strncasecmp(mime, "video/", 6)) { trackType = MEDIA_TRACK_TYPE_VIDEO; } else if (!strncasecmp(mime, "audio/", 6)) { trackType = MEDIA_TRACK_TYPE_AUDIO; } else if (!strcasecmp(mime, MEDIA_MIMETYPE_TEXT_3GPP)) { trackType = MEDIA_TRACK_TYPE_TIMEDTEXT; } else { trackType = MEDIA_TRACK_TYPE_UNKNOWN; } format->setInt32("type", trackType); const char *lang; if (!meta->findCString(kKeyMediaLanguage, &lang)) { lang = "und"; } format->setString("language", lang); if (trackType == MEDIA_TRACK_TYPE_SUBTITLE) { format->setString("mime", mime); int32_t isAutoselect = 1, isDefault = 0, isForced = 0; meta->findInt32(kKeyTrackIsAutoselect, &isAutoselect); meta->findInt32(kKeyTrackIsDefault, &isDefault); meta->findInt32(kKeyTrackIsForced, &isForced); format->setInt32("auto", !!isAutoselect); format->setInt32("default", !!isDefault); format->setInt32("forced", !!isForced); } return format; } status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { if (mVideoTrack.mSource != NULL) { int64_t actualTimeUs; Loading media/libmediaplayerservice/nuplayer/GenericSource.h +5 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ struct NuPlayer::GenericSource : public NuPlayer::Source { virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); virtual status_t getDuration(int64_t *durationUs); virtual size_t getTrackCount() const; virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual status_t seekTo(int64_t seekTimeUs); protected: Loading @@ -58,7 +60,10 @@ protected: virtual sp<MetaData> getFormatMeta(bool audio); private: Vector<sp<MediaSource> > mSources; struct Track { size_t mIndex; sp<MediaSource> mSource; sp<AnotherPacketSource> mPackets; }; Loading Loading
include/media/stagefright/MetaData.h +7 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,13 @@ enum { kKeyCryptoDefaultIVSize = 'cryS', // int32_t kKeyPssh = 'pssh', // raw data // Please see MediaFormat.KEY_IS_AUTOSELECT. kKeyTrackIsAutoselect = 'auto', // bool (int32_t) // Please see MediaFormat.KEY_IS_DEFAULT. kKeyTrackIsDefault = 'dflt', // bool (int32_t) // Similar to MediaFormat.KEY_IS_FORCED_SUBTITLE but pertains to av tracks as well. kKeyTrackIsForced = 'frcd', // bool (int32_t) }; enum { Loading
media/libmediaplayerservice/nuplayer/GenericSource.cpp +56 −3 Original line number Diff line number Diff line Loading @@ -81,11 +81,12 @@ void NuPlayer::GenericSource::initFromDataSource( const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); sp<MediaSource> track; sp<MediaSource> track = extractor->getTrack(i); if (!strncasecmp(mime, "audio/", 6)) { if (mAudioTrack.mSource == NULL) { mAudioTrack.mSource = track = extractor->getTrack(i); mAudioTrack.mIndex = i; mAudioTrack.mSource = track; if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_VORBIS)) { mAudioIsVorbis = true; Loading @@ -95,11 +96,13 @@ void NuPlayer::GenericSource::initFromDataSource( } } else if (!strncasecmp(mime, "video/", 6)) { if (mVideoTrack.mSource == NULL) { mVideoTrack.mSource = track = extractor->getTrack(i); mVideoTrack.mIndex = i; mVideoTrack.mSource = track; } } if (track != NULL) { mSources.push(track); int64_t durationUs; if (meta->findInt64(kKeyDuration, &durationUs)) { if (durationUs > mDurationUs) { Loading Loading @@ -194,6 +197,56 @@ status_t NuPlayer::GenericSource::getDuration(int64_t *durationUs) { return OK; } size_t NuPlayer::GenericSource::getTrackCount() const { return mSources.size(); } sp<AMessage> NuPlayer::GenericSource::getTrackInfo(size_t trackIndex) const { size_t trackCount = mSources.size(); if (trackIndex >= trackCount) { return NULL; } sp<AMessage> format = new AMessage(); sp<MetaData> meta = mSources.itemAt(trackIndex)->getFormat(); const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); int32_t trackType; if (!strncasecmp(mime, "video/", 6)) { trackType = MEDIA_TRACK_TYPE_VIDEO; } else if (!strncasecmp(mime, "audio/", 6)) { trackType = MEDIA_TRACK_TYPE_AUDIO; } else if (!strcasecmp(mime, MEDIA_MIMETYPE_TEXT_3GPP)) { trackType = MEDIA_TRACK_TYPE_TIMEDTEXT; } else { trackType = MEDIA_TRACK_TYPE_UNKNOWN; } format->setInt32("type", trackType); const char *lang; if (!meta->findCString(kKeyMediaLanguage, &lang)) { lang = "und"; } format->setString("language", lang); if (trackType == MEDIA_TRACK_TYPE_SUBTITLE) { format->setString("mime", mime); int32_t isAutoselect = 1, isDefault = 0, isForced = 0; meta->findInt32(kKeyTrackIsAutoselect, &isAutoselect); meta->findInt32(kKeyTrackIsDefault, &isDefault); meta->findInt32(kKeyTrackIsForced, &isForced); format->setInt32("auto", !!isAutoselect); format->setInt32("default", !!isDefault); format->setInt32("forced", !!isForced); } return format; } status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { if (mVideoTrack.mSource != NULL) { int64_t actualTimeUs; Loading
media/libmediaplayerservice/nuplayer/GenericSource.h +5 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ struct NuPlayer::GenericSource : public NuPlayer::Source { virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); virtual status_t getDuration(int64_t *durationUs); virtual size_t getTrackCount() const; virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual status_t seekTo(int64_t seekTimeUs); protected: Loading @@ -58,7 +60,10 @@ protected: virtual sp<MetaData> getFormatMeta(bool audio); private: Vector<sp<MediaSource> > mSources; struct Track { size_t mIndex; sp<MediaSource> mSource; sp<AnotherPacketSource> mPackets; }; Loading