static refbuf_t *get_buffer_finished (ogg_state_t *ogg_info, ogg_codec_t *codec) { vorbis_codec_t *source_vorbis = codec->specific; ogg_page page; refbuf_t *refbuf; if (ogg_stream_flush (&source_vorbis->new_os, &page) > 0) { source_vorbis->samples_in_page -= (ogg_page_granulepos (&page) - source_vorbis->prev_page_samples); source_vorbis->prev_page_samples = ogg_page_granulepos (&page); refbuf = make_refbuf_with_page (&page); DEBUG0 ("flushing page"); return refbuf; } ogg_stream_clear (&source_vorbis->new_os); ogg_stream_init (&source_vorbis->new_os, rand()); format_ogg_free_headers (ogg_info); source_vorbis->get_buffer_page = NULL; if (source_vorbis->prev_packet) source_vorbis->process_packet = process_vorbis_headers; else source_vorbis->process_packet = NULL; if (source_vorbis->initial_audio_packet == 0) source_vorbis->prev_window = 0; return NULL; }
/* release the memory used for the codec and header pages from the module */ static void free_ogg_codecs (ogg_state_t *ogg_info) { ogg_codec_t *codec; if (ogg_info == NULL) return; format_ogg_free_headers (ogg_info); /* now free the codecs */ codec = ogg_info->codecs; ICECAST_LOG_DEBUG("freeing codecs"); while (codec) { ogg_codec_t *next = codec->next; if (codec->possible_start) refbuf_release (codec->possible_start); codec->codec_free (ogg_info, codec); codec = next; } ogg_info->codecs = NULL; ogg_info->current = NULL; ogg_info->bos_completed = 0; ogg_info->codec_count = 0; }
/* release the memory used for the codec and header pages from the module */ static void free_ogg_codecs (ogg_state_t *ogg_info) { ogg_codec_t *codec; if (ogg_info == NULL) return; format_ogg_free_headers (ogg_info); /* now free the codecs */ codec = ogg_info->codecs; DEBUG0 ("freeing codecs"); while (codec) { ogg_codec_t *next = codec->next; codec->codec_free (ogg_info, codec); codec = next; } ogg_info->codecs = NULL; ogg_info->current = NULL; ogg_info->bos_completed = 0; }