int BDRingBuffer::safe_read(void *data, uint sz) { int result = 0; if (m_isHDMVNavigation) { HandleBDEvents(); while (result == 0) { BD_EVENT event; result = bd_read_ext(bdnav, (unsigned char *)data, sz, &event); HandleBDEvent(event); if (result == 0) HandleBDEvents(); } } else { result = bd_read(bdnav, (unsigned char *)data, sz); } m_currentTime = bd_tell(bdnav); return result; }
static void _print_events(BLURAY *bd) { BD_EVENT ev; do { bd_read_ext(bd, NULL, 0, &ev); _print_event(&ev); } while (ev.event != BD_EVENT_NONE && ev.event != BD_EVENT_ERROR); }
static void _read_to_eof(BLURAY *bd) { BD_EVENT ev; int bytes; uint64_t total = 0; uint8_t buf[6144]; bd_seek(bd, bd_get_title_size(bd) - 6144); do { bytes = bd_read_ext(bd, buf, 6144, &ev); total += bytes < 0 ? 0 : bytes; _print_event(&ev); } while (bytes > 0); printf("_read_to_eof(): read %"PRIu64" bytes\n", total); }