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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#include <stdio.h>
#include "jpeg_bits.h"
/* FIXME */
#define TRUE 1
#define FALSE 0
int jpeg_bits_error (JpegBits *bits)
{
return bits->error;
}
int jpeg_bits_get_u8 (JpegBits *bits)
{
if (bits->ptr < bits->end) {
return *bits->ptr++;
}
bits->error = TRUE;
return 0;
}
void jpeg_bits_skip (JpegBits *bits, int n)
{
bits->ptr += n;
if (bits->ptr > bits->end) {
bits->error = TRUE;
bits->ptr = bits->end;
}
}
int jpeg_bits_get_u16_be (JpegBits *bits)
{
int x;
x = jpeg_bits_get_u8 (bits) << 8;
x |= jpeg_bits_get_u8 (bits);
return x;
}
int jpeg_bits_available (JpegBits *bits)
{
return bits->end - bits->ptr;
}
int bits_needbits(JpegBits *b, int n_bytes)
{
if(b->ptr==NULL)return 1;
if(b->ptr + n_bytes > b->end)return 1;
return 0;
}
int getbit(JpegBits *b)
{
int r;
r = ((*b->ptr)>>(7-b->idx))&1;
b->idx++;
if(b->idx>=8){
b->ptr++;
b->idx = 0;
}
return r;
}
unsigned int getbits(JpegBits *b, int n)
{
unsigned long r = 0;
int i;
for(i=0;i<n;i++){
r <<=1;
r |= getbit(b);
}
return r;
}
unsigned int peekbits(JpegBits *b, int n)
{
JpegBits tmp = *b;
return getbits(&tmp, n);
}
int getsbits(JpegBits *b, int n)
{
unsigned long r = 0;
int i;
if(n==0)return 0;
r = -getbit(b);
for(i=1;i<n;i++){
r <<=1;
r |= getbit(b);
}
return r;
}
unsigned int peek_u8(JpegBits *b)
{
return *b->ptr;
}
unsigned int get_u8(JpegBits *b)
{
return *b->ptr++;
}
unsigned int get_u16(JpegBits *b)
{
unsigned int r;
r = b->ptr[0] | (b->ptr[1]<<8);
b->ptr+=2;
return r;
}
unsigned int get_be_u16(JpegBits *b)
{
unsigned int r;
r = (b->ptr[0]<<8) | b->ptr[1];
b->ptr+=2;
return r;
}
unsigned int get_u32(JpegBits *b)
{
unsigned int r;
r = b->ptr[0] | (b->ptr[1]<<8) | (b->ptr[2]<<16) | (b->ptr[3]<<24);
b->ptr+=4;
return r;
}
void syncbits(JpegBits *b)
{
if(b->idx){
b->ptr++;
b->idx=0;
}
}
|