* [PATCH 0/5] v4l2-ctl: add SDR device support
@ 2014-02-09 6:05 Antti Palosaari
2014-02-09 6:05 ` [PATCH 1/5] libdvbv5: better handle ATSC/Annex B Antti Palosaari
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Antti Palosaari @ 2014-02-09 6:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Hans Verkuil, Antti Palosaari
That is here too:
http://git.linuxtv.org/anttip/v4l-utils.git/shortlog/refs/heads/sdr
I will pull request it soon.
regards
Antti
Antti Palosaari (4):
synch videodev2.h headers with kernel SDR API
v4l2-ctl: add tuner support for SDR tuners
v4l2-ctl: add support for SDR FMT
v4l2-ctl: implement list SDR buffers command
Mauro Carvalho Chehab (1):
libdvbv5: better handle ATSC/Annex B
contrib/freebsd/include/linux/videodev2.h | 16 +++++
include/linux/videodev2.h | 16 +++++
lib/libdvbv5/dvb-file.c | 33 +++++++++-
utils/v4l2-ctl/Makefile.am | 2 +-
utils/v4l2-ctl/v4l2-ctl-common.cpp | 1 +
utils/v4l2-ctl/v4l2-ctl-sdr.cpp | 104 ++++++++++++++++++++++++++++++
utils/v4l2-ctl/v4l2-ctl-streaming.cpp | 6 ++
utils/v4l2-ctl/v4l2-ctl-tuner.cpp | 53 ++++++++++++---
utils/v4l2-ctl/v4l2-ctl.cpp | 23 +++++++
utils/v4l2-ctl/v4l2-ctl.h | 13 ++++
10 files changed, 255 insertions(+), 12 deletions(-)
create mode 100644 utils/v4l2-ctl/v4l2-ctl-sdr.cpp
--
1.8.5.3
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/5] libdvbv5: better handle ATSC/Annex B
2014-02-09 6:05 [PATCH 0/5] v4l2-ctl: add SDR device support Antti Palosaari
@ 2014-02-09 6:05 ` Antti Palosaari
2014-02-09 6:05 ` [PATCH 2/5] synch videodev2.h headers with kernel SDR API Antti Palosaari
` (3 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Antti Palosaari @ 2014-02-09 6:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Hans Verkuil
From: Mauro Carvalho Chehab <m.chehab@samsung.com>
As DVBv3 is confusing with regards to ATSC and ClearQAM (DVB-C
annex B), userpace apps also only differenciate between ATSC and
ClearQAM via modulation.
However, when using DVBv5, may be using the delivery system
in order to enforce one or the other.
In any case, the DVB API should clearly identify between ATSC
and ClearQAM.
So, make the API to better handle it, fixing the delivery
system if needed, when reading or write a file.
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
---
lib/libdvbv5/dvb-file.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/lib/libdvbv5/dvb-file.c b/lib/libdvbv5/dvb-file.c
index 1c33a90..e0cef34 100644
--- a/lib/libdvbv5/dvb-file.c
+++ b/lib/libdvbv5/dvb-file.c
@@ -88,6 +88,32 @@ int retrieve_entry_prop(struct dvb_entry *entry,
return -1;
}
+static void adjust_delsys(struct dvb_entry *entry)
+{
+ uint32_t delsys = SYS_UNDEFINED;
+
+ retrieve_entry_prop(entry, DTV_DELIVERY_SYSTEM, &delsys);
+ switch (delsys) {
+ case SYS_ATSC:
+ case SYS_DVBC_ANNEX_B: {
+ uint32_t modulation = VSB_8;
+
+ retrieve_entry_prop(entry, DTV_MODULATION, &modulation);
+ switch (modulation) {
+ case VSB_8:
+ case VSB_16:
+ delsys = SYS_ATSC;
+ break;
+ default:
+ delsys = SYS_DVBC_ANNEX_B;
+ break;
+ }
+ store_entry_prop(entry, DTV_DELIVERY_SYSTEM, delsys);
+ break;
+ }
+ } /* switch */
+}
+
/*
* Generic parse function for all formats each channel is contained into
* just one line.
@@ -242,7 +268,7 @@ struct dvb_file *parse_format_oneline(const char *fname,
entry->props[entry->n_props].cmd = DTV_INVERSION;
entry->props[entry->n_props++].u.data = INVERSION_AUTO;
}
-
+ adjust_delsys(entry);
} while (1);
fclose(fd);
free(buf);
@@ -330,6 +356,7 @@ int write_format_oneline(const char *fname,
delsys);
goto error;
}
+ adjust_delsys(entry);
if (parse_file->has_delsys_id) {
fprintf(fp, "%s", formats[i].id);
first = 0;
@@ -596,6 +623,7 @@ struct dvb_file *read_dvb_file(const char *fname)
dvb_file->first_entry = calloc(sizeof(*entry), 1);
entry = dvb_file->first_entry;
} else {
+ adjust_delsys(entry);
entry->next = calloc(sizeof(*entry), 1);
entry = entry->next;
}
@@ -644,6 +672,8 @@ struct dvb_file *read_dvb_file(const char *fname)
}
}
} while (1);
+ if (entry)
+ adjust_delsys(entry);
fclose(fd);
return dvb_file;
@@ -668,6 +698,7 @@ int write_dvb_file(const char *fname, struct dvb_file *dvb_file)
}
for (entry = dvb_file->first_entry; entry != NULL; entry = entry->next) {
+ adjust_delsys(entry);
if (entry->channel) {
fprintf(fp, "[%s]\n", entry->channel);
if (entry->vchannel)
--
1.8.5.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/5] synch videodev2.h headers with kernel SDR API
2014-02-09 6:05 [PATCH 0/5] v4l2-ctl: add SDR device support Antti Palosaari
2014-02-09 6:05 ` [PATCH 1/5] libdvbv5: better handle ATSC/Annex B Antti Palosaari
@ 2014-02-09 6:05 ` Antti Palosaari
2014-02-10 9:08 ` Hans Verkuil
2014-02-09 6:05 ` [PATCH 3/5] v4l2-ctl: add tuner support for SDR tuners Antti Palosaari
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Antti Palosaari @ 2014-02-09 6:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Hans Verkuil, Antti Palosaari
Cc: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Antti Palosaari <crope@iki.fi>
---
contrib/freebsd/include/linux/videodev2.h | 16 ++++++++++++++++
include/linux/videodev2.h | 16 ++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/contrib/freebsd/include/linux/videodev2.h b/contrib/freebsd/include/linux/videodev2.h
index 5c75762..6d49f97 100644
--- a/contrib/freebsd/include/linux/videodev2.h
+++ b/contrib/freebsd/include/linux/videodev2.h
@@ -173,6 +173,7 @@ enum v4l2_buf_type {
#endif
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
+ V4L2_BUF_TYPE_SDR_CAPTURE = 11,
/* Deprecated, do not use */
V4L2_BUF_TYPE_PRIVATE = 0x80,
};
@@ -193,6 +194,8 @@ enum v4l2_tuner_type {
V4L2_TUNER_RADIO = 1,
V4L2_TUNER_ANALOG_TV = 2,
V4L2_TUNER_DIGITAL_TV = 3,
+ V4L2_TUNER_ADC = 4,
+ V4L2_TUNER_RF = 5,
};
enum v4l2_memory {
@@ -298,6 +301,8 @@ struct v4l2_capability {
#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
#define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
+#define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */
+
#define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
@@ -1373,6 +1378,7 @@ struct v4l2_modulator {
#define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
#define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
+#define V4L2_TUNER_CAP_1HZ 0x1000
/* Flags for the 'rxsubchans' field */
#define V4L2_TUNER_SUB_MONO 0x0001
@@ -1726,6 +1732,15 @@ struct v4l2_pix_format_mplane {
} __attribute__ ((packed));
/**
+ * struct v4l2_format_sdr - SDR format definition
+ * @pixelformat: little endian four character code (fourcc)
+ */
+struct v4l2_format_sdr {
+ uint32_t pixelformat;
+ uint8_t reserved[28];
+} __attribute__ ((packed));
+
+/**
* struct v4l2_format - stream data format
* @type: enum v4l2_buf_type; type of the data stream
* @pix: definition of an image format
@@ -1743,6 +1758,7 @@ struct v4l2_format {
struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
+ struct v4l2_format_sdr sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
uint8_t raw_data[200]; /* user-defined */
} fmt;
};
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 6ae7bbe..27fedfe 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -139,6 +139,7 @@ enum v4l2_buf_type {
#endif
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
+ V4L2_BUF_TYPE_SDR_CAPTURE = 11,
/* Deprecated, do not use */
V4L2_BUF_TYPE_PRIVATE = 0x80,
};
@@ -159,6 +160,8 @@ enum v4l2_tuner_type {
V4L2_TUNER_RADIO = 1,
V4L2_TUNER_ANALOG_TV = 2,
V4L2_TUNER_DIGITAL_TV = 3,
+ V4L2_TUNER_ADC = 4,
+ V4L2_TUNER_RF = 5,
};
enum v4l2_memory {
@@ -264,6 +267,8 @@ struct v4l2_capability {
#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
#define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
+#define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */
+
#define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
@@ -1339,6 +1344,7 @@ struct v4l2_modulator {
#define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
#define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
+#define V4L2_TUNER_CAP_1HZ 0x1000
/* Flags for the 'rxsubchans' field */
#define V4L2_TUNER_SUB_MONO 0x0001
@@ -1692,6 +1698,15 @@ struct v4l2_pix_format_mplane {
} __attribute__ ((packed));
/**
+ * struct v4l2_format_sdr - SDR format definition
+ * @pixelformat: little endian four character code (fourcc)
+ */
+struct v4l2_format_sdr {
+ __u32 pixelformat;
+ __u8 reserved[28];
+} __attribute__ ((packed));
+
+/**
* struct v4l2_format - stream data format
* @type: enum v4l2_buf_type; type of the data stream
* @pix: definition of an image format
@@ -1709,6 +1724,7 @@ struct v4l2_format {
struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
+ struct v4l2_format_sdr sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
__u8 raw_data[200]; /* user-defined */
} fmt;
};
--
1.8.5.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/5] v4l2-ctl: add tuner support for SDR tuners
2014-02-09 6:05 [PATCH 0/5] v4l2-ctl: add SDR device support Antti Palosaari
2014-02-09 6:05 ` [PATCH 1/5] libdvbv5: better handle ATSC/Annex B Antti Palosaari
2014-02-09 6:05 ` [PATCH 2/5] synch videodev2.h headers with kernel SDR API Antti Palosaari
@ 2014-02-09 6:05 ` Antti Palosaari
2014-02-10 9:10 ` Hans Verkuil
2014-02-09 6:05 ` [PATCH 4/5] v4l2-ctl: add support for SDR FMT Antti Palosaari
2014-02-09 6:05 ` [PATCH 5/5] v4l2-ctl: implement list SDR buffers command Antti Palosaari
4 siblings, 1 reply; 11+ messages in thread
From: Antti Palosaari @ 2014-02-09 6:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Hans Verkuil, Antti Palosaari
Add initial SDR support for tuner related operations.
Cc: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Antti Palosaari <crope@iki.fi>
---
utils/v4l2-ctl/v4l2-ctl-tuner.cpp | 53 +++++++++++++++++++++++++++++++--------
1 file changed, 43 insertions(+), 10 deletions(-)
diff --git a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
index 16e1652..0fc2371 100644
--- a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
@@ -116,6 +116,8 @@ static std::string tcap2s(unsigned cap)
if (cap & V4L2_TUNER_CAP_LOW)
s += "62.5 Hz ";
+ else if (cap & V4L2_TUNER_CAP_1HZ)
+ s += "1 Hz ";
else
s += "62.5 kHz ";
if (cap & V4L2_TUNER_CAP_NORM)
@@ -264,12 +266,24 @@ void tuner_set(int fd)
if (capabilities & V4L2_CAP_MODULATOR) {
type = V4L2_TUNER_RADIO;
modulator.index = tuner_index;
- if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0)
- fac = (modulator.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
+ if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0) {
+ if (modulator.capability & V4L2_TUNER_CAP_LOW)
+ fac = 16000;
+ else if (modulator.capability & V4L2_TUNER_CAP_1HZ)
+ fac = 1000000;
+ else
+ fac = 16;
+ }
} else if (capabilities & V4L2_CAP_TUNER) {
tuner.index = tuner_index;
if (doioctl(fd, VIDIOC_G_TUNER, &tuner) == 0) {
- fac = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
+ if (tuner.capability & V4L2_TUNER_CAP_LOW)
+ fac = 16000;
+ else if (tuner.capability & V4L2_TUNER_CAP_1HZ)
+ fac = 1000000;
+ else
+ fac = 16;
+
type = tuner.type;
}
}
@@ -310,6 +324,9 @@ void tuner_set(int fd)
if (band.capability & V4L2_TUNER_CAP_LOW)
printf("\tFrequency Range: %.3f MHz - %.3f MHz\n",
band.rangelow / 16000.0, band.rangehigh / 16000.0);
+ else if (band.capability & V4L2_TUNER_CAP_1HZ)
+ printf("\tFrequency Range: %.6f MHz - %.6f MHz\n",
+ band.rangelow / 1000000.0, band.rangehigh / 1000000.0);
else
printf("\tFrequency Range: %.3f MHz - %.3f MHz\n",
band.rangelow / 16.0, band.rangehigh / 16.0);
@@ -345,13 +362,24 @@ void tuner_get(int fd)
if (capabilities & V4L2_CAP_MODULATOR) {
vf.type = V4L2_TUNER_RADIO;
modulator.index = tuner_index;
- if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0)
- fac = (modulator.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
+ if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0) {
+ if (modulator.capability & V4L2_TUNER_CAP_LOW)
+ fac = 16000;
+ else if (modulator.capability & V4L2_TUNER_CAP_1HZ)
+ fac = 1000000;
+ else
+ fac = 16;
+ }
} else {
vf.type = V4L2_TUNER_ANALOG_TV;
tuner.index = tuner_index;
if (doioctl(fd, VIDIOC_G_TUNER, &tuner) == 0) {
- fac = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
+ if (tuner.capability & V4L2_TUNER_CAP_LOW)
+ fac = 16000;
+ else if (tuner.capability & V4L2_TUNER_CAP_1HZ)
+ fac = 1000000;
+ else
+ fac = 16;
vf.type = tuner.type;
}
}
@@ -373,13 +401,18 @@ void tuner_get(int fd)
if (vt.capability & V4L2_TUNER_CAP_LOW)
printf("\tFrequency range : %.3f MHz - %.3f MHz\n",
vt.rangelow / 16000.0, vt.rangehigh / 16000.0);
+ else if (vt.capability & V4L2_TUNER_CAP_1HZ)
+ printf("\tFrequency range : %.6f MHz - %.6f MHz\n",
+ vt.rangelow / 1000000.0, vt.rangehigh / 1000000.0);
else
printf("\tFrequency range : %.3f MHz - %.3f MHz\n",
vt.rangelow / 16.0, vt.rangehigh / 16.0);
- printf("\tSignal strength/AFC : %d%%/%d\n", (int)((vt.signal / 655.35)+0.5), vt.afc);
- printf("\tCurrent audio mode : %s\n", audmode2s(vt.audmode));
- printf("\tAvailable subchannels: %s\n",
- rxsubchans2s(vt.rxsubchans).c_str());
+
+ if (vt.type != V4L2_TUNER_ADC && vt.type != V4L2_TUNER_RF) {
+ printf("\tSignal strength/AFC : %d%%/%d\n", (int)((vt.signal / 655.35)+0.5), vt.afc);
+ printf("\tCurrent audio mode : %s\n", audmode2s(vt.audmode));
+ printf("\tAvailable subchannels: %s\n", rxsubchans2s(vt.rxsubchans).c_str());
+ }
}
}
--
1.8.5.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/5] v4l2-ctl: add support for SDR FMT
2014-02-09 6:05 [PATCH 0/5] v4l2-ctl: add SDR device support Antti Palosaari
` (2 preceding siblings ...)
2014-02-09 6:05 ` [PATCH 3/5] v4l2-ctl: add tuner support for SDR tuners Antti Palosaari
@ 2014-02-09 6:05 ` Antti Palosaari
2014-02-10 9:11 ` Hans Verkuil
2014-02-09 6:05 ` [PATCH 5/5] v4l2-ctl: implement list SDR buffers command Antti Palosaari
4 siblings, 1 reply; 11+ messages in thread
From: Antti Palosaari @ 2014-02-09 6:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Hans Verkuil, Antti Palosaari
Add support for FMT IOCTL operations used for SDR receivers.
Cc: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Antti Palosaari <crope@iki.fi>
---
utils/v4l2-ctl/Makefile.am | 2 +-
utils/v4l2-ctl/v4l2-ctl-common.cpp | 1 +
utils/v4l2-ctl/v4l2-ctl-sdr.cpp | 104 +++++++++++++++++++++++++++++++++++++
utils/v4l2-ctl/v4l2-ctl.cpp | 22 ++++++++
utils/v4l2-ctl/v4l2-ctl.h | 12 +++++
5 files changed, 140 insertions(+), 1 deletion(-)
create mode 100644 utils/v4l2-ctl/v4l2-ctl-sdr.cpp
diff --git a/utils/v4l2-ctl/Makefile.am b/utils/v4l2-ctl/Makefile.am
index b5744e7..becaa15 100644
--- a/utils/v4l2-ctl/Makefile.am
+++ b/utils/v4l2-ctl/Makefile.am
@@ -8,5 +8,5 @@ ivtv_ctl_LDFLAGS = -lm
v4l2_ctl_SOURCES = v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cpp \
v4l2-ctl-io.cpp v4l2-ctl-stds.cpp v4l2-ctl-vidcap.cpp v4l2-ctl-vidout.cpp \
v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \
- v4l2-ctl-streaming.cpp v4l2-ctl-test-patterns.cpp
+ v4l2-ctl-streaming.cpp v4l2-ctl-test-patterns.cpp v4l2-ctl-sdr.cpp
v4l2_ctl_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la
diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
index fe570b0..37099cd 100644
--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
@@ -64,6 +64,7 @@ void common_usage(void)
" --help-io input/output options\n"
" --help-misc miscellaneous options\n"
" --help-overlay overlay format options\n"
+ " --help-sdr SDR format options\n"
" --help-selection crop/selection options\n"
" --help-stds standards and other video timings options\n"
" --help-streaming streaming options\n"
diff --git a/utils/v4l2-ctl/v4l2-ctl-sdr.cpp b/utils/v4l2-ctl/v4l2-ctl-sdr.cpp
new file mode 100644
index 0000000..9c9a6c4
--- /dev/null
+++ b/utils/v4l2-ctl/v4l2-ctl-sdr.cpp
@@ -0,0 +1,104 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <dirent.h>
+#include <math.h>
+#include <config.h>
+
+#include <linux/videodev2.h>
+#include <libv4l2.h>
+#include <string>
+
+#include "v4l2-ctl.h"
+
+static struct v4l2_format vfmt; /* set_format/get_format */
+
+void sdr_usage(void)
+{
+ printf("\nSDR Formats options:\n"
+ " --list-formats-sdr display supported SDR formats [VIDIOC_ENUM_FMT]\n"
+ " --get-fmt-sdr query the SDR capture format [VIDIOC_G_FMT]\n"
+ " --set-fmt-sdr=<f> set the SDR capture format [VIDIOC_S_FMT]\n"
+ " parameter is either the format index as reported by\n"
+ " --list-formats-sdr, or the fourcc value as a string\n"
+ " --try-fmt-sdr=<f> try the SDR capture format [VIDIOC_TRY_FMT]\n"
+ " parameter is either the format index as reported by\n"
+ " --list-formats-sdr, or the fourcc value as a string\n"
+ );
+}
+
+void sdr_cmd(int ch, char *optarg)
+{
+ switch (ch) {
+ case OptSetSdrFormat:
+ case OptTrySdrFormat:
+ if (strlen(optarg) == 0) {
+ sdr_usage();
+ exit(1);
+ } else if (strlen(optarg) == 4) {
+ vfmt.fmt.sdr.pixelformat = v4l2_fourcc(optarg[0],
+ optarg[1], optarg[2], optarg[3]);
+ } else {
+ vfmt.fmt.sdr.pixelformat = strtol(optarg, 0L, 0);
+ }
+ break;
+ }
+}
+
+void sdr_set(int fd)
+{
+ int ret;
+
+ if (options[OptSetSdrFormat] || options[OptTrySdrFormat]) {
+ struct v4l2_format in_vfmt;
+
+ in_vfmt.type = V4L2_BUF_TYPE_SDR_CAPTURE;
+ in_vfmt.fmt.sdr.pixelformat = vfmt.fmt.sdr.pixelformat;
+
+ if (in_vfmt.fmt.sdr.pixelformat < 256) {
+ struct v4l2_fmtdesc fmt;
+
+ fmt.index = in_vfmt.fmt.sdr.pixelformat;
+ fmt.type = V4L2_BUF_TYPE_SDR_CAPTURE;
+
+ if (doioctl(fd, VIDIOC_ENUM_FMT, &fmt))
+ fmt.pixelformat = 0;
+
+ in_vfmt.fmt.sdr.pixelformat = fmt.pixelformat;
+ }
+
+ if (options[OptSetSdrFormat])
+ ret = doioctl(fd, VIDIOC_S_FMT, &in_vfmt);
+ else
+ ret = doioctl(fd, VIDIOC_TRY_FMT, &in_vfmt);
+ if (ret == 0 && (verbose || options[OptTrySdrFormat]))
+ printfmt(in_vfmt);
+ }
+}
+
+void sdr_get(int fd)
+{
+ if (options[OptGetSdrFormat]) {
+ vfmt.type = V4L2_BUF_TYPE_SDR_CAPTURE;
+ if (doioctl(fd, VIDIOC_G_FMT, &vfmt) == 0)
+ printfmt(vfmt);
+ }
+}
+
+void sdr_list(int fd)
+{
+ if (options[OptListSdrFormats]) {
+ printf("ioctl: VIDIOC_ENUM_FMT\n");
+ print_video_formats(fd, V4L2_BUF_TYPE_SDR_CAPTURE);
+ }
+}
diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
index c64c2fe..855613c 100644
--- a/utils/v4l2-ctl/v4l2-ctl.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl.cpp
@@ -85,6 +85,7 @@ static struct option long_options[] = {
{"help-vidout", no_argument, 0, OptHelpVidOut},
{"help-overlay", no_argument, 0, OptHelpOverlay},
{"help-vbi", no_argument, 0, OptHelpVbi},
+ {"help-sdr", no_argument, 0, OptHelpSdr},
{"help-selection", no_argument, 0, OptHelpSelection},
{"help-misc", no_argument, 0, OptHelpMisc},
{"help-streaming", no_argument, 0, OptHelpStreaming},
@@ -111,6 +112,7 @@ static struct option long_options[] = {
{"list-framesizes", required_argument, 0, OptListFrameSizes},
{"list-frameintervals", required_argument, 0, OptListFrameIntervals},
{"list-formats-overlay", no_argument, 0, OptListOverlayFormats},
+ {"list-formats-sdr", no_argument, 0, OptListSdrFormats},
{"list-formats-out", no_argument, 0, OptListOutFormats},
{"list-formats-out-mplane", no_argument, 0, OptListOutMplaneFormats},
{"get-standard", no_argument, 0, OptGetStandard},
@@ -145,6 +147,9 @@ static struct option long_options[] = {
{"try-fmt-sliced-vbi-out", required_argument, 0, OptTrySlicedVbiOutFormat},
{"get-fmt-vbi", no_argument, 0, OptGetVbiFormat},
{"get-fmt-vbi-out", no_argument, 0, OptGetVbiOutFormat},
+ {"get-fmt-sdr", no_argument, 0, OptGetSdrFormat},
+ {"set-fmt-sdr", required_argument, 0, OptSetSdrFormat},
+ {"try-fmt-sdr", required_argument, 0, OptTrySdrFormat},
{"get-sliced-vbi-cap", no_argument, 0, OptGetSlicedVbiCap},
{"get-sliced-vbi-out-cap", no_argument, 0, OptGetSlicedVbiOutCap},
{"get-fbuf", no_argument, 0, OptGetFBuf},
@@ -217,6 +222,7 @@ static void usage_all(void)
vidout_usage();
overlay_usage();
vbi_usage();
+ sdr_usage();
selection_usage();
misc_usage();
streaming_usage();
@@ -285,6 +291,8 @@ std::string buftype2s(int type)
return "Sliced VBI Output";
case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
return "Video Output Overlay";
+ case V4L2_BUF_TYPE_SDR_CAPTURE:
+ return "SDR Capture";
default:
return "Unknown (" + num2s(type) + ")";
}
@@ -458,6 +466,9 @@ void printfmt(const struct v4l2_format &vfmt)
}
printf("\tI/O Size : %u\n", vfmt.fmt.sliced.io_size);
break;
+ case V4L2_BUF_TYPE_SDR_CAPTURE:
+ printf("\tSample Format : %s\n", fcc2s(vfmt.fmt.sdr.pixelformat).c_str());
+ break;
}
}
@@ -519,6 +530,8 @@ static std::string cap2s(unsigned cap)
s += "\t\tSliced VBI Capture\n";
if (cap & V4L2_CAP_SLICED_VBI_OUTPUT)
s += "\t\tSliced VBI Output\n";
+ if (cap & V4L2_CAP_SDR_CAPTURE)
+ s += "\t\tSDR Capture\n";
if (cap & V4L2_CAP_RDS_CAPTURE)
s += "\t\tRDS Capture\n";
if (cap & V4L2_CAP_RDS_OUTPUT)
@@ -736,6 +749,7 @@ __u32 find_pixel_format(int fd, unsigned index, bool output, bool mplane)
else
fmt.type = mplane ? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE :
V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
if (doioctl(fd, VIDIOC_ENUM_FMT, &fmt))
return 0;
return fmt.pixelformat;
@@ -807,6 +821,9 @@ int main(int argc, char **argv)
case OptHelpVbi:
vbi_usage();
return 0;
+ case OptHelpSdr:
+ sdr_usage();
+ return 0;
case OptHelpSelection:
selection_usage();
return 0;
@@ -860,6 +877,7 @@ int main(int argc, char **argv)
vidout_cmd(ch, optarg);
overlay_cmd(ch, optarg);
vbi_cmd(ch, optarg);
+ sdr_cmd(ch, optarg);
selection_cmd(ch, optarg);
misc_cmd(ch, optarg);
streaming_cmd(ch, optarg);
@@ -921,6 +939,7 @@ int main(int argc, char **argv)
options[OptGetVbiOutFormat] = 1;
options[OptGetSlicedVbiFormat] = 1;
options[OptGetSlicedVbiOutFormat] = 1;
+ options[OptGetSdrFormat] = 1;
options[OptGetFBuf] = 1;
options[OptGetCropCap] = 1;
options[OptGetOutputCropCap] = 1;
@@ -964,6 +983,7 @@ int main(int argc, char **argv)
vidout_set(fd);
overlay_set(fd);
vbi_set(fd);
+ sdr_set(fd);
selection_set(fd);
streaming_set(fd);
misc_set(fd);
@@ -978,6 +998,7 @@ int main(int argc, char **argv)
vidout_get(fd);
overlay_get(fd);
vbi_get(fd);
+ sdr_get(fd);
selection_get(fd);
misc_get(fd);
@@ -990,6 +1011,7 @@ int main(int argc, char **argv)
vidout_list(fd);
overlay_list(fd);
vbi_list(fd);
+ sdr_list(fd);
streaming_list(fd);
if (options[OptWaitForEvent]) {
diff --git a/utils/v4l2-ctl/v4l2-ctl.h b/utils/v4l2-ctl/v4l2-ctl.h
index 03c45b7..108198d 100644
--- a/utils/v4l2-ctl/v4l2-ctl.h
+++ b/utils/v4l2-ctl/v4l2-ctl.h
@@ -44,6 +44,7 @@ enum Option {
OptGetOutputOverlayFormat,
OptGetVbiFormat,
OptGetVbiOutFormat,
+ OptGetSdrFormat,
OptGetVideoOutFormat,
OptGetVideoOutMplaneFormat,
OptSetSlicedVbiOutFormat,
@@ -51,6 +52,7 @@ enum Option {
OptSetOverlayFormat,
//OptSetVbiFormat, TODO
//OptSetVbiOutFormat, TODO
+ OptSetSdrFormat,
OptSetVideoOutFormat,
OptSetVideoOutMplaneFormat,
OptTryVideoOutFormat,
@@ -63,6 +65,7 @@ enum Option {
OptTryOverlayFormat,
//OptTryVbiFormat, TODO
//OptTryVbiOutFormat, TODO
+ OptTrySdrFormat,
OptAll,
OptListStandards,
OptListFormats,
@@ -72,6 +75,7 @@ enum Option {
OptListFrameSizes,
OptListFrameIntervals,
OptListOverlayFormats,
+ OptListSdrFormats,
OptListOutFormats,
OptListOutMplaneFormats,
OptLogStatus,
@@ -153,6 +157,7 @@ enum Option {
OptHelpVidOut,
OptHelpOverlay,
OptHelpVbi,
+ OptHelpSdr,
OptHelpSelection,
OptHelpMisc,
OptHelpStreaming,
@@ -257,6 +262,13 @@ void vbi_set(int fd);
void vbi_get(int fd);
void vbi_list(int fd);
+// v4l2-ctl-sdr.cpp
+void sdr_usage(void);
+void sdr_cmd(int ch, char *optarg);
+void sdr_set(int fd);
+void sdr_get(int fd);
+void sdr_list(int fd);
+
// v4l2-ctl-selection.cpp
void selection_usage(void);
void selection_cmd(int ch, char *optarg);
--
1.8.5.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/5] v4l2-ctl: implement list SDR buffers command
2014-02-09 6:05 [PATCH 0/5] v4l2-ctl: add SDR device support Antti Palosaari
` (3 preceding siblings ...)
2014-02-09 6:05 ` [PATCH 4/5] v4l2-ctl: add support for SDR FMT Antti Palosaari
@ 2014-02-09 6:05 ` Antti Palosaari
2014-02-10 9:11 ` Hans Verkuil
4 siblings, 1 reply; 11+ messages in thread
From: Antti Palosaari @ 2014-02-09 6:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Hans Verkuil, Antti Palosaari
Cc: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Antti Palosaari <crope@iki.fi>
---
utils/v4l2-ctl/v4l2-ctl-streaming.cpp | 6 ++++++
utils/v4l2-ctl/v4l2-ctl.cpp | 1 +
utils/v4l2-ctl/v4l2-ctl.h | 1 +
3 files changed, 8 insertions(+)
diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
index 13ee8ec..925d73d 100644
--- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
@@ -78,6 +78,8 @@ void streaming_usage(void)
" list all sliced VBI buffers [VIDIOC_QUERYBUF]\n"
" --list-buffers-sliced-vbi-out\n"
" list all sliced VBI output buffers [VIDIOC_QUERYBUF]\n"
+ " --list-buffers-sdr\n"
+ " list all SDR RX buffers [VIDIOC_QUERYBUF]\n"
);
}
@@ -986,4 +988,8 @@ void streaming_list(int fd)
if (options[OptListBuffersSlicedVbiOut]) {
list_buffers(fd, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
}
+
+ if (options[OptListBuffersSdr]) {
+ list_buffers(fd, V4L2_BUF_TYPE_SDR_CAPTURE);
+ }
}
diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
index 855613c..a602366 100644
--- a/utils/v4l2-ctl/v4l2-ctl.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl.cpp
@@ -198,6 +198,7 @@ static struct option long_options[] = {
{"list-buffers-sliced-vbi", no_argument, 0, OptListBuffersSlicedVbi},
{"list-buffers-vbi-out", no_argument, 0, OptListBuffersVbiOut},
{"list-buffers-sliced-vbi-out", no_argument, 0, OptListBuffersSlicedVbiOut},
+ {"list-buffers-sdr", no_argument, 0, OptListBuffersSdr},
{"stream-count", required_argument, 0, OptStreamCount},
{"stream-skip", required_argument, 0, OptStreamSkip},
{"stream-loop", no_argument, 0, OptStreamLoop},
diff --git a/utils/v4l2-ctl/v4l2-ctl.h b/utils/v4l2-ctl/v4l2-ctl.h
index 108198d..1caac34 100644
--- a/utils/v4l2-ctl/v4l2-ctl.h
+++ b/utils/v4l2-ctl/v4l2-ctl.h
@@ -139,6 +139,7 @@ enum Option {
OptListBuffersSlicedVbi,
OptListBuffersVbiOut,
OptListBuffersSlicedVbiOut,
+ OptListBuffersSdr,
OptStreamCount,
OptStreamSkip,
OptStreamLoop,
--
1.8.5.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/5] synch videodev2.h headers with kernel SDR API
2014-02-09 6:05 ` [PATCH 2/5] synch videodev2.h headers with kernel SDR API Antti Palosaari
@ 2014-02-10 9:08 ` Hans Verkuil
2014-02-10 9:17 ` Antti Palosaari
0 siblings, 1 reply; 11+ messages in thread
From: Hans Verkuil @ 2014-02-10 9:08 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-media, Mauro Carvalho Chehab
Hi Antti,
I'm not sure if you know this, but to sync with a new kernel you use
'make sync-with-kernel'. Not a problem here, I'll do that anyway once the
SDR API is merged.
Regards,
Hans
On 02/09/2014 07:05 AM, Antti Palosaari wrote:
> Cc: Hans Verkuil <hverkuil@xs4all.nl>
> Signed-off-by: Antti Palosaari <crope@iki.fi>
> ---
> contrib/freebsd/include/linux/videodev2.h | 16 ++++++++++++++++
> include/linux/videodev2.h | 16 ++++++++++++++++
> 2 files changed, 32 insertions(+)
>
> diff --git a/contrib/freebsd/include/linux/videodev2.h b/contrib/freebsd/include/linux/videodev2.h
> index 5c75762..6d49f97 100644
> --- a/contrib/freebsd/include/linux/videodev2.h
> +++ b/contrib/freebsd/include/linux/videodev2.h
> @@ -173,6 +173,7 @@ enum v4l2_buf_type {
> #endif
> V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
> V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
> + V4L2_BUF_TYPE_SDR_CAPTURE = 11,
> /* Deprecated, do not use */
> V4L2_BUF_TYPE_PRIVATE = 0x80,
> };
> @@ -193,6 +194,8 @@ enum v4l2_tuner_type {
> V4L2_TUNER_RADIO = 1,
> V4L2_TUNER_ANALOG_TV = 2,
> V4L2_TUNER_DIGITAL_TV = 3,
> + V4L2_TUNER_ADC = 4,
> + V4L2_TUNER_RF = 5,
> };
>
> enum v4l2_memory {
> @@ -298,6 +301,8 @@ struct v4l2_capability {
> #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
> #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
>
> +#define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */
> +
> #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
> #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
> #define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
> @@ -1373,6 +1378,7 @@ struct v4l2_modulator {
> #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
> #define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
> #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
> +#define V4L2_TUNER_CAP_1HZ 0x1000
>
> /* Flags for the 'rxsubchans' field */
> #define V4L2_TUNER_SUB_MONO 0x0001
> @@ -1726,6 +1732,15 @@ struct v4l2_pix_format_mplane {
> } __attribute__ ((packed));
>
> /**
> + * struct v4l2_format_sdr - SDR format definition
> + * @pixelformat: little endian four character code (fourcc)
> + */
> +struct v4l2_format_sdr {
> + uint32_t pixelformat;
> + uint8_t reserved[28];
> +} __attribute__ ((packed));
> +
> +/**
> * struct v4l2_format - stream data format
> * @type: enum v4l2_buf_type; type of the data stream
> * @pix: definition of an image format
> @@ -1743,6 +1758,7 @@ struct v4l2_format {
> struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
> struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
> struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
> + struct v4l2_format_sdr sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
> uint8_t raw_data[200]; /* user-defined */
> } fmt;
> };
> diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
> index 6ae7bbe..27fedfe 100644
> --- a/include/linux/videodev2.h
> +++ b/include/linux/videodev2.h
> @@ -139,6 +139,7 @@ enum v4l2_buf_type {
> #endif
> V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
> V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
> + V4L2_BUF_TYPE_SDR_CAPTURE = 11,
> /* Deprecated, do not use */
> V4L2_BUF_TYPE_PRIVATE = 0x80,
> };
> @@ -159,6 +160,8 @@ enum v4l2_tuner_type {
> V4L2_TUNER_RADIO = 1,
> V4L2_TUNER_ANALOG_TV = 2,
> V4L2_TUNER_DIGITAL_TV = 3,
> + V4L2_TUNER_ADC = 4,
> + V4L2_TUNER_RF = 5,
> };
>
> enum v4l2_memory {
> @@ -264,6 +267,8 @@ struct v4l2_capability {
> #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
> #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
>
> +#define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */
> +
> #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
> #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
> #define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
> @@ -1339,6 +1344,7 @@ struct v4l2_modulator {
> #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
> #define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
> #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
> +#define V4L2_TUNER_CAP_1HZ 0x1000
>
> /* Flags for the 'rxsubchans' field */
> #define V4L2_TUNER_SUB_MONO 0x0001
> @@ -1692,6 +1698,15 @@ struct v4l2_pix_format_mplane {
> } __attribute__ ((packed));
>
> /**
> + * struct v4l2_format_sdr - SDR format definition
> + * @pixelformat: little endian four character code (fourcc)
> + */
> +struct v4l2_format_sdr {
> + __u32 pixelformat;
> + __u8 reserved[28];
> +} __attribute__ ((packed));
> +
> +/**
> * struct v4l2_format - stream data format
> * @type: enum v4l2_buf_type; type of the data stream
> * @pix: definition of an image format
> @@ -1709,6 +1724,7 @@ struct v4l2_format {
> struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
> struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
> struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
> + struct v4l2_format_sdr sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
> __u8 raw_data[200]; /* user-defined */
> } fmt;
> };
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/5] v4l2-ctl: add tuner support for SDR tuners
2014-02-09 6:05 ` [PATCH 3/5] v4l2-ctl: add tuner support for SDR tuners Antti Palosaari
@ 2014-02-10 9:10 ` Hans Verkuil
0 siblings, 0 replies; 11+ messages in thread
From: Hans Verkuil @ 2014-02-10 9:10 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-media, Mauro Carvalho Chehab
On 02/09/2014 07:05 AM, Antti Palosaari wrote:
> Add initial SDR support for tuner related operations.
>
> Cc: Hans Verkuil <hverkuil@xs4all.nl>
> Signed-off-by: Antti Palosaari <crope@iki.fi>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Thanks!
Hans
> ---
> utils/v4l2-ctl/v4l2-ctl-tuner.cpp | 53 +++++++++++++++++++++++++++++++--------
> 1 file changed, 43 insertions(+), 10 deletions(-)
>
> diff --git a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
> index 16e1652..0fc2371 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
> @@ -116,6 +116,8 @@ static std::string tcap2s(unsigned cap)
>
> if (cap & V4L2_TUNER_CAP_LOW)
> s += "62.5 Hz ";
> + else if (cap & V4L2_TUNER_CAP_1HZ)
> + s += "1 Hz ";
> else
> s += "62.5 kHz ";
> if (cap & V4L2_TUNER_CAP_NORM)
> @@ -264,12 +266,24 @@ void tuner_set(int fd)
> if (capabilities & V4L2_CAP_MODULATOR) {
> type = V4L2_TUNER_RADIO;
> modulator.index = tuner_index;
> - if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0)
> - fac = (modulator.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
> + if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0) {
> + if (modulator.capability & V4L2_TUNER_CAP_LOW)
> + fac = 16000;
> + else if (modulator.capability & V4L2_TUNER_CAP_1HZ)
> + fac = 1000000;
> + else
> + fac = 16;
> + }
> } else if (capabilities & V4L2_CAP_TUNER) {
> tuner.index = tuner_index;
> if (doioctl(fd, VIDIOC_G_TUNER, &tuner) == 0) {
> - fac = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
> + if (tuner.capability & V4L2_TUNER_CAP_LOW)
> + fac = 16000;
> + else if (tuner.capability & V4L2_TUNER_CAP_1HZ)
> + fac = 1000000;
> + else
> + fac = 16;
> +
> type = tuner.type;
> }
> }
> @@ -310,6 +324,9 @@ void tuner_set(int fd)
> if (band.capability & V4L2_TUNER_CAP_LOW)
> printf("\tFrequency Range: %.3f MHz - %.3f MHz\n",
> band.rangelow / 16000.0, band.rangehigh / 16000.0);
> + else if (band.capability & V4L2_TUNER_CAP_1HZ)
> + printf("\tFrequency Range: %.6f MHz - %.6f MHz\n",
> + band.rangelow / 1000000.0, band.rangehigh / 1000000.0);
> else
> printf("\tFrequency Range: %.3f MHz - %.3f MHz\n",
> band.rangelow / 16.0, band.rangehigh / 16.0);
> @@ -345,13 +362,24 @@ void tuner_get(int fd)
> if (capabilities & V4L2_CAP_MODULATOR) {
> vf.type = V4L2_TUNER_RADIO;
> modulator.index = tuner_index;
> - if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0)
> - fac = (modulator.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
> + if (doioctl(fd, VIDIOC_G_MODULATOR, &modulator) == 0) {
> + if (modulator.capability & V4L2_TUNER_CAP_LOW)
> + fac = 16000;
> + else if (modulator.capability & V4L2_TUNER_CAP_1HZ)
> + fac = 1000000;
> + else
> + fac = 16;
> + }
> } else {
> vf.type = V4L2_TUNER_ANALOG_TV;
> tuner.index = tuner_index;
> if (doioctl(fd, VIDIOC_G_TUNER, &tuner) == 0) {
> - fac = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16;
> + if (tuner.capability & V4L2_TUNER_CAP_LOW)
> + fac = 16000;
> + else if (tuner.capability & V4L2_TUNER_CAP_1HZ)
> + fac = 1000000;
> + else
> + fac = 16;
> vf.type = tuner.type;
> }
> }
> @@ -373,13 +401,18 @@ void tuner_get(int fd)
> if (vt.capability & V4L2_TUNER_CAP_LOW)
> printf("\tFrequency range : %.3f MHz - %.3f MHz\n",
> vt.rangelow / 16000.0, vt.rangehigh / 16000.0);
> + else if (vt.capability & V4L2_TUNER_CAP_1HZ)
> + printf("\tFrequency range : %.6f MHz - %.6f MHz\n",
> + vt.rangelow / 1000000.0, vt.rangehigh / 1000000.0);
> else
> printf("\tFrequency range : %.3f MHz - %.3f MHz\n",
> vt.rangelow / 16.0, vt.rangehigh / 16.0);
> - printf("\tSignal strength/AFC : %d%%/%d\n", (int)((vt.signal / 655.35)+0.5), vt.afc);
> - printf("\tCurrent audio mode : %s\n", audmode2s(vt.audmode));
> - printf("\tAvailable subchannels: %s\n",
> - rxsubchans2s(vt.rxsubchans).c_str());
> +
> + if (vt.type != V4L2_TUNER_ADC && vt.type != V4L2_TUNER_RF) {
> + printf("\tSignal strength/AFC : %d%%/%d\n", (int)((vt.signal / 655.35)+0.5), vt.afc);
> + printf("\tCurrent audio mode : %s\n", audmode2s(vt.audmode));
> + printf("\tAvailable subchannels: %s\n", rxsubchans2s(vt.rxsubchans).c_str());
> + }
> }
> }
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/5] v4l2-ctl: add support for SDR FMT
2014-02-09 6:05 ` [PATCH 4/5] v4l2-ctl: add support for SDR FMT Antti Palosaari
@ 2014-02-10 9:11 ` Hans Verkuil
0 siblings, 0 replies; 11+ messages in thread
From: Hans Verkuil @ 2014-02-10 9:11 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-media, Mauro Carvalho Chehab
On 02/09/2014 07:05 AM, Antti Palosaari wrote:
> Add support for FMT IOCTL operations used for SDR receivers.
>
> Cc: Hans Verkuil <hverkuil@xs4all.nl>
> Signed-off-by: Antti Palosaari <crope@iki.fi>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Thanks!
Hans
> ---
> utils/v4l2-ctl/Makefile.am | 2 +-
> utils/v4l2-ctl/v4l2-ctl-common.cpp | 1 +
> utils/v4l2-ctl/v4l2-ctl-sdr.cpp | 104 +++++++++++++++++++++++++++++++++++++
> utils/v4l2-ctl/v4l2-ctl.cpp | 22 ++++++++
> utils/v4l2-ctl/v4l2-ctl.h | 12 +++++
> 5 files changed, 140 insertions(+), 1 deletion(-)
> create mode 100644 utils/v4l2-ctl/v4l2-ctl-sdr.cpp
>
> diff --git a/utils/v4l2-ctl/Makefile.am b/utils/v4l2-ctl/Makefile.am
> index b5744e7..becaa15 100644
> --- a/utils/v4l2-ctl/Makefile.am
> +++ b/utils/v4l2-ctl/Makefile.am
> @@ -8,5 +8,5 @@ ivtv_ctl_LDFLAGS = -lm
> v4l2_ctl_SOURCES = v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cpp \
> v4l2-ctl-io.cpp v4l2-ctl-stds.cpp v4l2-ctl-vidcap.cpp v4l2-ctl-vidout.cpp \
> v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \
> - v4l2-ctl-streaming.cpp v4l2-ctl-test-patterns.cpp
> + v4l2-ctl-streaming.cpp v4l2-ctl-test-patterns.cpp v4l2-ctl-sdr.cpp
> v4l2_ctl_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la
> diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> index fe570b0..37099cd 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> @@ -64,6 +64,7 @@ void common_usage(void)
> " --help-io input/output options\n"
> " --help-misc miscellaneous options\n"
> " --help-overlay overlay format options\n"
> + " --help-sdr SDR format options\n"
> " --help-selection crop/selection options\n"
> " --help-stds standards and other video timings options\n"
> " --help-streaming streaming options\n"
> diff --git a/utils/v4l2-ctl/v4l2-ctl-sdr.cpp b/utils/v4l2-ctl/v4l2-ctl-sdr.cpp
> new file mode 100644
> index 0000000..9c9a6c4
> --- /dev/null
> +++ b/utils/v4l2-ctl/v4l2-ctl-sdr.cpp
> @@ -0,0 +1,104 @@
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <inttypes.h>
> +#include <getopt.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +#include <ctype.h>
> +#include <errno.h>
> +#include <sys/ioctl.h>
> +#include <sys/time.h>
> +#include <dirent.h>
> +#include <math.h>
> +#include <config.h>
> +
> +#include <linux/videodev2.h>
> +#include <libv4l2.h>
> +#include <string>
> +
> +#include "v4l2-ctl.h"
> +
> +static struct v4l2_format vfmt; /* set_format/get_format */
> +
> +void sdr_usage(void)
> +{
> + printf("\nSDR Formats options:\n"
> + " --list-formats-sdr display supported SDR formats [VIDIOC_ENUM_FMT]\n"
> + " --get-fmt-sdr query the SDR capture format [VIDIOC_G_FMT]\n"
> + " --set-fmt-sdr=<f> set the SDR capture format [VIDIOC_S_FMT]\n"
> + " parameter is either the format index as reported by\n"
> + " --list-formats-sdr, or the fourcc value as a string\n"
> + " --try-fmt-sdr=<f> try the SDR capture format [VIDIOC_TRY_FMT]\n"
> + " parameter is either the format index as reported by\n"
> + " --list-formats-sdr, or the fourcc value as a string\n"
> + );
> +}
> +
> +void sdr_cmd(int ch, char *optarg)
> +{
> + switch (ch) {
> + case OptSetSdrFormat:
> + case OptTrySdrFormat:
> + if (strlen(optarg) == 0) {
> + sdr_usage();
> + exit(1);
> + } else if (strlen(optarg) == 4) {
> + vfmt.fmt.sdr.pixelformat = v4l2_fourcc(optarg[0],
> + optarg[1], optarg[2], optarg[3]);
> + } else {
> + vfmt.fmt.sdr.pixelformat = strtol(optarg, 0L, 0);
> + }
> + break;
> + }
> +}
> +
> +void sdr_set(int fd)
> +{
> + int ret;
> +
> + if (options[OptSetSdrFormat] || options[OptTrySdrFormat]) {
> + struct v4l2_format in_vfmt;
> +
> + in_vfmt.type = V4L2_BUF_TYPE_SDR_CAPTURE;
> + in_vfmt.fmt.sdr.pixelformat = vfmt.fmt.sdr.pixelformat;
> +
> + if (in_vfmt.fmt.sdr.pixelformat < 256) {
> + struct v4l2_fmtdesc fmt;
> +
> + fmt.index = in_vfmt.fmt.sdr.pixelformat;
> + fmt.type = V4L2_BUF_TYPE_SDR_CAPTURE;
> +
> + if (doioctl(fd, VIDIOC_ENUM_FMT, &fmt))
> + fmt.pixelformat = 0;
> +
> + in_vfmt.fmt.sdr.pixelformat = fmt.pixelformat;
> + }
> +
> + if (options[OptSetSdrFormat])
> + ret = doioctl(fd, VIDIOC_S_FMT, &in_vfmt);
> + else
> + ret = doioctl(fd, VIDIOC_TRY_FMT, &in_vfmt);
> + if (ret == 0 && (verbose || options[OptTrySdrFormat]))
> + printfmt(in_vfmt);
> + }
> +}
> +
> +void sdr_get(int fd)
> +{
> + if (options[OptGetSdrFormat]) {
> + vfmt.type = V4L2_BUF_TYPE_SDR_CAPTURE;
> + if (doioctl(fd, VIDIOC_G_FMT, &vfmt) == 0)
> + printfmt(vfmt);
> + }
> +}
> +
> +void sdr_list(int fd)
> +{
> + if (options[OptListSdrFormats]) {
> + printf("ioctl: VIDIOC_ENUM_FMT\n");
> + print_video_formats(fd, V4L2_BUF_TYPE_SDR_CAPTURE);
> + }
> +}
> diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
> index c64c2fe..855613c 100644
> --- a/utils/v4l2-ctl/v4l2-ctl.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl.cpp
> @@ -85,6 +85,7 @@ static struct option long_options[] = {
> {"help-vidout", no_argument, 0, OptHelpVidOut},
> {"help-overlay", no_argument, 0, OptHelpOverlay},
> {"help-vbi", no_argument, 0, OptHelpVbi},
> + {"help-sdr", no_argument, 0, OptHelpSdr},
> {"help-selection", no_argument, 0, OptHelpSelection},
> {"help-misc", no_argument, 0, OptHelpMisc},
> {"help-streaming", no_argument, 0, OptHelpStreaming},
> @@ -111,6 +112,7 @@ static struct option long_options[] = {
> {"list-framesizes", required_argument, 0, OptListFrameSizes},
> {"list-frameintervals", required_argument, 0, OptListFrameIntervals},
> {"list-formats-overlay", no_argument, 0, OptListOverlayFormats},
> + {"list-formats-sdr", no_argument, 0, OptListSdrFormats},
> {"list-formats-out", no_argument, 0, OptListOutFormats},
> {"list-formats-out-mplane", no_argument, 0, OptListOutMplaneFormats},
> {"get-standard", no_argument, 0, OptGetStandard},
> @@ -145,6 +147,9 @@ static struct option long_options[] = {
> {"try-fmt-sliced-vbi-out", required_argument, 0, OptTrySlicedVbiOutFormat},
> {"get-fmt-vbi", no_argument, 0, OptGetVbiFormat},
> {"get-fmt-vbi-out", no_argument, 0, OptGetVbiOutFormat},
> + {"get-fmt-sdr", no_argument, 0, OptGetSdrFormat},
> + {"set-fmt-sdr", required_argument, 0, OptSetSdrFormat},
> + {"try-fmt-sdr", required_argument, 0, OptTrySdrFormat},
> {"get-sliced-vbi-cap", no_argument, 0, OptGetSlicedVbiCap},
> {"get-sliced-vbi-out-cap", no_argument, 0, OptGetSlicedVbiOutCap},
> {"get-fbuf", no_argument, 0, OptGetFBuf},
> @@ -217,6 +222,7 @@ static void usage_all(void)
> vidout_usage();
> overlay_usage();
> vbi_usage();
> + sdr_usage();
> selection_usage();
> misc_usage();
> streaming_usage();
> @@ -285,6 +291,8 @@ std::string buftype2s(int type)
> return "Sliced VBI Output";
> case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
> return "Video Output Overlay";
> + case V4L2_BUF_TYPE_SDR_CAPTURE:
> + return "SDR Capture";
> default:
> return "Unknown (" + num2s(type) + ")";
> }
> @@ -458,6 +466,9 @@ void printfmt(const struct v4l2_format &vfmt)
> }
> printf("\tI/O Size : %u\n", vfmt.fmt.sliced.io_size);
> break;
> + case V4L2_BUF_TYPE_SDR_CAPTURE:
> + printf("\tSample Format : %s\n", fcc2s(vfmt.fmt.sdr.pixelformat).c_str());
> + break;
> }
> }
>
> @@ -519,6 +530,8 @@ static std::string cap2s(unsigned cap)
> s += "\t\tSliced VBI Capture\n";
> if (cap & V4L2_CAP_SLICED_VBI_OUTPUT)
> s += "\t\tSliced VBI Output\n";
> + if (cap & V4L2_CAP_SDR_CAPTURE)
> + s += "\t\tSDR Capture\n";
> if (cap & V4L2_CAP_RDS_CAPTURE)
> s += "\t\tRDS Capture\n";
> if (cap & V4L2_CAP_RDS_OUTPUT)
> @@ -736,6 +749,7 @@ __u32 find_pixel_format(int fd, unsigned index, bool output, bool mplane)
> else
> fmt.type = mplane ? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE :
> V4L2_BUF_TYPE_VIDEO_CAPTURE;
> +
> if (doioctl(fd, VIDIOC_ENUM_FMT, &fmt))
> return 0;
> return fmt.pixelformat;
> @@ -807,6 +821,9 @@ int main(int argc, char **argv)
> case OptHelpVbi:
> vbi_usage();
> return 0;
> + case OptHelpSdr:
> + sdr_usage();
> + return 0;
> case OptHelpSelection:
> selection_usage();
> return 0;
> @@ -860,6 +877,7 @@ int main(int argc, char **argv)
> vidout_cmd(ch, optarg);
> overlay_cmd(ch, optarg);
> vbi_cmd(ch, optarg);
> + sdr_cmd(ch, optarg);
> selection_cmd(ch, optarg);
> misc_cmd(ch, optarg);
> streaming_cmd(ch, optarg);
> @@ -921,6 +939,7 @@ int main(int argc, char **argv)
> options[OptGetVbiOutFormat] = 1;
> options[OptGetSlicedVbiFormat] = 1;
> options[OptGetSlicedVbiOutFormat] = 1;
> + options[OptGetSdrFormat] = 1;
> options[OptGetFBuf] = 1;
> options[OptGetCropCap] = 1;
> options[OptGetOutputCropCap] = 1;
> @@ -964,6 +983,7 @@ int main(int argc, char **argv)
> vidout_set(fd);
> overlay_set(fd);
> vbi_set(fd);
> + sdr_set(fd);
> selection_set(fd);
> streaming_set(fd);
> misc_set(fd);
> @@ -978,6 +998,7 @@ int main(int argc, char **argv)
> vidout_get(fd);
> overlay_get(fd);
> vbi_get(fd);
> + sdr_get(fd);
> selection_get(fd);
> misc_get(fd);
>
> @@ -990,6 +1011,7 @@ int main(int argc, char **argv)
> vidout_list(fd);
> overlay_list(fd);
> vbi_list(fd);
> + sdr_list(fd);
> streaming_list(fd);
>
> if (options[OptWaitForEvent]) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl.h b/utils/v4l2-ctl/v4l2-ctl.h
> index 03c45b7..108198d 100644
> --- a/utils/v4l2-ctl/v4l2-ctl.h
> +++ b/utils/v4l2-ctl/v4l2-ctl.h
> @@ -44,6 +44,7 @@ enum Option {
> OptGetOutputOverlayFormat,
> OptGetVbiFormat,
> OptGetVbiOutFormat,
> + OptGetSdrFormat,
> OptGetVideoOutFormat,
> OptGetVideoOutMplaneFormat,
> OptSetSlicedVbiOutFormat,
> @@ -51,6 +52,7 @@ enum Option {
> OptSetOverlayFormat,
> //OptSetVbiFormat, TODO
> //OptSetVbiOutFormat, TODO
> + OptSetSdrFormat,
> OptSetVideoOutFormat,
> OptSetVideoOutMplaneFormat,
> OptTryVideoOutFormat,
> @@ -63,6 +65,7 @@ enum Option {
> OptTryOverlayFormat,
> //OptTryVbiFormat, TODO
> //OptTryVbiOutFormat, TODO
> + OptTrySdrFormat,
> OptAll,
> OptListStandards,
> OptListFormats,
> @@ -72,6 +75,7 @@ enum Option {
> OptListFrameSizes,
> OptListFrameIntervals,
> OptListOverlayFormats,
> + OptListSdrFormats,
> OptListOutFormats,
> OptListOutMplaneFormats,
> OptLogStatus,
> @@ -153,6 +157,7 @@ enum Option {
> OptHelpVidOut,
> OptHelpOverlay,
> OptHelpVbi,
> + OptHelpSdr,
> OptHelpSelection,
> OptHelpMisc,
> OptHelpStreaming,
> @@ -257,6 +262,13 @@ void vbi_set(int fd);
> void vbi_get(int fd);
> void vbi_list(int fd);
>
> +// v4l2-ctl-sdr.cpp
> +void sdr_usage(void);
> +void sdr_cmd(int ch, char *optarg);
> +void sdr_set(int fd);
> +void sdr_get(int fd);
> +void sdr_list(int fd);
> +
> // v4l2-ctl-selection.cpp
> void selection_usage(void);
> void selection_cmd(int ch, char *optarg);
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 5/5] v4l2-ctl: implement list SDR buffers command
2014-02-09 6:05 ` [PATCH 5/5] v4l2-ctl: implement list SDR buffers command Antti Palosaari
@ 2014-02-10 9:11 ` Hans Verkuil
0 siblings, 0 replies; 11+ messages in thread
From: Hans Verkuil @ 2014-02-10 9:11 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-media, Mauro Carvalho Chehab
On 02/09/2014 07:05 AM, Antti Palosaari wrote:
> Cc: Hans Verkuil <hverkuil@xs4all.nl>
> Signed-off-by: Antti Palosaari <crope@iki.fi>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Thanks!
Hans
> ---
> utils/v4l2-ctl/v4l2-ctl-streaming.cpp | 6 ++++++
> utils/v4l2-ctl/v4l2-ctl.cpp | 1 +
> utils/v4l2-ctl/v4l2-ctl.h | 1 +
> 3 files changed, 8 insertions(+)
>
> diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> index 13ee8ec..925d73d 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> @@ -78,6 +78,8 @@ void streaming_usage(void)
> " list all sliced VBI buffers [VIDIOC_QUERYBUF]\n"
> " --list-buffers-sliced-vbi-out\n"
> " list all sliced VBI output buffers [VIDIOC_QUERYBUF]\n"
> + " --list-buffers-sdr\n"
> + " list all SDR RX buffers [VIDIOC_QUERYBUF]\n"
> );
> }
>
> @@ -986,4 +988,8 @@ void streaming_list(int fd)
> if (options[OptListBuffersSlicedVbiOut]) {
> list_buffers(fd, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
> }
> +
> + if (options[OptListBuffersSdr]) {
> + list_buffers(fd, V4L2_BUF_TYPE_SDR_CAPTURE);
> + }
> }
> diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
> index 855613c..a602366 100644
> --- a/utils/v4l2-ctl/v4l2-ctl.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl.cpp
> @@ -198,6 +198,7 @@ static struct option long_options[] = {
> {"list-buffers-sliced-vbi", no_argument, 0, OptListBuffersSlicedVbi},
> {"list-buffers-vbi-out", no_argument, 0, OptListBuffersVbiOut},
> {"list-buffers-sliced-vbi-out", no_argument, 0, OptListBuffersSlicedVbiOut},
> + {"list-buffers-sdr", no_argument, 0, OptListBuffersSdr},
> {"stream-count", required_argument, 0, OptStreamCount},
> {"stream-skip", required_argument, 0, OptStreamSkip},
> {"stream-loop", no_argument, 0, OptStreamLoop},
> diff --git a/utils/v4l2-ctl/v4l2-ctl.h b/utils/v4l2-ctl/v4l2-ctl.h
> index 108198d..1caac34 100644
> --- a/utils/v4l2-ctl/v4l2-ctl.h
> +++ b/utils/v4l2-ctl/v4l2-ctl.h
> @@ -139,6 +139,7 @@ enum Option {
> OptListBuffersSlicedVbi,
> OptListBuffersVbiOut,
> OptListBuffersSlicedVbiOut,
> + OptListBuffersSdr,
> OptStreamCount,
> OptStreamSkip,
> OptStreamLoop,
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/5] synch videodev2.h headers with kernel SDR API
2014-02-10 9:08 ` Hans Verkuil
@ 2014-02-10 9:17 ` Antti Palosaari
0 siblings, 0 replies; 11+ messages in thread
From: Antti Palosaari @ 2014-02-10 9:17 UTC (permalink / raw)
To: Hans Verkuil; +Cc: linux-media, Mauro Carvalho Chehab
Moro Hans,
On 10.02.2014 11:08, Hans Verkuil wrote:
> Hi Antti,
>
> I'm not sure if you know this, but to sync with a new kernel you use
> 'make sync-with-kernel'. Not a problem here, I'll do that anyway once the
> SDR API is merged.
No prob, I didn't know, just updated manually.
regards
Antti
--
http://palosaari.fi/
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2014-02-10 9:17 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-09 6:05 [PATCH 0/5] v4l2-ctl: add SDR device support Antti Palosaari
2014-02-09 6:05 ` [PATCH 1/5] libdvbv5: better handle ATSC/Annex B Antti Palosaari
2014-02-09 6:05 ` [PATCH 2/5] synch videodev2.h headers with kernel SDR API Antti Palosaari
2014-02-10 9:08 ` Hans Verkuil
2014-02-10 9:17 ` Antti Palosaari
2014-02-09 6:05 ` [PATCH 3/5] v4l2-ctl: add tuner support for SDR tuners Antti Palosaari
2014-02-10 9:10 ` Hans Verkuil
2014-02-09 6:05 ` [PATCH 4/5] v4l2-ctl: add support for SDR FMT Antti Palosaari
2014-02-10 9:11 ` Hans Verkuil
2014-02-09 6:05 ` [PATCH 5/5] v4l2-ctl: implement list SDR buffers command Antti Palosaari
2014-02-10 9:11 ` Hans Verkuil
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox