author | sl |
Tue, 10 Jun 2014 14:32:02 +0200 | |
changeset 1 | 260cb5ec6c19 |
permissions | -rw-r--r-- |
sl@0 | 1 |
/* |
sl@0 | 2 |
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
sl@0 | 3 |
* All rights reserved. |
sl@0 | 4 |
* This component and the accompanying materials are made available |
sl@0 | 5 |
* under the terms of "Eclipse Public License v1.0" |
sl@0 | 6 |
* which accompanies this distribution, and is available |
sl@0 | 7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html". |
sl@0 | 8 |
* |
sl@0 | 9 |
* Initial Contributors: |
sl@0 | 10 |
* Nokia Corporation - initial contribution. |
sl@0 | 11 |
* |
sl@0 | 12 |
* Contributors: |
sl@0 | 13 |
* |
sl@0 | 14 |
* Description: |
sl@0 | 15 |
* |
sl@0 | 16 |
*/ |
sl@0 | 17 |
|
sl@0 | 18 |
#include <stdio.h> |
sl@0 | 19 |
|
sl@0 | 20 |
#include "jpeg_bits.h" |
sl@0 | 21 |
|
sl@0 | 22 |
/* FIXME */ |
sl@0 | 23 |
#define TRUE 1 |
sl@0 | 24 |
#define FALSE 0 |
sl@0 | 25 |
|
sl@0 | 26 |
int jpeg_bits_error (JpegBits *bits) |
sl@0 | 27 |
{ |
sl@0 | 28 |
return bits->error; |
sl@0 | 29 |
} |
sl@0 | 30 |
|
sl@0 | 31 |
int jpeg_bits_get_u8 (JpegBits *bits) |
sl@0 | 32 |
{ |
sl@0 | 33 |
if (bits->ptr < bits->end) { |
sl@0 | 34 |
return *bits->ptr++; |
sl@0 | 35 |
} |
sl@0 | 36 |
bits->error = TRUE; |
sl@0 | 37 |
return 0; |
sl@0 | 38 |
} |
sl@0 | 39 |
|
sl@0 | 40 |
void jpeg_bits_skip (JpegBits *bits, int n) |
sl@0 | 41 |
{ |
sl@0 | 42 |
bits->ptr += n; |
sl@0 | 43 |
if (bits->ptr > bits->end) { |
sl@0 | 44 |
bits->error = TRUE; |
sl@0 | 45 |
bits->ptr = bits->end; |
sl@0 | 46 |
} |
sl@0 | 47 |
} |
sl@0 | 48 |
|
sl@0 | 49 |
int jpeg_bits_get_u16_be (JpegBits *bits) |
sl@0 | 50 |
{ |
sl@0 | 51 |
int x; |
sl@0 | 52 |
|
sl@0 | 53 |
x = jpeg_bits_get_u8 (bits) << 8; |
sl@0 | 54 |
x |= jpeg_bits_get_u8 (bits); |
sl@0 | 55 |
|
sl@0 | 56 |
return x; |
sl@0 | 57 |
} |
sl@0 | 58 |
|
sl@0 | 59 |
int jpeg_bits_available (JpegBits *bits) |
sl@0 | 60 |
{ |
sl@0 | 61 |
return bits->end - bits->ptr; |
sl@0 | 62 |
} |
sl@0 | 63 |
|
sl@0 | 64 |
int bits_needbits(JpegBits *b, int n_bytes) |
sl@0 | 65 |
{ |
sl@0 | 66 |
if(b->ptr==NULL)return 1; |
sl@0 | 67 |
if(b->ptr + n_bytes > b->end)return 1; |
sl@0 | 68 |
|
sl@0 | 69 |
return 0; |
sl@0 | 70 |
} |
sl@0 | 71 |
|
sl@0 | 72 |
int getbit(JpegBits *b) |
sl@0 | 73 |
{ |
sl@0 | 74 |
int r; |
sl@0 | 75 |
|
sl@0 | 76 |
r = ((*b->ptr)>>(7-b->idx))&1; |
sl@0 | 77 |
|
sl@0 | 78 |
b->idx++; |
sl@0 | 79 |
if(b->idx>=8){ |
sl@0 | 80 |
b->ptr++; |
sl@0 | 81 |
b->idx = 0; |
sl@0 | 82 |
} |
sl@0 | 83 |
|
sl@0 | 84 |
return r; |
sl@0 | 85 |
} |
sl@0 | 86 |
|
sl@0 | 87 |
unsigned int getbits(JpegBits *b, int n) |
sl@0 | 88 |
{ |
sl@0 | 89 |
unsigned long r = 0; |
sl@0 | 90 |
int i; |
sl@0 | 91 |
|
sl@0 | 92 |
for(i=0;i<n;i++){ |
sl@0 | 93 |
r <<=1; |
sl@0 | 94 |
r |= getbit(b); |
sl@0 | 95 |
} |
sl@0 | 96 |
|
sl@0 | 97 |
return r; |
sl@0 | 98 |
} |
sl@0 | 99 |
|
sl@0 | 100 |
unsigned int peekbits(JpegBits *b, int n) |
sl@0 | 101 |
{ |
sl@0 | 102 |
JpegBits tmp = *b; |
sl@0 | 103 |
|
sl@0 | 104 |
return getbits(&tmp, n); |
sl@0 | 105 |
} |
sl@0 | 106 |
|
sl@0 | 107 |
int getsbits(JpegBits *b, int n) |
sl@0 | 108 |
{ |
sl@0 | 109 |
unsigned long r = 0; |
sl@0 | 110 |
int i; |
sl@0 | 111 |
|
sl@0 | 112 |
if(n==0)return 0; |
sl@0 | 113 |
r = -getbit(b); |
sl@0 | 114 |
for(i=1;i<n;i++){ |
sl@0 | 115 |
r <<=1; |
sl@0 | 116 |
r |= getbit(b); |
sl@0 | 117 |
} |
sl@0 | 118 |
|
sl@0 | 119 |
return r; |
sl@0 | 120 |
} |
sl@0 | 121 |
|
sl@0 | 122 |
unsigned int peek_u8(JpegBits *b) |
sl@0 | 123 |
{ |
sl@0 | 124 |
return *b->ptr; |
sl@0 | 125 |
} |
sl@0 | 126 |
|
sl@0 | 127 |
unsigned int get_u8(JpegBits *b) |
sl@0 | 128 |
{ |
sl@0 | 129 |
return *b->ptr++; |
sl@0 | 130 |
} |
sl@0 | 131 |
|
sl@0 | 132 |
unsigned int get_u16(JpegBits *b) |
sl@0 | 133 |
{ |
sl@0 | 134 |
unsigned int r; |
sl@0 | 135 |
|
sl@0 | 136 |
r = b->ptr[0] | (b->ptr[1]<<8); |
sl@0 | 137 |
b->ptr+=2; |
sl@0 | 138 |
|
sl@0 | 139 |
return r; |
sl@0 | 140 |
} |
sl@0 | 141 |
|
sl@0 | 142 |
unsigned int get_be_u16(JpegBits *b) |
sl@0 | 143 |
{ |
sl@0 | 144 |
unsigned int r; |
sl@0 | 145 |
|
sl@0 | 146 |
r = (b->ptr[0]<<8) | b->ptr[1]; |
sl@0 | 147 |
b->ptr+=2; |
sl@0 | 148 |
|
sl@0 | 149 |
return r; |
sl@0 | 150 |
} |
sl@0 | 151 |
|
sl@0 | 152 |
unsigned int get_u32(JpegBits *b) |
sl@0 | 153 |
{ |
sl@0 | 154 |
unsigned int r; |
sl@0 | 155 |
|
sl@0 | 156 |
r = b->ptr[0] | (b->ptr[1]<<8) | (b->ptr[2]<<16) | (b->ptr[3]<<24); |
sl@0 | 157 |
b->ptr+=4; |
sl@0 | 158 |
|
sl@0 | 159 |
return r; |
sl@0 | 160 |
} |
sl@0 | 161 |
|
sl@0 | 162 |
void syncbits(JpegBits *b) |
sl@0 | 163 |
{ |
sl@0 | 164 |
if(b->idx){ |
sl@0 | 165 |
b->ptr++; |
sl@0 | 166 |
b->idx=0; |
sl@0 | 167 |
} |
sl@0 | 168 |
|
sl@0 | 169 |
} |
sl@0 | 170 |