static int audio_open(AVFormatContext *s1, int is_output, const char *audio_device)

{

    AudioData *s = s1->priv_data;

    int audio_fd;

    int tmp, err;

    char *flip = getenv("AUDIO_FLIP_LEFT");



    if (is_output)

        audio_fd = avpriv_open(audio_device, O_WRONLY);

    else

        audio_fd = avpriv_open(audio_device, O_RDONLY);

    if (audio_fd < 0) {

        av_log(s1, AV_LOG_ERROR, "%s: %s\n", audio_device, strerror(errno));

        return AVERROR(EIO);

    }



    if (flip && *flip == '1') {

        s->flip_left = 1;

    }



    /* non blocking mode */

    if (!is_output) {

        if (fcntl(audio_fd, F_SETFL, O_NONBLOCK) < 0) {

            av_log(s1, AV_LOG_WARNING, "%s: Could not enable non block mode (%s)\n", audio_device, strerror(errno));

        }

    }



    s->frame_size = AUDIO_BLOCK_SIZE;



    /* select format : favour native format */

    err = ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &tmp);



#if HAVE_BIGENDIAN

    if (tmp & AFMT_S16_BE) {

        tmp = AFMT_S16_BE;

    } else if (tmp & AFMT_S16_LE) {

        tmp = AFMT_S16_LE;

    } else {

        tmp = 0;

    }

#else

    if (tmp & AFMT_S16_LE) {

        tmp = AFMT_S16_LE;

    } else if (tmp & AFMT_S16_BE) {

        tmp = AFMT_S16_BE;

    } else {

        tmp = 0;

    }

#endif



    switch(tmp) {

    case AFMT_S16_LE:

        s->codec_id = AV_CODEC_ID_PCM_S16LE;

        break;

    case AFMT_S16_BE:

        s->codec_id = AV_CODEC_ID_PCM_S16BE;

        break;

    default:

        av_log(s1, AV_LOG_ERROR, "Soundcard does not support 16 bit sample format\n");

        close(audio_fd);

        return AVERROR(EIO);

    }

    err=ioctl(audio_fd, SNDCTL_DSP_SETFMT, &tmp);

    if (err < 0) {

        av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_SETFMT: %s\n", strerror(errno));

        goto fail;

    }



    tmp = (s->channels == 2);

    err = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp);

    if (err < 0) {

        av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_STEREO: %s\n", strerror(errno));

        goto fail;

    }



    tmp = s->sample_rate;

    err = ioctl(audio_fd, SNDCTL_DSP_SPEED, &tmp);

    if (err < 0) {

        av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_SPEED: %s\n", strerror(errno));

        goto fail;

    }

    s->sample_rate = tmp; /* store real sample rate */

    s->fd = audio_fd;



    return 0;

 fail:

    close(audio_fd);

    return AVERROR(EIO);

}

static int audio_open(AVFormatContext *s1, int is_output, const char *audio_device)

{

    AudioData *s = s1->priv_data;

    int audio_fd;

    int tmp, err;

    char *flip = getenv("AUDIO_FLIP_LEFT");



    if (is_output)

        audio_fd = avpriv_open(audio_device, O_WRONLY);

    else

        audio_fd = avpriv_open(audio_device, O_RDONLY);

    if (audio_fd < 0) {

        av_log(s1, AV_LOG_ERROR, "%s: %s\n", audio_device, strerror(errno));

        return AVERROR(EIO);

    }



    if (flip && *flip == '1') {

        s->flip_left = 1;

    }



    

    if (!is_output) {

        if (fcntl(audio_fd, F_SETFL, O_NONBLOCK) < 0) {

            av_log(s1, AV_LOG_WARNING, "%s: Could not enable non block mode (%s)\n", audio_device, strerror(errno));

        }

    }



    s->frame_size = AUDIO_BLOCK_SIZE;



    

    err = ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &tmp);



#if HAVE_BIGENDIAN

    if (tmp & AFMT_S16_BE) {

        tmp = AFMT_S16_BE;

    } else if (tmp & AFMT_S16_LE) {

        tmp = AFMT_S16_LE;

    } else {

        tmp = 0;

    }

