Blame view
include/media/v4l2-dv-timings.h
7.76 KB
b18787ed1 [media] v4l2-dv-t... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* * v4l2-dv-timings - Internal header with dv-timings helper functions * * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved. * * This program is free software; you may redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ #ifndef __V4L2_DV_TIMINGS_H #define __V4L2_DV_TIMINGS_H #include <linux/videodev2.h> |
fb91aecb9 [media] DocBook: ... |
25 |
/* |
506bb54bd [media] v4l-dv-ti... |
26 |
* v4l2_dv_timings_presets: list of all dv_timings presets. |
d1c65ad6a [media] v4l2-dv-t... |
27 28 |
*/ extern const struct v4l2_dv_timings v4l2_dv_timings_presets[]; |
f06606e56 [media] v4l2-dv-t... |
29 30 |
/** * typedef v4l2_check_dv_timings_fnc - timings check callback |
506bb54bd [media] v4l-dv-ti... |
31 |
* |
b8f0fff42 [media] v4l2-dv-t... |
32 33 34 35 36 37 |
* @t: the v4l2_dv_timings struct. * @handle: a handle from the driver. * * Returns true if the given timings are valid. */ typedef bool v4l2_check_dv_timings_fnc(const struct v4l2_dv_timings *t, void *handle); |
506bb54bd [media] v4l-dv-ti... |
38 39 40 41 42 43 44 45 46 47 48 49 |
/** * v4l2_valid_dv_timings() - are these timings valid? * * @t: the v4l2_dv_timings struct. * @cap: the v4l2_dv_timings_cap capabilities. * @fnc: callback to check if this timing is OK. May be NULL. * @fnc_handle: a handle that is passed on to @fnc. * * Returns true if the given dv_timings struct is supported by the * hardware capabilities and the callback function (if non-NULL), returns * false otherwise. */ |
70b654945 [media] v4l2-dv-t... |
50 |
bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t, |
b8f0fff42 [media] v4l2-dv-t... |
51 52 53 |
const struct v4l2_dv_timings_cap *cap, v4l2_check_dv_timings_fnc fnc, void *fnc_handle); |
b18787ed1 [media] v4l2-dv-t... |
54 |
|
506bb54bd [media] v4l-dv-ti... |
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
/** * v4l2_enum_dv_timings_cap() - Helper function to enumerate possible DV * timings based on capabilities * * @t: the v4l2_enum_dv_timings struct. * @cap: the v4l2_dv_timings_cap capabilities. * @fnc: callback to check if this timing is OK. May be NULL. * @fnc_handle: a handle that is passed on to @fnc. * * This enumerates dv_timings using the full list of possible CEA-861 and DMT * timings, filtering out any timings that are not supported based on the * hardware capabilities and the callback function (if non-NULL). * * If a valid timing for the given index is found, it will fill in @t and * return 0, otherwise it returns -EINVAL. */ |
b18787ed1 [media] v4l2-dv-t... |
71 |
int v4l2_enum_dv_timings_cap(struct v4l2_enum_dv_timings *t, |
b8f0fff42 [media] v4l2-dv-t... |
72 73 74 |
const struct v4l2_dv_timings_cap *cap, v4l2_check_dv_timings_fnc fnc, void *fnc_handle); |
b18787ed1 [media] v4l2-dv-t... |
75 |
|
506bb54bd [media] v4l-dv-ti... |
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
/** * v4l2_find_dv_timings_cap() - Find the closest timings struct * * @t: the v4l2_enum_dv_timings struct. * @cap: the v4l2_dv_timings_cap capabilities. * @pclock_delta: maximum delta between t->pixelclock and the timing struct * under consideration. * @fnc: callback to check if a given timings struct is OK. May be NULL. * @fnc_handle: a handle that is passed on to @fnc. * * This function tries to map the given timings to an entry in the * full list of possible CEA-861 and DMT timings, filtering out any timings * that are not supported based on the hardware capabilities and the callback * function (if non-NULL). * * On success it will fill in @t with the found timings and it returns true. * On failure it will return false. */ |
b18787ed1 [media] v4l2-dv-t... |
94 95 |
bool v4l2_find_dv_timings_cap(struct v4l2_dv_timings *t, const struct v4l2_dv_timings_cap *cap, |
b8f0fff42 [media] v4l2-dv-t... |
96 97 98 |
unsigned pclock_delta, v4l2_check_dv_timings_fnc fnc, void *fnc_handle); |
b18787ed1 [media] v4l2-dv-t... |
99 |
|
506bb54bd [media] v4l-dv-ti... |
100 101 102 103 104 105 106 |
/** * v4l2_match_dv_timings() - do two timings match? * * @measured: the measured timings data. * @standard: the timings according to the standard. * @pclock_delta: maximum delta in Hz between standard->pixelclock and * the measured timings. |
85f9e06c5 [media] v4l2-dv-t... |
107 108 |
* @match_reduced_fps: if true, then fail if V4L2_DV_FL_REDUCED_FPS does not * match. |
506bb54bd [media] v4l-dv-ti... |
109 110 111 |
* * Returns true if the two timings match, returns false otherwise. */ |
ef1ed8f5d [media] v4l2-dv-t... |
112 113 |
bool v4l2_match_dv_timings(const struct v4l2_dv_timings *measured, const struct v4l2_dv_timings *standard, |
85f9e06c5 [media] v4l2-dv-t... |
114 |
unsigned pclock_delta, bool match_reduced_fps); |
257641584 [media] v4l2: mov... |
115 |
|
506bb54bd [media] v4l-dv-ti... |
116 117 118 119 120 121 122 |
/** * v4l2_print_dv_timings() - log the contents of a dv_timings struct * @dev_prefix:device prefix for each log line. * @prefix: additional prefix for each log line, may be NULL. * @t: the timings data. * @detailed: if true, give a detailed log. */ |
0216dc2fe [media] v4l2-dv-t... |
123 124 |
void v4l2_print_dv_timings(const char *dev_prefix, const char *prefix, const struct v4l2_dv_timings *t, bool detailed); |
506bb54bd [media] v4l-dv-ti... |
125 126 127 |
/** * v4l2_detect_cvt - detect if the given timings follow the CVT standard * |
fd4b0d751 [media] media: fi... |
128 129 130 131 |
* @frame_height: the total height of the frame (including blanking) in lines. * @hfreq: the horizontal frequency in Hz. * @vsync: the height of the vertical sync in lines. * @active_width: active width of image (does not include blanking). This |
5fea1bb70 [media] v4l2-dv-t... |
132 133 |
* information is needed only in case of version 2 of reduced blanking. * In other cases, this parameter does not have any effect on timings. |
fd4b0d751 [media] media: fi... |
134 |
* @polarities: the horizontal and vertical polarities (same as struct |
257641584 [media] v4l2: mov... |
135 |
* v4l2_bt_timings polarities). |
fd4b0d751 [media] media: fi... |
136 137 |
* @interlaced: if this flag is true, it indicates interlaced format * @fmt: the resulting timings. |
257641584 [media] v4l2: mov... |
138 139 140 141 142 143 |
* * This function will attempt to detect if the given values correspond to a * valid CVT format. If so, then it will return true, and fmt will be filled * in with the found CVT timings. */ bool v4l2_detect_cvt(unsigned frame_height, unsigned hfreq, unsigned vsync, |
5fea1bb70 [media] v4l2-dv-t... |
144 145 |
unsigned active_width, u32 polarities, bool interlaced, struct v4l2_dv_timings *fmt); |
257641584 [media] v4l2: mov... |
146 |
|
506bb54bd [media] v4l-dv-ti... |
147 148 149 |
/** * v4l2_detect_gtf - detect if the given timings follow the GTF standard * |
fd4b0d751 [media] media: fi... |
150 151 152 153 |
* @frame_height: the total height of the frame (including blanking) in lines. * @hfreq: the horizontal frequency in Hz. * @vsync: the height of the vertical sync in lines. * @polarities: the horizontal and vertical polarities (same as struct |
257641584 [media] v4l2: mov... |
154 |
* v4l2_bt_timings polarities). |
fd4b0d751 [media] media: fi... |
155 156 |
* @interlaced: if this flag is true, it indicates interlaced format * @aspect: preferred aspect ratio. GTF has no method of determining the |
257641584 [media] v4l2: mov... |
157 158 159 160 |
* aspect ratio in order to derive the image width from the * image height, so it has to be passed explicitly. Usually * the native screen aspect ratio is used for this. If it * is not filled in correctly, then 16:9 will be assumed. |
fd4b0d751 [media] media: fi... |
161 |
* @fmt: the resulting timings. |
257641584 [media] v4l2: mov... |
162 163 164 165 166 167 |
* * This function will attempt to detect if the given values correspond to a * valid GTF format. If so, then it will return true, and fmt will be filled * in with the found GTF timings. */ bool v4l2_detect_gtf(unsigned frame_height, unsigned hfreq, unsigned vsync, |
061ddda68 [media] v4l2-dv-t... |
168 |
u32 polarities, bool interlaced, struct v4l2_fract aspect, |
257641584 [media] v4l2: mov... |
169 |
struct v4l2_dv_timings *fmt); |
506bb54bd [media] v4l-dv-ti... |
170 171 |
/** * v4l2_calc_aspect_ratio - calculate the aspect ratio based on bytes |
257641584 [media] v4l2: mov... |
172 |
* 0x15 and 0x16 from the EDID. |
506bb54bd [media] v4l-dv-ti... |
173 |
* |
fd4b0d751 [media] media: fi... |
174 175 |
* @hor_landscape: byte 0x15 from the EDID. * @vert_portrait: byte 0x16 from the EDID. |
257641584 [media] v4l2: mov... |
176 177 178 179 180 181 |
* * Determines the aspect ratio from the EDID. * See VESA Enhanced EDID standard, release A, rev 2, section 3.6.2: * "Horizontal and Vertical Screen Size or Aspect Ratio" */ struct v4l2_fract v4l2_calc_aspect_ratio(u8 hor_landscape, u8 vert_portrait); |
8d7322f4f [media] v4l2-dv-t... |
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
/* * reduce_fps - check if conditions for reduced fps are true. * bt - v4l2 timing structure * For different timings reduced fps is allowed if following conditions * are met - * For CVT timings: if reduced blanking v2 (vsync == 8) is true. * For CEA861 timings: if V4L2_DV_FL_CAN_REDUCE_FPS flag is true. */ static inline bool can_reduce_fps(struct v4l2_bt_timings *bt) { if ((bt->standards & V4L2_DV_BT_STD_CVT) && (bt->vsync == 8)) return true; if ((bt->standards & V4L2_DV_BT_STD_CEA861) && (bt->flags & V4L2_DV_FL_CAN_REDUCE_FPS)) return true; return false; } |
b18787ed1 [media] v4l2-dv-t... |
201 |
#endif |