/** libsmacker - A C library for decoding .smk Smacker Video files Copyright (C) 2012-2017 Greg Kennedy See smacker.h for more information. smk_bitstream.h SMK bitstream structure. Presents a block of raw bytes one bit at a time, and protects against over-read. */ #ifndef SMK_BITSTREAM_H #define SMK_BITSTREAM_H /** Bitstream structure, Forward declaration */ struct smk_bit_t; /* BITSTREAM Functions */ /** Initialize a bitstream */ struct smk_bit_t* smk_bs_init(const unsigned char* b, unsigned long size); /** This macro checks return code from _smk_bs_read_1 and jumps to error label if problems occur. */ #define smk_bs_read_1(t,uc) \ { \ if ((char)(uc = _smk_bs_read_1(t)) < 0) \ { \ fprintf(stderr, "libsmacker::smk_bs_read_1(" #t ", " #uc ") - ERROR (file: %s, line: %lu)\n", __FILE__, (unsigned long)__LINE__); \ goto error; \ } \ } /** Read a single bit from the bitstream, and advance. Returns -1 on error. */ char _smk_bs_read_1(struct smk_bit_t* bs); /** This macro checks return code from _smk_bs_read_8 and jumps to error label if problems occur. */ #define smk_bs_read_8(t,s) \ { \ if ((short)(s = _smk_bs_read_8(t)) < 0) \ { \ fprintf(stderr, "libsmacker::smk_bs_read_8(" #t ", " #s ") - ERROR (file: %s, line: %lu)\n", __FILE__, (unsigned long)__LINE__); \ goto error; \ } \ } /** Read eight bits from the bitstream (one byte), and advance. Returns -1 on error. */ short _smk_bs_read_8(struct smk_bit_t* bs); #endif