summaryrefslogtreecommitdiff
path: root/libavcodec/proresdata.c
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2011-12-10 13:40:39 +0100
committerKostya Shishkov <kostya.shishkov@gmail.com>2012-02-15 07:14:45 +0100
commit8835c2c829d84d99e237e63f432b6e9f54e2ecf6 (patch)
treee837a68d5bbfdf78229e219173e507e7e4888cfc /libavcodec/proresdata.c
parent3ec623c22f87b42c4f5a68851e4f27a5751d7dd8 (diff)
prores: move data shared between decoder and encoder to common file
Diffstat (limited to 'libavcodec/proresdata.c')
-rw-r--r--libavcodec/proresdata.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/libavcodec/proresdata.c b/libavcodec/proresdata.c
new file mode 100644
index 0000000000..fcaf32a1af
--- /dev/null
+++ b/libavcodec/proresdata.c
@@ -0,0 +1,72 @@
+/*
+ * Apple ProRes compatible decoder
+ *
+ * Copyright (c) 2010-2011 Maxim Poliakovski
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "proresdata.h"
+
+const uint8_t ff_prores_progressive_scan[64] = {
+ 0, 1, 8, 9, 2, 3, 10, 11,
+ 16, 17, 24, 25, 18, 19, 26, 27,
+ 4, 5, 12, 20, 13, 6, 7, 14,
+ 21, 28, 29, 22, 15, 23, 30, 31,
+ 32, 33, 40, 48, 41, 34, 35, 42,
+ 49, 56, 57, 50, 43, 36, 37, 44,
+ 51, 58, 59, 52, 45, 38, 39, 46,
+ 53, 60, 61, 54, 47, 55, 62, 63
+};
+
+const uint8_t ff_prores_interlaced_scan[64] = {
+ 0, 8, 1, 9, 16, 24, 17, 25,
+ 2, 10, 3, 11, 18, 26, 19, 27,
+ 32, 40, 33, 34, 41, 48, 56, 49,
+ 42, 35, 43, 50, 57, 58, 51, 59,
+ 4, 12, 5, 6, 13, 20, 28, 21,
+ 14, 7, 15, 22, 29, 36, 44, 37,
+ 30, 23, 31, 38, 45, 52, 60, 53,
+ 46, 39, 47, 54, 61, 62, 55, 63
+};
+
+
+const uint8_t ff_prores_dc_codebook[4] = {
+ 0x04, // rice_order = 0, exp_golomb_order = 1, switch_bits = 0
+ 0x28, // rice_order = 1, exp_golomb_order = 2, switch_bits = 0
+ 0x4D, // rice_order = 2, exp_golomb_order = 3, switch_bits = 1
+ 0x70 // rice_order = 3, exp_golomb_order = 4, switch_bits = 0
+};
+
+const uint8_t ff_prores_ac_codebook[7] = {
+ 0x04, // rice_order = 0, exp_golomb_order = 1, switch_bits = 0
+ 0x28, // rice_order = 1, exp_golomb_order = 2, switch_bits = 0
+ 0x4C, // rice_order = 2, exp_golomb_order = 3, switch_bits = 0
+ 0x05, // rice_order = 0, exp_golomb_order = 1, switch_bits = 1
+ 0x29, // rice_order = 1, exp_golomb_order = 2, switch_bits = 1
+ 0x06, // rice_order = 0, exp_golomb_order = 1, switch_bits = 2
+ 0x0A, // rice_order = 0, exp_golomb_order = 2, switch_bits = 2
+};
+
+/**
+ * Lookup tables for adaptive switching between codebooks
+ * according with previous run/level value.
+ */
+const uint8_t ff_prores_run_to_cb_index[16] =
+ { 5, 5, 3, 3, 0, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 2 };
+
+const uint8_t ff_prores_lev_to_cb_index[10] = { 0, 6, 3, 5, 0, 1, 1, 1, 1, 2 };