int main(int argc, char ** argv) { driver_return_code_t err; int close_tray = 0; const char * device = NULL; if(argc < 2 || argc > 3) { usage(argv[0]); return -1; } if((argc == 3) && strcmp(argv[1], "-t")) { usage(argv[0]); return -1; } if(argc == 2) device = argv[1]; else if(argc == 3) { close_tray = 1; device = argv[2]; } if(close_tray) { err = cdio_close_tray(device, NULL); if(err) { fprintf(stderr, "Closing tray failed for device %s: %s\n", device, cdio_driver_errmsg(err)); return -1; } } else { err = cdio_eject_media_drive(device); if(err) { fprintf(stderr, "Ejecting failed for device %s: %s\n", device, cdio_driver_errmsg(err)); return -1; } } return 0; }
static int open_vcd(bgav_input_context_t * ctx, const char * url, char ** r) { driver_return_code_t err; int i; vcd_priv * priv; const char * pos; // bgav_find_devices_vcd(); priv = calloc(1, sizeof(*priv)); ctx->priv = priv; #ifndef SECTOR_ACCESS priv->buffer = priv->sector + 8; priv->buffer_ptr = priv->buffer + SECTOR_SIZE; #endif pos = strrchr(url, '.'); if(pos && !strcasecmp(pos, ".cue")) priv->cdio = cdio_open (url, DRIVER_BINCUE); else { if((err = cdio_close_tray(url, NULL))) #if LIBCDIO_VERSION_NUM >= 77 bgav_log(ctx->opt, BGAV_LOG_ERROR, LOG_DOMAIN, "cdio_close_tray failed: %s", cdio_driver_errmsg(err)); #else bgav_log(ctx->opt, BGAV_LOG_ERROR, LOG_DOMAIN, "cdio_close_tray failed"); #endif priv->cdio = cdio_open (url, DRIVER_DEVICE); /* Close tray, hope this won't be harmful if the tray is already closed */ } if(!priv->cdio) { bgav_log(ctx->opt, BGAV_LOG_ERROR, LOG_DOMAIN, "cdio_open failed for %s", url); return 0; } /* Get some infos */ // dump_cdrom(priv->fd); /* Read TOC */ if(!read_toc(priv, &ctx->disc_name)) { bgav_log(ctx->opt, BGAV_LOG_ERROR, LOG_DOMAIN, "read_toc failed for %s", url); return 0; } toc_2_tt(ctx); /* Set up sector stuff */ #ifdef SECTOR_ACCESS ctx->sector_size = 2324; ctx->sector_size_raw = 2352; ctx->sector_header_size = 8; #endif /* Create demuxer */ ctx->demuxer = bgav_demuxer_create(ctx->opt, &bgav_demuxer_mpegps, ctx); ctx->demuxer->tt = ctx->tt; /* Now, loop through all tracks and let the demuxer find the durations */ for(i = 0; i < ctx->tt->num_tracks; i++) { select_track_vcd(ctx, i); bgav_track_table_select_track(ctx->tt, i); bgav_demuxer_start(ctx->demuxer, NULL); bgav_demuxer_stop(ctx->demuxer); } ctx->can_pause = 1; return 1; }
const char *get_msg(void) { return cdio_driver_errmsg(driver_return_code); };
int main(int argc, char *argv[]) { CdIo_t *p_cdio; driver_return_code_t rc = DRIVER_OP_SUCCESS; unsigned int i; init(argv[0]); parse_options(argc, argv); p_cdio = cdio_open (source_name, DRIVER_DEVICE); if (NULL == p_cdio) { printf("Couldn't find CD\n"); return 1; } for (i=0; i < last_op; i++) { const operation_t *p_op = &operation[i]; switch (p_op->op) { case OP_SPEED: rc = mmc_set_speed(p_cdio, p_op->arg.i_num, 0); report(stdout, "%s (mmc_set_speed): %s\n", program_name, cdio_driver_errmsg(rc)); break; case OP_BLOCKSIZE: if (p_op->arg.i_num) { driver_return_code_t rc = mmc_set_blocksize(p_cdio, p_op->arg.i_num); report(stdout, "%s (mmc_set_blocksize): %s\n", program_name, cdio_driver_errmsg(rc)); } else { int i_blocksize = mmc_get_blocksize(p_cdio); if (i_blocksize > 0) { report(stdout, "%s (mmc_get_blocksize): %d\n", program_name, i_blocksize); } else { report(stdout, "%s (mmc_get_blocksize): can't retrieve.\n", program_name); } } break; case OP_MODE_SENSE_2A: { uint8_t buf[30] = { 0, }; /* Place to hold returned data */ if (p_op->arg.i_num == 10) { rc = mmc_mode_sense_10(p_cdio, buf, sizeof(buf), CDIO_MMC_CAPABILITIES_PAGE); } else { rc = mmc_mode_sense_6(p_cdio, buf, sizeof(buf), CDIO_MMC_CAPABILITIES_PAGE); } if (DRIVER_OP_SUCCESS == rc) { print_mode_sense(p_op->arg.i_num, buf); } else { report(stdout, "%s (mmc_mode_sense 2a - drive_cap %d): %s\n", program_name, p_op->arg.i_num, cdio_driver_errmsg(rc)); } } break; case OP_CLOSETRAY: rc = mmc_close_tray(p_cdio); report(stdout, "%s (mmc_close_tray): %s\n", program_name, cdio_driver_errmsg(rc)); free(p_op->arg.psz); break; case OP_EJECT: rc = mmc_eject_media(p_cdio); report(stdout, "%s (mmc_eject_media): %s\n", program_name, cdio_driver_errmsg(rc)); if (p_op->arg.psz) free(p_op->arg.psz); break; case OP_IDLE: rc = mmc_start_stop_unit(p_cdio, false, false, true, 0); report(stdout, "%s (mmc_start_stop_media - powerdown): %s\n", program_name, cdio_driver_errmsg(rc)); break; case OP_INQUIRY: { cdio_hwinfo_t hw_info = { "", "", ""}; if (mmc_get_hwinfo(p_cdio, &hw_info)) { printf("%-8s: %s\n%-8s: %s\n%-8s: %s\n", "Vendor" , hw_info.psz_vendor, "Model" , hw_info.psz_model, "Revision", hw_info.psz_revision); } else { report(stdout, "%s (mmc_gpcmd_inquiry error)\n", program_name); } } break; case OP_MCN: { char *psz_mcn = mmc_get_mcn(p_cdio); if (psz_mcn) { report(stdout, "%s (mmc_get_mcn): %s\n", program_name, psz_mcn); free(psz_mcn); } else report(stdout, "%s (mmc_get_mcn): can't retrieve\n", program_name); } break; default: ; } } free(source_name); cdio_destroy(p_cdio); return rc; }