status_t BnPrivateAfGlueHandler::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch (code) { case HANDLE_SET_PARAMETERS: { CHECK_INTERFACE(IPrivateAfGlueHandler, data, reply); audio_io_handle_t ioHandle = (audio_io_handle_t) data.readInt32(); String8 keyValuePairs(data.readString8()); reply->writeInt32(handleSetParameters(ioHandle, keyValuePairs)); return NO_ERROR; } break; case HANDLE_GET_PARAMETERS: { CHECK_INTERFACE(IPrivateAfGlueHandler, data, reply); audio_io_handle_t ioHandle = (audio_io_handle_t) data.readInt32(); String8 keys(data.readString8()); reply->writeString8(handleGetParameters(ioHandle, keys)); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } };
status_t BnAudioTrack::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch (code) { case GET_CBLK: { CHECK_INTERFACE(IAudioTrack, data, reply); reply->writeStrongBinder(IInterface::asBinder(getCblk())); return NO_ERROR; } break; case START: { CHECK_INTERFACE(IAudioTrack, data, reply); reply->writeInt32(start()); return NO_ERROR; } break; case STOP: { CHECK_INTERFACE(IAudioTrack, data, reply); stop(); return NO_ERROR; } break; case FLUSH: { CHECK_INTERFACE(IAudioTrack, data, reply); flush(); return NO_ERROR; } break; case PAUSE: { CHECK_INTERFACE(IAudioTrack, data, reply); pause(); return NO_ERROR; } case ATTACH_AUX_EFFECT: { CHECK_INTERFACE(IAudioTrack, data, reply); reply->writeInt32(attachAuxEffect(data.readInt32())); return NO_ERROR; } break; case ALLOCATE_TIMED_BUFFER: { CHECK_INTERFACE(IAudioTrack, data, reply); sp<IMemory> buffer; status_t status = allocateTimedBuffer(data.readInt64(), &buffer); reply->writeInt32(status); if (status == NO_ERROR) { reply->writeStrongBinder(IInterface::asBinder(buffer)); } return NO_ERROR; } break; case QUEUE_TIMED_BUFFER: { CHECK_INTERFACE(IAudioTrack, data, reply); sp<IMemory> buffer = interface_cast<IMemory>( data.readStrongBinder()); uint64_t pts = data.readInt64(); reply->writeInt32(queueTimedBuffer(buffer, pts)); return NO_ERROR; } break; case SET_MEDIA_TIME_TRANSFORM: { CHECK_INTERFACE(IAudioTrack, data, reply); LinearTransform xform; xform.a_zero = data.readInt64(); xform.b_zero = data.readInt64(); xform.a_to_b_numer = data.readInt32(); xform.a_to_b_denom = data.readInt32(); int target = data.readInt32(); reply->writeInt32(setMediaTimeTransform(xform, target)); return NO_ERROR; } break; case SET_PARAMETERS: { CHECK_INTERFACE(IAudioTrack, data, reply); String8 keyValuePairs(data.readString8()); reply->writeInt32(setParameters(keyValuePairs)); return NO_ERROR; } break; case GET_TIMESTAMP: { CHECK_INTERFACE(IAudioTrack, data, reply); AudioTimestamp timestamp; status_t status = getTimestamp(timestamp); reply->writeInt32(status); if (status == NO_ERROR) { reply->writeInt32(timestamp.mPosition); reply->writeInt32(timestamp.mTime.tv_sec); reply->writeInt32(timestamp.mTime.tv_nsec); } return NO_ERROR; } break; case SIGNAL: { CHECK_INTERFACE(IAudioTrack, data, reply); signal(); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } }