aboutsummaryrefslogtreecommitdiff
path: root/Src/f263/Header.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/f263/Header.cpp')
-rw-r--r--Src/f263/Header.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/Src/f263/Header.cpp b/Src/f263/Header.cpp
new file mode 100644
index 00000000..727cf574
--- /dev/null
+++ b/Src/f263/Header.cpp
@@ -0,0 +1,92 @@
+#include "Decoder.h"
+
+
+/*
+ * decode headers from one input stream
+ * until an End of Sequence or picture start code
+ * is found
+ */
+int Decoder::getheader()
+{
+ unsigned int sorenson_version;
+
+ /* look for startcode */
+ startcode();
+ buffer.getbits(PSC_LENGTH);
+ sorenson_version = buffer.getbits(5);
+ if (sorenson_version <= 1)
+ {
+ escapemode=sorenson_version;
+ getpicturehdr();
+ }
+ else
+ return 0;
+
+ return 1;
+}
+
+/* align to start of next startcode */
+
+void Decoder::startcode()
+{
+ /* search for new picture start code */
+ while (buffer.showbits(PSC_LENGTH)!=1l)
+ buffer.flushbits(1);
+}
+
+/* decode picture header */
+
+void Decoder::getpicturehdr()
+{
+ int pei, tmp;
+
+ buffer.getbits(8);
+
+ tmp = buffer.getbits(3);
+ switch(tmp)
+ {
+ case 0:
+ horizontal_size = buffer.getbits(8);
+ vertical_size = buffer.getbits(8);
+ break;
+ case 1:
+ horizontal_size = buffer.getbits(16);
+ vertical_size = buffer.getbits(16);
+ break;
+ case 2:
+ horizontal_size = 352;
+ vertical_size = 288;
+ break;
+ case 3:
+ horizontal_size = 176;
+ vertical_size = 144;
+ break;
+ case 4:
+ horizontal_size = 128;
+ vertical_size = 96;
+ break;
+ case 5:
+ horizontal_size = 320;
+ vertical_size = 240;
+ break;
+ case 6:
+ horizontal_size = 160;
+ vertical_size = 120;
+ break;
+
+ }
+ pict_type = buffer.getbits(2);
+ deblock=buffer.getbits(1); // deblocking flag
+ quant = buffer.getbits(5);
+
+ pei = buffer.getbits(1);
+pspare:
+ if (pei) {
+ /* extra info for possible future backward compatible additions */
+ buffer.getbits(8); /* not used */
+ pei = buffer.getbits(1);
+ if (pei) goto pspare; /* keep on reading pspare until pei=0 */
+ }
+
+}
+