linux-v4l2: Fix build when missing ENUM_DV_TIMINGS

Add compatibility with older versions of the api by not failing to
build when the VIDIOC_ENUM_DV_TIMINGS is missing. In older versions
of the api there was a different system to get dv-timing presets, which
was replaced by the current enumeration system with Linux 3.4.
This will allow for the plugin to be built against older versions of the
api by disabling the enumeration support, thus reducing the
functionality for some devices.
master
fryshorts 2015-04-22 20:09:18 +02:00
parent 85518e7cca
commit 34c3be43d1
2 changed files with 16 additions and 0 deletions

View File

@ -240,6 +240,12 @@ int_fast32_t v4l2_set_standard(int_fast32_t dev, int *standard)
int_fast32_t v4l2_enum_dv_timing(int_fast32_t dev, struct v4l2_dv_timings *dvt,
int index)
{
#ifndef VIDIOC_ENUM_DV_TIMINGS
UNUSED_PARAMETER(dev);
UNUSED_PARAMETER(dvt);
UNUSED_PARAMETER(index);
return -1;
#else
if (!dev || !dvt)
return -1;
@ -253,6 +259,7 @@ int_fast32_t v4l2_enum_dv_timing(int_fast32_t dev, struct v4l2_dv_timings *dvt,
memcpy(dvt, &iter.timings, sizeof(struct v4l2_dv_timings));
return 0;
#endif
}
int_fast32_t v4l2_set_dv_timing(int_fast32_t dev, int *timing)

View File

@ -41,6 +41,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "v4l2-udev.h"
#endif
/* The new dv timing api was introduced in Linux 3.4
* Currently we simply disable dv timings when this is not defined */
#ifndef VIDIOC_ENUM_DV_TIMINGS
#define V4L2_IN_CAP_DV_TIMINGS 0
#endif
#define V4L2_DATA(voidptr) struct v4l2_data *data = voidptr;
#define timeval2ns(tv) \
@ -933,6 +939,9 @@ static void *v4l2_create(obs_data_t *settings, obs_source_t *source)
#ifndef V4L2_CAP_DEVICE_CAPS
blog(LOG_WARNING, "Plugin built without device caps support!");
#endif
#ifndef VIDIOC_ENUM_DV_TIMINGS
blog(LOG_WARNING, "Plugin built without dv-timing support!");
#endif
v4l2_update(data, settings);