1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#ifndef MPEG3IO_H
#define MPEG3IO_H
#include <stdio.h>
#include "mpeg3css.h"
#include "mpeg3private.inc"
/* Filesystem structure */
typedef struct
{
FILE *fd;
mpeg3_css_t *css; /* Encryption object */
char path[MPEG3_STRLEN];
/* Hypothetical position of file pointer */
long current_byte;
long total_bytes;
} mpeg3_fs_t;
#define mpeg3io_tell(fs) (((mpeg3_fs_t *)(fs))->current_byte)
// End of file
#define mpeg3io_eof(fs) (((mpeg3_fs_t *)(fs))->current_byte >= ((mpeg3_fs_t *)(fs))->total_bytes)
// Beginning of file
#define mpeg3io_bof(fs) (((mpeg3_fs_t *)(fs))->current_byte < 0)
#define mpeg3io_get_fd(fs) (fileno(((mpeg3_fs_t *)(fs))->fd))
#define mpeg3io_total_bytes(fs) (((mpeg3_fs_t *)(fs))->total_bytes)
extern inline unsigned int mpeg3io_read_int32(mpeg3_fs_t *fs)
{
int a, b, c, d;
unsigned int result;
/* Do not fread. This breaks byte ordering. */
a = (unsigned char)fgetc(fs->fd);
b = (unsigned char)fgetc(fs->fd);
c = (unsigned char)fgetc(fs->fd);
d = (unsigned char)fgetc(fs->fd);
result = ((int)a << 24) |
((int)b << 16) |
((int)c << 8) |
((int)d);
fs->current_byte += 4;
return result;
}
extern inline unsigned int mpeg3io_read_char(mpeg3_fs_t *fs)
{
fs->current_byte++;
return fgetc(fs->fd);
}
#endif
|