libexplain
1.4.D001
|
00001 /* 00002 * libexplain - a library of system-call-specific strerror replacements 00003 * Copyright (C) 2011, 2013 Peter Miller 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU Lesser General Public License as 00007 * published by the Free Software Foundation; either version 3 of the 00008 * License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Lesser General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Lesser General Public License 00016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00017 */ 00018 00019 #include <libexplain/ac/linux/videodev2.h> 00020 00021 #include <libexplain/buffer/pointer.h> 00022 #include <libexplain/buffer/v4l2_buf_type.h> 00023 #include <libexplain/buffer/v4l2_format.h> 00024 #include <libexplain/buffer/v4l2_pix_format.h> 00025 #include <libexplain/buffer/v4l2_sliced_vbi_format.h> 00026 #include <libexplain/buffer/v4l2_vbi_format.h> 00027 #include <libexplain/buffer/v4l2_window.h> 00028 #include <libexplain/is_efault.h> 00029 00030 00031 #ifdef HAVE_LINUX_VIDEODEV2_H 00032 00033 void 00034 explain_buffer_v4l2_format(explain_string_buffer_t *sb, 00035 const struct v4l2_format *data, int extra) 00036 { 00037 #ifdef HAVE_LINUX_VIDEODEV2_H 00038 if (explain_is_efault_pointer(data, sizeof(*data))) 00039 { 00040 explain_buffer_pointer(sb, data); 00041 return; 00042 } 00043 00044 explain_string_buffer_puts(sb, "{ type = "); 00045 explain_buffer_v4l2_buf_type(sb, data->type); 00046 if (extra) 00047 { 00048 switch (data->type) 00049 { 00050 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 00051 explain_string_buffer_puts(sb, ", fmt.pix = "); 00052 explain_buffer_v4l2_pix_format(sb, &data->fmt.pix); 00053 break; 00054 00055 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 00056 explain_string_buffer_puts(sb, ", fmt.win = "); 00057 explain_buffer_v4l2_window(sb, &data->fmt.win); 00058 break; 00059 00060 case V4L2_BUF_TYPE_VBI_CAPTURE: 00061 explain_string_buffer_puts(sb, ", fmt.vbi = "); 00062 explain_buffer_v4l2_vbi_format(sb, &data->fmt.vbi); 00063 break; 00064 00065 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 00066 explain_string_buffer_puts(sb, ", fmt.sliced = "); 00067 explain_buffer_v4l2_sliced_vbi_format(sb, &data->fmt.sliced); 00068 break; 00069 00070 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 00071 case V4L2_BUF_TYPE_VBI_OUTPUT: 00072 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: 00073 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 00074 case V4L2_BUF_TYPE_PRIVATE: 00075 #ifdef V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 00076 case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: 00077 #endif 00078 #ifdef V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE 00079 case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: 00080 #endif 00081 default: 00082 break; 00083 } 00084 } 00085 explain_string_buffer_puts(sb, " }"); 00086 #else 00087 explain_buffer_pointer(sb, data); 00088 #endif 00089 } 00090 00091 00092 enum explain_v4l2_format_check_type_t 00093 explain_v4l2_format_check_type(int fildes, const struct v4l2_format *data) 00094 { 00095 if (explain_is_efault_pointer(data, sizeof(*data))) 00096 return explain_v4l2_format_check_type_no_idea; 00097 switch (explain_v4l2_buf_type_check(fildes, data->type)) 00098 { 00099 case explain_v4l2_buf_type_check_no_idea: 00100 default: 00101 return explain_v4l2_format_check_type_no_idea; 00102 00103 case explain_v4l2_buf_type_check_notsup: 00104 return explain_v4l2_format_check_type_notsup; 00105 00106 case explain_v4l2_buf_type_check_nosuch: 00107 return explain_v4l2_format_check_type_nosuch; 00108 00109 case explain_v4l2_buf_type_check_ok: 00110 break; 00111 } 00112 return explain_v4l2_format_check_type_ok; 00113 } 00114 00115 #endif 00116 00117 /* vim: set ts=8 sw=4 et : */