Lines Matching refs:info

267 int setStartThresholdNoCommit(AlsaPcmInfo* info, int useThreshold) {
278 ret = snd_pcm_sw_params_set_start_threshold(info->handle, info->swParams, threshold);
286 int setStartThreshold(AlsaPcmInfo* info, int useThreshold) {
289 if (!setStartThresholdNoCommit(info, useThreshold)) {
294 ret = snd_pcm_sw_params(info->handle, info->swParams);
304 int setHWParams(AlsaPcmInfo* info,
314 ret = snd_pcm_hw_params_any(info->handle, info->hwParams);
320 ret = snd_pcm_hw_params_set_access(info->handle, info->hwParams, SND_PCM_ACCESS_RW_INTERLEAVED);
326 ret = snd_pcm_hw_params_set_format(info->handle, info->hwParams, format);
332 ret = snd_pcm_hw_params_set_channels(info->handle, info->hwParams, channels);
340 ret = snd_pcm_hw_params_set_rate_near(info->handle, info->hwParams, &rrate, &dir);
350 ret = snd_pcm_hw_params_set_buffer_size_near(info->handle, info->hwParams, &alsaBufferSizeInFrames);
361 ret = snd_pcm_hw_params_set_period_time_near(info->handle, info->hwParams, &periodTime, &dir);
370 ret = snd_pcm_hw_params_set_periods_near(info->handle, info->hwParams, &periods, &dir);
377 ret = snd_pcm_hw_params(info->handle, info->hwParams);
386 int setSWParams(AlsaPcmInfo* info) {
390 ret = snd_pcm_sw_params_current(info->handle, info->swParams);
396 if (!setStartThresholdNoCommit(info, FALSE /* don't use threshold */)) {
401 ret = snd_pcm_sw_params_set_avail_min(info->handle, info->swParams, info->periodSize);
407 ret = snd_pcm_sw_params(info->handle, info->swParams);
425 AlsaPcmInfo* info = NULL;
438 info = (AlsaPcmInfo*) malloc(sizeof(AlsaPcmInfo));
439 if (!info) {
443 memset(info, 0, sizeof(AlsaPcmInfo));
445 info->isRunning = 0;
446 info->isFlushed = 1;
448 ret = openPCMfromDeviceID(deviceID, &(info->handle), isSource, FALSE /* do open device*/);
451 snd_pcm_nonblock(info->handle, 0);
452 ret = snd_pcm_hw_params_malloc(&(info->hwParams));
459 if (setHWParams(info,
464 info->frameSize = frameSize;
465 ret = snd_pcm_hw_params_get_period_size(info->hwParams, &info->periodSize, &dir);
469 snd_pcm_hw_params_get_periods(info->hwParams, &(info->periods), &dir);
470 snd_pcm_hw_params_get_buffer_size(info->hwParams, &alsaBufferSizeInFrames);
471 info->bufferSizeInBytes = (int) alsaBufferSizeInFrames * frameSize;
473 (int) info->periodSize, info->periods, info->bufferSizeInBytes);
479 ret = snd_pcm_sw_params_malloc(&(info->swParams));
483 if (!setSWParams(info)) {
490 ret = snd_pcm_prepare(info->handle);
498 ret = snd_pcm_status_malloc(&(info->positionStatus));
506 DAUDIO_Close((void*) info, isSource);
507 info = NULL;
510 snd_pcm_nonblock(info->handle, 1);
512 (void*) info->handle);
514 return (void*) info;
547 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
553 snd_pcm_nonblock(info->handle, 0);
555 setStartThreshold(info, TRUE /* use threshold */);
556 state = snd_pcm_state(info->handle);
560 ret = snd_pcm_pause(info->handle, FALSE);
567 ret = snd_pcm_resume(info->handle);
577 ret = snd_pcm_prepare(info->handle);
583 ret = snd_pcm_start(info->handle);
590 ret = snd_pcm_nonblock(info->handle, 1);
594 state = snd_pcm_state(info->handle);
603 info->isRunning = 1;
607 info->isFlushed = 0;
615 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
620 snd_pcm_nonblock(info->handle, 0);
621 setStartThreshold(info, FALSE /* don't use threshold */); // device will not start after buffer xrun
622 ret = snd_pcm_pause(info->handle, 1);
624 snd_pcm_nonblock(info->handle, 1);
629 info->isRunning = 0;
635 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
638 if (info != NULL) {
639 if (info->handle != NULL) {
640 snd_pcm_close(info->handle);
642 if (info->hwParams) {
643 snd_pcm_hw_params_free(info->hwParams);
645 if (info->swParams) {
646 snd_pcm_sw_params_free(info->swParams);
649 if (info->positionStatus) {
650 snd_pcm_status_free(info->positionStatus);
653 free(info);
664 int xrun_recovery(AlsaPcmInfo* info, int err) {
669 ret = snd_pcm_prepare(info->handle);
677 ret = snd_pcm_resume(info->handle);
684 ret = snd_pcm_prepare(info->handle);
701 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
708 if (byteSize <= 0 || info->frameSize <= 0) {
710 (int) byteSize, (int) info->frameSize);
716 //frameSize = snd_pcm_bytes_to_frames(info->handle, byteSize);
717 frameSize = (snd_pcm_sframes_t) (byteSize / info->frameSize);
719 writtenFrames = snd_pcm_writei(info->handle, (const void*) data, (snd_pcm_uframes_t) frameSize);
722 ret = xrun_recovery(info, (int) writtenFrames);
735 //ret = snd_pcm_frames_to_bytes(info->handle, writtenFrames);
739 info->isFlushed = 0;
742 ret = (int) (writtenFrames * info->frameSize);
749 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
754 /*TRACE3(" info=%p, data=%p, byteSize=%d\n",
755 (void*) info, (void*) data, (int) byteSize);
756 TRACE2(" info->frameSize=%d, info->handle=%p\n",
757 (int) info->frameSize, (void*) info->handle);
760 if (byteSize <= 0 || info->frameSize <= 0) {
762 (int) byteSize, (int) info->frameSize);
766 if (!info->isRunning && info->isFlushed) {
772 //frameSize = snd_pcm_bytes_to_frames(info->handle, byteSize);
773 frameSize = (snd_pcm_sframes_t) (byteSize / info->frameSize);
775 readFrames = snd_pcm_readi(info->handle, (void*) data, (snd_pcm_uframes_t) frameSize);
777 ret = xrun_recovery(info, (int) readFrames);
790 //ret = snd_pcm_frames_to_bytes(info->handle, readFrames);
791 ret = (int) (readFrames * info->frameSize);
798 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
800 return info->bufferSizeInBytes;
804 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
807 state = snd_pcm_state(info->handle);
815 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
820 if (info->isFlushed) {
825 ret = snd_pcm_drop(info->handle);
831 info->isFlushed = 1;
832 if (info->isRunning) {
839 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
844 state = snd_pcm_state(info->handle);
845 if (info->isFlushed || state == SND_PCM_STATE_XRUN) {
848 ret = info->bufferSizeInBytes;
850 availableInFrames = snd_pcm_avail_update(info->handle);
854 //ret = snd_pcm_frames_to_bytes(info->handle, availableInFrames);
855 ret = (int) (availableInFrames * info->frameSize);
862 INT64 estimatePositionFromAvail(AlsaPcmInfo* info, int isSource, INT64 javaBytePos, int availInBytes) {
872 return (INT64) (javaBytePos - info->bufferSizeInBytes + availInBytes);
880 AlsaPcmInfo* info = (AlsaPcmInfo*) id;
884 state = snd_pcm_state(info->handle);
886 if (!info->isFlushed && state != SND_PCM_STATE_XRUN) {
892 ret = snd_pcm_status(info->handle, info->positionStatus);
898 framesAvail = snd_pcm_status_get_avail(info->positionStatus);
899 result = estimatePositionFromAvail(info, isSource, javaBytePos, framesAvail * info->frameSize);
904 ret = snd_pcm_avail(info->handle, &framesAvail);
909 result = estimatePositionFromAvail(info, isSource, javaBytePos, framesAvail * info->frameSize);
913 result = estimatePositionFromAvail(info, isSource, javaBytePos, DAUDIO_GetAvailable(id, isSource));