bool CDDAParanoia::isAudioTrack(int n) { if (paranoia_drive) return IS_AUDIO(paranoia_drive, n-1); return TRUE; }
static gboolean gst_cd_paranoia_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device) { GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (audiocdsrc); gint i, cache_size; GST_DEBUG_OBJECT (src, "trying to open device %s (generic-device=%s) ...", device, GST_STR_NULL (src->generic_device)); /* find the device */ if (src->generic_device != NULL) { src->d = cdda_identify_scsi (src->generic_device, device, FALSE, NULL); } else { if (device != NULL) { src->d = cdda_identify (device, FALSE, NULL); } else { src->d = cdda_identify ("/dev/cdrom", FALSE, NULL); } } /* fail if the device couldn't be found */ if (src->d == NULL) goto no_device; /* set verbosity mode */ cdda_verbose_set (src->d, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT); /* open the disc */ if (cdda_open (src->d)) goto open_failed; GST_INFO_OBJECT (src, "set read speed to %d", src->read_speed); cdda_speed_set (src->d, src->read_speed); for (i = 1; i < src->d->tracks + 1; i++) { GstAudioCdSrcTrack track = { 0, }; track.num = i; track.is_audio = IS_AUDIO (src->d, i - 1); track.start = cdda_track_firstsector (src->d, i); track.end = cdda_track_lastsector (src->d, i); track.tags = NULL; gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track); } /* create the paranoia struct and set it up */ src->p = paranoia_init (src->d); if (src->p == NULL) goto init_failed; paranoia_modeset (src->p, src->paranoia_mode); GST_INFO_OBJECT (src, "set paranoia mode to 0x%02x", src->paranoia_mode); if (src->search_overlap != -1) { paranoia_overlapset (src->p, src->search_overlap); GST_INFO_OBJECT (src, "search overlap set to %u", src->search_overlap); } cache_size = src->cache_size; if (cache_size == -1) { /* if paranoia mode is low (the default), assume we're doing playback */ if (src->paranoia_mode <= PARANOIA_MODE_FRAGMENT) cache_size = 150; else cache_size = paranoia_cachemodel_size (src->p, -1); } paranoia_cachemodel_size (src->p, cache_size); GST_INFO_OBJECT (src, "set cachemodel size to %u", cache_size); src->next_sector = -1; return TRUE; /* ERRORS */ no_device: { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (_("Could not open CD device for reading.")), ("cdda_identify failed")); return FALSE; } open_failed: { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (_("Could not open CD device for reading.")), ("cdda_open failed")); cdda_close (src->d); src->d = NULL; return FALSE; } init_failed: { GST_ELEMENT_ERROR (src, LIBRARY, INIT, ("failed to initialize paranoia"), ("failed to initialize paranoia")); return FALSE; } }
static gboolean gst_cd_paranoia_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device) { GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (cddabasesrc); gint i; GST_DEBUG_OBJECT (src, "trying to open device %s (generic-device=%s) ...", device, GST_STR_NULL (src->generic_device)); /* find the device */ if (src->generic_device != NULL) { src->d = cdda_identify_scsi (src->generic_device, device, FALSE, NULL); } else { if (device != NULL) { src->d = cdda_identify (device, FALSE, NULL); } else { src->d = cdda_identify ("/dev/cdrom", FALSE, NULL); } } /* fail if the device couldn't be found */ if (src->d == NULL) goto no_device; /* set verbosity mode */ cdda_verbose_set (src->d, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT); /* open the disc */ if (cdda_open (src->d)) goto open_failed; if (src->read_speed != -1) { cdda_speed_set (src->d, src->read_speed); } for (i = 1; i < src->d->tracks + 1; i++) { GstCddaBaseSrcTrack track = { 0, }; track.num = i; track.is_audio = IS_AUDIO (src->d, i - 1); track.start = cdda_track_firstsector (src->d, i); track.end = cdda_track_lastsector (src->d, i); track.tags = NULL; gst_cdda_base_src_add_track (GST_CDDA_BASE_SRC (src), &track); } /* create the paranoia struct and set it up */ src->p = paranoia_init (src->d); if (src->p == NULL) goto init_failed; paranoia_modeset (src->p, src->paranoia_mode); if (src->search_overlap != -1) paranoia_overlapset (src->p, src->search_overlap); src->next_sector = -1; return TRUE; /* ERRORS */ no_device: { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (_("Could not open CD device for reading.")), ("cdda_identify failed")); return FALSE; } open_failed: { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (_("Could not open CD device for reading.")), ("cdda_open failed")); cdda_close (src->d); src->d = NULL; return FALSE; } init_failed: { GST_ELEMENT_ERROR (src, LIBRARY, INIT, ("failed to initialize paranoia"), ("failed to initialize paranoia")); return FALSE; } }