static void format_ogg_free_plugin (format_plugin_t *plugin, client_t *client) { ogg_state_t *state = plugin->_state; /* free memory associated with this plugin instance */ free_ogg_codecs (state); free (state->artist); free (state->title); ogg_sync_clear (&state->oy); free (state); }
/* a new BOS page has been seen so check which codec it is */ static int process_initial_page (format_plugin_t *plugin, ogg_page *page) { ogg_state_t *ogg_info = plugin->_state; ogg_codec_t *codec; if (ogg_info->bos_completed) { ogg_info->bitrate = 0; ogg_info->codec_sync = NULL; /* need to zap old list of codecs when next group of BOS pages appear */ free_ogg_codecs (ogg_info); } do { codec = initial_vorbis_page (plugin, page); if (codec) break; #ifdef HAVE_THEORA codec = initial_theora_page (plugin, page); if (codec) break; #endif /* any others */ ERROR0 ("Seen BOS page with unknown type"); return -1; } while (0); if (codec) { /* add codec to list */ codec->next = ogg_info->codecs; ogg_info->codecs = codec; } return 0; }
/* a new BOS page has been seen so check which codec it is */ static int process_initial_page (format_plugin_t *plugin, ogg_page *page) { ogg_state_t *ogg_info = plugin->_state; ogg_codec_t *codec; if (ogg_info->bos_completed) { ogg_info->bitrate = 0; ogg_info->codec_sync = NULL; /* need to zap old list of codecs when next group of BOS pages appear */ free_ogg_codecs (ogg_info); } do { if (ogg_info->codec_count > 10) { ERROR0 ("many codecs in stream, playing safe, dropping source"); ogg_info->error = 1; return -1; } codec = initial_vorbis_page (plugin, page); if (codec) break; #ifdef HAVE_THEORA codec = initial_theora_page (plugin, page); if (codec) break; #endif codec = initial_midi_page (plugin, page); if (codec) break; codec = initial_flac_page (plugin, page); if (codec) break; #ifdef HAVE_SPEEX codec = initial_speex_page (plugin, page); if (codec) break; #endif codec = initial_kate_page (plugin, page); if (codec) break; codec = initial_skeleton_page (plugin, page); if (codec) break; /* any others */ ERROR0 ("Seen BOS page with unknown type"); ogg_info->error = 1; return -1; } while (0); if (codec) { /* add codec to list */ codec->next = ogg_info->codecs; ogg_info->codecs = codec; ogg_info->codec_count++; DEBUG2 ("%s codec has filter mark %d", codec->name, codec->filtered); } return 0; }