tests: filesink: add check for render_list virtual method
authorPrashant Gotarne <ps.gotarne@samsung.com>
Wed, 1 Apr 2015 03:50:24 +0000 (09:20 +0530)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 1 Apr 2015 11:31:15 +0000 (12:31 +0100)
GstFileSink implements the render_list virtual method to render
a list of buffers. Update the test_seeking test case to also
check the render_list method implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=747100

tests/check/elements/filesink.c

index 9ac4f49..2257b49 100644 (file)
@@ -95,6 +95,29 @@ cleanup_filesink (GstElement * filesink)
       g_rand_free (rand);                                                 \
     } G_STMT_END
 
+/* Push buffer_list containing num_buffers number of buffers with size
+ *   num_bytes bytes
+ * Example: PUSH_BUFFER_LIST(2,10) will push the buffer list containing
+ *   2 buffers with size 10 bytes each */
+#define PUSH_BUFFER_LIST(num_buffers, num_bytes)                          \
+    G_STMT_START {                                                        \
+      guint i;                                                            \
+      GstBufferList* buf_list = gst_buffer_list_new();                    \
+      for(i = 0; i < num_buffers; ++i){                                   \
+        GstBuffer *buf = gst_buffer_new_and_alloc(num_bytes);             \
+        GRand *rand = g_rand_new_with_seed (num_bytes);                   \
+        GstMapInfo info;                                                  \
+        guint j;                                                          \
+        fail_unless (gst_buffer_map (buf, &info, GST_MAP_WRITE));         \
+        for (j = 0; j < num_bytes; ++j)                                   \
+          ((guint8 *)info.data)[j] = (g_rand_int (rand) >> 24) & 0xff;    \
+        gst_buffer_unmap (buf, &info);                                    \
+        gst_buffer_list_add(buf_list,buf);                                \
+        g_rand_free (rand);                                               \
+      }                                                                   \
+      fail_unless_equals_int (gst_pad_push_list (mysrcpad, buf_list), GST_FLOW_OK); \
+    } G_STMT_END
+
 #define CHECK_WRITTEN_BYTES(offset,written,file_size)                      \
     G_STMT_START {                                                        \
       gchar *data = NULL;                                                 \
@@ -196,6 +219,19 @@ GST_START_TEST (test_seeking)
   PUSH_BYTES (8800);
   CHECK_QUERY_POSITION (filesink, GST_FORMAT_BYTES, 8900);
 
+  /* Push buffer list with 2 buffers each of size 50 bytes */
+  PUSH_BUFFER_LIST (2, 50);
+  CHECK_QUERY_POSITION (filesink, GST_FORMAT_BYTES, 9000);
+  /* Push buffer list with 3 buffers each of size 10 bytes */
+  PUSH_BUFFER_LIST (3, 10);
+  CHECK_QUERY_POSITION (filesink, GST_FORMAT_BYTES, 9030);
+  /* Check bytes written using push buffer list */
+  CHECK_WRITTEN_BYTES (8900, 50, 9030);
+  CHECK_WRITTEN_BYTES (8950, 50, 9030);
+  CHECK_WRITTEN_BYTES (9000, 10, 9030);
+  CHECK_WRITTEN_BYTES (9010, 10, 9030);
+  CHECK_WRITTEN_BYTES (9020, 10, 9030);
+
   segment.start = 8800;
   if (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment))) {
     GST_LOG ("seek ok");