diff options
Diffstat (limited to 'stream/stream_cdda.c')
-rw-r--r-- | stream/stream_cdda.c | 95 |
1 files changed, 28 insertions, 67 deletions
diff --git a/stream/stream_cdda.c b/stream/stream_cdda.c index 090c439987..71ae461493 100644 --- a/stream/stream_cdda.c +++ b/stream/stream_cdda.c @@ -17,26 +17,21 @@ * with mpv. If not, see <http://www.gnu.org/licenses/>. */ -#include "config.h" +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> #include <cdio/cdio.h> -#if CDIO_API_VERSION < 6 -#define OLD_API -#endif - -#ifdef OLD_API -#include <cdio/cdda.h> -#include <cdio/paranoia.h> -#else +// For cdio_cddap_version +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-prototypes" #include <cdio/paranoia/cdda.h> #include <cdio/paranoia/paranoia.h> -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <stdbool.h> +#pragma GCC diagnostic pop +#include "common/msg.h" +#include "config.h" #include "mpv_talloc.h" #include "stream.h" @@ -44,9 +39,6 @@ #include "options/m_config.h" #include "options/options.h" -#include "common/msg.h" - -#include "config.h" #if !HAVE_GPL #error GPL only #endif @@ -61,50 +53,44 @@ typedef struct cdda_params { size_t data_pos; // options + char *cdda_device; int speed; int paranoia_mode; int sector_size; int search_overlap; int toc_bias; int toc_offset; - int skip; + bool skip; char *device; int span[2]; - int cdtext; + bool cdtext; } cdda_priv; #define OPT_BASE_STRUCT struct cdda_params const struct m_sub_options stream_cdda_conf = { .opts = (const m_option_t[]) { - OPT_INTRANGE("speed", speed, 0, 1, 100), - OPT_INTRANGE("paranoia", paranoia_mode, 0, 0, 2), - OPT_INTRANGE("sector-size", sector_size, 0, 1, 100), - OPT_INTRANGE("overlap", search_overlap, 0, 0, 75), - OPT_INT("toc-bias", toc_bias, 0), - OPT_INT("toc-offset", toc_offset, 0), - OPT_FLAG("skip", skip, 0), - OPT_INTPAIR("span", span, 0), - OPT_FLAG("cdtext", cdtext, 0), + {"device", OPT_STRING(cdda_device), .flags = M_OPT_FILE}, + {"speed", OPT_INT(speed), M_RANGE(1, 100)}, + {"paranoia", OPT_INT(paranoia_mode), M_RANGE(0, 2)}, + {"sector-size", OPT_INT(sector_size), M_RANGE(1, 100)}, + {"overlap", OPT_INT(search_overlap), M_RANGE(0, 75)}, + {"toc-bias", OPT_INT(toc_bias), + .deprecation_message = "toc-bias is no longer used"}, + {"toc-offset", OPT_INT(toc_offset)}, + {"skip", OPT_BOOL(skip)}, + {"span-a", OPT_INT(span[0])}, + {"span-b", OPT_INT(span[1])}, + {"cdtext", OPT_BOOL(cdtext)}, {0} }, .size = sizeof(struct cdda_params), .defaults = &(const struct cdda_params){ .search_overlap = -1, - .skip = 1, + .skip = true, }, }; static const char *const cdtext_name[] = { -#ifdef OLD_API - [CDTEXT_ARRANGER] = "Arranger", - [CDTEXT_COMPOSER] = "Composer", - [CDTEXT_MESSAGE] = "Message", - [CDTEXT_ISRC] = "ISRC", - [CDTEXT_PERFORMER] = "Performer", - [CDTEXT_SONGWRITER] = "Songwriter", - [CDTEXT_TITLE] = "Title", - [CDTEXT_UPC_EAN] = "UPC_EAN", -#else [CDTEXT_FIELD_ARRANGER] = "Arranger", [CDTEXT_FIELD_COMPOSER] = "Composer", [CDTEXT_FIELD_MESSAGE] = "Message", @@ -113,7 +99,6 @@ static const char *const cdtext_name[] = { [CDTEXT_FIELD_SONGWRITER] = "Songwriter", [CDTEXT_FIELD_TITLE] = "Title", [CDTEXT_FIELD_UPC_EAN] = "UPC_EAN", -#endif }; static void print_cdtext(stream_t *s, int track) @@ -121,20 +106,12 @@ static void print_cdtext(stream_t *s, int track) cdda_priv* p = (cdda_priv*)s->priv; if (!p->cdtext) return; -#ifdef OLD_API - cdtext_t *text = cdio_get_cdtext(p->cd->p_cdio, track); -#else cdtext_t *text = cdio_get_cdtext(p->cd->p_cdio); -#endif int header = 0; if (text) { for (int i = 0; i < sizeof(cdtext_name) / sizeof(cdtext_name[0]); i++) { const char *name = cdtext_name[i]; -#ifdef OLD_API - const char *value = cdtext_get_const(i, text); -#else const char *value = cdtext_get_const(text, i, track); -#endif if (name && value) { if (!header) MP_INFO(s, "CD-Text (%s):\n", track ? "track" : "CD"); @@ -158,7 +135,6 @@ static void cdparanoia_callback(long int inpos, paranoia_cb_mode_t function) static int fill_buffer(stream_t *s, void *buffer, int max_len) { cdda_priv *p = (cdda_priv *)s->priv; - int i; if (!p->data || p->data_pos >= CDIO_CD_FRAMESIZE_RAW) { if ((p->sector < p->start_sector) || (p->sector > p->end_sector)) @@ -175,14 +151,6 @@ static int fill_buffer(stream_t *s, void *buffer, int max_len) size_t copy = MPMIN(CDIO_CD_FRAMESIZE_RAW - p->data_pos, max_len); memcpy(buffer, p->data + p->data_pos, copy); p->data_pos += copy; - - for (i = 0; i < p->cd->tracks; i++) { - if (p->cd->disc_toc[i].dwStartSector == p->sector - 1) { - print_track_info(s, i + 1); - break; - } - } - return copy; } @@ -285,15 +253,10 @@ static int open_cdda(stream_t *st) cdrom_drive_t *cdd = NULL; int last_track; - char *global_device; - mp_read_option_raw(st->global, "cdrom-device", &m_option_type_string, - &global_device); - talloc_steal(st, global_device); - if (st->path[0]) { p->device = st->path; - } else if (global_device && global_device[0]) { - p->device = global_device; + } else if (p->cdda_device && p->cdda_device[0]) { + p->device = p->cdda_device; } else { p->device = DEFAULT_CDROM_DEVICE; } @@ -322,9 +285,7 @@ static int open_cdda(stream_t *st) priv->cd = cdd; - if (p->toc_bias) - offset -= cdda_track_firstsector(cdd, 1); - + offset -= cdda_track_firstsector(cdd, 1); if (offset) { for (int n = 0; n < cdd->tracks + 1; n++) cdd->disc_toc[n].dwStartSector += offset; |