Декодирую vorbis с помощью libvorbisfile. Нужно «Сделать паузу» Код функции:
void vorbis_decoder::StartDecode()
{
int current_section;
int sample_size = 16*ti.channels/8;
int bufsize = 4096;
while(stop != true)
{
char buf[bufsize];
long ret=ov_read(&vf,buf,bufsize,0,2,1,¤t_section);
if (ret == 0)
{
stop=true;
}
else
if (ret < 0)
{
}
else
{
int len = ret/sample_size;
snd_pcm_writei(ahandle, buf, len); //Вывожу полученые семплы через alsa
ti.currpos = ov_time_tell(&vf);
if (ret < bufsize)
bufsize -= ret;
currentsample += ret / (ti.channels * 2);
//printf("CurrSample: %d\t EndSample: %d\t Readed: %ld\t\n", currentsample, endsample, ret);
}
}
printf("Stopped\n");
}
Пробовал ввести переменную bool pause, и если она true то просто гонять цикл, если false то выполнять код декодирования, т.е. ~ так:
void vorbis_decoder::StartDecode()
{
int current_section;
int sample_size = 16*ti.channels/8;
int bufsize = 4096;
while(stop != true)
{
if (pause == false)
{
char buf[bufsize];
long ret=ov_read(&vf,buf,bufsize,0,2,1,¤t_section);
if (ret == 0)
{
stop=true;
}
else
if (ret < 0)
{
}
else
{
int len = ret/sample_size;
snd_pcm_writei(ahandle, buf, len);
ti.currpos = ov_time_tell(&vf);
if (ret < bufsize)
{
bufsize -= ret;
}
currentsample += ret / (ti.channels * 2);
//printf("CurrSample: %d\t EndSample: %d\t Readed: %ld\t\n", currentsample, endsample, ret);
}
}
else
sleep(1);
}
printf("Stopped\n");
}
Во время декодирования, выставляю pause в true, декодирование приостанавливается, выставляю в fale, цикл прерывается, т.к. ov_read начинает возвращать 0;
Никогда раньше не писал такие вещи. Прошу вашей помощи