diff options
Diffstat (limited to 'media/libmedia')
29 files changed, 870 insertions, 2045 deletions
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk index a2e0909..6c585fb 100644 --- a/media/libmedia/Android.mk +++ b/media/libmedia/Android.mk @@ -42,6 +42,7 @@ LOCAL_SRC_FILES:= \ mediarecorder.cpp \ IMediaMetadataRetriever.cpp \ mediametadataretriever.cpp \ + MidiIoWrapper.cpp \ ToneGenerator.cpp \ JetPlayer.cpp \ IOMX.cpp \ @@ -57,8 +58,6 @@ LOCAL_SRC_FILES:= \ AudioEffect.cpp \ Visualizer.cpp \ MemoryLeakTrackUtil.cpp \ - SoundPool.cpp \ - SoundPoolThread.cpp \ StringArray.cpp \ AudioPolicy.cpp @@ -75,12 +74,12 @@ LOCAL_WHOLE_STATIC_LIBRARIES := libmedia_helper LOCAL_MODULE:= libmedia +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + LOCAL_C_INCLUDES := \ $(TOP)/frameworks/native/include/media/openmax \ $(TOP)/frameworks/av/include/media/ \ $(TOP)/frameworks/av/media/libstagefright \ - $(TOP)/external/icu/icu4c/source/common \ - $(TOP)/external/icu/icu4c/source/i18n \ $(call include-path-for, audio-effects) \ $(call include-path-for, audio-utils) @@ -88,8 +87,6 @@ include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) -# for <cutils/atomic-inline.h> -LOCAL_CFLAGS += -DANDROID_SMP=$(if $(findstring true,$(TARGET_CPU_SMP)),1,0) LOCAL_SRC_FILES += SingleStateQueue.cpp LOCAL_CFLAGS += -DSINGLE_STATE_QUEUE_INSTANTIATIONS='"SingleStateQueueInstantiations.cpp"' diff --git a/media/libmedia/AudioEffect.cpp b/media/libmedia/AudioEffect.cpp index 0d5d7e4..af103c1 100644 --- a/media/libmedia/AudioEffect.cpp +++ b/media/libmedia/AudioEffect.cpp @@ -150,7 +150,7 @@ status_t AudioEffect::set(const effect_uuid_t *type, int bufOffset = ((sizeof(effect_param_cblk_t) - 1) / sizeof(int) + 1) * sizeof(int); mCblk->buffer = (uint8_t *)mCblk + bufOffset; - iEffect->asBinder()->linkToDeath(mIEffectClient); + IInterface::asBinder(iEffect)->linkToDeath(mIEffectClient); mClientPid = IPCThreadState::self()->getCallingPid(); ALOGV("set() %p OK effect: %s id: %d status %d enabled %d pid %d", this, mDescriptor.name, mId, mStatus, mEnabled, mClientPid); @@ -173,7 +173,7 @@ AudioEffect::~AudioEffect() } if (mIEffect != NULL) { mIEffect->disconnect(); - mIEffect->asBinder()->unlinkToDeath(mIEffectClient); + IInterface::asBinder(mIEffect)->unlinkToDeath(mIEffectClient); } IPCThreadState::self()->flushCommands(); } diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index ca3832d..07ca14f 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -107,7 +107,7 @@ AudioRecord::~AudioRecord() mAudioRecordThread->requestExitAndWait(); mAudioRecordThread.clear(); } - mAudioRecord->asBinder()->unlinkToDeath(mDeathNotifier, this); + IInterface::asBinder(mAudioRecord)->unlinkToDeath(mDeathNotifier, this); mAudioRecord.clear(); mCblkMemory.clear(); mBufferMemory.clear(); @@ -525,7 +525,7 @@ status_t AudioRecord::openRecord_l(size_t epoch) // invariant that mAudioRecord != 0 is true only after set() returns successfully if (mAudioRecord != 0) { - mAudioRecord->asBinder()->unlinkToDeath(mDeathNotifier, this); + IInterface::asBinder(mAudioRecord)->unlinkToDeath(mDeathNotifier, this); mDeathNotifier.clear(); } mAudioRecord = record; @@ -575,7 +575,7 @@ status_t AudioRecord::openRecord_l(size_t epoch) mProxy->setMinimum(mNotificationFramesAct); mDeathNotifier = new DeathNotifier(this); - mAudioRecord->asBinder()->linkToDeath(mDeathNotifier, this); + IInterface::asBinder(mAudioRecord)->linkToDeath(mDeathNotifier, this); return NO_ERROR; } diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 389aacc..735db5c 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -194,7 +194,7 @@ AudioTrack::~AudioTrack() mAudioTrackThread->requestExitAndWait(); mAudioTrackThread.clear(); } - mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this); + IInterface::asBinder(mAudioTrack)->unlinkToDeath(mDeathNotifier, this); mAudioTrack.clear(); mCblkMemory.clear(); mSharedBuffer.clear(); @@ -1138,7 +1138,7 @@ status_t AudioTrack::createTrack_l() } // invariant that mAudioTrack != 0 is true only after set() returns successfully if (mAudioTrack != 0) { - mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this); + IInterface::asBinder(mAudioTrack)->unlinkToDeath(mDeathNotifier, this); mDeathNotifier.clear(); } mAudioTrack = track; @@ -1245,7 +1245,7 @@ status_t AudioTrack::createTrack_l() mProxy->setMinimum(mNotificationFramesAct); mDeathNotifier = new DeathNotifier(this); - mAudioTrack->asBinder()->linkToDeath(mDeathNotifier, this); + IInterface::asBinder(mAudioTrack)->linkToDeath(mDeathNotifier, this); return NO_ERROR; } diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp index d7ca425..3e5c883 100644 --- a/media/libmedia/IAudioFlinger.cpp +++ b/media/libmedia/IAudioFlinger.cpp @@ -121,7 +121,7 @@ public: // haveSharedBuffer if (sharedBuffer != 0) { data.writeInt32(true); - data.writeStrongBinder(sharedBuffer->asBinder()); + data.writeStrongBinder(IInterface::asBinder(sharedBuffer)); } else { data.writeInt32(false); } @@ -421,7 +421,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeStrongBinder(client->asBinder()); + data.writeStrongBinder(IInterface::asBinder(client)); remote()->transact(REGISTER_CLIENT, data, &reply); } @@ -718,7 +718,7 @@ public: data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.write(pDesc, sizeof(effect_descriptor_t)); - data.writeStrongBinder(client->asBinder()); + data.writeStrongBinder(IInterface::asBinder(client)); data.writeInt32(priority); data.writeInt32((int32_t) output); data.writeInt32(sessionId); @@ -941,7 +941,7 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32(flags); reply->writeInt32(sessionId); reply->writeInt32(status); - reply->writeStrongBinder(track->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(track)); return NO_ERROR; } break; case OPEN_RECORD: { @@ -968,9 +968,9 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32(sessionId); reply->writeInt64(notificationFrames); reply->writeInt32(status); - reply->writeStrongBinder(record->asBinder()); - reply->writeStrongBinder(cblk->asBinder()); - reply->writeStrongBinder(buffers->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(record)); + reply->writeStrongBinder(IInterface::asBinder(cblk)); + reply->writeStrongBinder(IInterface::asBinder(buffers)); return NO_ERROR; } break; case SAMPLE_RATE: { @@ -1256,7 +1256,7 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32(status); reply->writeInt32(id); reply->writeInt32(enabled); - reply->writeStrongBinder(effect->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(effect)); reply->write(&desc, sizeof(effect_descriptor_t)); return NO_ERROR; } break; diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index 12efa8a..cfb28a9 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -630,7 +630,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); - data.writeStrongBinder(client->asBinder()); + data.writeStrongBinder(IInterface::asBinder(client)); remote()->transact(REGISTER_CLIENT, data, &reply); } diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp index 265bb1b..df209fd 100644 --- a/media/libmedia/IAudioTrack.cpp +++ b/media/libmedia/IAudioTrack.cpp @@ -137,7 +137,7 @@ public: int64_t pts) { Parcel data, reply; data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); - data.writeStrongBinder(buffer->asBinder()); + data.writeStrongBinder(IInterface::asBinder(buffer)); data.writeInt64(pts); status_t status = remote()->transact(QUEUE_TIMED_BUFFER, data, &reply); @@ -207,7 +207,7 @@ status_t BnAudioTrack::onTransact( switch (code) { case GET_CBLK: { CHECK_INTERFACE(IAudioTrack, data, reply); - reply->writeStrongBinder(getCblk()->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(getCblk())); return NO_ERROR; } break; case START: { @@ -241,7 +241,7 @@ status_t BnAudioTrack::onTransact( status_t status = allocateTimedBuffer(data.readInt64(), &buffer); reply->writeInt32(status); if (status == NO_ERROR) { - reply->writeStrongBinder(buffer->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(buffer)); } return NO_ERROR; } break; diff --git a/media/libmedia/IDrm.cpp b/media/libmedia/IDrm.cpp index 7e74de9..b08fa82 100644 --- a/media/libmedia/IDrm.cpp +++ b/media/libmedia/IDrm.cpp @@ -450,7 +450,7 @@ struct BpDrm : public BpInterface<IDrm> { virtual status_t setListener(const sp<IDrmClient>& listener) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); - data.writeStrongBinder(listener->asBinder()); + data.writeStrongBinder(IInterface::asBinder(listener)); remote()->transact(SET_LISTENER, data, &reply); return reply.readInt32(); } diff --git a/media/libmedia/IEffect.cpp b/media/libmedia/IEffect.cpp index 431cf87..9ab4484 100644 --- a/media/libmedia/IEffect.cpp +++ b/media/libmedia/IEffect.cpp @@ -190,7 +190,7 @@ status_t BnEffect::onTransact( case GET_CBLK: { CHECK_INTERFACE(IEffect, data, reply); - reply->writeStrongBinder(getCblk()->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(getCblk())); return NO_ERROR; } break; diff --git a/media/libmedia/IHDCP.cpp b/media/libmedia/IHDCP.cpp index 9d93320..79944ee 100644 --- a/media/libmedia/IHDCP.cpp +++ b/media/libmedia/IHDCP.cpp @@ -65,7 +65,7 @@ struct BpHDCP : public BpInterface<IHDCP> { virtual status_t setObserver(const sp<IHDCPObserver> &observer) { Parcel data, reply; data.writeInterfaceToken(IHDCP::getInterfaceDescriptor()); - data.writeStrongBinder(observer->asBinder()); + data.writeStrongBinder(IInterface::asBinder(observer)); remote()->transact(HDCP_SET_OBSERVER, data, &reply); return reply.readInt32(); } diff --git a/media/libmedia/IMediaDeathNotifier.cpp b/media/libmedia/IMediaDeathNotifier.cpp index 10b4934..38e9ca0 100644 --- a/media/libmedia/IMediaDeathNotifier.cpp +++ b/media/libmedia/IMediaDeathNotifier.cpp @@ -104,7 +104,7 @@ IMediaDeathNotifier::DeathNotifier::~DeathNotifier() Mutex::Autolock _l(sServiceLock); sObitRecipients.clear(); if (sMediaPlayerService != 0) { - sMediaPlayerService->asBinder()->unlinkToDeath(this); + IInterface::asBinder(sMediaPlayerService)->unlinkToDeath(this); } } diff --git a/media/libmedia/IMediaLogService.cpp b/media/libmedia/IMediaLogService.cpp index 8a66c7c..a4af7b7 100644 --- a/media/libmedia/IMediaLogService.cpp +++ b/media/libmedia/IMediaLogService.cpp @@ -42,7 +42,7 @@ public: virtual void registerWriter(const sp<IMemory>& shared, size_t size, const char *name) { Parcel data, reply; data.writeInterfaceToken(IMediaLogService::getInterfaceDescriptor()); - data.writeStrongBinder(shared->asBinder()); + data.writeStrongBinder(IInterface::asBinder(shared)); data.writeInt64((int64_t) size); data.writeCString(name); status_t status = remote()->transact(REGISTER_WRITER, data, &reply); @@ -52,7 +52,7 @@ public: virtual void unregisterWriter(const sp<IMemory>& shared) { Parcel data, reply; data.writeInterfaceToken(IMediaLogService::getInterfaceDescriptor()); - data.writeStrongBinder(shared->asBinder()); + data.writeStrongBinder(IInterface::asBinder(shared)); status_t status = remote()->transact(UNREGISTER_WRITER, data, &reply); // FIXME ignores status } diff --git a/media/libmedia/IMediaMetadataRetriever.cpp b/media/libmedia/IMediaMetadataRetriever.cpp index 38f717c..aa2665a 100644 --- a/media/libmedia/IMediaMetadataRetriever.cpp +++ b/media/libmedia/IMediaMetadataRetriever.cpp @@ -95,7 +95,7 @@ public: data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor()); data.writeInt32(httpService != NULL); if (httpService != NULL) { - data.writeStrongBinder(httpService->asBinder()); + data.writeStrongBinder(IInterface::asBinder(httpService)); } data.writeCString(srcUrl); @@ -246,7 +246,7 @@ status_t BnMediaMetadataRetriever::onTransact( sp<IMemory> bitmap = getFrameAtTime(timeUs, option); if (bitmap != 0) { // Don't send NULL across the binder interface reply->writeInt32(NO_ERROR); - reply->writeStrongBinder(bitmap->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(bitmap)); } else { reply->writeInt32(UNKNOWN_ERROR); } @@ -263,7 +263,7 @@ status_t BnMediaMetadataRetriever::onTransact( sp<IMemory> albumArt = extractAlbumArt(); if (albumArt != 0) { // Don't send NULL across the binder interface reply->writeInt32(NO_ERROR); - reply->writeStrongBinder(albumArt->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(albumArt)); } else { reply->writeInt32(UNKNOWN_ERROR); } diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index aa22b58..fb26b87 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -85,7 +85,7 @@ public: data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); data.writeInt32(httpService != NULL); if (httpService != NULL) { - data.writeStrongBinder(httpService->asBinder()); + data.writeStrongBinder(IInterface::asBinder(httpService)); } data.writeCString(url); if (headers == NULL) { @@ -115,7 +115,7 @@ public: status_t setDataSource(const sp<IStreamSource> &source) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); - data.writeStrongBinder(source->asBinder()); + data.writeStrongBinder(IInterface::asBinder(source)); remote()->transact(SET_DATA_SOURCE_STREAM, data, &reply); return reply.readInt32(); } @@ -125,7 +125,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); - sp<IBinder> b(bufferProducer->asBinder()); + sp<IBinder> b(IInterface::asBinder(bufferProducer)); data.writeStrongBinder(b); remote()->transact(SET_VIDEO_SURFACETEXTURE, data, &reply); return reply.readInt32(); @@ -323,7 +323,7 @@ public: status_t setNextPlayer(const sp<IMediaPlayer>& player) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); - sp<IBinder> b(player->asBinder()); + sp<IBinder> b(IInterface::asBinder(player)); data.writeStrongBinder(b); remote()->transact(SET_NEXT_PLAYER, data, &reply); return reply.readInt32(); diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index 2e02d17..feea267 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -39,8 +39,6 @@ namespace android { enum { CREATE = IBinder::FIRST_CALL_TRANSACTION, - DECODE_URL, - DECODE_FD, CREATE_MEDIA_RECORDER, CREATE_METADATA_RETRIEVER, GET_OMX, @@ -73,7 +71,7 @@ public: const sp<IMediaPlayerClient>& client, int audioSessionId) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); - data.writeStrongBinder(client->asBinder()); + data.writeStrongBinder(IInterface::asBinder(client)); data.writeInt32(audioSessionId); remote()->transact(CREATE, data, &reply); @@ -88,59 +86,6 @@ public: return interface_cast<IMediaRecorder>(reply.readStrongBinder()); } - virtual status_t decode( - const sp<IMediaHTTPService> &httpService, - const char* url, - uint32_t *pSampleRate, - int* pNumChannels, - audio_format_t* pFormat, - const sp<IMemoryHeap>& heap, - size_t *pSize) - { - Parcel data, reply; - data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); - data.writeInt32(httpService != NULL); - if (httpService != NULL) { - data.writeStrongBinder(httpService->asBinder()); - } - data.writeCString(url); - data.writeStrongBinder(heap->asBinder()); - status_t status = remote()->transact(DECODE_URL, data, &reply); - if (status == NO_ERROR) { - status = (status_t)reply.readInt32(); - if (status == NO_ERROR) { - *pSampleRate = uint32_t(reply.readInt32()); - *pNumChannels = reply.readInt32(); - *pFormat = (audio_format_t)reply.readInt32(); - *pSize = (size_t)reply.readInt32(); - } - } - return status; - } - - virtual status_t decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, - int* pNumChannels, audio_format_t* pFormat, - const sp<IMemoryHeap>& heap, size_t *pSize) - { - Parcel data, reply; - data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); - data.writeFileDescriptor(fd); - data.writeInt64(offset); - data.writeInt64(length); - data.writeStrongBinder(heap->asBinder()); - status_t status = remote()->transact(DECODE_FD, data, &reply); - if (status == NO_ERROR) { - status = (status_t)reply.readInt32(); - if (status == NO_ERROR) { - *pSampleRate = uint32_t(reply.readInt32()); - *pNumChannels = reply.readInt32(); - *pFormat = (audio_format_t)reply.readInt32(); - *pSize = (size_t)reply.readInt32(); - } - } - return status; - } - virtual sp<IOMX> getOMX() { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); @@ -188,7 +133,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); - data.writeStrongBinder(client->asBinder()); + data.writeStrongBinder(IInterface::asBinder(client)); data.writeString8(iface); remote()->transact(LISTEN_FOR_REMOTE_DISPLAY, data, &reply); return interface_cast<IRemoteDisplay>(reply.readStrongBinder()); @@ -216,95 +161,44 @@ status_t BnMediaPlayerService::onTransact( interface_cast<IMediaPlayerClient>(data.readStrongBinder()); int audioSessionId = data.readInt32(); sp<IMediaPlayer> player = create(client, audioSessionId); - reply->writeStrongBinder(player->asBinder()); - return NO_ERROR; - } break; - case DECODE_URL: { - CHECK_INTERFACE(IMediaPlayerService, data, reply); - sp<IMediaHTTPService> httpService; - if (data.readInt32()) { - httpService = - interface_cast<IMediaHTTPService>(data.readStrongBinder()); - } - const char* url = data.readCString(); - sp<IMemoryHeap> heap = interface_cast<IMemoryHeap>(data.readStrongBinder()); - uint32_t sampleRate; - int numChannels; - audio_format_t format; - size_t size; - status_t status = - decode(httpService, - url, - &sampleRate, - &numChannels, - &format, - heap, - &size); - reply->writeInt32(status); - if (status == NO_ERROR) { - reply->writeInt32(sampleRate); - reply->writeInt32(numChannels); - reply->writeInt32((int32_t)format); - reply->writeInt32((int32_t)size); - } - return NO_ERROR; - } break; - case DECODE_FD: { - CHECK_INTERFACE(IMediaPlayerService, data, reply); - int fd = dup(data.readFileDescriptor()); - int64_t offset = data.readInt64(); - int64_t length = data.readInt64(); - sp<IMemoryHeap> heap = interface_cast<IMemoryHeap>(data.readStrongBinder()); - uint32_t sampleRate; - int numChannels; - audio_format_t format; - size_t size; - status_t status = decode(fd, offset, length, &sampleRate, &numChannels, &format, - heap, &size); - reply->writeInt32(status); - if (status == NO_ERROR) { - reply->writeInt32(sampleRate); - reply->writeInt32(numChannels); - reply->writeInt32((int32_t)format); - reply->writeInt32((int32_t)size); - } + reply->writeStrongBinder(IInterface::asBinder(player)); return NO_ERROR; } break; case CREATE_MEDIA_RECORDER: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IMediaRecorder> recorder = createMediaRecorder(); - reply->writeStrongBinder(recorder->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(recorder)); return NO_ERROR; } break; case CREATE_METADATA_RETRIEVER: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(); - reply->writeStrongBinder(retriever->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(retriever)); return NO_ERROR; } break; case GET_OMX: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IOMX> omx = getOMX(); - reply->writeStrongBinder(omx->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(omx)); return NO_ERROR; } break; case MAKE_CRYPTO: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<ICrypto> crypto = makeCrypto(); - reply->writeStrongBinder(crypto->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(crypto)); return NO_ERROR; } break; case MAKE_DRM: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IDrm> drm = makeDrm(); - reply->writeStrongBinder(drm->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(drm)); return NO_ERROR; } break; case MAKE_HDCP: { CHECK_INTERFACE(IMediaPlayerService, data, reply); bool createEncryptionModule = data.readInt32(); sp<IHDCP> hdcp = makeHDCP(createEncryptionModule); - reply->writeStrongBinder(hdcp->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(hdcp)); return NO_ERROR; } break; case ADD_BATTERY_DATA: { @@ -324,13 +218,13 @@ status_t BnMediaPlayerService::onTransact( interface_cast<IRemoteDisplayClient>(data.readStrongBinder())); String8 iface(data.readString8()); sp<IRemoteDisplay> display(listenForRemoteDisplay(client, iface)); - reply->writeStrongBinder(display->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(display)); return NO_ERROR; } break; case GET_CODEC_LIST: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IMediaCodecList> mcl = getCodecList(); - reply->writeStrongBinder(mcl->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(mcl)); return NO_ERROR; } break; default: diff --git a/media/libmedia/IMediaRecorder.cpp b/media/libmedia/IMediaRecorder.cpp index 95af006..a733b68 100644 --- a/media/libmedia/IMediaRecorder.cpp +++ b/media/libmedia/IMediaRecorder.cpp @@ -70,8 +70,8 @@ public: ALOGV("setCamera(%p,%p)", camera.get(), proxy.get()); Parcel data, reply; data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); - data.writeStrongBinder(camera->asBinder()); - data.writeStrongBinder(proxy->asBinder()); + data.writeStrongBinder(IInterface::asBinder(camera)); + data.writeStrongBinder(IInterface::asBinder(proxy)); remote()->transact(SET_CAMERA, data, &reply); return reply.readInt32(); } @@ -94,7 +94,7 @@ public: ALOGV("setPreviewSurface(%p)", surface.get()); Parcel data, reply; data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); - data.writeStrongBinder(surface->asBinder()); + data.writeStrongBinder(IInterface::asBinder(surface)); remote()->transact(SET_PREVIEW_SURFACE, data, &reply); return reply.readInt32(); } @@ -215,7 +215,7 @@ public: ALOGV("setListener(%p)", listener.get()); Parcel data, reply; data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); - data.writeStrongBinder(listener->asBinder()); + data.writeStrongBinder(IInterface::asBinder(listener)); remote()->transact(SET_LISTENER, data, &reply); return reply.readInt32(); } @@ -468,7 +468,7 @@ status_t BnMediaRecorder::onTransact( int returnedNull= (surfaceMediaSource == NULL) ? 1 : 0 ; reply->writeInt32(returnedNull); if (!returnedNull) { - reply->writeStrongBinder(surfaceMediaSource->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(surfaceMediaSource)); } return NO_ERROR; } break; diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp index c583d32..e208df9 100644 --- a/media/libmedia/IOMX.cpp +++ b/media/libmedia/IOMX.cpp @@ -100,7 +100,7 @@ public: Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeCString(name); - data.writeStrongBinder(observer->asBinder()); + data.writeStrongBinder(IInterface::asBinder(observer)); remote()->transact(ALLOCATE_NODE, data, &reply); status_t err = reply.readInt32(); @@ -248,7 +248,7 @@ public: data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeInt32((int32_t)node); data.writeInt32(port_index); - data.writeStrongBinder(params->asBinder()); + data.writeStrongBinder(IInterface::asBinder(params)); remote()->transact(USE_BUFFER, data, &reply); status_t err = reply.readInt32(); @@ -418,7 +418,7 @@ public: data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeInt32((int32_t)node); data.writeInt32(port_index); - data.writeStrongBinder(params->asBinder()); + data.writeStrongBinder(IInterface::asBinder(params)); remote()->transact(ALLOC_BUFFER_WITH_BACKUP, data, &reply); status_t err = reply.readInt32(); @@ -775,7 +775,7 @@ status_t BnOMX::onTransact( reply->writeInt32(err); if (err == OK) { - reply->writeStrongBinder(bufferProducer->asBinder()); + reply->writeStrongBinder(IInterface::asBinder(bufferProducer)); } return NO_ERROR; diff --git a/media/libmedia/IRemoteDisplayClient.cpp b/media/libmedia/IRemoteDisplayClient.cpp index 7190879..9d63bc9 100644 --- a/media/libmedia/IRemoteDisplayClient.cpp +++ b/media/libmedia/IRemoteDisplayClient.cpp @@ -42,7 +42,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IRemoteDisplayClient::getInterfaceDescriptor()); - data.writeStrongBinder(bufferProducer->asBinder()); + data.writeStrongBinder(IInterface::asBinder(bufferProducer)); data.writeInt32(width); data.writeInt32(height); data.writeInt32(flags); diff --git a/media/libmedia/IStreamSource.cpp b/media/libmedia/IStreamSource.cpp index fe2cc61..d480aef 100644 --- a/media/libmedia/IStreamSource.cpp +++ b/media/libmedia/IStreamSource.cpp @@ -55,7 +55,7 @@ struct BpStreamSource : public BpInterface<IStreamSource> { virtual void setListener(const sp<IStreamListener> &listener) { Parcel data, reply; data.writeInterfaceToken(IStreamSource::getInterfaceDescriptor()); - data.writeStrongBinder(listener->asBinder()); + data.writeStrongBinder(IInterface::asBinder(listener)); remote()->transact(SET_LISTENER, data, &reply); } @@ -64,7 +64,7 @@ struct BpStreamSource : public BpInterface<IStreamSource> { data.writeInterfaceToken(IStreamSource::getInterfaceDescriptor()); data.writeInt64(static_cast<int64_t>(buffers.size())); for (size_t i = 0; i < buffers.size(); ++i) { - data.writeStrongBinder(buffers.itemAt(i)->asBinder()); + data.writeStrongBinder(IInterface::asBinder(buffers.itemAt(i))); } remote()->transact(SET_BUFFERS, data, &reply); } diff --git a/media/libmedia/JetPlayer.cpp b/media/libmedia/JetPlayer.cpp index f0f1832..721d8d7 100644 --- a/media/libmedia/JetPlayer.cpp +++ b/media/libmedia/JetPlayer.cpp @@ -36,7 +36,6 @@ JetPlayer::JetPlayer(void *javaJetPlayer, int maxTracks, int trackBufferSize) : mPaused(false), mMaxTracks(maxTracks), mEasData(NULL), - mEasJetFileLoc(NULL), mTrackBufferSize(trackBufferSize) { ALOGV("JetPlayer constructor"); @@ -133,10 +132,7 @@ int JetPlayer::release() JET_Shutdown(mEasData); EAS_Shutdown(mEasData); } - if (mEasJetFileLoc) { - free(mEasJetFileLoc); - mEasJetFileLoc = NULL; - } + mIoWrapper.clear(); if (mAudioTrack != 0) { mAudioTrack->stop(); mAudioTrack->flush(); @@ -327,16 +323,9 @@ int JetPlayer::loadFromFile(const char* path) Mutex::Autolock lock(mMutex); - mEasJetFileLoc = (EAS_FILE_LOCATOR) malloc(sizeof(EAS_FILE)); - strncpy(mJetFilePath, path, sizeof(mJetFilePath)); - mJetFilePath[sizeof(mJetFilePath) - 1] = '\0'; - mEasJetFileLoc->path = mJetFilePath; - - mEasJetFileLoc->fd = 0; - mEasJetFileLoc->length = 0; - mEasJetFileLoc->offset = 0; + mIoWrapper = new MidiIoWrapper(path); - EAS_RESULT result = JET_OpenFile(mEasData, mEasJetFileLoc); + EAS_RESULT result = JET_OpenFile(mEasData, mIoWrapper->getLocator()); if (result != EAS_SUCCESS) mState = EAS_STATE_ERROR; else @@ -352,13 +341,9 @@ int JetPlayer::loadFromFD(const int fd, const long long offset, const long long Mutex::Autolock lock(mMutex); - mEasJetFileLoc = (EAS_FILE_LOCATOR) malloc(sizeof(EAS_FILE)); - mEasJetFileLoc->fd = fd; - mEasJetFileLoc->offset = offset; - mEasJetFileLoc->length = length; - mEasJetFileLoc->path = NULL; + mIoWrapper = new MidiIoWrapper(fd, offset, length); - EAS_RESULT result = JET_OpenFile(mEasData, mEasJetFileLoc); + EAS_RESULT result = JET_OpenFile(mEasData, mIoWrapper->getLocator()); if (result != EAS_SUCCESS) mState = EAS_STATE_ERROR; else @@ -459,7 +444,6 @@ int JetPlayer::clearQueue() //------------------------------------------------------------------------------------------------- void JetPlayer::dump() { - ALOGE("JetPlayer dump: JET file=%s", mEasJetFileLoc->path); } void JetPlayer::dumpJetStatus(S_JET_STATUS* pJetStatus) diff --git a/media/libmedia/MemoryLeakTrackUtil.cpp b/media/libmedia/MemoryLeakTrackUtil.cpp index 66f7161..d31f721 100644 --- a/media/libmedia/MemoryLeakTrackUtil.cpp +++ b/media/libmedia/MemoryLeakTrackUtil.cpp @@ -18,6 +18,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <sys/types.h> #include <unistd.h> diff --git a/media/libmedia/MidiIoWrapper.cpp b/media/libmedia/MidiIoWrapper.cpp new file mode 100644 index 0000000..5197ce2 --- /dev/null +++ b/media/libmedia/MidiIoWrapper.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//#define LOG_NDEBUG 0 +#define LOG_TAG "MidiIoWrapper" +#include <utils/Log.h> +#include <utils/RefBase.h> + +#include <sys/stat.h> +#include <fcntl.h> + +#include "media/MidiIoWrapper.h" + +static int readAt(void *handle, void *buffer, int pos, int size) { + return ((android::MidiIoWrapper*)handle)->readAt(buffer, pos, size); +} +static int size(void *handle) { + return ((android::MidiIoWrapper*)handle)->size(); +} + +namespace android { + +MidiIoWrapper::MidiIoWrapper(const char *path) { + ALOGV("MidiIoWrapper(%s)", path); + mFd = open(path, O_RDONLY | O_LARGEFILE); + mBase = 0; + mLength = lseek(mFd, 0, SEEK_END); +} + +MidiIoWrapper::MidiIoWrapper(int fd, off64_t offset, int64_t size) { + ALOGV("MidiIoWrapper(fd=%d)", fd); + mFd = dup(fd); + mBase = offset; + mLength = size; +} + +MidiIoWrapper::MidiIoWrapper(const sp<DataSource> &source) { + ALOGV("MidiIoWrapper(DataSource)"); + mFd = -1; + mDataSource = source; + off64_t l; + if (mDataSource->getSize(&l) == OK) { + mLength = l; + } else { + mLength = 0; + } +} + +MidiIoWrapper::~MidiIoWrapper() { + ALOGV("~MidiIoWrapper"); + close(mFd); +} + +int MidiIoWrapper::readAt(void *buffer, int offset, int size) { + ALOGV("readAt(%p, %d, %d)", buffer, offset, size); + + if (mDataSource != NULL) { + return mDataSource->readAt(offset, buffer, size); + } + lseek(mFd, mBase + offset, SEEK_SET); + if (offset + size > mLength) { + size = mLength - offset; + } + return read(mFd, buffer, size); +} + +int MidiIoWrapper::size() { + ALOGV("size() = %d", int(mLength)); + return mLength; +} + +EAS_FILE_LOCATOR MidiIoWrapper::getLocator() { + mEasFile.handle = this; + mEasFile.readAt = ::readAt; + mEasFile.size = ::size; + return &mEasFile; +} + +} // namespace android diff --git a/media/libmedia/SingleStateQueue.cpp b/media/libmedia/SingleStateQueue.cpp index 3503baa..c241184 100644 --- a/media/libmedia/SingleStateQueue.cpp +++ b/media/libmedia/SingleStateQueue.cpp @@ -16,7 +16,6 @@ #include <new> #include <cutils/atomic.h> -#include <cutils/atomic-inline.h> // for android_memory_barrier() #include <media/SingleStateQueue.h> namespace android { diff --git a/media/libmedia/SoundPool.cpp b/media/libmedia/SoundPool.cpp deleted file mode 100644 index d2e381b..0000000 --- a/media/libmedia/SoundPool.cpp +++ /dev/null @@ -1,921 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -//#define LOG_NDEBUG 0 -#define LOG_TAG "SoundPool" - -#include <inttypes.h> - -#include <utils/Log.h> - -#define USE_SHARED_MEM_BUFFER - -#include <media/AudioTrack.h> -#include <media/IMediaHTTPService.h> -#include <media/mediaplayer.h> -#include <media/SoundPool.h> -#include "SoundPoolThread.h" -#include <media/AudioPolicyHelper.h> - -namespace android -{ - -int kDefaultBufferCount = 4; -uint32_t kMaxSampleRate = 48000; -uint32_t kDefaultSampleRate = 44100; -uint32_t kDefaultFrameCount = 1200; -size_t kDefaultHeapSize = 1024 * 1024; // 1MB - - -SoundPool::SoundPool(int maxChannels, const audio_attributes_t* pAttributes) -{ - ALOGV("SoundPool constructor: maxChannels=%d, attr.usage=%d, attr.flags=0x%x, attr.tags=%s", - maxChannels, pAttributes->usage, pAttributes->flags, pAttributes->tags); - - // check limits - mMaxChannels = maxChannels; - if (mMaxChannels < 1) { - mMaxChannels = 1; - } - else if (mMaxChannels > 32) { - mMaxChannels = 32; - } - ALOGW_IF(maxChannels != mMaxChannels, "App requested %d channels", maxChannels); - - mQuit = false; - mDecodeThread = 0; - memcpy(&mAttributes, pAttributes, sizeof(audio_attributes_t)); - mAllocated = 0; - mNextSampleID = 0; - mNextChannelID = 0; - - mCallback = 0; - mUserData = 0; - - mChannelPool = new SoundChannel[mMaxChannels]; - for (int i = 0; i < mMaxChannels; ++i) { - mChannelPool[i].init(this); - mChannels.push_back(&mChannelPool[i]); - } - - // start decode thread - startThreads(); -} - -SoundPool::~SoundPool() -{ - ALOGV("SoundPool destructor"); - mDecodeThread->quit(); - quit(); - - Mutex::Autolock lock(&mLock); - - mChannels.clear(); - if (mChannelPool) - delete [] mChannelPool; - // clean up samples - ALOGV("clear samples"); - mSamples.clear(); - - if (mDecodeThread) - delete mDecodeThread; -} - -void SoundPool::addToRestartList(SoundChannel* channel) -{ - Mutex::Autolock lock(&mRestartLock); - if (!mQuit) { - mRestart.push_back(channel); - mCondition.signal(); - } -} - -void SoundPool::addToStopList(SoundChannel* channel) -{ - Mutex::Autolock lock(&mRestartLock); - if (!mQuit) { - mStop.push_back(channel); - mCondition.signal(); - } -} - -int SoundPool::beginThread(void* arg) -{ - SoundPool* p = (SoundPool*)arg; - return p->run(); -} - -int SoundPool::run() -{ - mRestartLock.lock(); - while (!mQuit) { - mCondition.wait(mRestartLock); - ALOGV("awake"); - if (mQuit) break; - - while (!mStop.empty()) { - SoundChannel* channel; - ALOGV("Getting channel from stop list"); - List<SoundChannel* >::iterator iter = mStop.begin(); - channel = *iter; - mStop.erase(iter); - mRestartLock.unlock(); - if (channel != 0) { - Mutex::Autolock lock(&mLock); - channel->stop(); - } - mRestartLock.lock(); - if (mQuit) break; - } - - while (!mRestart.empty()) { - SoundChannel* channel; - ALOGV("Getting channel from list"); - List<SoundChannel*>::iterator iter = mRestart.begin(); - channel = *iter; - mRestart.erase(iter); - mRestartLock.unlock(); - if (channel != 0) { - Mutex::Autolock lock(&mLock); - channel->nextEvent(); - } - mRestartLock.lock(); - if (mQuit) break; - } - } - - mStop.clear(); - mRestart.clear(); - mCondition.signal(); - mRestartLock.unlock(); - ALOGV("goodbye"); - return 0; -} - -void SoundPool::quit() -{ - mRestartLock.lock(); - mQuit = true; - mCondition.signal(); - mCondition.wait(mRestartLock); - ALOGV("return from quit"); - mRestartLock.unlock(); -} - -bool SoundPool::startThreads() -{ - createThreadEtc(beginThread, this, "SoundPool"); - if (mDecodeThread == NULL) - mDecodeThread = new SoundPoolThread(this); - return mDecodeThread != NULL; -} - -SoundChannel* SoundPool::findChannel(int channelID) -{ - for (int i = 0; i < mMaxChannels; ++i) { - if (mChannelPool[i].channelID() == channelID) { - return &mChannelPool[i]; - } - } - return NULL; -} - -SoundChannel* SoundPool::findNextChannel(int channelID) -{ - for (int i = 0; i < mMaxChannels; ++i) { - if (mChannelPool[i].nextChannelID() == channelID) { - return &mChannelPool[i]; - } - } - return NULL; -} - -int SoundPool::load(const char* path, int priority __unused) -{ - ALOGV("load: path=%s, priority=%d", path, priority); - Mutex::Autolock lock(&mLock); - sp<Sample> sample = new Sample(++mNextSampleID, path); - mSamples.add(sample->sampleID(), sample); - doLoad(sample); - return sample->sampleID(); -} - -int SoundPool::load(int fd, int64_t offset, int64_t length, int priority __unused) -{ - ALOGV("load: fd=%d, offset=%" PRId64 ", length=%" PRId64 ", priority=%d", - fd, offset, length, priority); - Mutex::Autolock lock(&mLock); - sp<Sample> sample = new Sample(++mNextSampleID, fd, offset, length); - mSamples.add(sample->sampleID(), sample); - doLoad(sample); - return sample->sampleID(); -} - -void SoundPool::doLoad(sp<Sample>& sample) -{ - ALOGV("doLoad: loading sample sampleID=%d", sample->sampleID()); - sample->startLoad(); - mDecodeThread->loadSample(sample->sampleID()); -} - -bool SoundPool::unload(int sampleID) -{ - ALOGV("unload: sampleID=%d", sampleID); - Mutex::Autolock lock(&mLock); - return mSamples.removeItem(sampleID); -} - -int SoundPool::play(int sampleID, float leftVolume, float rightVolume, - int priority, int loop, float rate) -{ - ALOGV("play sampleID=%d, leftVolume=%f, rightVolume=%f, priority=%d, loop=%d, rate=%f", - sampleID, leftVolume, rightVolume, priority, loop, rate); - sp<Sample> sample; - SoundChannel* channel; - int channelID; - - Mutex::Autolock lock(&mLock); - - if (mQuit) { - return 0; - } - // is sample ready? - sample = findSample(sampleID); - if ((sample == 0) || (sample->state() != Sample::READY)) { - ALOGW(" sample %d not READY", sampleID); - return 0; - } - - dump(); - - // allocate a channel - channel = allocateChannel_l(priority); - - // no channel allocated - return 0 - if (!channel) { - ALOGV("No channel allocated"); - return 0; - } - - channelID = ++mNextChannelID; - - ALOGV("play channel %p state = %d", channel, channel->state()); - channel->play(sample, channelID, leftVolume, rightVolume, priority, loop, rate); - return channelID; -} - -SoundChannel* SoundPool::allocateChannel_l(int priority) -{ - List<SoundChannel*>::iterator iter; - SoundChannel* channel = NULL; - - // allocate a channel - if (!mChannels.empty()) { - iter = mChannels.begin(); - if (priority >= (*iter)->priority()) { - channel = *iter; - mChannels.erase(iter); - ALOGV("Allocated active channel"); - } - } - - // update priority and put it back in the list - if (channel) { - channel->setPriority(priority); - for (iter = mChannels.begin(); iter != mChannels.end(); ++iter) { - if (priority < (*iter)->priority()) { - break; - } - } - mChannels.insert(iter, channel); - } - return channel; -} - -// move a channel from its current position to the front of the list -void SoundPool::moveToFront_l(SoundChannel* channel) -{ - for (List<SoundChannel*>::iterator iter = mChannels.begin(); iter != mChannels.end(); ++iter) { - if (*iter == channel) { - mChannels.erase(iter); - mChannels.push_front(channel); - break; - } - } -} - -void SoundPool::pause(int channelID) -{ - ALOGV("pause(%d)", channelID); - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->pause(); - } -} - -void SoundPool::autoPause() -{ - ALOGV("autoPause()"); - Mutex::Autolock lock(&mLock); - for (int i = 0; i < mMaxChannels; ++i) { - SoundChannel* channel = &mChannelPool[i]; - channel->autoPause(); - } -} - -void SoundPool::resume(int channelID) -{ - ALOGV("resume(%d)", channelID); - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->resume(); - } -} - -void SoundPool::autoResume() -{ - ALOGV("autoResume()"); - Mutex::Autolock lock(&mLock); - for (int i = 0; i < mMaxChannels; ++i) { - SoundChannel* channel = &mChannelPool[i]; - channel->autoResume(); - } -} - -void SoundPool::stop(int channelID) -{ - ALOGV("stop(%d)", channelID); - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->stop(); - } else { - channel = findNextChannel(channelID); - if (channel) - channel->clearNextEvent(); - } -} - -void SoundPool::setVolume(int channelID, float leftVolume, float rightVolume) -{ - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->setVolume(leftVolume, rightVolume); - } -} - -void SoundPool::setPriority(int channelID, int priority) -{ - ALOGV("setPriority(%d, %d)", channelID, priority); - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->setPriority(priority); - } -} - -void SoundPool::setLoop(int channelID, int loop) -{ - ALOGV("setLoop(%d, %d)", channelID, loop); - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->setLoop(loop); - } -} - -void SoundPool::setRate(int channelID, float rate) -{ - ALOGV("setRate(%d, %f)", channelID, rate); - Mutex::Autolock lock(&mLock); - SoundChannel* channel = findChannel(channelID); - if (channel) { - channel->setRate(rate); - } -} - -// call with lock held -void SoundPool::done_l(SoundChannel* channel) -{ - ALOGV("done_l(%d)", channel->channelID()); - // if "stolen", play next event - if (channel->nextChannelID() != 0) { - ALOGV("add to restart list"); - addToRestartList(channel); - } - - // return to idle state - else { - ALOGV("move to front"); - moveToFront_l(channel); - } -} - -void SoundPool::setCallback(SoundPoolCallback* callback, void* user) -{ - Mutex::Autolock lock(&mCallbackLock); - mCallback = callback; - mUserData = user; -} - -void SoundPool::notify(SoundPoolEvent event) -{ - Mutex::Autolock lock(&mCallbackLock); - if (mCallback != NULL) { - mCallback(event, this, mUserData); - } -} - -void SoundPool::dump() -{ - for (int i = 0; i < mMaxChannels; ++i) { - mChannelPool[i].dump(); - } -} - - -Sample::Sample(int sampleID, const char* url) -{ - init(); - mSampleID = sampleID; - mUrl = strdup(url); - ALOGV("create sampleID=%d, url=%s", mSampleID, mUrl); -} - -Sample::Sample(int sampleID, int fd, int64_t offset, int64_t length) -{ - init(); - mSampleID = sampleID; - mFd = dup(fd); - mOffset = offset; - mLength = length; - ALOGV("create sampleID=%d, fd=%d, offset=%" PRId64 " length=%" PRId64, - mSampleID, mFd, mLength, mOffset); -} - -void Sample::init() -{ - mSize = 0; - mRefCount = 0; - mSampleID = 0; - mState = UNLOADED; - mFd = -1; - mOffset = 0; - mLength = 0; - mUrl = 0; -} - -Sample::~Sample() -{ - ALOGV("Sample::destructor sampleID=%d, fd=%d", mSampleID, mFd); - if (mFd > 0) { - ALOGV("close(%d)", mFd); - ::close(mFd); - } - free(mUrl); -} - -status_t Sample::doLoad() -{ - uint32_t sampleRate; - int numChannels; - audio_format_t format; - status_t status; - mHeap = new MemoryHeapBase(kDefaultHeapSize); - - ALOGV("Start decode"); - if (mUrl) { - status = MediaPlayer::decode( - NULL /* httpService */, - mUrl, - &sampleRate, - &numChannels, - &format, - mHeap, - &mSize); - } else { - status = MediaPlayer::decode(mFd, mOffset, mLength, &sampleRate, &numChannels, &format, - mHeap, &mSize); - ALOGV("close(%d)", mFd); - ::close(mFd); - mFd = -1; - } - if (status != NO_ERROR) { - ALOGE("Unable to load sample: %s", mUrl); - goto error; - } - ALOGV("pointer = %p, size = %zu, sampleRate = %u, numChannels = %d", - mHeap->getBase(), mSize, sampleRate, numChannels); - - if (sampleRate > kMaxSampleRate) { - ALOGE("Sample rate (%u) out of range", sampleRate); - status = BAD_VALUE; - goto error; - } - - if ((numChannels < 1) || (numChannels > 2)) { - ALOGE("Sample channel count (%d) out of range", numChannels); - status = BAD_VALUE; - goto error; - } - - mData = new MemoryBase(mHeap, 0, mSize); - mSampleRate = sampleRate; - mNumChannels = numChannels; - mFormat = format; - mState = READY; - return NO_ERROR; - -error: - mHeap.clear(); - return status; -} - - -void SoundChannel::init(SoundPool* soundPool) -{ - mSoundPool = soundPool; -} - -// call with sound pool lock held -void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftVolume, - float rightVolume, int priority, int loop, float rate) -{ - sp<AudioTrack> oldTrack; - sp<AudioTrack> newTrack; - status_t status; - - { // scope for the lock - Mutex::Autolock lock(&mLock); - - ALOGV("SoundChannel::play %p: sampleID=%d, channelID=%d, leftVolume=%f, rightVolume=%f," - " priority=%d, loop=%d, rate=%f", - this, sample->sampleID(), nextChannelID, leftVolume, rightVolume, - priority, loop, rate); - - // if not idle, this voice is being stolen - if (mState != IDLE) { - ALOGV("channel %d stolen - event queued for channel %d", channelID(), nextChannelID); - mNextEvent.set(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate); - stop_l(); - return; - } - - // initialize track - size_t afFrameCount; - uint32_t afSampleRate; - audio_stream_type_t streamType = audio_attributes_to_stream_type(mSoundPool->attributes()); - if (AudioSystem::getOutputFrameCount(&afFrameCount, streamType) != NO_ERROR) { - afFrameCount = kDefaultFrameCount; - } - if (AudioSystem::getOutputSamplingRate(&afSampleRate, streamType) != NO_ERROR) { - afSampleRate = kDefaultSampleRate; - } - int numChannels = sample->numChannels(); - uint32_t sampleRate = uint32_t(float(sample->sampleRate()) * rate + 0.5); - uint32_t totalFrames = (kDefaultBufferCount * afFrameCount * sampleRate) / afSampleRate; - uint32_t bufferFrames = (totalFrames + (kDefaultBufferCount - 1)) / kDefaultBufferCount; - size_t frameCount = 0; - - if (loop) { - frameCount = sample->size()/numChannels/ - ((sample->format() == AUDIO_FORMAT_PCM_16_BIT) ? sizeof(int16_t) : sizeof(uint8_t)); - } - -#ifndef USE_SHARED_MEM_BUFFER - // Ensure minimum audio buffer size in case of short looped sample - if(frameCount < totalFrames) { - frameCount = totalFrames; - } -#endif - - // mToggle toggles each time a track is started on a given channel. - // The toggle is concatenated with the SoundChannel address and passed to AudioTrack - // as callback user data. This enables the detection of callbacks received from the old - // audio track while the new one is being started and avoids processing them with - // wrong audio audio buffer size (mAudioBufferSize) - unsigned long toggle = mToggle ^ 1; - void *userData = (void *)((unsigned long)this | toggle); - audio_channel_mask_t channelMask = audio_channel_out_mask_from_count(numChannels); - - // do not create a new audio track if current track is compatible with sample parameters -#ifdef USE_SHARED_MEM_BUFFER - newTrack = new AudioTrack(streamType, sampleRate, sample->format(), - channelMask, sample->getIMemory(), AUDIO_OUTPUT_FLAG_FAST, callback, userData); -#else - newTrack = new AudioTrack(streamType, sampleRate, sample->format(), - channelMask, frameCount, AUDIO_OUTPUT_FLAG_FAST, callback, userData, - bufferFrames); -#endif - oldTrack = mAudioTrack; - status = newTrack->initCheck(); - if (status != NO_ERROR) { - ALOGE("Error creating AudioTrack"); - goto exit; - } - ALOGV("setVolume %p", newTrack.get()); - newTrack->setVolume(leftVolume, rightVolume); - newTrack->setLoop(0, frameCount, loop); - - // From now on, AudioTrack callbacks received with previous toggle value will be ignored. - mToggle = toggle; - mAudioTrack = newTrack; - mPos = 0; - mSample = sample; - mChannelID = nextChannelID; - mPriority = priority; - mLoop = loop; - mLeftVolume = leftVolume; - mRightVolume = rightVolume; - mNumChannels = numChannels; - mRate = rate; - clearNextEvent(); - mState = PLAYING; - mAudioTrack->start(); - mAudioBufferSize = newTrack->frameCount()*newTrack->frameSize(); - } - -exit: - ALOGV("delete oldTrack %p", oldTrack.get()); - if (status != NO_ERROR) { - mAudioTrack.clear(); - } -} - -void SoundChannel::nextEvent() -{ - sp<Sample> sample; - int nextChannelID; - float leftVolume; - float rightVolume; - int priority; - int loop; - float rate; - - // check for valid event - { - Mutex::Autolock lock(&mLock); - nextChannelID = mNextEvent.channelID(); - if (nextChannelID == 0) { - ALOGV("stolen channel has no event"); - return; - } - - sample = mNextEvent.sample(); - leftVolume = mNextEvent.leftVolume(); - rightVolume = mNextEvent.rightVolume(); - priority = mNextEvent.priority(); - loop = mNextEvent.loop(); - rate = mNextEvent.rate(); - } - - ALOGV("Starting stolen channel %d -> %d", channelID(), nextChannelID); - play(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate); -} - -void SoundChannel::callback(int event, void* user, void *info) -{ - SoundChannel* channel = static_cast<SoundChannel*>((void *)((unsigned long)user & ~1)); - - channel->process(event, info, (unsigned long)user & 1); -} - -void SoundChannel::process(int event, void *info, unsigned long toggle) -{ - //ALOGV("process(%d)", mChannelID); - - Mutex::Autolock lock(&mLock); - - AudioTrack::Buffer* b = NULL; - if (event == AudioTrack::EVENT_MORE_DATA) { - b = static_cast<AudioTrack::Buffer *>(info); - } - - if (mToggle != toggle) { - ALOGV("process wrong toggle %p channel %d", this, mChannelID); - if (b != NULL) { - b->size = 0; - } - return; - } - - sp<Sample> sample = mSample; - -// ALOGV("SoundChannel::process event %d", event); - - if (event == AudioTrack::EVENT_MORE_DATA) { - - // check for stop state - if (b->size == 0) return; - - if (mState == IDLE) { - b->size = 0; - return; - } - - if (sample != 0) { - // fill buffer - uint8_t* q = (uint8_t*) b->i8; - size_t count = 0; - - if (mPos < (int)sample->size()) { - uint8_t* p = sample->data() + mPos; - count = sample->size() - mPos; - if (count > b->size) { - count = b->size; - } - memcpy(q, p, count); -// ALOGV("fill: q=%p, p=%p, mPos=%u, b->size=%u, count=%d", q, p, mPos, b->size, -// count); - } else if (mPos < mAudioBufferSize) { - count = mAudioBufferSize - mPos; - if (count > b->size) { - count = b->size; - } - memset(q, 0, count); -// ALOGV("fill extra: q=%p, mPos=%u, b->size=%u, count=%d", q, mPos, b->size, count); - } - - mPos += count; - b->size = count; - //ALOGV("buffer=%p, [0]=%d", b->i16, b->i16[0]); - } - } else if (event == AudioTrack::EVENT_UNDERRUN || event == AudioTrack::EVENT_BUFFER_END || - event == AudioTrack::EVENT_NEW_IAUDIOTRACK) { - ALOGV("process %p channel %d event %s", - this, mChannelID, (event == AudioTrack::EVENT_UNDERRUN) ? "UNDERRUN" : - (event == AudioTrack::EVENT_BUFFER_END) ? "BUFFER_END" : "NEW_IAUDIOTRACK"); - mSoundPool->addToStopList(this); - } else if (event == AudioTrack::EVENT_LOOP_END) { - ALOGV("End loop %p channel %d", this, mChannelID); - } else { - ALOGW("SoundChannel::process unexpected event %d", event); - } -} - - -// call with lock held -bool SoundChannel::doStop_l() -{ - if (mState != IDLE) { - setVolume_l(0, 0); - ALOGV("stop"); - mAudioTrack->stop(); - mSample.clear(); - mState = IDLE; - mPriority = IDLE_PRIORITY; - return true; - } - return false; -} - -// call with lock held and sound pool lock held -void SoundChannel::stop_l() -{ - if (doStop_l()) { - mSoundPool->done_l(this); - } -} - -// call with sound pool lock held -void SoundChannel::stop() -{ - bool stopped; - { - Mutex::Autolock lock(&mLock); - stopped = doStop_l(); - } - - if (stopped) { - mSoundPool->done_l(this); - } -} - -//FIXME: Pause is a little broken right now -void SoundChannel::pause() -{ - Mutex::Autolock lock(&mLock); - if (mState == PLAYING) { - ALOGV("pause track"); - mState = PAUSED; - mAudioTrack->pause(); - } -} - -void SoundChannel::autoPause() -{ - Mutex::Autolock lock(&mLock); - if (mState == PLAYING) { - ALOGV("pause track"); - mState = PAUSED; - mAutoPaused = true; - mAudioTrack->pause(); - } -} - -void SoundChannel::resume() -{ - Mutex::Autolock lock(&mLock); - if (mState == PAUSED) { - ALOGV("resume track"); - mState = PLAYING; - mAutoPaused = false; - mAudioTrack->start(); - } -} - -void SoundChannel::autoResume() -{ - Mutex::Autolock lock(&mLock); - if (mAutoPaused && (mState == PAUSED)) { - ALOGV("resume track"); - mState = PLAYING; - mAutoPaused = false; - mAudioTrack->start(); - } -} - -void SoundChannel::setRate(float rate) -{ - Mutex::Autolock lock(&mLock); - if (mAudioTrack != NULL && mSample != 0) { - uint32_t sampleRate = uint32_t(float(mSample->sampleRate()) * rate + 0.5); - mAudioTrack->setSampleRate(sampleRate); - mRate = rate; - } -} - -// call with lock held -void SoundChannel::setVolume_l(float leftVolume, float rightVolume) -{ - mLeftVolume = leftVolume; - mRightVolume = rightVolume; - if (mAudioTrack != NULL) - mAudioTrack->setVolume(leftVolume, rightVolume); -} - -void SoundChannel::setVolume(float leftVolume, float rightVolume) -{ - Mutex::Autolock lock(&mLock); - setVolume_l(leftVolume, rightVolume); -} - -void SoundChannel::setLoop(int loop) -{ - Mutex::Autolock lock(&mLock); - if (mAudioTrack != NULL && mSample != 0) { - uint32_t loopEnd = mSample->size()/mNumChannels/ - ((mSample->format() == AUDIO_FORMAT_PCM_16_BIT) ? sizeof(int16_t) : sizeof(uint8_t)); - mAudioTrack->setLoop(0, loopEnd, loop); - mLoop = loop; - } -} - -SoundChannel::~SoundChannel() -{ - ALOGV("SoundChannel destructor %p", this); - { - Mutex::Autolock lock(&mLock); - clearNextEvent(); - doStop_l(); - } - // do not call AudioTrack destructor with mLock held as it will wait for the AudioTrack - // callback thread to exit which may need to execute process() and acquire the mLock. - mAudioTrack.clear(); -} - -void SoundChannel::dump() -{ - ALOGV("mState = %d mChannelID=%d, mNumChannels=%d, mPos = %d, mPriority=%d, mLoop=%d", - mState, mChannelID, mNumChannels, mPos, mPriority, mLoop); -} - -void SoundEvent::set(const sp<Sample>& sample, int channelID, float leftVolume, - float rightVolume, int priority, int loop, float rate) -{ - mSample = sample; - mChannelID = channelID; - mLeftVolume = leftVolume; - mRightVolume = rightVolume; - mPriority = priority; - mLoop = loop; - mRate =rate; -} - -} // end namespace android diff --git a/media/libmedia/SoundPoolThread.cpp b/media/libmedia/SoundPoolThread.cpp deleted file mode 100644 index ba3b482..0000000 --- a/media/libmedia/SoundPoolThread.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -//#define LOG_NDEBUG 0 -#define LOG_TAG "SoundPoolThread" -#include "utils/Log.h" - -#include "SoundPoolThread.h" - -namespace android { - -void SoundPoolThread::write(SoundPoolMsg msg) { - Mutex::Autolock lock(&mLock); - while (mMsgQueue.size() >= maxMessages) { - mCondition.wait(mLock); - } - - // if thread is quitting, don't add to queue - if (mRunning) { - mMsgQueue.push(msg); - mCondition.signal(); - } -} - -const SoundPoolMsg SoundPoolThread::read() { - Mutex::Autolock lock(&mLock); - while (mMsgQueue.size() == 0) { - mCondition.wait(mLock); - } - SoundPoolMsg msg = mMsgQueue[0]; - mMsgQueue.removeAt(0); - mCondition.signal(); - return msg; -} - -void SoundPoolThread::quit() { - Mutex::Autolock lock(&mLock); - if (mRunning) { - mRunning = false; - mMsgQueue.clear(); - mMsgQueue.push(SoundPoolMsg(SoundPoolMsg::KILL, 0)); - mCondition.signal(); - mCondition.wait(mLock); - } - ALOGV("return from quit"); -} - -SoundPoolThread::SoundPoolThread(SoundPool* soundPool) : - mSoundPool(soundPool) -{ - mMsgQueue.setCapacity(maxMessages); - if (createThreadEtc(beginThread, this, "SoundPoolThread")) { - mRunning = true; - } -} - -SoundPoolThread::~SoundPoolThread() -{ - quit(); -} - -int SoundPoolThread::beginThread(void* arg) { - ALOGV("beginThread"); - SoundPoolThread* soundPoolThread = (SoundPoolThread*)arg; - return soundPoolThread->run(); -} - -int SoundPoolThread::run() { - ALOGV("run"); - for (;;) { - SoundPoolMsg msg = read(); - ALOGV("Got message m=%d, mData=%d", msg.mMessageType, msg.mData); - switch (msg.mMessageType) { - case SoundPoolMsg::KILL: - ALOGV("goodbye"); - return NO_ERROR; - case SoundPoolMsg::LOAD_SAMPLE: - doLoadSample(msg.mData); - break; - default: - ALOGW("run: Unrecognized message %d\n", - msg.mMessageType); - break; - } - } -} - -void SoundPoolThread::loadSample(int sampleID) { - write(SoundPoolMsg(SoundPoolMsg::LOAD_SAMPLE, sampleID)); -} - -void SoundPoolThread::doLoadSample(int sampleID) { - sp <Sample> sample = mSoundPool->findSample(sampleID); - status_t status = -1; - if (sample != 0) { - status = sample->doLoad(); - } - mSoundPool->notify(SoundPoolEvent(SoundPoolEvent::SAMPLE_LOADED, sampleID, status)); -} - -} // end namespace android diff --git a/media/libmedia/SoundPoolThread.h b/media/libmedia/SoundPoolThread.h deleted file mode 100644 index 7e96900..0000000 --- a/media/libmedia/SoundPoolThread.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef SOUNDPOOLTHREAD_H_ -#define SOUNDPOOLTHREAD_H_ - -#include <utils/threads.h> -#include <utils/Vector.h> -#include <media/AudioTrack.h> - -#include <media/SoundPool.h> - -namespace android { - -class SoundPoolMsg { -public: - enum MessageType { INVALID, KILL, LOAD_SAMPLE }; - SoundPoolMsg() : mMessageType(INVALID), mData(0) {} - SoundPoolMsg(MessageType MessageType, int data) : - mMessageType(MessageType), mData(data) {} - uint16_t mMessageType; - uint16_t mData; -}; - -/* - * This class handles background requests from the SoundPool - */ -class SoundPoolThread { -public: - SoundPoolThread(SoundPool* SoundPool); - ~SoundPoolThread(); - void loadSample(int sampleID); - void quit(); - void write(SoundPoolMsg msg); - -private: - static const size_t maxMessages = 5; - - static int beginThread(void* arg); - int run(); - void doLoadSample(int sampleID); - const SoundPoolMsg read(); - - Mutex mLock; - Condition mCondition; - Vector<SoundPoolMsg> mMsgQueue; - SoundPool* mSoundPool; - bool mRunning; -}; - -} // end namespace android - -#endif /*SOUNDPOOLTHREAD_H_*/ diff --git a/media/libmedia/ToneGenerator.cpp b/media/libmedia/ToneGenerator.cpp index 61b6d36..2cc4685 100644 --- a/media/libmedia/ToneGenerator.cpp +++ b/media/libmedia/ToneGenerator.cpp @@ -28,718 +28,718 @@ namespace android { // Descriptors for all available tones (See ToneGenerator::ToneDescriptor class declaration for details) const ToneGenerator::ToneDescriptor ToneGenerator::sToneDescriptors[] = { - { segments: {{ duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1336, 941, 0 }, 0, 0}, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_0 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1209, 697, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_1 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1336, 697, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_2 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1477, 697, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_3 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1209, 770, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_4 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1336, 770, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_5 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1477, 770, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_6 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1209, 852, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_7 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1336, 852, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_8 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1477, 852, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_9 - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1209, 941, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_S - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1477, 941, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_P - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1633, 697, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_A - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1633, 770, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_B - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1633, 852, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_C - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 1633, 941, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_DTMF_D - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_DIAL - { segments: { { duration: 500 , waveFreq: { 425, 0 }, 0, 0}, - { duration: 500, waveFreq: { 0 }, 0, 0}, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_BUSY - { segments: { { duration: 200, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_CONGESTION - { segments: { { duration: 200, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_SUP_RADIO_ACK - { segments: { { duration: 200, waveFreq: { 425, 0 }, 0, 0}, - { duration: 200, waveFreq: { 0 }, 0, 0}, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 2, - repeatSegment: 0 }, // TONE_SUP_RADIO_NOTAVAIL - { segments: { { duration: 330, waveFreq: { 950, 1400, 1800, 0 }, 0, 0}, - { duration: 1000, waveFreq: { 0 }, 0, 0}, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_ERROR - { segments: { { duration: 200, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 600, waveFreq: { 0 }, 0, 0 }, - { duration: 200, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_CALL_WAITING - { segments: { { duration: 1000, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_RINGTONE - { segments: { { duration: 40, waveFreq: { 400, 1200, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_PROP_BEEP - { segments: { { duration: 100, waveFreq: { 1200, 0 }, 0, 0 }, - { duration: 100, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 1, - repeatSegment: 0 }, // TONE_PROP_ACK - { segments: { { duration: 400, waveFreq: { 300, 400, 500, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_PROP_NACK - { segments: { { duration: 200, waveFreq: { 400, 1200, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_PROP_PROMPT - { segments: { { duration: 40, waveFreq: { 400, 1200, 0 }, 0, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 40, waveFreq: { 400, 1200, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_PROP_BEEP2 - { segments: { { duration: 250, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 620, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_SUP_INTERCEPT - { segments: { { duration: 250, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 620, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 7, - repeatSegment: 0 }, // TONE_SUP_INTERCEPT_ABBREV - { segments: { { duration: 250, waveFreq: { 480, 620, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 7, - repeatSegment: 0 }, // TONE_SUP_CONGESTION_ABBREV - { segments: { { duration: 100, waveFreq: { 350, 440, 0 }, 0, 0 }, - { duration: 100, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 2, - repeatSegment: 0 }, // TONE_SUP_CONFIRM - { segments: { { duration: 100, waveFreq: { 480, 0 }, 0, 0 }, - { duration: 100, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 3, - repeatSegment: 0 }, // TONE_SUP_PIP - { segments: {{ duration: ToneGenerator::TONEGEN_INF, waveFreq: { 425, 0 }, 0, 0}, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_DIAL_TONE_LITE - { segments: { { duration: 2000, waveFreq: { 440, 480, 0 }, 0, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_NETWORK_USA_RINGBACK - { segments: { { duration: 250, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 620, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_INTERCEPT - { segments: { { duration: 250, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 620, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ABBR_INTERCEPT - { segments: { { duration: 250, waveFreq: { 480, 620, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_REORDER - { segments: { { duration: 250, waveFreq: { 480, 620, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 7, - repeatSegment: 0 }, // TONE_CDMA_ABBR_REORDER - { segments: { { duration: 500, waveFreq: { 480, 620, 0 }, 0, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_NETWORK_BUSY - { segments: { { duration: 100, waveFreq: { 350, 440, 0 }, 0, 0 }, - { duration: 100, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 2, - repeatSegment: 0 }, // TONE_CDMA_CONFIRM - { segments: { { duration: 500, waveFreq: { 660, 1000, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ANSWER - { segments: { { duration: 300, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_NETWORK_CALLWAITING - { segments: { { duration: 100, waveFreq: { 480, 0 }, 0, 0 }, - { duration: 100, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: 3, - repeatSegment: 0 }, // TONE_CDMA_PIP - - { segments: { { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 64, waveFreq: { 2556, 0}, 19, 0}, - { duration: 32, waveFreq: { 2091, 0}, 0, 0}, - { duration: 48, waveFreq: { 2556, 0}, 0, 0}, - { duration: 4000, waveFreq: { 0 }, 0, 0}, - { duration: 0, waveFreq: { 0 }, 0, 0}}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL - { segments: { { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 64, waveFreq: { 2556, 0}, 7, 0 }, - { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 400, waveFreq: { 0 }, 0, 0 }, - { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 64, waveFreq: { 2556, 0}, 7, 4 }, - { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP - { segments: { { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 64, waveFreq: { 2556, 0}, 3, 0 }, - { duration: 16, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 32, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 64, waveFreq: { 2556, 0}, 3, 4 }, - { duration: 16, waveFreq: { 2091, 0}, 0, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI - { segments: { { duration: 0, waveFreq: { 0 }, 0, 0} }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 - { segments: { { duration: 32, waveFreq: { 2091, 0 }, 0, 0 }, - { duration: 64, waveFreq: { 2556, 0 }, 4, 0 }, - { duration: 20, waveFreq: { 2091, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 } , 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING - { segments: { { duration: 0, waveFreq: { 0 }, 0, 0} }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 - { segments: { { duration: 0, waveFreq: { 0 }, 0, 0} }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 - { segments: { { duration: 0, waveFreq: { 0 }, 0, 0} }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 - - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 39, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_L - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 39, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_L - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 39, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_L - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 15, 0 }, - { duration: 400, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_SS - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 15, 0 }, - { duration: 400, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_SS - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 15, 0 }, - { duration: 400, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_SS - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 15, 6 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_SSL - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 15, 6 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_SSL - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 15, 6 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_SSL - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 19, 0 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 19, 3 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_SS_2 - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 19, 0 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 19, 3 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_SS_2 - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 19, 0 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 19, 3 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_SS_2 - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 9, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 19, 3 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 9, 6 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_SLS - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 9, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 19, 3 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 9, 6 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_SLS - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 9, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 19, 3 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 9, 6 }, - { duration: 3000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_SLS - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 9, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 9, 3 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 9, 6 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 9, 9 }, - { duration: 2500, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_S_X4 - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 9, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 9, 3 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 9, 6 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 9, 9 }, - { duration: 2500, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_S_X4 - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 9, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 9, 3 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 9, 6 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 9, 9 }, - { duration: 2500, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_S_X4 - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 19, 0 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_PBX_L - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 19, 0 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_PBX_L - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 19, 0 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_PBX_L - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 3 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_PBX_SS - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 3 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_PBX_SS - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 3 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_PBX_SS - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 15, 6 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_PBX_SSL - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 15, 6 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_PBX_SSL - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 15, 6 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_PBX_SSL - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 15, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 6 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_PBX_SLS - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 15, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 6 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_PBX_SLS - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 15, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 6 }, - { duration: 1000, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_PBX_SLS - { segments: { { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 6 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 3700, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 4000, 0 }, 7, 9 }, - { duration: 800, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_HIGH_PBX_S_X4 - { segments: { { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 6 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2600, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 2900, 0 }, 7, 9 }, - { duration: 800, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_MED_PBX_S_X4 - { segments: { { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 0 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 3 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 6 }, - { duration: 200, waveFreq: { 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1300, 0 }, 0, 0 }, - { duration: 25, waveFreq: { 1450, 0 }, 7, 9 }, - { duration: 800, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_LOW_PBX_S_X4 - - { segments: { { duration: 62, waveFreq: { 1109, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 784, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 740, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 622, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 1109, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ALERT_NETWORK_LITE - { segments: { { duration: 62, waveFreq: { 1245, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 659, 0 }, 2, 0 }, - { duration: 62, waveFreq: { 1245, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ALERT_AUTOREDIAL_LITE - { segments: { { duration: 400, waveFreq: { 1150, 770, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ONE_MIN_BEEP - { segments: { { duration: 120, waveFreq: { 941, 1477, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_KEYPAD_VOLUME_KEY_LITE - { segments: { { duration: 375, waveFreq: { 587, 0 }, 0, 0 }, - { duration: 125, waveFreq: { 1175, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_PRESSHOLDKEY_LITE - { segments: { { duration: 62, waveFreq: { 587, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 784, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 831, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 784, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 1109, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 784, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 831, 0 }, 0, 0 }, - { duration: 62, waveFreq: { 784, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ALERT_INCALL_LITE - { segments: { { duration: 125, waveFreq: { 941, 0 }, 0, 0 }, - { duration: 10, waveFreq: { 0 }, 2, 0 }, - { duration: 4990, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_CDMA_EMERGENCY_RINGBACK - { segments: { { duration: 125, waveFreq: { 1319, 0 }, 0, 0 }, - { duration: 125, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 2, - repeatSegment: 0 }, // TONE_CDMA_ALERT_CALL_GUARD - { segments: { { duration: 125, waveFreq: { 1047, 0 }, 0, 0 }, - { duration: 125, waveFreq: { 370, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_SOFT_ERROR_LITE - { segments: { { duration: 125, waveFreq: { 1480, 0 }, 0, 0 }, - { duration: 125, waveFreq: { 1397, 0 }, 0, 0 }, - { duration: 125, waveFreq: { 784, 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 } }, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_CALLDROP_LITE - - { segments: { { duration: 500, waveFreq: { 425, 0 }, 0, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_NETWORK_BUSY_ONE_SHOT - { segments: { { duration: 400, waveFreq: { 1150, 770 }, 0, 0 }, - { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_ABBR_ALERT - { segments: { { duration: 0, waveFreq: { 0 }, 0, 0 }}, - repeatCnt: 0, - repeatSegment: 0 }, // TONE_CDMA_SIGNAL_OFF - - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 350, 440, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_ANSI_DIAL - { segments: { { duration: 500, waveFreq: { 480, 620, 0 }, 0, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_ANSI_BUSY - { segments: { { duration: 250, waveFreq: { 480, 620, 0 }, 0, 0 }, - { duration: 250, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_ANSI_CONGESTION - { segments: { { duration: 300, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 9700, waveFreq: { 0 }, 0, 0 }, - { duration: 100, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 100, waveFreq: { 0 }, 0, 0 }, - { duration: 100, waveFreq: { 440, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 1 }, // TONE_ANSI_CALL_WAITING - { segments: { { duration: 2000, waveFreq: { 440, 480, 0 }, 0, 0 }, - { duration: 4000, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_ANSI_RINGTONE - { segments: { { duration: ToneGenerator::TONEGEN_INF, waveFreq: { 400, 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_JAPAN_DIAL - { segments: { { duration: 500, waveFreq: { 400, 0 }, 0, 0 }, - { duration: 500, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_JAPAN_BUSY - { segments: { { duration: 1000, waveFreq: { 400, 0 }, 0, 0 }, - { duration: 2000, waveFreq: { 0 }, 0, 0 }, - { duration: 0 , waveFreq: { 0 }, 0, 0}}, - repeatCnt: ToneGenerator::TONEGEN_INF, - repeatSegment: 0 }, // TONE_JAPAN_RADIO_ACK + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1336, 941, 0 }, 0, 0}, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_0 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1209, 697, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_1 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1336, 697, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_2 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1477, 697, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_3 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1209, 770, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_4 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1336, 770, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_5 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1477, 770, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_6 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1209, 852, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_7 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1336, 852, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_8 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1477, 852, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_9 + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1209, 941, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_S + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1477, 941, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_P + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1633, 697, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_A + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1633, 770, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_B + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1633, 852, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_C + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 1633, 941, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_DTMF_D + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_DIAL + { .segments = { { .duration = 500 , .waveFreq = { 425, 0 }, 0, 0}, + { .duration = 500, .waveFreq = { 0 }, 0, 0}, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_BUSY + { .segments = { { .duration = 200, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_CONGESTION + { .segments = { { .duration = 200, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_SUP_RADIO_ACK + { .segments = { { .duration = 200, .waveFreq = { 425, 0 }, 0, 0}, + { .duration = 200, .waveFreq = { 0 }, 0, 0}, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 2, + .repeatSegment = 0 }, // TONE_SUP_RADIO_NOTAVAIL + { .segments = { { .duration = 330, .waveFreq = { 950, 1400, 1800, 0 }, 0, 0}, + { .duration = 1000, .waveFreq = { 0 }, 0, 0}, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_ERROR + { .segments = { { .duration = 200, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 600, .waveFreq = { 0 }, 0, 0 }, + { .duration = 200, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_CALL_WAITING + { .segments = { { .duration = 1000, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_RINGTONE + { .segments = { { .duration = 40, .waveFreq = { 400, 1200, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_PROP_BEEP + { .segments = { { .duration = 100, .waveFreq = { 1200, 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 1, + .repeatSegment = 0 }, // TONE_PROP_ACK + { .segments = { { .duration = 400, .waveFreq = { 300, 400, 500, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_PROP_NACK + { .segments = { { .duration = 200, .waveFreq = { 400, 1200, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_PROP_PROMPT + { .segments = { { .duration = 40, .waveFreq = { 400, 1200, 0 }, 0, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 40, .waveFreq = { 400, 1200, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_PROP_BEEP2 + { .segments = { { .duration = 250, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 620, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_SUP_INTERCEPT + { .segments = { { .duration = 250, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 620, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 7, + .repeatSegment = 0 }, // TONE_SUP_INTERCEPT_ABBREV + { .segments = { { .duration = 250, .waveFreq = { 480, 620, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 7, + .repeatSegment = 0 }, // TONE_SUP_CONGESTION_ABBREV + { .segments = { { .duration = 100, .waveFreq = { 350, 440, 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 2, + .repeatSegment = 0 }, // TONE_SUP_CONFIRM + { .segments = { { .duration = 100, .waveFreq = { 480, 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 3, + .repeatSegment = 0 }, // TONE_SUP_PIP + { .segments = {{ .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 425, 0 }, 0, 0}, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_DIAL_TONE_LITE + { .segments = { { .duration = 2000, .waveFreq = { 440, 480, 0 }, 0, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_NETWORK_USA_RINGBACK + { .segments = { { .duration = 250, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 620, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_INTERCEPT + { .segments = { { .duration = 250, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 620, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ABBR_INTERCEPT + { .segments = { { .duration = 250, .waveFreq = { 480, 620, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_REORDER + { .segments = { { .duration = 250, .waveFreq = { 480, 620, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 7, + .repeatSegment = 0 }, // TONE_CDMA_ABBR_REORDER + { .segments = { { .duration = 500, .waveFreq = { 480, 620, 0 }, 0, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_NETWORK_BUSY + { .segments = { { .duration = 100, .waveFreq = { 350, 440, 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 2, + .repeatSegment = 0 }, // TONE_CDMA_CONFIRM + { .segments = { { .duration = 500, .waveFreq = { 660, 1000, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ANSWER + { .segments = { { .duration = 300, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_NETWORK_CALLWAITING + { .segments = { { .duration = 100, .waveFreq = { 480, 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 3, + .repeatSegment = 0 }, // TONE_CDMA_PIP + + { .segments = { { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 64, .waveFreq = { 2556, 0}, 19, 0}, + { .duration = 32, .waveFreq = { 2091, 0}, 0, 0}, + { .duration = 48, .waveFreq = { 2556, 0}, 0, 0}, + { .duration = 4000, .waveFreq = { 0 }, 0, 0}, + { .duration = 0, .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL + { .segments = { { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 64, .waveFreq = { 2556, 0}, 7, 0 }, + { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 400, .waveFreq = { 0 }, 0, 0 }, + { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 64, .waveFreq = { 2556, 0}, 7, 4 }, + { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP + { .segments = { { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 64, .waveFreq = { 2556, 0}, 3, 0 }, + { .duration = 16, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 32, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 64, .waveFreq = { 2556, 0}, 3, 4 }, + { .duration = 16, .waveFreq = { 2091, 0}, 0, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI + { .segments = { { .duration = 0, .waveFreq = { 0 }, 0, 0} }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 + { .segments = { { .duration = 32, .waveFreq = { 2091, 0 }, 0, 0 }, + { .duration = 64, .waveFreq = { 2556, 0 }, 4, 0 }, + { .duration = 20, .waveFreq = { 2091, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 } , 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING + { .segments = { { .duration = 0, .waveFreq = { 0 }, 0, 0} }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 + { .segments = { { .duration = 0, .waveFreq = { 0 }, 0, 0} }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 + { .segments = { { .duration = 0, .waveFreq = { 0 }, 0, 0} }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 + + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 39, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_L + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 39, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_L + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 39, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_L + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 15, 0 }, + { .duration = 400, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_SS + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 15, 0 }, + { .duration = 400, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_SS + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 15, 0 }, + { .duration = 400, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_SS + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 15, 6 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_SSL + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 15, 6 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_SSL + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 15, 6 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_SSL + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 19, 0 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 19, 3 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_SS_2 + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 19, 0 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 19, 3 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_SS_2 + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 19, 0 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 19, 3 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_SS_2 + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 9, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 19, 3 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 9, 6 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_SLS + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 9, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 19, 3 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 9, 6 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_SLS + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 9, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 19, 3 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 9, 6 }, + { .duration = 3000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_SLS + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 9, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 9, 3 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 9, 6 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 9, 9 }, + { .duration = 2500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_S_X4 + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 9, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 9, 3 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 9, 6 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 9, 9 }, + { .duration = 2500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_S_X4 + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 9, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 9, 3 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 9, 6 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 9, 9 }, + { .duration = 2500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_S_X4 + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 19, 0 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_PBX_L + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 19, 0 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_PBX_L + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 19, 0 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_PBX_L + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 3 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_PBX_SS + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 3 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_PBX_SS + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 3 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_PBX_SS + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 15, 6 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_PBX_SSL + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 15, 6 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_PBX_SSL + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 15, 6 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_PBX_SSL + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 15, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 6 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_PBX_SLS + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 15, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 6 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_PBX_SLS + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 15, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 6 }, + { .duration = 1000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_PBX_SLS + { .segments = { { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 6 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 3700, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 4000, 0 }, 7, 9 }, + { .duration = 800, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_HIGH_PBX_S_X4 + { .segments = { { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 6 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2600, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 2900, 0 }, 7, 9 }, + { .duration = 800, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_MED_PBX_S_X4 + { .segments = { { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 0 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 3 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 6 }, + { .duration = 200, .waveFreq = { 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1300, 0 }, 0, 0 }, + { .duration = 25, .waveFreq = { 1450, 0 }, 7, 9 }, + { .duration = 800, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_LOW_PBX_S_X4 + + { .segments = { { .duration = 62, .waveFreq = { 1109, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 784, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 740, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 622, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 1109, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ALERT_NETWORK_LITE + { .segments = { { .duration = 62, .waveFreq = { 1245, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 659, 0 }, 2, 0 }, + { .duration = 62, .waveFreq = { 1245, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ALERT_AUTOREDIAL_LITE + { .segments = { { .duration = 400, .waveFreq = { 1150, 770, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ONE_MIN_BEEP + { .segments = { { .duration = 120, .waveFreq = { 941, 1477, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_KEYPAD_VOLUME_KEY_LITE + { .segments = { { .duration = 375, .waveFreq = { 587, 0 }, 0, 0 }, + { .duration = 125, .waveFreq = { 1175, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_PRESSHOLDKEY_LITE + { .segments = { { .duration = 62, .waveFreq = { 587, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 784, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 831, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 784, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 1109, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 784, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 831, 0 }, 0, 0 }, + { .duration = 62, .waveFreq = { 784, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ALERT_INCALL_LITE + { .segments = { { .duration = 125, .waveFreq = { 941, 0 }, 0, 0 }, + { .duration = 10, .waveFreq = { 0 }, 2, 0 }, + { .duration = 4990, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_CDMA_EMERGENCY_RINGBACK + { .segments = { { .duration = 125, .waveFreq = { 1319, 0 }, 0, 0 }, + { .duration = 125, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 2, + .repeatSegment = 0 }, // TONE_CDMA_ALERT_CALL_GUARD + { .segments = { { .duration = 125, .waveFreq = { 1047, 0 }, 0, 0 }, + { .duration = 125, .waveFreq = { 370, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_SOFT_ERROR_LITE + { .segments = { { .duration = 125, .waveFreq = { 1480, 0 }, 0, 0 }, + { .duration = 125, .waveFreq = { 1397, 0 }, 0, 0 }, + { .duration = 125, .waveFreq = { 784, 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 } }, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_CALLDROP_LITE + + { .segments = { { .duration = 500, .waveFreq = { 425, 0 }, 0, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_NETWORK_BUSY_ONE_SHOT + { .segments = { { .duration = 400, .waveFreq = { 1150, 770 }, 0, 0 }, + { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_ABBR_ALERT + { .segments = { { .duration = 0, .waveFreq = { 0 }, 0, 0 }}, + .repeatCnt = 0, + .repeatSegment = 0 }, // TONE_CDMA_SIGNAL_OFF + + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 350, 440, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_ANSI_DIAL + { .segments = { { .duration = 500, .waveFreq = { 480, 620, 0 }, 0, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_ANSI_BUSY + { .segments = { { .duration = 250, .waveFreq = { 480, 620, 0 }, 0, 0 }, + { .duration = 250, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_ANSI_CONGESTION + { .segments = { { .duration = 300, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 9700, .waveFreq = { 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 0 }, 0, 0 }, + { .duration = 100, .waveFreq = { 440, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 1 }, // TONE_ANSI_CALL_WAITING + { .segments = { { .duration = 2000, .waveFreq = { 440, 480, 0 }, 0, 0 }, + { .duration = 4000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_ANSI_RINGTONE + { .segments = { { .duration = ToneGenerator::TONEGEN_INF, .waveFreq = { 400, 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_JAPAN_DIAL + { .segments = { { .duration = 500, .waveFreq = { 400, 0 }, 0, 0 }, + { .duration = 500, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_JAPAN_BUSY + { .segments = { { .duration = 1000, .waveFreq = { 400, 0 }, 0, 0 }, + { .duration = 2000, .waveFreq = { 0 }, 0, 0 }, + { .duration = 0 , .waveFreq = { 0 }, 0, 0}}, + .repeatCnt = ToneGenerator::TONEGEN_INF, + .repeatSegment = 0 }, // TONE_JAPAN_RADIO_ACK diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp index 39a239d..8e8a1ed 100644 --- a/media/libmedia/mediametadataretriever.cpp +++ b/media/libmedia/mediametadataretriever.cpp @@ -172,7 +172,7 @@ MediaMetadataRetriever::DeathNotifier::~DeathNotifier() { Mutex::Autolock lock(sServiceLock); if (sService != 0) { - sService->asBinder()->unlinkToDeath(this); + IInterface::asBinder(sService)->unlinkToDeath(this); } } diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 9611ac7..05c89ed 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -835,53 +835,12 @@ void MediaPlayer::notify(int msg, int ext1, int ext2, const Parcel *obj) } } -/*static*/ status_t MediaPlayer::decode( - const sp<IMediaHTTPService> &httpService, - const char* url, - uint32_t *pSampleRate, - int* pNumChannels, - audio_format_t* pFormat, - const sp<IMemoryHeap>& heap, - size_t *pSize) -{ - ALOGV("decode(%s)", url); - status_t status; - const sp<IMediaPlayerService>& service = getMediaPlayerService(); - if (service != 0) { - status = service->decode(httpService, url, pSampleRate, pNumChannels, pFormat, heap, pSize); - } else { - ALOGE("Unable to locate media service"); - status = DEAD_OBJECT; - } - return status; - -} - void MediaPlayer::died() { ALOGV("died"); notify(MEDIA_ERROR, MEDIA_ERROR_SERVER_DIED, 0); } -/*static*/ status_t MediaPlayer::decode(int fd, int64_t offset, int64_t length, - uint32_t *pSampleRate, int* pNumChannels, - audio_format_t* pFormat, - const sp<IMemoryHeap>& heap, size_t *pSize) -{ - ALOGV("decode(%d, %" PRId64 ", %" PRId64 ")", fd, offset, length); - status_t status; - const sp<IMediaPlayerService>& service = getMediaPlayerService(); - if (service != 0) { - status = service->decode(fd, offset, length, pSampleRate, - pNumChannels, pFormat, heap, pSize); - } else { - ALOGE("Unable to locate media service"); - status = DEAD_OBJECT; - } - return status; - -} - status_t MediaPlayer::setNextMediaPlayer(const sp<MediaPlayer>& next) { if (mPlayer == NULL) { return NO_INIT; |