summaryrefslogtreecommitdiff
path: root/include/cddb/cddb_disc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cddb/cddb_disc.h')
-rw-r--r--include/cddb/cddb_disc.h450
1 files changed, 450 insertions, 0 deletions
diff --git a/include/cddb/cddb_disc.h b/include/cddb/cddb_disc.h
new file mode 100644
index 00000000..7951ae96
--- /dev/null
+++ b/include/cddb/cddb_disc.h
@@ -0,0 +1,450 @@
+/*
+ $Id: cddb_disc.h,v 1.22 2007/08/07 03:12:53 jcaratzas Exp $
+
+ Copyright (C) 2003, 2004, 2005 Kris Verbeeck <airborne@advalvas.be>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef CDDB_DISC_H
+#define CDDB_DISC_H 1
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+#include <cddb/cddb_track.h>
+
+
+/**
+ * The number of frames that fit into one second.
+ */
+#define FRAMES_PER_SECOND 75
+
+/**
+ * This macro converts an amount of frames into an amount of seconds.
+ */
+#define FRAMES_TO_SECONDS(f) ((f) / FRAMES_PER_SECOND)
+
+/**
+ * This macro converts an amount of seconds into an amount of frames.
+ */
+#define SECONDS_TO_FRAMES(s) ((s) * FRAMES_PER_SECOND)
+
+/**
+ * The different CDDB categories.
+ */
+typedef enum {
+ CDDB_CAT_DATA = 0, /**< data disc */
+ CDDB_CAT_FOLK, /**< folk music */
+ CDDB_CAT_JAZZ, /**< jazz music */
+ CDDB_CAT_MISC, /**< miscellaneous, use if no other
+ category matches */
+ CDDB_CAT_ROCK, /**< rock and pop music */
+ CDDB_CAT_COUNTRY, /**< country music */
+ CDDB_CAT_BLUES, /**< blues music */
+ CDDB_CAT_NEWAGE, /**< new age music */
+ CDDB_CAT_REGGAE, /**< reggae music */
+ CDDB_CAT_CLASSICAL, /**< classical music */
+ CDDB_CAT_SOUNDTRACK, /**< soundtracks */
+ CDDB_CAT_INVALID, /**< (internal) invalid category */
+ CDDB_CAT_LAST /**< (internal) category counter */
+} cddb_cat_t;
+
+/**
+ * String values for the CDDB categories.
+ */
+extern const char *CDDB_CATEGORY[CDDB_CAT_LAST];
+
+/**
+ * The CDDB disc structure. Contains all information associated with
+ * a full CD.
+ */
+typedef struct cddb_disc_s cddb_disc_t;
+
+
+/* --- construction / destruction */
+
+
+/**
+ * Creates a new CDDB disc structure.
+ *
+ * @return The CDDB disc structure or NULL if memory allocation failed.
+ */
+cddb_disc_t *cddb_disc_new(void);
+
+/**
+ * Free all resources associated with the given CDDB disc structure.
+ * The tracks will also be freed automatically.
+ *
+ * @param disc The CDDB disc structure.
+ */
+void cddb_disc_destroy(cddb_disc_t *disc);
+
+/**
+ * Creates a clone of the given disc.
+ *
+ * @param disc The CDDB disc structure.
+ */
+cddb_disc_t *cddb_disc_clone(const cddb_disc_t *disc);
+
+
+/* --- track manipulation */
+
+
+/**
+ * Add a new track to a disc. The track is added to the end of the
+ * existing list of tracks.
+ *
+ * @param disc The CDDB disc structure.
+ * @param track The CDDB track structure.
+ */
+void cddb_disc_add_track(cddb_disc_t *disc, cddb_track_t *track);
+
+/**
+ * Retrieves a numbered track from the disc. If there is no track
+ * with the given number, then NULL will be returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @param track_no The track number; starting at 0.
+ */
+cddb_track_t *cddb_disc_get_track(const cddb_disc_t *disc, int track_no);
+
+/**
+ * Returns the first track of the disc. If there is no such track
+ * then NULL will be returned. The internal track iterator will also
+ * be reset. This function should be called before the first call to
+ * cddb_disc_get_track_next.
+ *
+ * @see cddb_disc_get_track_next
+ *
+ * @param disc The CDDB disc structure.
+ */
+cddb_track_t *cddb_disc_get_track_first(cddb_disc_t *disc);
+
+/**
+ * Returns the next track on the disc and advances the internal track
+ * iterator. If there is no such track then NULL will be returned.
+ * This function should be called after calling
+ * cddb_disc_get_track_first.
+ *
+ * @see cddb_disc_get_track_first
+ *
+ * @param disc The CDDB disc structure.
+ */
+cddb_track_t *cddb_disc_get_track_next(cddb_disc_t *disc);
+
+
+/* --- setters / getters --- */
+
+
+/**
+ * Get the ID of the disc. If the disc is invalid or the disc ID is
+ * not yet initialized 0 will be returned.
+ *
+ * @param disc The CDDB disc structure.
+ */
+unsigned int cddb_disc_get_discid(const cddb_disc_t *disc);
+
+/**
+ * Set the ID of the disc. When the disc ID is not known yet, then it
+ * can be calculated with the cddb_disc_calc_discid function (which
+ * will automatically initialize the correct field in the disc
+ * structure).
+ *
+ * @see cddb_disc_calc_discid
+ *
+ * @param disc The CDDB disc structure.
+ * @param id The disc ID.
+ */
+void cddb_disc_set_discid(cddb_disc_t *disc, unsigned int id);
+
+/**
+ * Get the disc CDDB category ID. If the disc is invalid or no
+ * category is set then CDDB_CAT_INVALID will be returned. If you
+ * want a string representation of the category use the
+ * cddb_disc_get_category_str function.
+ *
+ * @see cddb_disc_set_category
+ * @see cddb_disc_get_category_str
+ * @see cddb_disc_set_category_str
+ * @see cddb_cat_t
+ * @see CDDB_CATEGORY
+ *
+ * @param disc The CDDB disc structure.
+ * @return The CDDB category ID.
+ */
+cddb_cat_t cddb_disc_get_category(const cddb_disc_t *disc);
+
+/**
+ * Set the disc CDDB category ID.
+ *
+ * @see cddb_disc_get_category
+ * @see cddb_disc_get_category_str
+ * @see cddb_disc_set_category_str
+ * @see cddb_cat_t
+ * @see CDDB_CATEGORY
+ *
+ * @param disc The CDDB disc structure.
+ * @param cat The CDDB category ID.
+ */
+void cddb_disc_set_category(cddb_disc_t *disc, cddb_cat_t cat);
+
+/**
+ * Get the disc CDDB category as a string. If no category is set for
+ * this disc then 'invalid' will be returned. If the disc structure
+ * is invalid NULL is returned. If you only want the ID of the
+ * category use the cddb_disc_get_category function.
+ *
+ * @see cddb_disc_get_category
+ * @see cddb_disc_set_category
+ * @see cddb_disc_set_category_str
+ *
+ * @param disc The CDDB disc structure.
+ * @return The CDDB category ID.
+ */
+const char *cddb_disc_get_category_str(cddb_disc_t *disc);
+
+/**
+ * Sets the category of the disc. If the specified category is
+ * an invalid CDDB category, then CDDB_CAT_MISC will be used.
+ *
+ * @see cddb_disc_get_category
+ * @see cddb_disc_set_category
+ * @see cddb_disc_get_category_str
+ * @see CDDB_CATEGORY
+ *
+ * @param disc The CDDB disc structure.
+ * @param cat The category string.
+ */
+void cddb_disc_set_category_str(cddb_disc_t *disc, const char *cat);
+
+/**
+ * Get the disc genre. If no genre is set for this disc then NULL
+ * will be returned. As opposed to the disc category, this field is
+ * not limited to a predefined set.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The disc genre.
+ */
+const char *cddb_disc_get_genre(const cddb_disc_t *disc);
+
+/**
+ * Set the disc genre. As opposed to the disc category, this field is
+ * not limited to a predefined set. If the disc already had a genre,
+ * then the memory for that string will be freed. The new genre will
+ * be copied into a new chunk of memory.
+ *
+ * @see cddb_disc_get_category_str
+ *
+ * @param disc The CDDB disc structure.
+ * @param genre The disc genre.
+ */
+void cddb_disc_set_genre(cddb_disc_t *disc, const char *genre);
+
+/**
+ * Get the disc length. If no length is set for this disc then 0 will
+ * be returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The disc length in seconds.
+ */
+unsigned int cddb_disc_get_length(const cddb_disc_t *disc);
+
+/**
+ * Set the disc length.
+ *
+ * @param disc The CDDB disc structure.
+ * @param l The disc length in seconds.
+ */
+void cddb_disc_set_length(cddb_disc_t *disc, unsigned int l);
+
+/**
+ * Get the revision number of the disc.
+ *
+ * @param disc The CDDB disc structure.
+ */
+unsigned int cddb_disc_get_revision(const cddb_disc_t *disc);
+
+/**
+ * Set the revision number of the disc.
+ *
+ * @param disc The CDDB disc structure.
+ * @param rev The revision number.
+ */
+void cddb_disc_set_revision(cddb_disc_t *disc, unsigned int rev);
+
+/**
+ * Get the year of publication for this disc. If no year is defined 0
+ * is returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The disc year.
+ */
+unsigned int cddb_disc_get_year(const cddb_disc_t *disc);
+
+/**
+ * Set the year of publication for this disc.
+ *
+ * @param disc The CDDB disc structure.
+ * @param y The disc year.
+ */
+void cddb_disc_set_year(cddb_disc_t *disc, unsigned int y);
+
+/**
+ * Get the number of tracks on the disc. If the disc is invalid -1 is
+ * returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The number of tracks.
+ */
+int cddb_disc_get_track_count(const cddb_disc_t *disc);
+
+/**
+ * Get the disc title. If the disc is invalid or no title is set then
+ * NULL will be returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The disc title.
+ */
+const char *cddb_disc_get_title(const cddb_disc_t *disc);
+
+/**
+ * Set the disc title. If the disc already had a title, then the
+ * memory for that string will be freed. The new title will be copied
+ * into a new chunk of memory. If the given title is NULL, then the
+ * title of the disc will be deleted.
+ *
+ * @param disc The CDDB disc structure.
+ * @param title The new disc title.
+ */
+void cddb_disc_set_title(cddb_disc_t *disc, const char *title);
+
+/**
+ * Append to the disc title. If the disc does not have a title yet,
+ * then a new one will be created from the given string, otherwise
+ * that string will be appended to the existing title.
+ *
+ * @param disc The CDDB disc structure.
+ * @param title Part of the disc title.
+ */
+void cddb_disc_append_title(cddb_disc_t *disc, const char *title);
+
+/**
+ * Get the disc artist name. If the disc is invalid or no artist is
+ * set then NULL will be returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The disc artist name.
+ */
+const char *cddb_disc_get_artist(const cddb_disc_t *disc);
+
+/**
+ * Set the disc artist name. If the disc already had an artist name,
+ * then the memory for that string will be freed. The new artist name
+ * will be copied into a new chunk of memory. If the given artist
+ * name is NULL, then the artist name of the disc will be deleted.
+ *
+ * @param disc The CDDB disc structure.
+ * @param artist The new disc artist name.
+ */
+void cddb_disc_set_artist(cddb_disc_t *disc, const char *artist);
+
+/**
+ * Append to the disc artist. If the disc does not have an artist
+ * yet, then a new one will be created from the given string,
+ * otherwise that string will be appended to the existing artist.
+ *
+ * @param disc The CDDB disc structure.
+ * @param artist Part of the artist name.
+ */
+void cddb_disc_append_artist(cddb_disc_t *disc, const char *artist);
+
+/**
+ * Get the extended disc data. If the disc is invalid or no extended
+ * data is set then NULL will be returned.
+ *
+ * @param disc The CDDB disc structure.
+ * @return The extended data.
+ */
+const char *cddb_disc_get_ext_data(const cddb_disc_t *disc);
+
+/**
+ * Set the extended data for the disc. If the disc already had
+ * extended data, then the memory for that string will be freed. The
+ * new extended data will be copied into a new chunk of memory. If
+ * the given extended data is NULL, then the existing data will be
+ * deleted.
+ *
+ * @param disc The CDDB disc structure.
+ * @param ext_data The new extended data.
+ */
+void cddb_disc_set_ext_data(cddb_disc_t *disc, const char *ext_data);
+
+/**
+ * Append to the extended disc data. If the disc does not have an
+ * extended data section yet, then a new one will be created from the
+ * given string, otherwise that string will be appended to the
+ * existing data.
+ *
+ * @param disc The CDDB disc structure.
+ * @param ext_data Part of the extended disc data.
+ */
+void cddb_disc_append_ext_data(cddb_disc_t *disc, const char *ext_data);
+
+
+/* --- miscellaneous */
+
+
+/**
+ * Copy all data from one disc to another. Any fields that are
+ * unavailable in the source disc structure will not result in a reset
+ * of the same field in the destination disc structure; e.g. if there
+ * is no title in the source disc, but there is one in the destination
+ * disc, then the destination's title will remain unchanged.
+ *
+ * @param dst The destination CDDB disc structure.
+ * @param src The source CDDB disc structure.
+ */
+void cddb_disc_copy(cddb_disc_t *dst, cddb_disc_t *src);
+
+/**
+ * Calculate the CDDB disc ID. To calculate a disc ID the provided
+ * disc needs to have its length set, and every track in the disc
+ * structure needs to have its frame offset initialized. The disc ID
+ * field will be set in the disc structure.
+ *
+ * @param disc The CDDB disc structure.
+ * @return A non-zero value if the calculation succeeded, zero
+ * otherwise.
+ */
+int cddb_disc_calc_discid(cddb_disc_t *disc);
+
+/**
+ * Prints information about the disc on stdout. This is just a
+ * debugging routine to display the structure's content.
+ *
+ * @param disc The CDDB disc structure.
+ */
+void cddb_disc_print(cddb_disc_t *disc);
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* CDDB_DISC_H */