util.c
来自「这个库实现了录象功能」· C语言 代码 · 共 941 行 · 第 1/2 页
C
941 行
if (negative) out [0] |= 0x80 ; if (exponent & 0x01) out [1] |= 0x80 ; out [3] = mantissa & 0xFF ; out [2] = (mantissa >> 8) & 0xFF ; out [1] |= (mantissa >> 16) & 0x7F ; out [0] |= (exponent >> 1) & 0x7F ; return ;} /* float32_be_write */static voiddouble64_be_write (double in, unsigned char *out){ int exponent, mantissa ; memset (out, 0, sizeof (double)) ; if (in == 0.0) return ; if (in < 0.0) { in *= -1.0 ; out [0] |= 0x80 ; } ; in = frexp (in, &exponent) ; exponent += 1022 ; out [0] |= (exponent >> 4) & 0x7F ; out [1] |= (exponent << 4) & 0xF0 ; in *= 0x20000000 ; mantissa = lrint (floor (in)) ; out [1] |= (mantissa >> 24) & 0xF ; out [2] = (mantissa >> 16) & 0xFF ; out [3] = (mantissa >> 8) & 0xFF ; out [4] = mantissa & 0xFF ; in = fmod (in, 1.0) ; in *= 0x1000000 ; mantissa = lrint (floor (in)) ; out [5] = (mantissa >> 16) & 0xFF ; out [6] = (mantissa >> 8) & 0xFF ; out [7] = mantissa & 0xFF ; return ;} /* double64_be_write */float quicktime_read_float32(quicktime_t *file) { unsigned char b[4]; quicktime_read_data(file, b, 4); return float32_be_read(b); }double quicktime_read_double64(quicktime_t *file) { unsigned char b[8]; quicktime_read_data(file, b, 8); return double64_be_read(b); }int quicktime_write_float32(quicktime_t *file, float value) { unsigned char b[4]; float32_be_write(value, b); return quicktime_write_data(file, b, 4); }int quicktime_write_double64(quicktime_t *file, double value) { unsigned char b[8]; double64_be_write(value, b); return quicktime_write_data(file, b, 8); }int quicktime_write_int64(quicktime_t *file, int64_t value){ unsigned char data[8]; data[0] = (((uint64_t)value) & 0xff00000000000000LL) >> 56; data[1] = (((uint64_t)value) & 0xff000000000000LL) >> 48; data[2] = (((uint64_t)value) & 0xff0000000000LL) >> 40; data[3] = (((uint64_t)value) & 0xff00000000LL) >> 32; data[4] = (((uint64_t)value) & 0xff000000LL) >> 24; data[5] = (((uint64_t)value) & 0xff0000LL) >> 16; data[6] = (((uint64_t)value) & 0xff00LL) >> 8; data[7] = ((uint64_t)value) & 0xff; return quicktime_write_data(file, data, 8);}int quicktime_write_int64_le(quicktime_t *file, int64_t value){ unsigned char data[8]; data[7] = (((uint64_t)value) & 0xff00000000000000LL) >> 56; data[6] = (((uint64_t)value) & 0xff000000000000LL) >> 48; data[5] = (((uint64_t)value) & 0xff0000000000LL) >> 40; data[4] = (((uint64_t)value) & 0xff00000000LL) >> 32; data[3] = (((uint64_t)value) & 0xff000000LL) >> 24; data[2] = (((uint64_t)value) & 0xff0000LL) >> 16; data[1] = (((uint64_t)value) & 0xff00LL) >> 8; data[0] = ((uint64_t)value) & 0xff; return quicktime_write_data(file, data, 8);}int quicktime_write_int32(quicktime_t *file, long value){ unsigned char data[4]; data[0] = (value & 0xff000000) >> 24; data[1] = (value & 0xff0000) >> 16; data[2] = (value & 0xff00) >> 8; data[3] = value & 0xff; return quicktime_write_data(file, data, 4);}int quicktime_write_int32_le(quicktime_t *file, long value){ unsigned char data[4]; data[3] = (value & 0xff000000) >> 24; data[2] = (value & 0xff0000) >> 16; data[1] = (value & 0xff00) >> 8; data[0] = value & 0xff; return quicktime_write_data(file, data, 4);}int quicktime_write_char32(quicktime_t *file, char *string){return quicktime_write_data(file, (uint8_t*)string, 4);}float quicktime_read_fixed16(quicktime_t *file){ unsigned char data[2]; quicktime_read_data(file, data, 2); if(data[1]) return (float)data[0] + (float)data[1] / 256; else return (float)data[0];}int quicktime_write_fixed16(quicktime_t *file, float number){ unsigned char data[2]; int a, b; a = number; b = (number - a) * 256; data[0] = a; data[1] = b; return quicktime_write_data(file, data, 2);}unsigned long quicktime_read_uint32(quicktime_t *file){ unsigned long result; unsigned long a, b, c, d; uint8_t data[4]; quicktime_read_data(file, data, 4); a = data[0]; b = data[1]; c = data[2]; d = data[3]; result = (a << 24) | (b << 16) | (c << 8) | d; return result;}long quicktime_read_int32(quicktime_t *file){ unsigned long result; unsigned long a, b, c, d; uint8_t data[4]; quicktime_read_data(file, data, 4); a = data[0]; b = data[1]; c = data[2]; d = data[3]; result = (a << 24) | (b << 16) | (c << 8) | d; return (long)result;}long quicktime_read_int32_le(quicktime_t *file){ unsigned long result; unsigned long a, b, c, d; uint8_t data[4]; quicktime_read_data(file, data, 4); a = data[0]; b = data[1]; c = data[2]; d = data[3]; result = (d << 24) | (c << 16) | (b << 8) | a; return (long)result;}int64_t quicktime_read_int64(quicktime_t *file){ uint64_t result, a, b, c, d, e, f, g, h; uint8_t data[8]; quicktime_read_data(file, data, 8); a = data[0]; b = data[1]; c = data[2]; d = data[3]; e = data[4]; f = data[5]; g = data[6]; h = data[7]; result = (a << 56) | (b << 48) | (c << 40) | (d << 32) | (e << 24) | (f << 16) | (g << 8) | h; return (int64_t)result;}int64_t quicktime_read_int64_le(quicktime_t *file){ uint64_t result, a, b, c, d, e, f, g, h; uint8_t data[8]; quicktime_read_data(file, data, 8); a = data[7]; b = data[6]; c = data[5]; d = data[4]; e = data[3]; f = data[2]; g = data[1]; h = data[0]; result = (a << 56) | (b << 48) | (c << 40) | (d << 32) | (e << 24) | (f << 16) | (g << 8) | h; return (int64_t)result;}long quicktime_read_int24(quicktime_t *file){ unsigned long result; unsigned long a, b, c; uint8_t data[4]; quicktime_read_data(file, data, 3); a = data[0]; b = data[1]; c = data[2]; result = (a << 16) | (b << 8) | c; return (long)result;}int quicktime_write_int24(quicktime_t *file, long number){ unsigned char data[3]; data[0] = (number & 0xff0000) >> 16; data[1] = (number & 0xff00) >> 8; data[2] = (number & 0xff); return quicktime_write_data(file, data, 3);}int quicktime_read_int16(quicktime_t *file){ unsigned long result; unsigned long a, b; uint8_t data[2]; quicktime_read_data(file, data, 2); a = data[0]; b = data[1]; result = (a << 8) | b; return (int)result;}int quicktime_read_int16_le(quicktime_t *file){ unsigned long result; unsigned long a, b; uint8_t data[2]; quicktime_read_data(file, data, 2); a = data[0]; b = data[1]; result = (b << 8) | a; return (int)result;}int quicktime_write_int16(quicktime_t *file, int number){ unsigned char data[2]; data[0] = (number & 0xff00) >> 8; data[1] = (number & 0xff); return quicktime_write_data(file, data, 2);}int quicktime_write_int16_le(quicktime_t *file, int number){ unsigned char data[2]; data[1] = (number & 0xff00) >> 8; data[0] = (number & 0xff); return quicktime_write_data(file, data, 2);}int quicktime_read_char(quicktime_t *file){ char output; quicktime_read_data(file, (uint8_t*)(&output), 1); return output;}int quicktime_write_char(quicktime_t *file, char x){return quicktime_write_data(file, (uint8_t*)(&x), 1);}void quicktime_read_char32(quicktime_t *file, char *string){quicktime_read_data(file, (uint8_t*)string, 4);}int64_t quicktime_position(quicktime_t *file) { return file->file_position; }int quicktime_set_position(quicktime_t *file, int64_t position) { file->file_position = position; return 0;}void quicktime_copy_char32(char *output, char *input){ *output++ = *input++; *output++ = *input++; *output++ = *input++; *output = *input;}void quicktime_print_chars(char *desc, uint8_t *input, int len){ int i; lqt_dump("%s", desc); for(i = 0; i < len; i++) lqt_dump("%02x ", input[i]); lqt_dump("\n");}unsigned long quicktime_current_time(void){ time_t t; time (&t); return (t+(66*31536000)+1468800);}int quicktime_match_32(void *_input, void *_output){ uint8_t * input = (uint8_t*)_input; uint8_t * output = (uint8_t*)_output; if(input[0] == output[0] && input[1] == output[1] && input[2] == output[2] && input[3] == output[3]) return 1; else return 0;}int quicktime_match_24(char *input, char *output){ if(input[0] == output[0] && input[1] == output[1] && input[2] == output[2]) return 1; else return 0;}static void do_hexdump(uint8_t * data, int len, int linebreak, FILE * f) { int i; int bytes_written = 0; int imax; while(bytes_written < len) { imax = (bytes_written + linebreak > len) ? len - bytes_written : linebreak; for(i = 0; i < imax; i++) fprintf(f, "%02x ", data[bytes_written + i]); for(i = imax; i < linebreak; i++) fprintf(f, " "); for(i = 0; i < imax; i++) { if(!(data[bytes_written + i] & 0x80) && (data[bytes_written + i] >= 32)) fprintf(f, "%c", data[bytes_written + i]); else fprintf(f, "."); } bytes_written += imax; fprintf(f, "\n"); } }void lqt_hexdump(uint8_t * data, int len, int linebreak) { do_hexdump(data, len, linebreak, stderr); }void lqt_hexdump_stdout(uint8_t * data, int len, int linebreak) { do_hexdump(data, len, linebreak, stdout); }void lqt_dump_time(uint64_t t) { time_t ti; struct tm tm; /* 2082844800 = seconds between 1/1/04 and 1/1/70 */ ti = t - 2082844800; localtime_r(&ti, &tm); tm.tm_mon++; tm.tm_mday++; printf("%04d-%02d-%02d %02d:%02d:%02d (%"PRId64")", tm.tm_year+1900, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, t); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?