diff options
Diffstat (limited to 'image/codecs/indeo/vlc.cpp')
-rw-r--r-- | image/codecs/indeo/vlc.cpp | 219 |
1 files changed, 108 insertions, 111 deletions
diff --git a/image/codecs/indeo/vlc.cpp b/image/codecs/indeo/vlc.cpp index 0328bd8b70..e526a0998a 100644 --- a/image/codecs/indeo/vlc.cpp +++ b/image/codecs/indeo/vlc.cpp @@ -32,7 +32,7 @@ #include "common/util.h" namespace Image { - namespace Indeo { +namespace Indeo { /** * Quicksort @@ -42,62 +42,62 @@ namespace Image { */ #define AV_QSORT(p, num, type, cmp) do {\ void *stack[64][2];\ - int sp= 1;\ + int sp = 1;\ stack[0][0] = p;\ stack[0][1] = (p)+(num)-1;\ while(sp){\ - type *start= (type *)stack[--sp][0];\ - type *end = (type *)stack[ sp][1];\ - while(start < end){\ - if(start < end-1) {\ - int checksort=0;\ - type *right = end-2;\ - type *left = start+1;\ - type *mid = start + ((end-start)>>1);\ + type *start = (type *)stack[--sp][0];\ + type *end = (type *)stack[ sp][1];\ + while (start < end) {\ + if (start < end-1) {\ + int checksort = 0;\ + type *right = end - 2;\ + type *left = start + 1;\ + type *mid = start + ((end - start) >> 1);\ if(cmp(start, end) > 0) {\ - if(cmp( end, mid) > 0) FFSWAP(type, *start, *mid);\ - else FFSWAP(type, *start, *end);\ - }else{\ - if(cmp(start, mid) > 0) FFSWAP(type, *start, *mid);\ - else checksort= 1;\ + if(cmp( end, mid) > 0) SWAP(*start, *mid);\ + else SWAP(*start, *end);\ + } else {\ + if(cmp(start, mid) > 0) SWAP(*start, *mid);\ + else checksort = 1;\ }\ - if(cmp(mid, end) > 0){ \ - FFSWAP(type, *mid, *end);\ - checksort=0;\ + if (cmp(mid, end) > 0) { \ + SWAP(*mid, *end);\ + checksort = 0;\ }\ - if(start == end-2) break;\ - FFSWAP(type, end[-1], *mid);\ - while(left <= right){\ - while(left<=right && cmp(left, end-1) < 0)\ + if(start == end - 2) break;\ + SWAP(end[-1], *mid);\ + while (left <= right) {\ + while (left<=right && cmp(left, end - 1) < 0)\ left++;\ - while(left<=right && cmp(right, end-1) > 0)\ + while (left<=right && cmp(right, end - 1) > 0)\ right--;\ - if(left <= right){\ - FFSWAP(type, *left, *right);\ + if (left <= right) {\ + SWAP(*left, *right);\ left++;\ right--;\ }\ }\ - FFSWAP(type, end[-1], *left);\ - if(checksort && (mid == left-1 || mid == left)){\ + SWAP(end[-1], *left);\ + if(checksort && (mid == left - 1 || mid == left)){\ mid= start;\ while(mid<end && cmp(mid, mid+1) <= 0)\ mid++;\ if(mid==end)\ break;\ }\ - if(end-left < left-start){\ - stack[sp ][0]= start;\ - stack[sp++][1]= right;\ - start = left+1;\ - }else{\ - stack[sp ][0]= left+1;\ - stack[sp++][1]= end;\ + if (end - left < left - start){\ + stack[sp ][0] = start;\ + stack[sp++][1] = right;\ + start = left + 1;\ + } else {\ + stack[sp ][0] = left+1;\ + stack[sp++][1] = end;\ end = right;\ }\ - }else{\ - if(cmp(start, end) > 0)\ - FFSWAP(type, *start, *end);\ + } else {\ + if (cmp(start, end) > 0)\ + SWAP(*start, *end);\ break;\ }\ }\ @@ -105,29 +105,29 @@ namespace Image { } while (0) #define COPY(condition)\ - for (i = 0; i < nb_codes; i++) { \ - buf[j].bits = getData(p_bits, i, bits_wrap, bits_size); \ + for (i = 0; i < nbCodes; i++) { \ + buf[j].bits = getData(p_bits, i, bitsWrap, bitsSize); \ if (!(condition)) \ continue; \ - if (buf[j].bits > 3*nb_bits || buf[j].bits>32) { \ + if (buf[j].bits > (3 * nbBits) || buf[j].bits > 32) { \ warning("Too long VLC (%d) in init_vlc", buf[j].bits); \ if (!(flags & INIT_VLC_USE_NEW_STATIC)) \ free(buf); \ return -1; \ } \ - buf[j].code = getData(codes, i, codes_wrap, codes_size); \ - if (buf[j].code >= (1LL<<buf[j].bits)) { \ + buf[j].code = getData(codes, i, codesWrap, codesSize); \ + if (buf[j].code >= (1LL << buf[j].bits)) { \ warning("Invalid code %x for %d in init_vlc", buf[j].code, i); \ if (!(flags & INIT_VLC_USE_NEW_STATIC)) \ free(buf); \ return -1; \ } \ if (flags & INIT_VLC_LE) \ - buf[j].code = bitswap32(buf[j].code); \ + buf[j].code = bitswap32(buf[j].code); \ else \ buf[j].code <<= 32 - buf[j].bits; \ if (symbols) \ - buf[j].symbol = getData(symbols, i, symbols_wrap, symbols_size); \ + buf[j].symbol = getData(symbols, i, symbolsWrap, symbolsSize); \ else \ buf[j].symbol = i; \ j++; \ @@ -135,55 +135,55 @@ namespace Image { /*------------------------------------------------------------------------*/ -VLC::VLC() : _bits(0), _table_size(0), _table_allocated(0), _table(nullptr) { +VLC::VLC() : _bits(0), _tableSize(0), _tableAllocated(0), _table(nullptr) { } -int VLC::init_vlc(int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, - const void *codes, int codes_wrap, int codes_size, int flags) { - return init_vlc(nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, - codes_size, nullptr, 0, 0, flags); +int VLC::init_vlc(int nbBits, int nbCodes, const void *bits, int bitsWrap, int bitsSize, + const void *codes, int codesWrap, int codesSize, int flags) { + return init_vlc(nbBits, nbCodes, bits, bitsWrap, bitsSize, codes, codesWrap, + codesSize, nullptr, 0, 0, flags); } -int VLC::init_vlc(int nb_bits, int nb_codes, const void *p_bits, int bits_wrap, - int bits_size, const void *codes, int codes_wrap, int codes_size, - const void *symbols, int symbols_wrap, int symbols_size, int flags) { +int VLC::init_vlc(int nbBits, int nbCodes, const void *p_bits, int bitsWrap, + int bitsSize, const void *codes, int codesWrap, int codesSize, + const void *symbols, int symbolsWrap, int symbolsSize, int flags) { VLCcode *buf; int i, j, ret; VLCcode localbuf[1500]; // the maximum currently needed is 1296 by rv34 VLC localvlc, *vlc; vlc = this; - vlc->_bits = nb_bits; + vlc->_bits = nbBits; if (flags & INIT_VLC_USE_NEW_STATIC) { - assert((nb_codes + 1) <= FF_ARRAY_ELEMS(localbuf)); + assert((nbCodes + 1) <= FF_ARRAY_ELEMS(localbuf)); buf = localbuf; localvlc = *this; vlc = &localvlc; - vlc->_table_size = 0; + vlc->_tableSize = 0; } else { vlc->_table = NULL; - vlc->_table_allocated = 0; - vlc->_table_size = 0; + vlc->_tableAllocated = 0; + vlc->_tableSize = 0; - buf = (VLCcode *)avMallocArray((nb_codes + 1), sizeof(VLCcode)); + buf = (VLCcode *)avMallocArray((nbCodes + 1), sizeof(VLCcode)); assert(buf); } - assert(symbols_size <= 2 || !symbols); + assert(symbolsSize <= 2 || !symbols); j = 0; - COPY(buf[j].bits > nb_bits); + COPY(buf[j].bits > nbBits); // qsort is the slowest part of init_vlc, and could probably be improved or avoided - AV_QSORT(buf, j, VLCcode, compare_vlcspec); - COPY(buf[j].bits && buf[j].bits <= nb_bits); - nb_codes = j; + AV_QSORT(buf, j, VLCcode, compareVlcSpec); + COPY(buf[j].bits && buf[j].bits <= nbBits); + nbCodes = j; - ret = vlc->build_table(nb_bits, nb_codes, buf, flags); + ret = vlc->buildTable(nbBits, nbCodes, buf, flags); if (flags & INIT_VLC_USE_NEW_STATIC) { - if (vlc->_table_size != vlc->_table_allocated) - warning("needed %d had %d", vlc->_table_size, vlc->_table_allocated); + if (vlc->_tableSize != vlc->_tableAllocated) + warning("needed %d had %d", vlc->_tableSize, vlc->_tableAllocated); assert(ret >= 0); *this = *vlc; @@ -198,43 +198,43 @@ int VLC::init_vlc(int nb_bits, int nb_codes, const void *p_bits, int bits_wrap, return 0; } -void VLC::ff_free_vlc() { +void VLC::freeVlc() { free(_table); } -int VLC::compare_vlcspec(const void *a, const void *b) { +int VLC::compareVlcSpec(const void *a, const void *b) { const VLCcode *sa = (VLCcode *)a, *sb = (VLCcode *)b; return (sa->code >> 1) - (sb->code >> 1); } -int VLC::build_table(int table_nb_bits, int nb_codes, +int VLC::buildTable(int tableNbBits, int nbCodes, VLCcode *codes, int flags) { VLC *vlc = this; - int table_size, table_index, index, code_prefix, symbol, subtable_bits; + int tableSize, tableIndex, index, codePrefix, symbol, subtableBits; int i, j, k, n, nb, inc; uint32 code; VLC_TYPE (*table)[2]; - table_size = 1 << table_nb_bits; - if (table_nb_bits > 30) + tableSize = 1 << tableNbBits; + if (tableNbBits > 30) return -1; - table_index = alloc_table(table_size, flags & INIT_VLC_USE_NEW_STATIC); - //warning("new table index=%d size=%d", table_index, table_size); - if (table_index < 0) - return table_index; - table = &vlc->_table[table_index]; + tableIndex = allocTable(tableSize, flags & INIT_VLC_USE_NEW_STATIC); + //warning("new table index=%d size=%d", tableIndex, tableSize); + if (tableIndex < 0) + return tableIndex; + table = &vlc->_table[tableIndex]; // first pass: map codes and compute auxiliary table sizes - for (i = 0; i < nb_codes; i++) { + for (i = 0; i < nbCodes; i++) { n = codes[i].bits; code = codes[i].code; symbol = codes[i].symbol; //warning("i=%d n=%d code=0x%x", i, n, code); - if (n <= table_nb_bits) { + if (n <= tableNbBits) { // no need to add another table - j = code >> (32 - table_nb_bits); - nb = 1 << (table_nb_bits - n); + j = code >> (32 - tableNbBits); + nb = 1 << (tableNbBits - n); inc = 1; if (flags & INIT_VLC_LE) { j = bitswap32(code); @@ -255,70 +255,67 @@ int VLC::build_table(int table_nb_bits, int nb_codes, } } else { // fill auxiliary table recursively - n -= table_nb_bits; - code_prefix = code >> (32 - table_nb_bits); - subtable_bits = n; + n -= tableNbBits; + codePrefix = code >> (32 - tableNbBits); + subtableBits = n; codes[i].bits = n; - codes[i].code = code << table_nb_bits; - for (k = i + 1; k < nb_codes; k++) { - n = codes[k].bits - table_nb_bits; + codes[i].code = code << tableNbBits; + for (k = i + 1; k < nbCodes; k++) { + n = codes[k].bits - tableNbBits; if (n <= 0) break; code = codes[k].code; - if (code >> (32 - table_nb_bits) != (uint)code_prefix) + if (code >> (32 - tableNbBits) != (uint)codePrefix) break; codes[k].bits = n; - codes[k].code = code << table_nb_bits; - subtable_bits = MAX(subtable_bits, n); + codes[k].code = code << tableNbBits; + subtableBits = MAX(subtableBits, n); } - subtable_bits = MIN(subtable_bits, table_nb_bits); - j = (flags & INIT_VLC_LE) ? bitswap32(code_prefix) >> (32 - table_nb_bits) : code_prefix; - table[j][1] = -subtable_bits; - //warning("%4x: n=%d (subtable)", j, codes[i].bits + table_nb_bits); - index = vlc->build_table(subtable_bits, k - i, codes + i, flags); + subtableBits = MIN(subtableBits, tableNbBits); + j = (flags & INIT_VLC_LE) ? bitswap32(codePrefix) >> (32 - tableNbBits) : codePrefix; + table[j][1] = -subtableBits; + //warning("%4x: n=%d (subtable)", j, codes[i].bits + tableNbBits); + index = vlc->buildTable(subtableBits, k - i, codes + i, flags); if (index < 0) return index; // note: realloc has been done, so reload tables - table = (VLC_TYPE (*)[2])&vlc->_table[table_index]; + table = (VLC_TYPE (*)[2])&vlc->_table[tableIndex]; table[j][0] = index; //code i = k - 1; } } - for (i = 0; i < table_size; i++) { + for (i = 0; i < tableSize; i++) { if (table[i][1] == 0) //bits table[i][0] = -1; //codes } - return table_index; + return tableIndex; } -int VLC::alloc_table(int size, int use_static) { +int VLC::allocTable(int size, int useStatic) { VLC *vlc = this; - int index = vlc->_table_size; + int index = vlc->_tableSize; - vlc->_table_size += size; - if (vlc->_table_size > vlc->_table_allocated) { + vlc->_tableSize += size; + if (vlc->_tableSize > vlc->_tableAllocated) { // cannot do anything, init_vlc() is used with too little memory - assert(!use_static); + assert(!useStatic); - vlc->_table_allocated += (1 << vlc->_bits); - vlc->_table = (int16(*)[2])avReallocF(vlc->_table, vlc->_table_allocated, sizeof(VLC_TYPE) * 2); + vlc->_tableAllocated += (1 << vlc->_bits); + vlc->_table = (int16(*)[2])avReallocF(vlc->_table, vlc->_tableAllocated, sizeof(VLC_TYPE) * 2); if (!vlc->_table) { - vlc->_table_allocated = 0; - vlc->_table_size = 0; + vlc->_tableAllocated = 0; + vlc->_tableSize = 0; return -2; } - memset(vlc->_table + vlc->_table_allocated - (1 << vlc->_bits), 0, sizeof(VLC_TYPE) * 2 << vlc->_bits); + memset(vlc->_table + vlc->_tableAllocated - (1 << vlc->_bits), 0, sizeof(VLC_TYPE) * 2 << vlc->_bits); } return index; } -/** -* VLC decoding -*/ uint VLC::getData(const void *table, uint idx, uint wrap, uint size) { const uint8 *ptr = (const uint8 *)table + idx * wrap; |