}
uint32_t ConvertToTbmFormat(const gchar *data) {
- uint32_t format = 0;
-
- switch GST_MAKE_FOURCC(data[0], data[1], data[2], data[3]) {
- case GST_MAKE_FOURCC('S', '4', '2', '0'):
- case GST_MAKE_FOURCC('I', '4', '2', '0'):
- format = TBM_FORMAT_YUV420;
- break;
- case GST_MAKE_FOURCC('B', 'G', 'R', 'A'):
- case GST_MAKE_FOURCC('B', 'G', 'R', 'x'):
- case GST_MAKE_FOURCC('S', 'R', '3', '2'):
- format = TBM_FORMAT_ARGB8888;
- break;
+ uint32_t fourcc = GST_STR_FOURCC(data);
+
+ switch (fourcc) {
+ case GST_STR_FOURCC("S420"):
+ case GST_STR_FOURCC("I420"):
+ return TBM_FORMAT_YUV420;
+ case GST_STR_FOURCC("BGRA"):
+ return TBM_FORMAT_BGRA8888;
+ case GST_STR_FOURCC("BGRx"):
+ return TBM_FORMAT_BGRX8888;
+ case GST_STR_FOURCC("SR32"):
+ return TBM_FORMAT_ARGB8888;
default:
- TRACKRENDERER_ERROR("Not supported type (%c%c%c%c)",
- data[0], data[1], data[2], data[3]);
- break;
+ TRACKRENDERER_ERROR("Not supported format %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS(fourcc));
+ return 0;
}
- return format;
}
constexpr int kMaxPlane = 4;
TRACKRENDERER_ERROR("width %d, height %d, bo_size %d", width, height, bo_size);
- if (bo_format == TBM_FORMAT_YUV420) {
+ switch(bo_format) {
+ case TBM_FORMAT_YUV420:
plane_stride[0] = info.planes[0].stride;
plane_elevation[0] = info.planes[0].size / info.planes[0].stride;
plane_stride[1] = info.planes[1].stride;
dest += plane_stride[i];
}
}
- } else if (bo_format == TBM_FORMAT_ARGB8888) { /* emulator */
+ break;
+ case TBM_FORMAT_BGRA8888:
+ case TBM_FORMAT_BGRX8888:
+ case TBM_FORMAT_ARGB8888:
memcpy(thandle.ptr, mapinfo.data, bo_size);
+ break;
+ default:
+ TRACKRENDERER_ERROR("not supported format");
+ tbm_surface_destroy(tbm_surf);
+ return nullptr;
}
return tbm_surf;