static void cacheOnceInit() { CCHelper tmpHelper; status_t res; if (OK != (res = tmpHelper.getLocalFreq(&cacheN))) { ALOGE("Failed to fetch local time frequency when constructing a" " MonoPipe (res = %d). getNextWriteTimestamp calls will be" " non-functional", res); return; } cacheValid = true; }
MonoPipe::MonoPipe(size_t reqFrames, NBAIO_Format format, bool writeCanBlock) : NBAIO_Sink(format), mUpdateSeq(0), mReqFrames(reqFrames), mMaxFrames(roundup(reqFrames)), mBuffer(malloc(mMaxFrames * Format_frameSize(format))), mFront(0), mRear(0), mWriteTsValid(false), // mWriteTs mSetpoint((reqFrames * 11) / 16), mWriteCanBlock(writeCanBlock), mIsShutdown(false) { CCHelper tmpHelper; status_t res; uint64_t N, D; mNextRdPTS = AudioBufferProvider::kInvalidPTS; mSamplesToLocalTime.a_zero = 0; mSamplesToLocalTime.b_zero = 0; mSamplesToLocalTime.a_to_b_numer = 0; mSamplesToLocalTime.a_to_b_denom = 0; D = Format_sampleRate(format); if (OK != (res = tmpHelper.getLocalFreq(&N))) { ALOGE("Failed to fetch local time frequency when constructing a" " MonoPipe (res = %d). getNextWriteTimestamp calls will be" " non-functional", res); return; } LinearTransform::reduce(&N, &D); static const uint64_t kSignedHiBitsMask = ~(0x7FFFFFFFull); static const uint64_t kUnsignedHiBitsMask = ~(0xFFFFFFFFull); if ((N & kSignedHiBitsMask) || (D & kUnsignedHiBitsMask)) { ALOGE("Cannot reduce sample rate to local clock frequency ratio to fit" " in a 32/32 bit rational. (max reduction is 0x%016llx/0x%016llx" "). getNextWriteTimestamp calls will be non-functional", N, D); return; } mSamplesToLocalTime.a_to_b_numer = static_cast<int32_t>(N); mSamplesToLocalTime.a_to_b_denom = static_cast<uint32_t>(D); }