Changeset 84 for GPL/trunk/lib32/sound.c


Ignore:
Timestamp:
Oct 23, 2006, 11:07:11 PM (19 years ago)
Author:
vladest
Message:

SB code update
HDA code update
Some other updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk/lib32/sound.c

    r82 r84  
    754754    soundhandle        *pHandle = (soundhandle *)streamid;
    755755    snd_pcm_hw_params_t params;
     756    snd_pcm_status_t    status;
    756757    snd_pcm_sw_params_t swparams;
    757758    int                 ret, ret1, nrperiods, minnrperiods, maxnrperiods, samplesize, i;
     
    889890            }
    890891        }
     892
    891893//        ret1 = pHandle->file.f_op->release(&pHandle->inode, &pHandle->file);
    892894        DebugInt3();
     
    10401042    total = 0;
    10411043    per_bytes = periodbytes;
     1044    ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1045    if ( ((status.state != SNDRV_PCM_STATE_PREPARED) &&
     1046          (status.state != SNDRV_PCM_STATE_RUNNING) &&
     1047          (status.state != SNDRV_PCM_STATE_DRAINING))) {
     1048        printk("Device is not in proper state: %i. Calling prepare\n", status.state);
     1049        ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1050    }
    10421051    printk("OSS32_WaveSetHwParams return %d after SNDRV_PCM_IOCTL_SW_PARAMS ioctl, streamid %X", ret,(ULONG)pHandle);
    10431052    return UNIXToOSSError(ret);
     
    11331142                    printk("OSS32_WaveAddBuffer failed on partial transfer %x %i; ret = %i\n", buffer, size, ret);
    11341143                    *pTransferred = transferred;
    1135                     return OSSERR_SUCCESS;
     1144                    if (toret)
     1145                        return OSSERR_SUCCESS; /* avoid infinite loop */
     1146                    toret = 1;
     1147                    goto again;
    11361148                }
    11371149
     
    11431155                    ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    11441156                    printk("OSS32_WaveAddBuffer buffer overrun: size %i, ret %i, trans %i, prev sz %i per sz %i total %i\n", size, ret, transferred, prev_size, per_bytes, total);
    1145                     ret = size;
    1146                     transferred = size;
    1147                     break; /* UGLY hack*/
    1148                     //goto again;
     1157                    //ret = size;
     1158                    //transferred = size;
     1159                    if (toret) break; /* avoid infinite loop */
     1160                    toret = 1;
     1161                    goto again;
    11491162                }
    11501163                else {
     
    11621175                break;
    11631176            }
     1177            toret = 0;
    11641178            transferred += ret;
    11651179//            printk("written: now: %i, buffer: %i, total: %i\n", ret, transferred, total);
Note: See TracChangeset for help on using the changeset viewer.