comparison flac.c @ 3171:47f2f56a6a28 libavcodec

switch flac to av_crc
author michael
date Mon, 06 Mar 2006 15:09:04 +0000
parents 04b924f8f5a5
children 42b85e03b408
comparison
equal deleted inserted replaced
3170:1475eb5f8649 3171:47f2f56a6a28
34 #include <limits.h> 34 #include <limits.h>
35 35
36 #include "avcodec.h" 36 #include "avcodec.h"
37 #include "bitstream.h" 37 #include "bitstream.h"
38 #include "golomb.h" 38 #include "golomb.h"
39 #include "crc.h"
39 40
40 #undef NDEBUG 41 #undef NDEBUG
41 #include <assert.h> 42 #include <assert.h>
42 43
43 #define MAX_CHANNELS 8 44 #define MAX_CHANNELS 8
82 static int blocksize_table[] = { 83 static int blocksize_table[] = {
83 0, 192, 576<<0, 576<<1, 576<<2, 576<<3, 0, 0, 84 0, 192, 576<<0, 576<<1, 576<<2, 576<<3, 0, 0,
84 256<<0, 256<<1, 256<<2, 256<<3, 256<<4, 256<<5, 256<<6, 256<<7 85 256<<0, 256<<1, 256<<2, 256<<3, 256<<4, 256<<5, 256<<6, 256<<7
85 }; 86 };
86 87
87 static const uint8_t table_crc8[256] = {
88 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15,
89 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
90 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
91 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
92 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5,
93 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
94 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85,
95 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
96 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
97 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
98 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2,
99 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
100 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32,
101 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
102 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
103 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
104 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c,
105 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
106 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec,
107 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
108 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
109 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
110 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c,
111 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
112 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b,
113 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
114 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
115 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
116 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb,
117 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
118 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb,
119 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
120 };
121
122 static int64_t get_utf8(GetBitContext *gb) 88 static int64_t get_utf8(GetBitContext *gb)
123 { 89 {
124 uint64_t val; 90 uint64_t val;
125 int ones=0, bytes; 91 int ones=0, bytes;
126 92
163 return -1; 129 return -1;
164 } 130 }
165 return 0; 131 return 0;
166 } 132 }
167 #endif 133 #endif
168
169 static int get_crc8(const uint8_t *buf, int count){
170 int crc=0;
171 int i;
172
173 for(i=0; i<count; i++){
174 crc = table_crc8[crc ^ buf[i]];
175 }
176
177 return crc;
178 }
179 134
180 static void metadata_streaminfo(FLACContext *s); 135 static void metadata_streaminfo(FLACContext *s);
181 static void dump_headers(FLACContext *s); 136 static void dump_headers(FLACContext *s);
182 137
183 static int flac_decode_init(AVCodecContext * avctx) 138 static int flac_decode_init(AVCodecContext * avctx)
552 av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", sample_rate_code); 507 av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", sample_rate_code);
553 return -1; 508 return -1;
554 } 509 }
555 510
556 skip_bits(&s->gb, 8); 511 skip_bits(&s->gb, 8);
557 crc8= get_crc8(s->gb.buffer, get_bits_count(&s->gb)/8); 512 crc8= av_crc(av_crc07, 0, s->gb.buffer, get_bits_count(&s->gb)/8);
558 if(crc8){ 513 if(crc8){
559 av_log(s->avctx, AV_LOG_ERROR, "header crc mismatch crc=%2X\n", crc8); 514 av_log(s->avctx, AV_LOG_ERROR, "header crc mismatch crc=%2X\n", crc8);
560 return -1; 515 return -1;
561 } 516 }
562 517