mirror_handle_stop
};
+static int get_tbm_surface_num_bos(void)
+{
+ static int num_bos = 0;
+ tbm_surface_h surface = NULL;
+
+ if(num_bos)
+ return num_bos;
+
+ surface = tbm_surface_create(128, 128, TBM_FORMAT_NV12);
+ if (surface == NULL) {
+ GST_ERROR ("waylandsrc : tbm_surface_create failed.");
+ return 0;
+ }
+
+ num_bos = tbm_surface_internal_get_num_bos(surface);
+ tbm_surface_destroy(surface);
+
+ if(num_bos == 0)
+ GST_ERROR ("waylandsrc : surface doesn't have any bo.");
+
+ return num_bos;
+}
#ifdef WAYLANDSRC_BUFFER_DUMP
static int dump_cnt;
void save_waylandsrc_buffer (output_buffer * out_buffer)
{
+ int bo_num, i;
dump_cnt++;
if (100 < dump_cnt && dump_cnt < 150) {
return;
}
- bo_handle = tbm_bo_map (out_buffer->bo[0], TBM_DEVICE_CPU, TBM_OPTION_READ);
-
- if (bo_handle.ptr)
- fwrite ((char *)bo_handle.ptr, tbm_bo_size(out_buffer->bo[0]), 1, fp);
- else
- GST_ERROR_OBJECT (src, "Failed to get tbm bo[0]'s handle: %s", strerror (errno));
-
- tbm_bo_unmap(out_buffer->bo[0]);
+ bo_num = get_tbm_surface_num_bos();
+ for (i = 0; i < bo_num; i++)
+ {
+ bo_handle = tbm_bo_map (out_buffer->bo[i], TBM_DEVICE_CPU, TBM_OPTION_READ);
- #ifndef TIZEN_FEATURE_PRODUCT_TM1
- bo_handle = tbm_bo_map (out_buffer->bo[1], TBM_DEVICE_CPU, TBM_OPTION_READ);
- if (bo_handle.ptr)
- fwrite ((char *) bo_handle.ptr, tbm_bo_size(out_buffer->bo[1]), 1, fp);
- else
- GST_ERROR_OBJECT (src, "Failed to get tbm bo[1]'s handle:: %s", strerror (errno));
+ if (bo_handle.ptr)
+ fwrite ((char *)bo_handle.ptr, tbm_bo_size(out_buffer->bo[i]), 1, fp);
+ else
+ GST_ERROR_OBJECT (src, "Failed to get tbm bo's handle: %s", strerror (errno));
- tbm_bo_unmap(out_buffer->bo[1]);
- #endif
+ tbm_bo_unmap(out_buffer->bo[i]);
+ }
GST_ERROR_OBJECT (src, "Dump (%d):%d %d\n", dump_cnt, out_buffer->size, tbm_bo_size(out_buffer->bo[0]));
break;
case TBM_FORMAT_NV12:
case TBM_FORMAT_NV21:
+ bo_num = get_tbm_surface_num_bos();
- GST_WARNING_OBJECT (src, "BO image size : %d %d %d %d", src->ts_info.planes[0].size, src->ts_info.planes[1].size, src->ts_info.num_planes, src->ts_info.size);
+ GST_WARNING_OBJECT (src, "BO image size : %d %d %d %d, Number_of_bo : %d", src->ts_info.planes[0].size, src->ts_info.planes[1].size, src->ts_info.num_planes, src->ts_info.size, bo_num);
-#ifdef TIZEN_FEATURE_PRODUCT_TM1
- out_buffer->bo[0] =
+ if (bo_num == 1) {
+ out_buffer->bo[0] =
tbm_bo_alloc (bufmgr, src->ts_info.planes[0].size + src->ts_info.planes[1].size, TBM_BO_DEFAULT);
- if (out_buffer->bo[0] == NULL)
- goto failed;
-
- bo_num = 1;
-#else
- out_buffer->bo[0] =
+ if (out_buffer->bo[0] == NULL)
+ goto failed;
+ } else if (bo_num == 2) {
+ out_buffer->bo[0] =
tbm_bo_alloc (bufmgr, src->ts_info.planes[0].size, TBM_BO_DEFAULT);
- if (out_buffer->bo[0] == NULL)
- goto failed;
+ if (out_buffer->bo[0] == NULL)
+ goto failed;
- out_buffer->bo[1] =
+ out_buffer->bo[1] =
tbm_bo_alloc (bufmgr, src->ts_info.planes[1].size, TBM_BO_DEFAULT);
- if (out_buffer->bo[1] == NULL)
+ if (out_buffer->bo[1] == NULL)
+ goto failed;
+ } else {
goto failed;
-
- bo_num = 2;
-#endif
+ }
out_buffer->surface =
tbm_surface_internal_create_with_bos(&src->ts_info, out_buffer->bo, bo_num);