31int main(
int argc,
char **argv)
40 fprintf(stderr,
"Usage: %s <file.ogg>\n"
41 "Print the header of every page and check its checksum.\n",
46 file = fopen(argv[1],
"rb");
53 int nb_segments =
page[26], body_size = 0, page_size;
56 if (memcmp(
page,
"OggS", 4) ||
58 fprintf(stderr,
"Invalid page at %ld\n",
pos);
62 for (
int i = 0;
i < nb_segments;
i++)
66 if (fread(
page + page_size - body_size, 1, body_size, file) != body_size) {
67 fprintf(stderr,
"Truncated page at %ld\n",
pos);
73 if (
av_crc(crc_table, 0,
page, page_size) != crc) {
74 fprintf(stderr,
"Checksum mismatch in page at %ld\n",
pos);
78 printf(
"pos=%ld serial=%"PRIu32
" sequence=%"PRIu32
" granule=%"PRId64
79 " flags=%c%c%c segments=%d size=%d\n",
82 page[5] & 1 ?
'c' :
'-',
page[5] & 2 ?
'b' :
'-',
83 page[5] & 4 ?
'e' :
'-', nb_segments, body_size);
88 ret = nb_read || ferror(file);
90 fprintf(stderr,
"Truncated page at %ld\n",
pos);
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
#define OGG_PAGE_MAX_SIZE
#define OGG_PAGE_HEADER_SIZE
static uint8_t page[OGG_PAGE_MAX_SIZE]