/*
- * Copyright (C) 2004-2014 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004 Andre Noll <maan@tuebingen.mpg.de>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
vorbis_comment vc;
};
+/*
+ * Vorbis uses three header packets, all of which are required: the
+ * identification header, the comments header, and the setup header.
+ *
+ * The identification header identifies the bitstream as Vorbis. It contains
+ * the Vorbis version and simple audio characteristics of the stream such as
+ * sample rate and number of channels.
+ *
+ * The comment header includes user text comments (tags) and a vendor string
+ * for the application/library that produced the bitstream.
+ *
+ * The setup header includes extensive CODEC setup information as well as the
+ * complete VQ and Huffman codebooks needed for decoding.
+ */
static int vorbis_packet_callback(ogg_packet *packet, int packet_num,
__a_unused int serial, struct afh_info *afhi, void *private_data)
{
static const char* ogg_suffixes[] = {"ogg", NULL};
+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);
+ if (ret < 0)
+ return ret;
+ ret = ogg_rewrite_tags(map, mapsize, output_fd, (char *)packet.packet,
+ packet.bytes);
+ free(packet.packet);
+ return ret;
+}
/**
* The init function of the ogg vorbis audio format handler.
*
afh->get_file_info = ogg_vorbis_get_file_info;
afh->get_header = vorbis_get_header;
afh->suffixes = ogg_suffixes;
+ afh->rewrite_tags = vorbis_rewrite_tags;
}