Browse Source

testing patch for aligned reads by webp in javascript

Ariel Manzur 9 years ago
parent
commit
83f2084cb8
3 changed files with 17 additions and 0 deletions
  1. 8 0
      drivers/webp/utils/bit_reader.c
  2. 8 0
      drivers/webp/utils/bit_reader.h
  3. 1 0
      servers/visual_server.cpp

+ 8 - 0
drivers/webp/utils/bit_reader.c

@@ -17,6 +17,8 @@
 
 
 #include "./bit_reader_inl.h"
 #include "./bit_reader_inl.h"
 
 
+#define JAVASCRIPT_ENABLED // testing
+
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // VP8BitReader
 // VP8BitReader
 
 
@@ -40,7 +42,13 @@ void VP8InitBitReader(VP8BitReader* const br,
   br->bits_    = -8;   // to load the very first 8bits
   br->bits_    = -8;   // to load the very first 8bits
   br->eof_     = 0;
   br->eof_     = 0;
   VP8BitReaderSetBuffer(br, start, size);
   VP8BitReaderSetBuffer(br, start, size);
+
+#ifdef JAVASCRIPT_ENABLED // html5 required aligned reads
+  while(((uintptr_t)br->buf_ & 1) != 0 && !br->eof_)
+	VP8LoadFinalBytes(br);
+#else
   VP8LoadNewBytes(br);
   VP8LoadNewBytes(br);
+#endif
 }
 }
 
 
 void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) {
 void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) {

+ 8 - 0
drivers/webp/utils/bit_reader.h

@@ -37,6 +37,12 @@ extern "C" {
 // BITS can be any multiple of 8 from 8 to 56 (inclusive).
 // BITS can be any multiple of 8 from 8 to 56 (inclusive).
 // Pick values that fit natural register size.
 // Pick values that fit natural register size.
 
 
+#ifdef JAVASCRIPT_ENABLED
+
+#define BITS 16
+
+#else
+
 #if defined(__i386__) || defined(_M_IX86)      // x86 32bit
 #if defined(__i386__) || defined(_M_IX86)      // x86 32bit
 #define BITS 24
 #define BITS 24
 #elif defined(__x86_64__) || defined(_M_X64)   // x86 64bit
 #elif defined(__x86_64__) || defined(_M_X64)   // x86 64bit
@@ -49,6 +55,8 @@ extern "C" {
 #define BITS 24  // TODO(skal): test aarch64 and find the proper BITS value.
 #define BITS 24  // TODO(skal): test aarch64 and find the proper BITS value.
 #endif
 #endif
 
 
+#endif
+
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // Derived types and constants:
 // Derived types and constants:
 //   bit_t = natural register type for storing 'value_' (which is BITS+8 bits)
 //   bit_t = natural register type for storing 'value_' (which is BITS+8 bits)

+ 1 - 0
servers/visual_server.cpp

@@ -526,6 +526,7 @@ void VisualServer::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("canvas_item_get_opacity"),&VisualServer::canvas_item_get_opacity);
 	ObjectTypeDB::bind_method(_MD("canvas_item_get_opacity"),&VisualServer::canvas_item_get_opacity);
 	ObjectTypeDB::bind_method(_MD("canvas_item_set_self_opacity"),&VisualServer::canvas_item_set_self_opacity);
 	ObjectTypeDB::bind_method(_MD("canvas_item_set_self_opacity"),&VisualServer::canvas_item_set_self_opacity);
 	ObjectTypeDB::bind_method(_MD("canvas_item_get_self_opacity"),&VisualServer::canvas_item_get_self_opacity);
 	ObjectTypeDB::bind_method(_MD("canvas_item_get_self_opacity"),&VisualServer::canvas_item_get_self_opacity);
+	ObjectTypeDB::bind_method(_MD("canvas_item_set_z"),&VisualServer::canvas_item_set_z);
 
 
 	ObjectTypeDB::bind_method(_MD("canvas_item_add_line"),&VisualServer::canvas_item_add_line, DEFVAL(1.0));
 	ObjectTypeDB::bind_method(_MD("canvas_item_add_line"),&VisualServer::canvas_item_add_line, DEFVAL(1.0));
 	ObjectTypeDB::bind_method(_MD("canvas_item_add_rect"),&VisualServer::canvas_item_add_rect);
 	ObjectTypeDB::bind_method(_MD("canvas_item_add_rect"),&VisualServer::canvas_item_add_rect);