Fix field packer bug for U32 data.
Fix initial refcounts in allocations.
Support null references in allocations.

Change-Id: Ifba6406ba750e69737bd77fa7df5d7fb8e27a5b4
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index 7d31bd6..7e44fea 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -34,6 +34,9 @@
     init(rsc, type);
 
     mPtr = malloc(mType->getSizeBytes());
+    if (mType->getElement()->getHasReferences()) {
+        memset(mPtr, 0, mType->getSizeBytes());
+    }
     if (!mPtr) {
         LOGE("Allocation::Allocation, alloc failure");
     }
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index 5dee1fb..2602dd4 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -266,7 +266,7 @@
         if (mComponent.isReference()) {
             ObjectBase *const*obp = static_cast<ObjectBase *const*>(ptr);
             ObjectBase *ob = obp[0];
-            ob->incSysRef();
+            if (ob) ob->incSysRef();
         }
         return;
     }
@@ -285,7 +285,7 @@
         if (mComponent.isReference()) {
             ObjectBase *const*obp = static_cast<ObjectBase *const*>(ptr);
             ObjectBase *ob = obp[0];
-            ob->decSysRef();
+            if (ob) ob->decSysRef();
         }
         return;
     }