+ ret = oac_get_file_info(map, mapsize, NULL, &cb);
+ *len = oac_custom_header_get(buf, h);
+ if (ret < 0) {
+ PARA_ERROR_LOG("could not create ogg/vorbis header: %s\n",
+ para_strerror(-ret));
+ free(*buf);
+ *buf = NULL;
+ *len = 0;
+ } else
+ PARA_INFO_LOG("created %zu byte ogg vorbis header\n", *len);
+}
+
+static int vorbis_make_meta_packet(struct taginfo *tags, ogg_packet *result)
+{
+ vorbis_comment vc;
+ int ret;
+
+ vorbis_comment_init(&vc);
+ vorbis_comment_add_tag(&vc, "artist", tags->artist);
+ vorbis_comment_add_tag(&vc, "title", tags->title);
+ vorbis_comment_add_tag(&vc, "album", tags->album);
+ vorbis_comment_add_tag(&vc, "year", tags->year);
+ vorbis_comment_add_tag(&vc, "comment", tags->comment);
+ ret = vorbis_commentheader_out(&vc, result);
+ vorbis_comment_clear(&vc);
+ if (ret != 0)
+ return -E_VORBIS_COMMENTHEADER;
+ return 1;
+}
+
+static int vorbis_rewrite_tags(const char *map, size_t mapsize,
+ struct taginfo *tags, int output_fd,
+ __a_unused const char *filename)
+{
+ int ret;
+ ogg_packet packet;
+
+ ret = vorbis_make_meta_packet(tags, &packet);