- num_chunks = i - 1;
-//fi->chunk_table[i] = pos;
- PARA_DEBUG_LOG("%lu chunks (%fs), max chunk: %zd, min chunk: %zd\n",
- num_chunks, chunk_time, max_chunk_len, min);
- return num_chunks;
-}
-
-static void ogg_write_info_string(OggVorbis_File *vf, struct afh_info *afhi)
-{
- char *taginfo;
- vorbis_comment *vc = ov_comment(vf,-1);
-
- if (vc) {
- char *artist, *title, *album, *year, *comment;
- artist = vorbis_comment_query(vc, "artist", 0);
- title = vorbis_comment_query(vc, "title", 0);
- album = vorbis_comment_query(vc, "album", 0);
- year = vorbis_comment_query(vc, "year", 0);
- comment = vorbis_comment_query(vc, "comment", 0);
- taginfo = make_taginfo(title, artist, album, year, comment);
- } else
- taginfo = make_message("%s: (no vorbis comments found)\n%s:\n",
- status_item_list[SI_TAGINFO1],
- status_item_list[SI_TAGINFO2]);
- afhi->info_string = make_message("%s:\n%s",
- status_item_list[SI_AUDIO_FILE_INFO], taginfo);
- free(taginfo);
+ if (packet_num == 1) {
+ PARA_INFO_LOG("replacing metadata packet (saved %ld bytes)\n",
+ packet->bytes - sizeof(dummy_packet));
+ ogg_packet replacement = *packet;
+ replacement.packet = dummy_packet;
+ replacement.bytes = sizeof(dummy_packet);
+ ret = -E_OGG_PACKET_IN;
+ if (ogg_stream_packetin(&vghd->os, &replacement) < 0)
+ goto out;
+ ret = -E_OGG_STREAM_FLUSH;
+ if (ogg_stream_flush(&vghd->os, &og) == 0)
+ goto out;
+ add_ogg_page(&og, vghd);
+ return 1;
+ }
+ ret = -E_OGG_PACKET_IN;
+ if (ogg_stream_packetin(&vghd->os, packet) < 0)
+ goto out;
+ ret = -E_OGG_STREAM_FLUSH;
+ if (ogg_stream_flush(&vghd->os, &og) == 0)
+ goto out;
+ add_ogg_page(&og, vghd);
+ ret = 0;
+out:
+ ogg_stream_clear(&vghd->os);
+ return ret;