ov_open_callback дает ошибку сегментации - PullRequest
0 голосов
/ 20 сентября 2019

Я декодирую формат Vorbis на языке C, используя библиотеку Vorbis и воспроизводя аудио через alsa.Аудиоданные копируются в буфер и затем передаются в ov_open_callback.Пока вызывается ov_open_callback, он выдает ошибку сегментации.

 void *buffer ;
     OggVorbis_File vf;
        int eof = 0;
        int current_section;
    ret = ov_open_callbacks(&buffer, &vf, NULL, 0, OV_CALLBACKS_STREAMONLY_NOCLOSE);
        printf("ret = %d\n",ret );
 vorbis_info *vi = ov_info(&vf, -1);
        fprintf(stderr, "Bitstream is %d channel, %ldHz\n",
                vi->channels, vi->rate);
        fprintf(stderr, "Encoded by: %s\n\n",
                ov_comment(&vf, -1)->vendor);

        while(!eof) 
        {
            long ret = ov_read(&vf, buffer, 4096, 0, 2, 1,
                    &current_section);
            if(ret == 0) 
            {
                /* EOF */
                eof = 1;
            } 
            else if(ret < 0) 
            {
                /* error in the stream. */
            } else 
            {
                frames = snd_pcm_writei(handle, buffer, ret/4);
                if(frames < 0)
                    frames = snd_pcm_recover(handle, frames,
                            0);
                if(frames < 0) {
                    printf("snd_pcm_writei failed: %s\n",
                            snd_strerror(err));
                    break;
                }
                if(frames > 0 && frames < 4096)
                    printf("Short write (expected %li, wrote %li)\n",
                            ret, frames);
            }
        }
        ov_clear(&vf);

    snd_pcm_close(handle);
...