bool AudioRecordImpl::init(Library *lib){ bool fail=false; AudioRecordImpl *impl=new AudioRecordImpl(lib); if (!impl->mCtorBeforeAPI17.isFound() && !impl->mCtor.isFound()) { fail=true; ms_error("AudioRecord::AudioRecord(...) not found."); } if (!impl->mDtor.isFound()) { fail=true; ms_error("AudioRecord::~AudioRecord() dtor not found."); } if (!impl->mInitCheck.isFound()) { ms_warning("AudioRecord::initCheck() not found (normal on Android 4.4)"); } if (!impl->mStop.isFound()) { fail=true; ms_error("AudioRecord::stop() not found."); } if (!impl->mStart.isFound()) { fail=true; ms_error("AudioRecord::start() not found."); } if (impl->mApiVersion>=19 && !impl->mDefaultCtor.isFound()){ fail=true; ms_error("AudioRecord::AudioRecord() not found."); } if (fail){ delete impl; return false; } sImpl=impl; if (impl->mApiVersion>=19){ AudioRecord *test=new AudioRecord(); //dumpMemory(test->getRealThis(),AudioRecordImpl::sObjSize); if (findRefbaseOffset(test->getRealThis(),AudioRecordImpl::sObjSize)>(ptrdiff_t)sizeof(void*)){ ms_message("AudioRecord does not need refcounting despite it is 4.4"); impl->mUseRefcount=false; }else{ ms_message("AudioRecord needs refcounting."); impl->mUseRefcount=true; } sp<AudioRecord> st(test); } return true; }
bool AudioTrackImpl::init(Library *lib){ bool fail=false; if (sImpl==NULL){ AudioTrackImpl *impl=new AudioTrackImpl(lib); if (!impl->mCtor.isFound()) { ms_error("AudioTrack::AudioTrack(...) not found"); fail=true; } if (!impl->mDtor.isFound()) { ms_error("AudioTrack::~AudioTrack() not found"); fail=true; } if (!impl->mStart.isFound()) { ms_error("AudioTrack::start() not found"); fail=true; } if (!impl->mStop.isFound()) { ms_error("AudioTrack::stop() not found"); fail=true; } if (!impl->mInitCheck.isFound()) { ms_warning("AudioTrack::initCheck() not found (normal in android 4.3)"); } if (!impl->mFlush.isFound()) { ms_error("AudioTrack::flush() not found"); fail=true; } if (!impl->mLatency.isFound()) { ms_warning("AudioTrack::latency() not found (normal in android 4.3)"); } if (!impl->mGetPosition.isFound()) { ms_error("AudioTrack::getPosition() not found"); fail=true; } if (impl->mSdkVersion>=19 && !impl->mDefaultCtor.isFound()) { ms_error("AudioTrack::AudioTrack() not found"); fail=true; } if (!fail){ sImpl=impl; if (impl->mSdkVersion>=19){ impl->mUseRefCount=true; AudioTrack *test=new AudioTrack(); //dumpMemory(test->getRealThis(),AudioTrackImpl::sObjSize); ptrdiff_t offset=findRefbaseOffset(test->getRealThis(),AudioTrackImpl::sObjSize); if (offset>(ptrdiff_t)sizeof(void*)){ ms_message("AudioTrack uses virtual RefBase despite it is 4.4"); impl->mRefBaseOffset=offset; }else{ ms_message("AudioTrack needs refcounting."); } sp<AudioTrack> st(test); } return true; }else{ delete impl; return false; } } return true; }