Loading include/media/stagefright/MetaData.h +2 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,8 @@ enum { kKeyDecoderComponent = 'decC', // cstring kKeyBufferID = 'bfID', kKeyMaxInputSize = 'inpS', kKeyMaxWidth = 'maxW', kKeyMaxHeight = 'maxH', kKeyThumbnailTime = 'thbT', // int64_t (usecs) kKeyTrackID = 'trID', kKeyIsDRM = 'idrm', // int32_t (bool) Loading media/libstagefright/Utils.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,16 @@ status_t convertMetaDataToMessage( msg->setInt32("max-input-size", maxInputSize); } int32_t maxWidth; if (meta->findInt32(kKeyMaxWidth, &maxWidth)) { msg->setInt32("max-width", maxWidth); } int32_t maxHeight; if (meta->findInt32(kKeyMaxHeight, &maxHeight)) { msg->setInt32("max-height", maxHeight); } int32_t rotationDegrees; if (meta->findInt32(kKeyRotation, &rotationDegrees)) { msg->setInt32("rotation-degrees", rotationDegrees); Loading Loading @@ -568,6 +578,16 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) { meta->setInt32(kKeyMaxInputSize, maxInputSize); } int32_t maxWidth; if (msg->findInt32("max-width", &maxWidth)) { meta->setInt32(kKeyMaxWidth, maxWidth); } int32_t maxHeight; if (msg->findInt32("max-height", &maxHeight)) { meta->setInt32(kKeyMaxHeight, maxHeight); } // reassemble the csd data into its original form sp<ABuffer> csd0; if (msg->findBuffer("csd-0", &csd0)) { Loading media/libstagefright/httplive/LiveSession.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -171,6 +171,8 @@ LiveSession::LiveSession( mOrigBandwidthIndex(-1), mLastBandwidthBps(-1ll), mBandwidthEstimator(new BandwidthEstimator()), mMaxWidth(720), mMaxHeight(480), mStreamMask(0), mNewStreamMask(0), mSwapMask(0), Loading Loading @@ -345,6 +347,9 @@ status_t LiveSession::getStreamFormat(StreamType stream, sp<AMessage> *format) { if (stream == STREAMTYPE_AUDIO) { // set AAC input buffer size to 32K bytes (256kbps x 1sec) meta->setInt32(kKeyMaxInputSize, 32 * 1024); } else if (stream == STREAMTYPE_VIDEO) { meta->setInt32(kKeyMaxWidth, mMaxWidth); meta->setInt32(kKeyMaxHeight, mMaxHeight); } return convertMetaDataToMessage(meta, format); Loading Loading @@ -847,6 +852,9 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { size_t initialBandwidth = 0; size_t initialBandwidthIndex = 0; int32_t maxWidth = 0; int32_t maxHeight = 0; if (mPlaylist->isVariantPlaylist()) { Vector<BandwidthItem> itemsWithVideo; for (size_t i = 0; i < mPlaylist->size(); ++i) { Loading @@ -860,6 +868,14 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { CHECK(meta->findInt32("bandwidth", (int32_t *)&item.mBandwidth)); int32_t width, height; if (meta->findInt32("width", &width)) { maxWidth = max(maxWidth, width); } if (meta->findInt32("height", &height)) { maxHeight = max(maxHeight, height); } mBandwidthItems.push(item); if (mPlaylist->hasType(i, "video")) { itemsWithVideo.push(item); Loading Loading @@ -893,6 +909,9 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { mBandwidthItems.push(item); } mMaxWidth = maxWidth > 0 ? maxWidth : mMaxWidth; mMaxHeight = maxHeight > 0 ? maxHeight : mMaxHeight; mPlaylist->pickRandomMediaItems(); changeConfiguration( 0ll /* timeUs */, initialBandwidthIndex, false /* pickTrack */); Loading media/libstagefright/httplive/LiveSession.h +2 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,8 @@ private: sp<BandwidthEstimator> mBandwidthEstimator; sp<M3UParser> mPlaylist; int32_t mMaxWidth; int32_t mMaxHeight; sp<ALooper> mFetcherLooper; KeyedVector<AString, FetcherInfo> mFetcherInfos; Loading media/libstagefright/httplive/M3UParser.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -808,6 +808,29 @@ status_t M3UParser::parseStreamInf( *meta = new AMessage; } (*meta)->setString(key.c_str(), codecs.c_str()); } else if (!strcasecmp("resolution", key.c_str())) { const char *s = val.c_str(); char *end; unsigned long width = strtoul(s, &end, 10); if (end == s || *end != 'x') { // malformed continue; } s = end + 1; unsigned long height = strtoul(s, &end, 10); if (end == s || *end != '\0') { // malformed continue; } if (meta->get() == NULL) { *meta = new AMessage; } (*meta)->setInt32("width", width); (*meta)->setInt32("height", height); } else if (!strcasecmp("audio", key.c_str()) || !strcasecmp("video", key.c_str()) || !strcasecmp("subtitles", key.c_str())) { Loading Loading
include/media/stagefright/MetaData.h +2 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,8 @@ enum { kKeyDecoderComponent = 'decC', // cstring kKeyBufferID = 'bfID', kKeyMaxInputSize = 'inpS', kKeyMaxWidth = 'maxW', kKeyMaxHeight = 'maxH', kKeyThumbnailTime = 'thbT', // int64_t (usecs) kKeyTrackID = 'trID', kKeyIsDRM = 'idrm', // int32_t (bool) Loading
media/libstagefright/Utils.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,16 @@ status_t convertMetaDataToMessage( msg->setInt32("max-input-size", maxInputSize); } int32_t maxWidth; if (meta->findInt32(kKeyMaxWidth, &maxWidth)) { msg->setInt32("max-width", maxWidth); } int32_t maxHeight; if (meta->findInt32(kKeyMaxHeight, &maxHeight)) { msg->setInt32("max-height", maxHeight); } int32_t rotationDegrees; if (meta->findInt32(kKeyRotation, &rotationDegrees)) { msg->setInt32("rotation-degrees", rotationDegrees); Loading Loading @@ -568,6 +578,16 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) { meta->setInt32(kKeyMaxInputSize, maxInputSize); } int32_t maxWidth; if (msg->findInt32("max-width", &maxWidth)) { meta->setInt32(kKeyMaxWidth, maxWidth); } int32_t maxHeight; if (msg->findInt32("max-height", &maxHeight)) { meta->setInt32(kKeyMaxHeight, maxHeight); } // reassemble the csd data into its original form sp<ABuffer> csd0; if (msg->findBuffer("csd-0", &csd0)) { Loading
media/libstagefright/httplive/LiveSession.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -171,6 +171,8 @@ LiveSession::LiveSession( mOrigBandwidthIndex(-1), mLastBandwidthBps(-1ll), mBandwidthEstimator(new BandwidthEstimator()), mMaxWidth(720), mMaxHeight(480), mStreamMask(0), mNewStreamMask(0), mSwapMask(0), Loading Loading @@ -345,6 +347,9 @@ status_t LiveSession::getStreamFormat(StreamType stream, sp<AMessage> *format) { if (stream == STREAMTYPE_AUDIO) { // set AAC input buffer size to 32K bytes (256kbps x 1sec) meta->setInt32(kKeyMaxInputSize, 32 * 1024); } else if (stream == STREAMTYPE_VIDEO) { meta->setInt32(kKeyMaxWidth, mMaxWidth); meta->setInt32(kKeyMaxHeight, mMaxHeight); } return convertMetaDataToMessage(meta, format); Loading Loading @@ -847,6 +852,9 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { size_t initialBandwidth = 0; size_t initialBandwidthIndex = 0; int32_t maxWidth = 0; int32_t maxHeight = 0; if (mPlaylist->isVariantPlaylist()) { Vector<BandwidthItem> itemsWithVideo; for (size_t i = 0; i < mPlaylist->size(); ++i) { Loading @@ -860,6 +868,14 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { CHECK(meta->findInt32("bandwidth", (int32_t *)&item.mBandwidth)); int32_t width, height; if (meta->findInt32("width", &width)) { maxWidth = max(maxWidth, width); } if (meta->findInt32("height", &height)) { maxHeight = max(maxHeight, height); } mBandwidthItems.push(item); if (mPlaylist->hasType(i, "video")) { itemsWithVideo.push(item); Loading Loading @@ -893,6 +909,9 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { mBandwidthItems.push(item); } mMaxWidth = maxWidth > 0 ? maxWidth : mMaxWidth; mMaxHeight = maxHeight > 0 ? maxHeight : mMaxHeight; mPlaylist->pickRandomMediaItems(); changeConfiguration( 0ll /* timeUs */, initialBandwidthIndex, false /* pickTrack */); Loading
media/libstagefright/httplive/LiveSession.h +2 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,8 @@ private: sp<BandwidthEstimator> mBandwidthEstimator; sp<M3UParser> mPlaylist; int32_t mMaxWidth; int32_t mMaxHeight; sp<ALooper> mFetcherLooper; KeyedVector<AString, FetcherInfo> mFetcherInfos; Loading
media/libstagefright/httplive/M3UParser.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -808,6 +808,29 @@ status_t M3UParser::parseStreamInf( *meta = new AMessage; } (*meta)->setString(key.c_str(), codecs.c_str()); } else if (!strcasecmp("resolution", key.c_str())) { const char *s = val.c_str(); char *end; unsigned long width = strtoul(s, &end, 10); if (end == s || *end != 'x') { // malformed continue; } s = end + 1; unsigned long height = strtoul(s, &end, 10); if (end == s || *end != '\0') { // malformed continue; } if (meta->get() == NULL) { *meta = new AMessage; } (*meta)->setInt32("width", width); (*meta)->setInt32("height", height); } else if (!strcasecmp("audio", key.c_str()) || !strcasecmp("video", key.c_str()) || !strcasecmp("subtitles", key.c_str())) { Loading