28 #if HAVE_CDIO_PARANOIA_H
29 #include <cdio/cdda.h>
30 #include <cdio/paranoia.h>
31 #elif HAVE_CDIO_PARANOIA_PARANOIA_H
32 #include <cdio/paranoia/cdda.h>
33 #include <cdio/paranoia/paranoia.h>
63 s->
drive = cdio_cddap_identify(ctx->
url, CDDA_MESSAGE_LOGIT, &err);
72 if ((ret = cdio_cddap_open(s->
drive)) < 0 || !s->
drive->opened) {
77 cdio_cddap_verbose_set(s->
drive, CDDA_MESSAGE_LOGIT, CDDA_MESSAGE_LOGIT);
89 if (s->
drive->bigendianp)
95 if (s->
drive->audio_last_sector != CDIO_INVALID_LSN &&
96 s->
drive->audio_first_sector != CDIO_INVALID_LSN)
98 else if (s->
drive->tracks)
102 for (i = 0; i < s->
drive->tracks; i++) {
104 snprintf(title,
sizeof(title),
"track %02d", s->
drive->disc_toc[i].bTrack);
106 s->
drive->disc_toc[i+1].dwStartSector, title);
128 if (err = cdio_cddap_errors(s->
drive)) {
133 if (err = cdio_cddap_messages(s->
drive)) {
141 memcpy(pkt->
data, buf, CDIO_CD_FRAMESIZE_RAW);
149 cdio_cddap_close(s->
drive);
159 cdio_paranoia_seek(s->
paranoia, timestamp, SEEK_SET);
164 #define OFFSET(x) offsetof(CDIOContext, x)
165 #define DEC AV_OPT_FLAG_DECODING_PARAM
168 {
"paranoia_mode",
"set error recovery mode",
OFFSET(paranoia_mode),
AV_OPT_TYPE_FLAGS, { .i64 = PARANOIA_MODE_DISABLE }, INT_MIN, INT_MAX,
DEC,
"paranoia_mode" },
169 {
"disable",
"apply no fixups", 0,
AV_OPT_TYPE_CONST, { .i64 = PARANOIA_MODE_DISABLE }, 0, 0,
DEC,
"paranoia_mode" },
170 {
"verify",
"verify data integrity in overlap area", 0,
AV_OPT_TYPE_CONST, { .i64 = PARANOIA_MODE_VERIFY }, 0, 0,
DEC,
"paranoia_mode" },
171 {
"overlap",
"perform overlapped reads", 0,
AV_OPT_TYPE_CONST, { .i64 = PARANOIA_MODE_OVERLAP }, 0, 0,
DEC,
"paranoia_mode" },
172 {
"neverskip",
"do not skip failed reads", 0,
AV_OPT_TYPE_CONST, { .i64 = PARANOIA_MODE_NEVERSKIP }, 0, 0,
DEC,
"paranoia_mode" },
173 {
"full",
"apply all recovery modes", 0,
AV_OPT_TYPE_CONST, { .i64 = PARANOIA_MODE_FULL }, 0, 0,
DEC,
"paranoia_mode" },
193 .priv_class = &libcdio_class,
#define LIBAVUTIL_VERSION_INT
Memory handling functions.
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
const char * av_default_item_name(void *ptr)
Return the context name.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
AVStream ** streams
A list of all streams in the file.
#define AVERROR_EOF
End of file.
static av_cold int read_close(AVFormatContext *ctx)
#define AV_LOG_VERBOSE
Detailed information.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
char * url
input or output URL.
enum AVMediaType codec_type
General type of the encoded data.
static av_cold int read_header(AVFormatContext *ctx)
static const AVOption options[]
static int read_packet(AVFormatContext *ctx, AVPacket *pkt)
Describe the class of an AVClass context structure.
int64_t duration
Decoding: duration of the stream, in stream time base.
int sample_rate
Audio only.
cdrom_paranoia_t * paranoia
void * priv_data
Format private data.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
This structure stores compressed data.
AVInputFormat ff_libcdio_demuxer
static const AVClass libcdio_class