int _mmcamcorder_get_pixel_format(GstCaps *caps)
{
- const GstStructure *structure;
const char *media_type;
- GstVideoInfo media_info;
- MMPixelFormatType type = 0;
- unsigned int fourcc = 0;
+ GstVideoInfo vinfo;
+ MMPixelFormatType type = MM_PIXEL_FORMAT_INVALID;
mmf_return_val_if_fail(caps != NULL, MM_PIXEL_FORMAT_INVALID);
- structure = gst_caps_get_structure(caps, 0);
- media_type = gst_structure_get_name(structure);
+ media_type = gst_structure_get_name(gst_caps_get_structure(caps, 0));
if (media_type == NULL) {
MMCAM_LOG_ERROR("failed to get media_type");
return MM_PIXEL_FORMAT_INVALID;
}
- gst_video_info_init(&media_info);
+ if (!gst_video_info_from_caps(&vinfo, caps)) {
+ MMCAM_LOG_ERROR("get video info failed[media type:%s]", media_type);
+ return MM_PIXEL_FORMAT_INVALID;
+ }
- if (!strcmp(media_type, "image/jpeg")) {
- MMCAM_LOG_INFO("It is jpeg.");
- type = MM_PIXEL_FORMAT_ENCODED;
- } else if (!strcmp(media_type, "video/x-raw") &&
- gst_video_info_from_caps(&media_info, caps) &&
- GST_VIDEO_INFO_IS_YUV(&media_info)) {
- MMCAM_LOG_INFO("It is yuv.");
- fourcc = gst_video_format_to_fourcc(GST_VIDEO_INFO_FORMAT(&media_info));
- type = _mmcamcorder_get_pixtype(fourcc);
- } else if (!strcmp(media_type, "video/x-raw") &&
- gst_video_info_from_caps(&media_info, caps) &&
- GST_VIDEO_INFO_IS_RGB(&media_info)) {
- MMCAM_LOG_INFO("It is rgb.");
+ if (GST_VIDEO_INFO_IS_YUV(&vinfo))
+ type = _mmcamcorder_get_pixtype(gst_video_format_to_fourcc(GST_VIDEO_INFO_FORMAT(&vinfo)));
+ else if (GST_VIDEO_INFO_IS_RGB(&vinfo))
type = MM_PIXEL_FORMAT_RGB888;
- } else if (!strcmp(media_type, "video/x-h264")) {
- MMCAM_LOG_INFO("It is H264");
+ else if (!strcmp(media_type, "image/jpeg"))
+ type = MM_PIXEL_FORMAT_ENCODED;
+ else if (!strcmp(media_type, "video/x-h264"))
type = MM_PIXEL_FORMAT_ENCODED_H264;
- } else {
- MMCAM_LOG_ERROR("Not supported format [%s]", media_type);
- type = MM_PIXEL_FORMAT_INVALID;
- }
- /*MMCAM_LOG_INFO( "Type [%d]", type );*/
+ if (type == MM_PIXEL_FORMAT_INVALID)
+ MMCAM_LOG_ERROR("Not supported format[%s,GST:%d]", media_type, GST_VIDEO_INFO_FORMAT(&vinfo));
+ else
+ MMCAM_LOG_DEBUG("Type[%d]", type);
return type;
}
+
unsigned int _mmcamcorder_get_fourcc(int pixtype, int codectype, int use_zero_copy_format)
{
unsigned int fourcc = 0;