Skip to content

Commit

Permalink
Merge pull request #20 from ajcasagrande/add-headers
Browse files Browse the repository at this point in the history
Include local copy of v4l2 headers in project repository.
  • Loading branch information
vladimirvivien authored Aug 20, 2022
2 parents 12dfba0 + 30427b6 commit a16f71b
Show file tree
Hide file tree
Showing 13 changed files with 5,561 additions and 9 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ It hides all the complexities of working with V4L2 and provides idiomatic Go typ
* Go compiler/tools
* Kernel minimum v5.10.x
* A locally configured C compiler (i.e. gcc)
* Header files for V4L2 (i.e. /usr/include/linux/videodev2.h)

All examples have been tested using a Raspberry PI 3, running 32-bit Raspberry PI OS.
The package should work with no problem on your 64-bit Linux OS.
Expand All @@ -45,6 +44,11 @@ sudo apt update
sudo apt full-upgrade
```

Install the `build-essential` package to install required C compilers:
```shell
sudo apt install build-essential
```

### Using the go4vl package

To include `go4vl` in your own code, `go get` the package:
Expand Down
4 changes: 2 additions & 2 deletions examples/cgo_types/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ to communicate to device using cgo-generated types.

## Do not use it ##

Use package `v4l2` to do realtime image capture, as shown in example
[examples/capture](../capture).
Use package `v4l2` to do realtime image capture, as shown in examples
[capture0](../capture0) and [capture1](../capture1).

:warning:

Expand Down
1 change: 1 addition & 0 deletions examples/cgo_types/cgo_capture.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

/*
#cgo linux CFLAGS: -I ${SRCDIR}/../../include/
#include <linux/videodev2.h>
*/
import "C"
Expand Down
2 changes: 1 addition & 1 deletion examples/manual_types/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ cgo-generated types (see v4l2 package) for stability.
Do not use it.

If you want to play around with image capture, use the
[examples/capture](../capture).
[capture0](../capture0) or [capture1](../capture1) examples.

:warning:

Expand Down
11 changes: 11 additions & 0 deletions include/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# V4L2 Include Files

Here we provide a copy of the v4l2 header files as per the
[kernel.org docs](https://docs.kernel.org/userspace-api/media/v4l/func-ioctl.html#description):

> Macros and defines specifying V4L2 ioctl requests are located in the `videodev2.h` header file.
> _**Applications should use their own copy, not include the version in the kernel sources on the system they compile on.**_
This helps to reduce compilation errors due to outdated headers installed in the user's system.

Headers have been obtained from `v4l-utils` repo as of commit [3b94a0ca4894d75de240b3ebb296071e551a261e](https://github.com/gjasny/v4l-utils/tree/3b94a0ca4894d75de240b3ebb296071e551a261e/include/linux)
108 changes: 108 additions & 0 deletions include/linux/v4l2-common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */
/*
* include/linux/v4l2-common.h
*
* Common V4L2 and V4L2 subdev definitions.
*
* Users are advised to #include this file either through videodev2.h
* (V4L2) or through v4l2-subdev.h (V4L2 subdev) rather than to refer
* to this file directly.
*
* Copyright (C) 2012 Nokia Corporation
* Contact: Sakari Ailus <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Alternatively you can redistribute this file under the terms of the
* BSD license as stated below:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. The names of its contributors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/

#ifndef __V4L2_COMMON__
#define __V4L2_COMMON__

#include <linux/types.h>

/*
*
* Selection interface definitions
*
*/

/* Current cropping area */
#define V4L2_SEL_TGT_CROP 0x0000
/* Default cropping area */
#define V4L2_SEL_TGT_CROP_DEFAULT 0x0001
/* Cropping bounds */
#define V4L2_SEL_TGT_CROP_BOUNDS 0x0002
/* Native frame size */
#define V4L2_SEL_TGT_NATIVE_SIZE 0x0003
/* Current composing area */
#define V4L2_SEL_TGT_COMPOSE 0x0100
/* Default composing area */
#define V4L2_SEL_TGT_COMPOSE_DEFAULT 0x0101
/* Composing bounds */
#define V4L2_SEL_TGT_COMPOSE_BOUNDS 0x0102
/* Current composing area plus all padding pixels */
#define V4L2_SEL_TGT_COMPOSE_PADDED 0x0103

/* Selection flags */
#define V4L2_SEL_FLAG_GE (1 << 0)
#define V4L2_SEL_FLAG_LE (1 << 1)
#define V4L2_SEL_FLAG_KEEP_CONFIG (1 << 2)

struct v4l2_edid {
__u32 pad;
__u32 start_block;
__u32 blocks;
__u32 reserved[5];
__u8 *edid;
};

/* Backward compatibility target definitions --- to be removed. */
#define V4L2_SEL_TGT_CROP_ACTIVE V4L2_SEL_TGT_CROP
#define V4L2_SEL_TGT_COMPOSE_ACTIVE V4L2_SEL_TGT_COMPOSE
#define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL V4L2_SEL_TGT_CROP
#define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE
#define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS V4L2_SEL_TGT_CROP_BOUNDS
#define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS

/* Backward compatibility flag definitions --- to be removed. */
#define V4L2_SUBDEV_SEL_FLAG_SIZE_GE V4L2_SEL_FLAG_GE
#define V4L2_SUBDEV_SEL_FLAG_SIZE_LE V4L2_SEL_FLAG_LE
#define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG

#endif /* __V4L2_COMMON__ */
Loading

0 comments on commit a16f71b

Please sign in to comment.