#else

    if (tmp & AFMT_S16_LE) {

        tmp = AFMT_S16_LE;

    } else if (tmp & AFMT_S16_BE) {

        tmp = AFMT_S16_BE;

    } else {

        tmp = 0;

    }

#endif



    switch(tmp) {

    case AFMT_S16_LE:

        s->codec_id = AV_CODEC_ID_PCM_S16LE;

        break;

    case AFMT_S16_BE:

        s->codec_id = AV_CODEC_ID_PCM_S16BE;

        break;

    default:

        av_log(s1, AV_LOG_ERROR, "Soundcard does not support 16 bit sample format\n");

        close(audio_fd);

        return AVERROR(EIO);

    }

    err=ioctl(audio_fd, SNDCTL_DSP_SETFMT, &tmp);

    if (err < 0) {

        av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_SETFMT: %s\n", strerror(errno));

        goto fail;

    }



    tmp = (s->channels == 2);

    err = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp);

    if (err < 0) {

        av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_STEREO: %s\n", strerror(errno));

        goto fail;

    }



    tmp = s->sample_rate;

    err = ioctl(audio_fd, SNDCTL_DSP_SPEED, &tmp);

    if (err < 0) {

        av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_SPEED: %s\n", strerror(errno));

        goto fail;

    }

    s->sample_rate = tmp; 

    s->fd = audio_fd;



    return 0;

 fail:

    close(audio_fd);

    return AVERROR(EIO);

}

    if (err < 0) {         av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_SETFMT: %s\n", strerror(errno));         goto fail;     if (err < 0) {         av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_STEREO: %s\n", strerror(errno));         goto fail;     if (err < 0) {         av_log(s1, AV_LOG_ERROR, "SNDCTL_DSP_SPEED: %s\n", strerror(errno));         goto fail;
static int FUNC_0(AVFormatContext *VAR_0, int VAR_1, const char *VAR_2)

{

    AudioData *s = VAR_0->priv_data;

    int VAR_3;

    int VAR_4, VAR_5;

    char *VAR_6 = getenv("AUDIO_FLIP_LEFT");



    if (VAR_1)

        VAR_3 = avpriv_open(VAR_2, O_WRONLY);

    else

        VAR_3 = avpriv_open(VAR_2, O_RDONLY);

    if (VAR_3 < 0) {

        av_log(VAR_0, AV_LOG_ERROR, "%s: %s\n", VAR_2, strerror(errno));

        return AVERROR(EIO);

    }



    if (VAR_6 && *VAR_6 == '1') {

        s->flip_left = 1;

    }



    

    if (!VAR_1) {

        if (fcntl(VAR_3, F_SETFL, O_NONBLOCK) < 0) {

            av_log(VAR_0, AV_LOG_WARNING, "%s: Could not enable non block mode (%s)\n", VAR_2, strerror(errno));

        }

    }



    s->frame_size = AUDIO_BLOCK_SIZE;



    

    VAR_5 = ioctl(VAR_3, SNDCTL_DSP_GETFMTS, &VAR_4);



#if HAVE_BIGENDIAN

    if (VAR_4 & AFMT_S16_BE) {

        VAR_4 = AFMT_S16_BE;

    } else if (VAR_4 & AFMT_S16_LE) {

        VAR_4 = AFMT_S16_LE;

    } else {

        VAR_4 = 0;

    }

#else

    if (VAR_4 & AFMT_S16_LE) {

        VAR_4 = AFMT_S16_LE;

    } else if (VAR_4 & AFMT_S16_BE) {

        VAR_4 = AFMT_S16_BE;

    } else {

        VAR_4 = 0;

    }

#endif



    switch(VAR_4) {

    case AFMT_S16_LE:

        s->codec_id = AV_CODEC_ID_PCM_S16LE;

        break;

    case AFMT_S16_BE:

        s->codec_id = AV_CODEC_ID_PCM_S16BE;

        break;

    default:

        av_log(VAR_0, AV_LOG_ERROR, "Soundcard does not support 16 bit sample format\n");

        close(VAR_3);

        return AVERROR(EIO);

    }

    VAR_5=ioctl(VAR_3, SNDCTL_DSP_SETFMT, &VAR_4);

    if (VAR_5 < 0) {

        av_log(VAR_0, AV_LOG_ERROR, "SNDCTL_DSP_SETFMT: %s\n", strerror(errno));

        goto fail;

    }



    VAR_4 = (s->channels == 2);

    VAR_5 = ioctl(VAR_3, SNDCTL_DSP_STEREO, &VAR_4);

    if (VAR_5 < 0) {

        av_log(VAR_0, AV_LOG_ERROR, "SNDCTL_DSP_STEREO: %s\n", strerror(errno));

        goto fail;

    }



    VAR_4 = s->sample_rate;

    VAR_5 = ioctl(VAR_3, SNDCTL_DSP_SPEED, &VAR_4);

    if (VAR_5 < 0) {

        av_log(VAR_0, AV_LOG_ERROR, "SNDCTL_DSP_SPEED: %s\n", strerror(errno));

        goto fail;

    }

    s->sample_rate = VAR_4; 

    s->fd = VAR_3;



    return 0;

 fail:

    close(VAR_3);

    return AVERROR(EIO);

}

static int FUNC_0(AVFormatContext *VAR_0, int VAR_1, const char *VAR_2)
{ AudioData *s = VAR_0->priv_data; int VAR_3; int VAR_4, VAR_5; char *VAR_6 = getenv("AUDIO_FLIP_LEFT"); if (VAR_1)
VAR_3 = avpriv_open(VAR_2, O_WRONLY); else
VAR_3 = avpriv_open(VAR_2, O_RDONLY); if (VAR_3 < 0) { av_log(VAR_0, AV_LOG_ERROR, "%s: %s\n", VAR_2, strerror(errno)); return AVERROR(EIO); } if (VAR_6 && *VAR_6 == '1') { s->flip_left = 1; } if (!VAR_1) { if (fcntl(VAR_3, F_SETFL, O_NONBLOCK) < 0) { av_log(VAR_0, AV_LOG_WARNING, "%s: Could not enable non block mode (%s)\n", VAR_2, strerror(errno)); } } s->frame_size = AUDIO_BLOCK_SIZE; VAR_5 = ioctl(VAR_3, SNDCTL_DSP_GETFMTS, &VAR_4); #if HAVE_BIGENDIAN
if (VAR_4 & AFMT_S16_BE) { VAR_4 = AFMT_S16_BE; } else if (VAR_4 & AFMT_S16_LE) { VAR_4 = AFMT_S16_LE; } else { VAR_4 = 0; } #else
if (VAR_4 & AFMT_S16_LE) { VAR_4 = AFMT_S16_LE; } else if (VAR_4 & AFMT_S16_BE) { VAR_4 = AFMT_S16_BE; } else { VAR_4 = 0; } #endif
switch(VAR_4) { case AFMT_S16_LE:
s->codec_id = AV_CODEC_ID_PCM_S16LE; break; case AFMT_S16_BE:
s->codec_id = AV_CODEC_ID_PCM_S16BE; break; default:
av_log(VAR_0, AV_LOG_ERROR, "Soundcard does not support 16 bit sample format\n"); close(VAR_3); return AVERROR(EIO); } VAR_5=ioctl(VAR_3, SNDCTL_DSP_SETFMT, &VAR_4); if (VAR_5 < 0) { av_log(VAR_0, AV_LOG_ERROR, "SNDCTL_DSP_SETFMT: %s\n", strerror(errno)); goto fail; } VAR_4 = (s->channels == 2); VAR_5 = ioctl(VAR_3, SNDCTL_DSP_STEREO, &VAR_4); if (VAR_5 < 0) { av_log(VAR_0, AV_LOG_ERROR, "SNDCTL_DSP_STEREO: %s\n", strerror(errno)); goto fail; } VAR_4 = s->sample_rate; VAR_5 = ioctl(VAR_3, SNDCTL_DSP_SPEED, &VAR_4); if (VAR_5 < 0) { av_log(VAR_0, AV_LOG_ERROR, "SNDCTL_DSP_SPEED: %s\n", strerror(errno)); goto fail; } s->sample_rate = VAR_4; s->fd = VAR_3; return 0; fail:
close(VAR_3); return AVERROR(EIO); }