+
+/**
+ * Parse a vlc code.
+ *
+ * \param gbc The getbit context structure.
+ * \param table The vlc tables to use.
+ * \param bits The number of bits which will be read at once.
+ *
+ * The \a bits parameter must be identical to the \a nb_bits value supplied to
+ * \ref init_vlc().
+ *
+ * \return The vlc code.
+ */
+int get_vlc(struct getbit_context *gbc, VLC_TYPE(*table)[2], int bits)
+{
+ int n, idx, nb_bits, code;
+
+ idx = show_bits(gbc, bits);
+ code = table[idx][0];
+ n = table[idx][1];
+ if (n < 0) {
+ skip_bits(gbc, bits);
+ nb_bits = -n;
+ idx = show_bits(gbc, nb_bits) + code;
+ code = table[idx][0];
+ n = table[idx][1];
+ if (n < 0) {
+ skip_bits(gbc, nb_bits);
+ nb_bits = -n;
+ idx = show_bits(gbc, nb_bits) + code;
+ code = table[idx][0];
+ n = table[idx][1];
+ }
+ }
+ skip_bits(gbc, n);
+ return code >= 0? code : -E_VLC;
+}