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/v4l2_buf_type.h> 00022 #include <libexplain/buffer/v4l2_cropcap.h> 00023 #include <libexplain/buffer/v4l2_fract.h> 00024 #include <libexplain/buffer/v4l2_rect.h> 00025 #include <libexplain/buffer/pointer.h> 00026 #include <libexplain/is_efault.h> 00027 00028 00029 #ifdef HAVE_LINUX_VIDEODEV2_H 00030 00031 void 00032 explain_buffer_v4l2_cropcap(explain_string_buffer_t *sb, 00033 const struct v4l2_cropcap *data, int extra) 00034 { 00035 if (explain_is_efault_pointer(data, sizeof(*data))) 00036 { 00037 explain_buffer_pointer(sb, data); 00038 return; 00039 } 00040 00041 explain_string_buffer_puts(sb, "{ type = "); 00042 explain_buffer_v4l2_buf_type(sb, data->type); 00043 if (extra) 00044 { 00045 explain_string_buffer_puts(sb, ", bounds = "); 00046 explain_buffer_v4l2_rect(sb, &data->bounds); 00047 explain_string_buffer_puts(sb, ", defrect = "); 00048 explain_buffer_v4l2_rect(sb, &data->defrect); 00049 explain_string_buffer_puts(sb, ", pixelaspect = "); 00050 explain_buffer_v4l2_fract(sb, &data->pixelaspect); 00051 } 00052 explain_string_buffer_puts(sb, " }"); 00053 } 00054 00055 00056 enum explain_v4l2_cropcap_check_type_t 00057 explain_v4l2_cropcap_check_type(int fildes, const struct v4l2_cropcap *data) 00058 { 00059 if (explain_is_efault_pointer(data, sizeof(*data))) 00060 return explain_v4l2_cropcap_check_type_no_idea; 00061 switch (data->type) 00062 { 00063 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 00064 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 00065 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 00066 case V4L2_BUF_TYPE_VBI_CAPTURE: 00067 case V4L2_BUF_TYPE_VBI_OUTPUT: 00068 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 00069 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: 00070 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 00071 case V4L2_BUF_TYPE_PRIVATE: 00072 #ifdef V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 00073 case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: 00074 #endif 00075 #ifdef V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE 00076 case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: 00077 #endif 00078 switch (explain_v4l2_buf_type_check(fildes, data->type)) 00079 { 00080 case explain_v4l2_buf_type_check_no_idea: 00081 default: 00082 return explain_v4l2_cropcap_check_type_no_idea; 00083 00084 case explain_v4l2_buf_type_check_notsup: 00085 return explain_v4l2_cropcap_check_type_notsup; 00086 00087 case explain_v4l2_buf_type_check_nosuch: 00088 return explain_v4l2_cropcap_check_type_nosuch; 00089 00090 case explain_v4l2_buf_type_check_ok: 00091 break; 00092 } 00093 break; 00094 00095 default: 00096 return explain_v4l2_cropcap_check_type_nosuch; 00097 } 00098 return explain_v4l2_cropcap_check_type_ok; 00099 } 00100 00101 #endif 00102 00103 00104 /* vim: set ts=8 sw=4 et : */