You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

435 lines
16KB

  1. /*
  2. * Common bit i/o utils
  3. * Copyright (c) 2000, 2001 Fabrice Bellard
  4. * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
  5. * Copyright (c) 2010 Loren Merritt
  6. *
  7. * alternative bitstream reader & writer by Michael Niedermayer <michaelni@gmx.at>
  8. *
  9. * This file is part of FFmpeg.
  10. *
  11. * FFmpeg is free software; you can redistribute it and/or
  12. * modify it under the terms of the GNU Lesser General Public
  13. * License as published by the Free Software Foundation; either
  14. * version 2.1 of the License, or (at your option) any later version.
  15. *
  16. * FFmpeg is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19. * Lesser General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Lesser General Public
  22. * License along with FFmpeg; if not, write to the Free Software
  23. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  24. */
  25. /**
  26. * @file
  27. * bitstream api.
  28. */
  29. #include "libavutil/avassert.h"
  30. #include "libavutil/qsort.h"
  31. #include "avcodec.h"
  32. #include "internal.h"
  33. #include "mathops.h"
  34. #include "put_bits.h"
  35. #include "vlc.h"
  36. const uint8_t ff_log2_run[41]={
  37. 0, 0, 0, 0, 1, 1, 1, 1,
  38. 2, 2, 2, 2, 3, 3, 3, 3,
  39. 4, 4, 5, 5, 6, 6, 7, 7,
  40. 8, 9,10,11,12,13,14,15,
  41. 16,17,18,19,20,21,22,23,
  42. 24,
  43. };
  44. #if FF_API_AVPRIV_PUT_BITS
  45. void avpriv_align_put_bits(PutBitContext *s)
  46. {
  47. align_put_bits(s);
  48. }
  49. void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
  50. {
  51. ff_copy_bits(pb, src, length);
  52. }
  53. #endif
  54. void ff_put_string(PutBitContext *pb, const char *string, int terminate_string)
  55. {
  56. while (*string) {
  57. put_bits(pb, 8, *string);
  58. string++;
  59. }
  60. if (terminate_string)
  61. put_bits(pb, 8, 0);
  62. }
  63. void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
  64. {
  65. int words = length >> 4;
  66. int bits = length & 15;
  67. int i;
  68. if (length == 0)
  69. return;
  70. av_assert0(length <= put_bits_left(pb));
  71. if (CONFIG_SMALL || words < 16 || put_bits_count(pb) & 7) {
  72. for (i = 0; i < words; i++)
  73. put_bits(pb, 16, AV_RB16(src + 2 * i));
  74. } else {
  75. for (i = 0; put_bits_count(pb) & 31; i++)
  76. put_bits(pb, 8, src[i]);
  77. flush_put_bits(pb);
  78. memcpy(put_bits_ptr(pb), src + i, 2 * words - i);
  79. skip_put_bytes(pb, 2 * words - i);
  80. }
  81. put_bits(pb, bits, AV_RB16(src + 2 * words) >> (16 - bits));
  82. }
  83. /* VLC decoding */
  84. #define GET_DATA(v, table, i, wrap, size) \
  85. { \
  86. const uint8_t *ptr = (const uint8_t *)table + i * wrap; \
  87. switch(size) { \
  88. case 1: \
  89. v = *(const uint8_t *)ptr; \
  90. break; \
  91. case 2: \
  92. v = *(const uint16_t *)ptr; \
  93. break; \
  94. case 4: \
  95. default: \
  96. av_assert1(size == 4); \
  97. v = *(const uint32_t *)ptr; \
  98. break; \
  99. } \
  100. }
  101. static int alloc_table(VLC *vlc, int size, int use_static)
  102. {
  103. int index = vlc->table_size;
  104. vlc->table_size += size;
  105. if (vlc->table_size > vlc->table_allocated) {
  106. if (use_static)
  107. abort(); // cannot do anything, init_vlc() is used with too little memory
  108. vlc->table_allocated += (1 << vlc->bits);
  109. vlc->table = av_realloc_f(vlc->table, vlc->table_allocated, sizeof(VLC_TYPE) * 2);
  110. if (!vlc->table) {
  111. vlc->table_allocated = 0;
  112. vlc->table_size = 0;
  113. return AVERROR(ENOMEM);
  114. }
  115. memset(vlc->table + vlc->table_allocated - (1 << vlc->bits), 0, sizeof(VLC_TYPE) * 2 << vlc->bits);
  116. }
  117. return index;
  118. }
  119. #define LOCALBUF_ELEMS 1500 // the maximum currently needed is 1296 by rv34
  120. typedef struct VLCcode {
  121. uint8_t bits;
  122. VLC_TYPE symbol;
  123. /** codeword, with the first bit-to-be-read in the msb
  124. * (even if intended for a little-endian bitstream reader) */
  125. uint32_t code;
  126. } VLCcode;
  127. static int vlc_common_init(VLC *vlc_arg, int nb_bits, int nb_codes,
  128. VLC **vlc, VLC *localvlc, VLCcode **buf,
  129. int flags)
  130. {
  131. *vlc = vlc_arg;
  132. (*vlc)->bits = nb_bits;
  133. if (flags & INIT_VLC_USE_NEW_STATIC) {
  134. av_assert0(nb_codes <= LOCALBUF_ELEMS);
  135. *localvlc = *vlc_arg;
  136. *vlc = localvlc;
  137. (*vlc)->table_size = 0;
  138. } else {
  139. (*vlc)->table = NULL;
  140. (*vlc)->table_allocated = 0;
  141. (*vlc)->table_size = 0;
  142. }
  143. if (nb_codes > LOCALBUF_ELEMS) {
  144. *buf = av_malloc_array(nb_codes, sizeof(VLCcode));
  145. if (!*buf)
  146. return AVERROR(ENOMEM);
  147. }
  148. return 0;
  149. }
  150. static int compare_vlcspec(const void *a, const void *b)
  151. {
  152. const VLCcode *sa = a, *sb = b;
  153. return (sa->code >> 1) - (sb->code >> 1);
  154. }
  155. /**
  156. * Build VLC decoding tables suitable for use with get_vlc().
  157. *
  158. * @param vlc the context to be initialized
  159. *
  160. * @param table_nb_bits max length of vlc codes to store directly in this table
  161. * (Longer codes are delegated to subtables.)
  162. *
  163. * @param nb_codes number of elements in codes[]
  164. *
  165. * @param codes descriptions of the vlc codes
  166. * These must be ordered such that codes going into the same subtable are contiguous.
  167. * Sorting by VLCcode.code is sufficient, though not necessary.
  168. */
  169. static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
  170. VLCcode *codes, int flags)
  171. {
  172. int table_size, table_index, index, code_prefix, symbol, subtable_bits;
  173. int i, j, k, n, nb, inc;
  174. uint32_t code;
  175. volatile VLC_TYPE (* volatile table)[2]; // the double volatile is needed to prevent an internal compiler error in gcc 4.2
  176. if (table_nb_bits > 30)
  177. return AVERROR(EINVAL);
  178. table_size = 1 << table_nb_bits;
  179. table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC);
  180. ff_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size);
  181. if (table_index < 0)
  182. return table_index;
  183. table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index];
  184. /* first pass: map codes and compute auxiliary table sizes */
  185. for (i = 0; i < nb_codes; i++) {
  186. n = codes[i].bits;
  187. code = codes[i].code;
  188. symbol = codes[i].symbol;
  189. ff_dlog(NULL, "i=%d n=%d code=0x%"PRIx32"\n", i, n, code);
  190. if (n <= table_nb_bits) {
  191. /* no need to add another table */
  192. j = code >> (32 - table_nb_bits);
  193. nb = 1 << (table_nb_bits - n);
  194. inc = 1;
  195. if (flags & INIT_VLC_OUTPUT_LE) {
  196. j = bitswap_32(code);
  197. inc = 1 << n;
  198. }
  199. for (k = 0; k < nb; k++) {
  200. int bits = table[j][1];
  201. int oldsym = table[j][0];
  202. ff_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n);
  203. if ((bits || oldsym) && (bits != n || oldsym != symbol)) {
  204. av_log(NULL, AV_LOG_ERROR, "incorrect codes\n");
  205. return AVERROR_INVALIDDATA;
  206. }
  207. table[j][1] = n; //bits
  208. table[j][0] = symbol;
  209. j += inc;
  210. }
  211. } else {
  212. /* fill auxiliary table recursively */
  213. n -= table_nb_bits;
  214. code_prefix = code >> (32 - table_nb_bits);
  215. subtable_bits = n;
  216. codes[i].bits = n;
  217. codes[i].code = code << table_nb_bits;
  218. for (k = i+1; k < nb_codes; k++) {
  219. n = codes[k].bits - table_nb_bits;
  220. if (n <= 0)
  221. break;
  222. code = codes[k].code;
  223. if (code >> (32 - table_nb_bits) != code_prefix)
  224. break;
  225. codes[k].bits = n;
  226. codes[k].code = code << table_nb_bits;
  227. subtable_bits = FFMAX(subtable_bits, n);
  228. }
  229. subtable_bits = FFMIN(subtable_bits, table_nb_bits);
  230. j = (flags & INIT_VLC_OUTPUT_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix;
  231. table[j][1] = -subtable_bits;
  232. ff_dlog(NULL, "%4x: n=%d (subtable)\n",
  233. j, codes[i].bits + table_nb_bits);
  234. index = build_table(vlc, subtable_bits, k-i, codes+i, flags);
  235. if (index < 0)
  236. return index;
  237. /* note: realloc has been done, so reload tables */
  238. table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index];
  239. table[j][0] = index; //code
  240. if (table[j][0] != index) {
  241. avpriv_request_sample(NULL, "strange codes");
  242. return AVERROR_PATCHWELCOME;
  243. }
  244. i = k-1;
  245. }
  246. }
  247. for (i = 0; i < table_size; i++) {
  248. if (table[i][1] == 0) //bits
  249. table[i][0] = -1; //codes
  250. }
  251. return table_index;
  252. }
  253. static int vlc_common_end(VLC *vlc, int nb_bits, int nb_codes, VLCcode *codes,
  254. int flags, VLC *vlc_arg, VLCcode localbuf[LOCALBUF_ELEMS])
  255. {
  256. int ret = build_table(vlc, nb_bits, nb_codes, codes, flags);
  257. if (flags & INIT_VLC_USE_NEW_STATIC) {
  258. if (vlc->table_size != vlc->table_allocated &&
  259. !(flags & (INIT_VLC_STATIC_OVERLONG & ~INIT_VLC_USE_NEW_STATIC)))
  260. av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated);
  261. av_assert0(ret >= 0);
  262. *vlc_arg = *vlc;
  263. } else {
  264. if (codes != localbuf)
  265. av_free(codes);
  266. if (ret < 0) {
  267. av_freep(&vlc->table);
  268. return ret;
  269. }
  270. }
  271. return 0;
  272. }
  273. /* Build VLC decoding tables suitable for use with get_vlc().
  274. 'nb_bits' sets the decoding table size (2^nb_bits) entries. The
  275. bigger it is, the faster is the decoding. But it should not be too
  276. big to save memory and L1 cache. '9' is a good compromise.
  277. 'nb_codes' : number of vlcs codes
  278. 'bits' : table which gives the size (in bits) of each vlc code.
  279. 'codes' : table which gives the bit pattern of of each vlc code.
  280. 'symbols' : table which gives the values to be returned from get_vlc().
  281. 'xxx_wrap' : give the number of bytes between each entry of the
  282. 'bits' or 'codes' tables.
  283. 'xxx_size' : gives the number of bytes of each entry of the 'bits'
  284. or 'codes' tables. Currently 1,2 and 4 are supported.
  285. 'wrap' and 'size' make it possible to use any memory configuration and types
  286. (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables.
  287. */
  288. int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes,
  289. const void *bits, int bits_wrap, int bits_size,
  290. const void *codes, int codes_wrap, int codes_size,
  291. const void *symbols, int symbols_wrap, int symbols_size,
  292. int flags)
  293. {
  294. VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf;
  295. int i, j, ret;
  296. VLC localvlc, *vlc;
  297. ret = vlc_common_init(vlc_arg, nb_bits, nb_codes, &vlc, &localvlc,
  298. &buf, flags);
  299. if (ret < 0)
  300. return ret;
  301. av_assert0(symbols_size <= 2 || !symbols);
  302. j = 0;
  303. #define COPY(condition)\
  304. for (i = 0; i < nb_codes; i++) { \
  305. unsigned len; \
  306. GET_DATA(len, bits, i, bits_wrap, bits_size); \
  307. if (!(condition)) \
  308. continue; \
  309. if (len > 3*nb_bits || len > 32) { \
  310. av_log(NULL, AV_LOG_ERROR, "Too long VLC (%u) in init_vlc\n", len);\
  311. if (buf != localbuf) \
  312. av_free(buf); \
  313. return AVERROR(EINVAL); \
  314. } \
  315. buf[j].bits = len; \
  316. GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \
  317. if (buf[j].code >= (1LL<<buf[j].bits)) { \
  318. av_log(NULL, AV_LOG_ERROR, "Invalid code %"PRIx32" for %d in " \
  319. "init_vlc\n", buf[j].code, i); \
  320. if (buf != localbuf) \
  321. av_free(buf); \
  322. return AVERROR(EINVAL); \
  323. } \
  324. if (flags & INIT_VLC_INPUT_LE) \
  325. buf[j].code = bitswap_32(buf[j].code); \
  326. else \
  327. buf[j].code <<= 32 - buf[j].bits; \
  328. if (symbols) \
  329. GET_DATA(buf[j].symbol, symbols, i, symbols_wrap, symbols_size) \
  330. else \
  331. buf[j].symbol = i; \
  332. j++; \
  333. }
  334. COPY(len > nb_bits);
  335. // qsort is the slowest part of init_vlc, and could probably be improved or avoided
  336. AV_QSORT(buf, j, struct VLCcode, compare_vlcspec);
  337. COPY(len && len <= nb_bits);
  338. nb_codes = j;
  339. return vlc_common_end(vlc, nb_bits, nb_codes, buf,
  340. flags, vlc_arg, localbuf);
  341. }
  342. int ff_init_vlc_from_lengths(VLC *vlc_arg, int nb_bits, int nb_codes,
  343. const int8_t *lens, int lens_wrap,
  344. const void *symbols, int symbols_wrap, int symbols_size,
  345. int offset, int flags, void *logctx)
  346. {
  347. VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf;
  348. VLC localvlc, *vlc;
  349. uint64_t code;
  350. int ret, j, len_max = FFMIN(32, 3 * nb_bits);
  351. ret = vlc_common_init(vlc_arg, nb_bits, nb_codes, &vlc, &localvlc,
  352. &buf, flags);
  353. if (ret < 0)
  354. return ret;
  355. j = code = 0;
  356. for (int i = 0; i < nb_codes; i++, lens += lens_wrap) {
  357. int len = *lens;
  358. if (len > 0) {
  359. unsigned sym;
  360. buf[j].bits = len;
  361. if (symbols)
  362. GET_DATA(sym, symbols, i, symbols_wrap, symbols_size)
  363. else
  364. sym = i;
  365. buf[j].symbol = sym + offset;
  366. buf[j++].code = code;
  367. } else if (len < 0) {
  368. len = -len;
  369. } else
  370. continue;
  371. if (len > len_max || code & ((1U << (32 - len)) - 1)) {
  372. av_log(logctx, AV_LOG_ERROR, "Invalid VLC (length %u)\n", len);
  373. goto fail;
  374. }
  375. code += 1U << (32 - len);
  376. if (code > UINT32_MAX + 1ULL) {
  377. av_log(logctx, AV_LOG_ERROR, "Overdetermined VLC tree\n");
  378. goto fail;
  379. }
  380. }
  381. return vlc_common_end(vlc, nb_bits, j, buf,
  382. flags, vlc_arg, localbuf);
  383. fail:
  384. if (buf != localbuf)
  385. av_free(buf);
  386. return AVERROR_INVALIDDATA;
  387. }
  388. void ff_free_vlc(VLC *vlc)
  389. {
  390. av_freep(&vlc->table);
  391. }