bitwriter: Fix the trailing bits lost when getting its data.
authorHe Junyan <junyan.he@intel.com>
Sat, 18 Sep 2021 16:19:43 +0000 (00:19 +0800)
committerHe Junyan <junyan.he@intel.com>
Sun, 19 Sep 2021 12:41:59 +0000 (20:41 +0800)
In reset_and_get_data and reset_and_get_buffer, it fails to include
the trailing bits less than 8. So, when the bit_size is not byte
aligned, the trailing bits are lost in the return buffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/886>

libs/gst/base/gstbitwriter.c

index 0947a68..887480a 100644 (file)
@@ -202,7 +202,7 @@ gst_bit_writer_reset_and_get_data (GstBitWriter * bitwriter)
 
   data = bitwriter->data;
   if (bitwriter->owned)
-    data = g_memdup2 (data, bitwriter->bit_size >> 3);
+    data = g_memdup2 (data, GST_ROUND_UP_8 (bitwriter->bit_size) >> 3);
   gst_bit_writer_reset (bitwriter);
 
   return data;
@@ -228,7 +228,7 @@ gst_bit_writer_reset_and_get_buffer (GstBitWriter * bitwriter)
 
   g_return_val_if_fail (bitwriter != NULL, NULL);
 
-  size = bitwriter->bit_size >> 3;
+  size = GST_ROUND_UP_8 (bitwriter->bit_size) >> 3;
   data = gst_bit_writer_reset_and_get_data (bitwriter);
 
   /* we cannot rely on buffers allocated externally, thus let's dup