[media] v4l2-common: add v4l_match_dv_timings
Add the v4l_match_dv_timings function that can be used to compare two v4l2_dv_timings structs. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
977ebec754
commit
c2a667fa2b
@@ -597,6 +597,39 @@ int v4l_fill_dv_preset_info(u32 preset, struct v4l2_dv_enum_preset *info)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l_fill_dv_preset_info);
|
EXPORT_SYMBOL_GPL(v4l_fill_dv_preset_info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* v4l_match_dv_timings - check if two timings match
|
||||||
|
* @t1 - compare this v4l2_dv_timings struct...
|
||||||
|
* @t2 - with this struct.
|
||||||
|
* @pclock_delta - the allowed pixelclock deviation.
|
||||||
|
*
|
||||||
|
* Compare t1 with t2 with a given margin of error for the pixelclock.
|
||||||
|
*/
|
||||||
|
bool v4l_match_dv_timings(const struct v4l2_dv_timings *t1,
|
||||||
|
const struct v4l2_dv_timings *t2,
|
||||||
|
unsigned pclock_delta)
|
||||||
|
{
|
||||||
|
if (t1->type != t2->type || t1->type != V4L2_DV_BT_656_1120)
|
||||||
|
return false;
|
||||||
|
if (t1->bt.width == t2->bt.width &&
|
||||||
|
t1->bt.height == t2->bt.height &&
|
||||||
|
t1->bt.interlaced == t2->bt.interlaced &&
|
||||||
|
t1->bt.polarities == t2->bt.polarities &&
|
||||||
|
t1->bt.pixelclock >= t2->bt.pixelclock - pclock_delta &&
|
||||||
|
t1->bt.pixelclock <= t2->bt.pixelclock + pclock_delta &&
|
||||||
|
t1->bt.hfrontporch == t2->bt.hfrontporch &&
|
||||||
|
t1->bt.vfrontporch == t2->bt.vfrontporch &&
|
||||||
|
t1->bt.vsync == t2->bt.vsync &&
|
||||||
|
t1->bt.vbackporch == t2->bt.vbackporch &&
|
||||||
|
(!t1->bt.interlaced ||
|
||||||
|
(t1->bt.il_vfrontporch == t2->bt.il_vfrontporch &&
|
||||||
|
t1->bt.il_vsync == t2->bt.il_vsync &&
|
||||||
|
t1->bt.il_vbackporch == t2->bt.il_vbackporch)))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(v4l_match_dv_timings);
|
||||||
|
|
||||||
const struct v4l2_frmsize_discrete *v4l2_find_nearest_format(
|
const struct v4l2_frmsize_discrete *v4l2_find_nearest_format(
|
||||||
const struct v4l2_discrete_probe *probe,
|
const struct v4l2_discrete_probe *probe,
|
||||||
s32 width, s32 height)
|
s32 width, s32 height)
|
||||||
|
@@ -212,4 +212,8 @@ const struct v4l2_frmsize_discrete *v4l2_find_nearest_format(
|
|||||||
const struct v4l2_discrete_probe *probe,
|
const struct v4l2_discrete_probe *probe,
|
||||||
s32 width, s32 height);
|
s32 width, s32 height);
|
||||||
|
|
||||||
|
bool v4l_match_dv_timings(const struct v4l2_dv_timings *t1,
|
||||||
|
const struct v4l2_dv_timings *t2,
|
||||||
|
unsigned pclock_delta);
|
||||||
|
|
||||||
#endif /* V4L2_COMMON_H_ */
|
#endif /* V4L2_COMMON_H_ */
|
||||||
|
Reference in New Issue
Block a user