+ case subtitle_region::bpp2:
+// eDebug("2BPP");
+ entries = clut->entries_2bit;
+ memset(palette, 0, 4*sizeof(gRGB));
+ palette[0].a = 0xFF;
+ palette[2].r = palette[2].g = palette[2].b = 0xFF;
+ palette[3].r = palette[3].g = palette[3].b = 0x80;
+ break;
+ case subtitle_region::bpp4:
+// eDebug("4BPP");
+ entries = clut->entries_4bit;
+ memset(palette, 0, 16*sizeof(gRGB));
+ for (int i=0; i < 16; ++i)
+ {
+ if (!i)
+ palette[i].a = 0xFF;
+ else if (i & 1)
+ {
+ if (i & 8)
+ palette[i].r = 0x80;
+ if (i & 4)
+ palette[i].g = 0x80;
+ if (i & 2)
+ palette[i].b = 0x80;
+ }
+ else
+ {
+ if (i & 8)
+ palette[i].r = 0xFF;
+ if (i & 4)
+ palette[i].g = 0xFF;
+ if (i & 2)
+ palette[i].b = 0xFF;
+ }
+ }
+ break;
+ case subtitle_region::bpp8:
+// eDebug("8BPP");
+ entries = clut->entries_8bit;
+ memset(palette, 0, 16*sizeof(gRGB));
+ for (int i=0; i < 256; ++i)
+ {
+ switch (i & 17)
+ {
+ case 0: // b1 == 0 && b5 == 0
+ if (!(i & 14)) // b2 == 0 && b3 == 0 && b4 == 0
+ {
+ if (!(i & 224)) // b6 == 0 && b7 == 0 && b8 == 0
+ palette[i].a = 0xFF;
+ else
+ {
+ if (i & 128) // R = 100% x b8
+ palette[i].r = 0xFF;
+ if (i & 64) // G = 100% x b7
+ palette[i].g = 0xFF;
+ if (i & 32) // B = 100% x b6
+ palette[i].b = 0xFF;
+ palette[i].a = 0xBF; // T = 75%
+ }
+ break;
+ }
+ // fallthrough !!
+ case 16: // b1 == 0 && b5 == 1
+ if (i & 128) // R = 33% x b8
+ palette[i].r = 0x55;
+ if (i & 64) // G = 33% x b7
+ palette[i].g = 0x55;
+ if (i & 32) // B = 33% x b6
+ palette[i].b = 0x55;
+ if (i & 8) // R + 66,7% x b4
+ palette[i].r += 0xAA;
+ if (i & 4) // G + 66,7% x b3
+ palette[i].g += 0xAA;
+ if (i & 2) // B + 66,7% x b2
+ palette[i].b += 0xAA;
+ if (i & 16) // needed for fall through from case 0!!
+ palette[i].a = 0x80; // T = 50%
+ break;
+ case 1: // b1 == 1 && b5 == 0
+ palette[i].r =
+ palette[i].g =
+ palette[i].b = 0x80; // 50%
+ // fall through!!
+ case 17: // b1 == 1 && b5 == 1
+ if (i & 128) // R += 16.7% x b8
+ palette[i].r += 0x2A;
+ if (i & 64) // G += 16.7% x b7
+ palette[i].g += 0x2A;
+ if (i & 32) // B += 16.7% x b6
+ palette[i].b += 0x2A;
+ if (i & 8) // R += 33% x b4
+ palette[i].r += 0x55;
+ if (i & 4) // G += 33% x b3
+ palette[i].g += 0x55;
+ if (i & 2) // B += 33% x b2
+ palette[i].b += 0x55;
+ break;
+ }
+ }
+ break;