void NuCachedSource2::updateCacheParamsFromSystemProperty() { char value[PROPERTY_VALUE_MAX]; if (!property_get("media.stagefright.cache-params", value, NULL)) { return; } updateCacheParamsFromString(value); }
NuCachedSource2::NuCachedSource2( const sp<DataSource> &source, const char *cacheConfig, bool disconnectAtHighwatermark) : mSource(source), mReflector(new AHandlerReflector<NuCachedSource2>(this)), mLooper(new ALooper), mCache(new PageCache(kPageSize)), mCacheOffset(0), mFinalStatus(OK), mLastAccessPos(0), mFetching(true), mDisconnecting(false), mLastFetchTimeUs(-1), mNumRetriesLeft(kMaxNumRetries), mHighwaterThresholdBytes(kDefaultHighWaterThreshold), mLowwaterThresholdBytes(kDefaultLowWaterThreshold), mKeepAliveIntervalUs(kDefaultKeepAliveIntervalUs), mDisconnectAtHighwatermark(disconnectAtHighwatermark) { // We are NOT going to support disconnect-at-highwatermark indefinitely // and we are not guaranteeing support for client-specified cache // parameters. Both of these are temporary measures to solve a specific // problem that will be solved in a better way going forward. updateCacheParamsFromSystemProperty(); if (cacheConfig != NULL) { updateCacheParamsFromString(cacheConfig); } if (mDisconnectAtHighwatermark) { // Makes no sense to disconnect and do keep-alives... mKeepAliveIntervalUs = 0; } mLooper->setName("NuCachedSource2"); mLooper->registerHandler(mReflector); // Since it may not be obvious why our looper thread needs to be // able to call into java since it doesn't appear to do so at all... // IMediaHTTPConnection may be (and most likely is) implemented in JAVA // and a local JAVA IBinder will call directly into JNI methods. // So whenever we call DataSource::readAt it may end up in a call to // IMediaHTTPConnection::readAt and therefore call back into JAVA. mLooper->start(false /* runOnCallingThread */, true /* canCallJava */); }
NuCachedSource2::NuCachedSource2( const sp<DataSource> &source, const char *cacheConfig, bool disconnectAtHighwatermark) : mSource(source), mReflector(new AHandlerReflector<NuCachedSource2>(this)), mLooper(new ALooper), mCache(new PageCache(kPageSize)), mCacheOffset(0), mFinalStatus(OK), mLastAccessPos(0), #ifdef OMAP_ENHANCEMENT mMinAccessPos(0), mMaxAccessPos(0), #endif mFetching(true), mLastFetchTimeUs(-1), mNumRetriesLeft(kMaxNumRetries), mHighwaterThresholdBytes(kDefaultHighWaterThreshold), mLowwaterThresholdBytes(kDefaultLowWaterThreshold), mKeepAliveIntervalUs(kDefaultKeepAliveIntervalUs), mDisconnectAtHighwatermark(disconnectAtHighwatermark) { // We are NOT going to support disconnect-at-highwatermark indefinitely // and we are not guaranteeing support for client-specified cache // parameters. Both of these are temporary measures to solve a specific // problem that will be solved in a better way going forward. updateCacheParamsFromSystemProperty(); if (cacheConfig != NULL) { updateCacheParamsFromString(cacheConfig); } if (mDisconnectAtHighwatermark) { // Makes no sense to disconnect and do keep-alives... mKeepAliveIntervalUs = 0; } mLooper->setName("NuCachedSource2"); mLooper->registerHandler(mReflector); mLooper->start(); Mutex::Autolock autoLock(mLock); (new AMessage(kWhatFetchMore, mReflector->id()))->post(); }