aboutsummaryrefslogtreecommitdiff
path: root/Src/f263/vlc.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/f263/vlc.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/f263/vlc.cpp')
-rw-r--r--Src/f263/vlc.cpp187
1 files changed, 187 insertions, 0 deletions
diff --git a/Src/f263/vlc.cpp b/Src/f263/vlc.cpp
new file mode 100644
index 00000000..6d645465
--- /dev/null
+++ b/Src/f263/vlc.cpp
@@ -0,0 +1,187 @@
+#include "Decoder.h"
+#include "vlc_table.h"
+
+static int PRED_type_EP[] = {0,0,1,1,1,2,2,2,3,3};
+static int QUANT_present_EP[] = {0,1,0,0,1,0,0,1,0,1};
+static int CBP_present_EP[] = {1,1,0,1,1,0,1,1,1,1};
+static VLCtab MBTYPEtabEP[] = {
+{-1,0}, {9,8}, {8,7}, {8,7}, {7,6}, {7,6}, {7,6}, {7,6},
+{4,5}, {4,5}, {4,5}, {4,5}, {4,5}, {4,5}, {4,5}, {4,5},
+{5,5}, {5,5}, {5,5}, {5,5}, {5,5}, {5,5}, {5,5}, {5,5},
+{6,5}, {6,5}, {6,5}, {6,5}, {6,5}, {6,5}, {6,5}, {6,5},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}
+};
+static int PRED_type_B[] = {0,0,1,1,1,2,2,2,3,3,3,4,4};
+static int QUANT_present_B[] = {0,1,0,0,1,0,0,1,0,0,1,0,1};
+static int CBPC_pattern_EI[] = {0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3};
+static int CBP_present_B[] = {1,1,0,1,1,0,1,1,0,1,1,1,1};
+static VLCtab MBTYPEtabB[] = {
+{-1,0}, {12,7}, {11,6}, {11,6}, {10,5}, {10,5}, {10,5}, {10,5},
+{1,4}, {1,4}, {1,4}, {1,4}, {1,4}, {1,4}, {1,4}, {1,4},
+{8,5}, {8,5}, {8,5}, {8,5}, {9,5}, {9,5}, {9,5}, {9,5},
+{4,5}, {4,5}, {4,5}, {4,5}, {7,5}, {7,5}, {7,5}, {7,5},
+{5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3},
+{5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3},
+{6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3},
+{6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}
+};
+
+static int QUANT_present_EI[] = {0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1};
+static VLCtab MBTYPEtabEI[] = {
+{-1,0}, {8,8}, {5,7}, {5,7}, {6,7}, {6,7}, {7,7}, {7,7},
+{-1,0}, {9,8}, {10,8}, {11,8}, {12,8}, {13,8}, {14,8}, {15,8},
+{4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4},
+{4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3},
+{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}
+};
+
+static int PRED_type_EI[] = {1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3};
+
+int Decoder::getTMNMV()
+{
+ int code;
+
+ if (buffer.getbits1())
+ {
+ return 0;
+ }
+
+ if ((code = buffer.showbits(12))>=512)
+ {
+ code = (code>>8) - 2;
+ buffer.flushbits(TMNMVtab0[code].len);
+
+ return TMNMVtab0[code].val;
+ }
+
+ if (code>=128)
+ {
+ code = (code>>2) -32;
+ buffer.flushbits(TMNMVtab1[code].len);
+
+
+ return TMNMVtab1[code].val;
+ }
+
+ if ((code-=5)<0)
+ {
+ fault=1;
+ return 0;
+ }
+
+ buffer.flushbits(TMNMVtab2[code].len);
+
+ return TMNMVtab2[code].val;
+}
+
+
+int Decoder::getMCBPC()
+{
+ int code;
+
+ code = buffer.showbits (13);
+
+ if (code >> 4 == 1)
+ {
+ /* macroblock stuffing */
+ buffer.flushbits (9);
+ return 255;
+ }
+ if (code == 0)
+ {
+ fault = 1;
+ return 0;
+ }
+ if (code >= 4096)
+ {
+ buffer.flushbits (1);
+ return 0;
+ }
+ if (code >= 16)
+ {
+ buffer.flushbits (MCBPCtab0[code >> 4].len);
+ return MCBPCtab0[code >> 4].val;
+ }
+ else
+ {
+ buffer.flushbits (MCBPCtab1[code - 8].len);
+ return MCBPCtab1[code - 8].val;
+ }
+}
+
+int Decoder::getMCBPCintra()
+{
+ int code;
+
+ code = buffer.showbits(9);
+
+ if (code == 1) {
+ /* macroblock stuffing */
+ buffer.flushbits(9);
+ return 255;
+ }
+
+ if (code < 8) {
+ fault = 1;
+ return 0;
+ }
+
+ code >>= 3;
+
+ if (code>=32)
+ {
+ buffer.flushbits(1);
+ return 3;
+ }
+
+ buffer.flushbits(MCBPCtabintra[code].len);
+
+ return MCBPCtabintra[code].val;
+}
+
+int Decoder::getCBPY()
+{
+ int code;
+
+ code = buffer.showbits(6);
+ if (code < 2) {
+ fault = 1;
+ return -1;
+ }
+
+ if (code>=48)
+ {
+ buffer.flushbits(2);
+ return 0;
+ }
+
+ buffer.flushbits(CBPYtab[code].len);
+
+ return CBPYtab[code].val;
+}