New upstream release 0.9.5 (rhbz#970412)
- Modernize specfile a bit
This commit is contained in:
parent
8c75a3c531
commit
6447e7112b
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,3 +3,4 @@
|
||||
/v4l-utils-0.8.5.tar.bz2
|
||||
/v4l-utils-0.8.7.tar.bz2
|
||||
/v4l-utils-0.8.8.tar.bz2
|
||||
/v4l-utils-0.9.5.tar.bz2
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
From ef5beb9f065a3fdd48156df2a02b45a747b52477 Mon Sep 17 00:00:00 2001
|
||||
From: Gregor Jasny <gjasny@googlemail.com>
|
||||
Date: Sat, 14 Apr 2012 23:12:15 +0200
|
||||
Subject: [PATCH 01/12] dvb: Fix spelling errors found by lintian
|
||||
|
||||
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
|
||||
(cherry picked from commit 1c900164cca4eac31d7b967289915929bc672ae7)
|
||||
---
|
||||
utils/dvb/README | 2 +-
|
||||
utils/dvb/dvbv5-scan.c | 2 +-
|
||||
utils/dvb/dvbv5-zap.c | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/utils/dvb/README b/utils/dvb/README
|
||||
index c6cbf3e..76bb32a 100644
|
||||
--- a/utils/dvb/README
|
||||
+++ b/utils/dvb/README
|
||||
@@ -7,7 +7,7 @@ using its latest V5 API. The tools can also work with the DVBv3 API.
|
||||
The current tools are:
|
||||
|
||||
dvb-fe-tool - a simple test application, that reads from the frontend.
|
||||
- it also allows to change the default delivery system.
|
||||
+ it also allows one to change the default delivery system.
|
||||
In the future, it may be used to change any property
|
||||
via command line.
|
||||
|
||||
diff --git a/utils/dvb/dvbv5-scan.c b/utils/dvb/dvbv5-scan.c
|
||||
index c7365bc..dcb5cfe 100644
|
||||
--- a/utils/dvb/dvbv5-scan.c
|
||||
+++ b/utils/dvb/dvbv5-scan.c
|
||||
@@ -57,7 +57,7 @@ static const struct argp_option options[] = {
|
||||
{"lnbf", 'l', "LNBf_type", 0, "type of LNBf to use. 'help' lists the available ones", 0},
|
||||
{"sat_number", 'S', "satellite_number", 0, "satellite number. If not specified, disable DISEqC", 0},
|
||||
{"freq_bpf", 'U', "frequency", 0, "SCR/Unicable band-pass filter frequency to use, in kHz", 0},
|
||||
- {"wait", 'W', "time", 0, "adds aditional wait time for DISEqC command completion", 0},
|
||||
+ {"wait", 'W', "time", 0, "adds additional wait time for DISEqC command completion", 0},
|
||||
{"nit", 'N', NULL, 0, "use data from NIT table on the output file", 0},
|
||||
{"get_frontend",'G', NULL, 0, "use data from get_frontend on the output file", 0},
|
||||
{"verbose", 'v', NULL, 0, "be (very) verbose", 0},
|
||||
diff --git a/utils/dvb/dvbv5-zap.c b/utils/dvb/dvbv5-zap.c
|
||||
index 0dc6d20..c8aaf9d 100644
|
||||
--- a/utils/dvb/dvbv5-zap.c
|
||||
+++ b/utils/dvb/dvbv5-zap.c
|
||||
@@ -65,7 +65,7 @@ static const struct argp_option options[] = {
|
||||
{"lnbf", 'l', "LNBf_type", 0, "type of LNBf to use. 'help' lists the available ones", 0},
|
||||
{"sat_number", 'S', "satellite_number", 0, "satellite number. If not specified, disable DISEqC", 0},
|
||||
{"freq_bpf", 'U', "frequency", 0, "SCR/Unicable band-pass filter frequency to use, in kHz", 0},
|
||||
- {"wait", 'W', "time", 0, "adds aditional wait time for DISEqC command completion", 0},
|
||||
+ {"wait", 'W', "time", 0, "adds additional wait time for DISEqC command completion", 0},
|
||||
{"channels", 'c', "file", 0, "read channels list from 'file'", 0},
|
||||
{"exit", 'x', NULL, 0, "exit after tuning", 0},
|
||||
{"record", 'r', NULL, 0, "set up /dev/dvb/adapterX/dvr0 for TS recording", 0},
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
From 40a6547a0f93f571772672fed2de8de17e02d1bb Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 23 Apr 2012 19:43:07 +0200
|
||||
Subject: [PATCH 02/12] libv4lconvert: Fix decoding of 160x120 Pixart JPEG
|
||||
images
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4lconvert/tinyjpeg.c | 16 +++++++++++++---
|
||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c
|
||||
index 2c2d4af..d2a7d3f 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg.c
|
||||
+++ b/lib/libv4lconvert/tinyjpeg.c
|
||||
@@ -2101,7 +2101,17 @@ static int pixart_filter(struct jdec_private *priv, unsigned char *dest,
|
||||
{
|
||||
int chunksize, copied = 0;
|
||||
|
||||
- /* Skip mysterious first data byte */
|
||||
+ /* The first data bytes encodes the image size:
|
||||
+ 0x60: 160x120
|
||||
+ 0x61: 320x240
|
||||
+ 0x62: 640x480
|
||||
+ 160x120 images are not chunked due to their small size!
|
||||
+ */
|
||||
+ if (src[0] == 0x60) {
|
||||
+ memcpy(dest, src + 1, n - 1);
|
||||
+ return n - 1;
|
||||
+ }
|
||||
+
|
||||
src++;
|
||||
n--;
|
||||
|
||||
@@ -2124,8 +2134,8 @@ kernel: 0xff 0xff 0x00 0xff 0x96, and we skip one unknown byte */
|
||||
|
||||
if (src[0] != 0xff || src[1] != 0xff || src[2] != 0xff)
|
||||
error("Missing Pixart ff ff ff xx header, "
|
||||
- "got: %02x %02x %02x %02x\n",
|
||||
- src[0], src[1], src[2], src[3]);
|
||||
+ "got: %02x %02x %02x %02x, copied sofar: %d\n",
|
||||
+ src[0], src[1], src[2], src[3], copied);
|
||||
if (src[3] > 6)
|
||||
error("Unexpected Pixart chunk size: %d\n", src[3]);
|
||||
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
From 09dfce3c1ed184326c5ac2acde61bc5ba3798058 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sat, 21 Apr 2012 14:39:58 +0200
|
||||
Subject: [PATCH 03/12] Revert "tinyjpeg: Better luminance quantization table
|
||||
for Pixart JPEG"
|
||||
|
||||
This reverts commit e186777daeaa717b7d919e932f7d3be10156d572.
|
||||
---
|
||||
lib/libv4lconvert/tinyjpeg.c | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c
|
||||
index d2a7d3f..756ad9c 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg.c
|
||||
+++ b/lib/libv4lconvert/tinyjpeg.c
|
||||
@@ -206,14 +206,14 @@ static const unsigned char val_ac_chrominance[] = {
|
||||
};
|
||||
|
||||
const unsigned char pixart_quantization[][64] = { {
|
||||
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10,
|
||||
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
- 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20,
|
||||
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
- 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40,
|
||||
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
|
||||
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
|
||||
+ 0x07, 0x07, 0x08, 0x0a, 0x09, 0x07, 0x0d, 0x0b,
|
||||
+ 0x0c, 0x0d, 0x11, 0x10, 0x0f, 0x12, 0x17, 0x27,
|
||||
+ 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
|
||||
+ 0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
|
||||
+ 0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
|
||||
+ 0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
|
||||
+ 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
|
||||
+ 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
|
||||
},
|
||||
{
|
||||
0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,150 +0,0 @@
|
||||
From 7b9ee388ca510e818dc9f248c8cd6c2ffe40fa94 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 23 Apr 2012 23:03:40 +0200
|
||||
Subject: [PATCH 04/12] libv4lconvert: Dynamic quantization tables for Pixart
|
||||
JPEG
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Inspired by a patch from Jean-François Moine <moinejf@free.fr>, I've spend
|
||||
4 days on a row investigating (through trial and error) Pixart's JPEG
|
||||
compression. This patch accumulates what I've learned from this, giving 2
|
||||
important improvements:
|
||||
1) Support for properly decompressing pac7302 generated images where some
|
||||
of the MCU-s are compressed with a lower quality / higher quantization
|
||||
values
|
||||
2) Proper chrominance quantization tables for Pixart JPEG, getting rid of
|
||||
the sometimes horribly over saturation our decompression code was causing
|
||||
|
||||
The support for dynamic quantization tables this patch adds also allows us to
|
||||
enable lower compression ratios in the kernel driver when running at a lower
|
||||
framerate, resulting in better image quality.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4lconvert/tinyjpeg-internal.h | 1 +
|
||||
lib/libv4lconvert/tinyjpeg.c | 77 ++++++++++++++++++++++-----------
|
||||
2 files changed, 53 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg-internal.h b/lib/libv4lconvert/tinyjpeg-internal.h
|
||||
index 702a2a2..4041251 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg-internal.h
|
||||
+++ b/lib/libv4lconvert/tinyjpeg-internal.h
|
||||
@@ -103,6 +103,7 @@ struct jdec_private {
|
||||
#if SANITY_CHECK
|
||||
unsigned int current_cid; /* For planar JPEG */
|
||||
#endif
|
||||
+ unsigned char marker; /* for PJPG (Pixart JPEG) */
|
||||
|
||||
/* Temp space used after the IDCT to store each components */
|
||||
uint8_t Y[64 * 4], Cr[64], Cb[64];
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c
|
||||
index 756ad9c..dd77d0f 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg.c
|
||||
+++ b/lib/libv4lconvert/tinyjpeg.c
|
||||
@@ -205,9 +205,11 @@ static const unsigned char val_ac_chrominance[] = {
|
||||
0xf9, 0xfa
|
||||
};
|
||||
|
||||
-const unsigned char pixart_quantization[][64] = { {
|
||||
- 0x07, 0x07, 0x08, 0x0a, 0x09, 0x07, 0x0d, 0x0b,
|
||||
- 0x0c, 0x0d, 0x11, 0x10, 0x0f, 0x12, 0x17, 0x27,
|
||||
+/* Standard JPEG quantization tables from Annex K of the JPEG standard.
|
||||
+ Note unlike in Annex K the entries here are in zigzag order! */
|
||||
+const unsigned char standard_quantization[][64] = { {
|
||||
+ 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
|
||||
+ 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
|
||||
0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
|
||||
0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
|
||||
0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
|
||||
@@ -1376,25 +1378,57 @@ static void decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
IDCT(&priv->component_infos[cCr], priv->Cr, 8);
|
||||
}
|
||||
|
||||
+static void build_quantization_table(float *qtable, const unsigned char *ref_table);
|
||||
+
|
||||
static void pixart_decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
{
|
||||
unsigned char marker;
|
||||
|
||||
- look_nbits(priv->reservoir, priv->nbits_in_reservoir, priv->stream, 8, marker);
|
||||
- /* I think the marker indicates which quantization table to use, iow
|
||||
- a Pixart JPEG may have a different quantization table per MCU, most
|
||||
- MCU's have 0x44 as marker for which our special Pixart quantization
|
||||
- tables are correct. Unfortunately with a 7302 some blocks also have 0x48,
|
||||
- and sometimes even other values. As 0x48 is quite common too, we really
|
||||
- need to find out the correct table for that, as currently the blocks
|
||||
- with a 0x48 marker look wrong. During normal operation the marker stays
|
||||
- within the range below, if it gets out of this range we're most likely
|
||||
- decoding garbage */
|
||||
- if (marker < 0x20 || marker > 0x7f) {
|
||||
- snprintf(priv->error_string, sizeof(priv->error_string),
|
||||
- "Pixart JPEG error: invalid MCU marker: 0x%02x\n",
|
||||
- (unsigned int)marker);
|
||||
- longjmp(priv->jump_state, -EIO);
|
||||
+ look_nbits(priv->reservoir, priv->nbits_in_reservoir, priv->stream,
|
||||
+ 8, marker);
|
||||
+
|
||||
+ /* Pixart JPEG MCU-s are preceded by a marker indicating the quality
|
||||
+ setting with which the MCU is compressed, IOW the MCU-s may have a
|
||||
+ different quantization table per MCU. So if the marker changes we
|
||||
+ need to rebuild the quantization tables. */
|
||||
+ if (marker != priv->marker) {
|
||||
+ int i, j, comp;
|
||||
+ unsigned char qt[64];
|
||||
+ /* These values have been found by trial and error and seem to
|
||||
+ work reasonably. Markers with index 0 - 7 are never
|
||||
+ generated by the hardware, so they are likely wrong. */
|
||||
+ const int qfactor[32] = {
|
||||
+ 10, 12, 14, 16, 18, 20, 22, 24,
|
||||
+ 25, 30, 35, 40, 45, 50, 55, 60,
|
||||
+ 64, 68, 80, 90, 100, 120, 140, 160,
|
||||
+ 180, 200, 220, 240, 260, 280, 300, 320
|
||||
+ };
|
||||
+
|
||||
+ i = (marker & 0x7c) >> 2; /* Bits 0 and 1 are always 0 */
|
||||
+ comp = qfactor[i];
|
||||
+
|
||||
+ /* And another special Pixart feature, the DC quantization
|
||||
+ factor is fixed! */
|
||||
+ qt[0] = 7;
|
||||
+ for (i = 1; i < 64; i++) {
|
||||
+ j = (standard_quantization[0][i] * comp + 50) / 100;
|
||||
+ qt[i] = (j < 255) ? j : 255;
|
||||
+ }
|
||||
+ build_quantization_table(priv->Q_tables[0], qt);
|
||||
+
|
||||
+ /* And yet another Pixart JPEG special feature, Pixart JPEG
|
||||
+ uses the luminance table for chrominance too! Either
|
||||
+ as is or with all values multiplied by 2, this is encoded
|
||||
+ in bit 7 of the marker. */
|
||||
+ if (!(marker & 0x80)) {
|
||||
+ for (i = 0; i < 64; i++) {
|
||||
+ j = qt[i] * 2;
|
||||
+ qt[i] = (j < 255) ? j : 255;
|
||||
+ }
|
||||
+ }
|
||||
+ build_quantization_table(priv->Q_tables[1], qt);
|
||||
+
|
||||
+ priv->marker = marker;
|
||||
}
|
||||
skip_nbits(priv->reservoir, priv->nbits_in_reservoir, priv->stream, 8);
|
||||
|
||||
@@ -1944,13 +1978,6 @@ static int parse_JFIF(struct jdec_private *priv, const unsigned char *stream)
|
||||
(!dqt_marker_found && !(priv->flags & TINYJPEG_FLAGS_PIXART_JPEG)))
|
||||
goto bogus_jpeg_format;
|
||||
|
||||
- if (priv->flags & TINYJPEG_FLAGS_PIXART_JPEG) {
|
||||
- if (!priv->default_huffman_table_initialized) {
|
||||
- build_quantization_table(priv->Q_tables[0], pixart_quantization[0]);
|
||||
- build_quantization_table(priv->Q_tables[1], pixart_quantization[1]);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
if (!dht_marker_found) {
|
||||
trace("No Huffman table loaded, using the default one\n");
|
||||
if (build_default_huffman_tables(priv))
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,59 +0,0 @@
|
||||
From e2821f4bce9db15fcb463ba945fe7433773b9901 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 23 Apr 2012 23:18:24 +0200
|
||||
Subject: [PATCH 05/12] libv4lconvert: Drop Pixart JPEG frames with changing
|
||||
chrominance setting
|
||||
|
||||
Sometimes the pac7302 switches chrominance setting halfway though a
|
||||
frame, with a quite ugly looking result, so lets drop such frames.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4lconvert/tinyjpeg-internal.h | 1 +
|
||||
lib/libv4lconvert/tinyjpeg.c | 11 +++++++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg-internal.h b/lib/libv4lconvert/tinyjpeg-internal.h
|
||||
index 4041251..dcbcf27 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg-internal.h
|
||||
+++ b/lib/libv4lconvert/tinyjpeg-internal.h
|
||||
@@ -104,6 +104,7 @@ struct jdec_private {
|
||||
unsigned int current_cid; /* For planar JPEG */
|
||||
#endif
|
||||
unsigned char marker; /* for PJPG (Pixart JPEG) */
|
||||
+ unsigned char first_marker; /* for PJPG (Pixart JPEG) */
|
||||
|
||||
/* Temp space used after the IDCT to store each components */
|
||||
uint8_t Y[64 * 4], Cr[64], Cb[64];
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c
|
||||
index dd77d0f..8fc484e 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg.c
|
||||
+++ b/lib/libv4lconvert/tinyjpeg.c
|
||||
@@ -1387,6 +1387,16 @@ static void pixart_decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
look_nbits(priv->reservoir, priv->nbits_in_reservoir, priv->stream,
|
||||
8, marker);
|
||||
|
||||
+ /* Sometimes the pac7302 switches chrominance setting halfway though a
|
||||
+ frame, with a quite ugly looking result, so we drop such frames. */
|
||||
+ if (priv->first_marker == 0)
|
||||
+ priv->first_marker = marker;
|
||||
+ else if ((marker & 0x80) != (priv->first_marker & 0x80)) {
|
||||
+ snprintf(priv->error_string, sizeof(priv->error_string),
|
||||
+ "Pixart JPEG error: chrominance changed halfway\n");
|
||||
+ longjmp(priv->jump_state, -EIO);
|
||||
+ }
|
||||
+
|
||||
/* Pixart JPEG MCU-s are preceded by a marker indicating the quality
|
||||
setting with which the MCU is compressed, IOW the MCU-s may have a
|
||||
different quantization table per MCU. So if the marker changes we
|
||||
@@ -2224,6 +2234,7 @@ int tinyjpeg_decode(struct jdec_private *priv, int pixfmt)
|
||||
return length;
|
||||
priv->stream = priv->stream_filtered;
|
||||
priv->stream_end = priv->stream + length;
|
||||
+ priv->first_marker = 0;
|
||||
|
||||
decode_mcu_table = pixart_decode_mcu_3comp_table;
|
||||
}
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,132 +0,0 @@
|
||||
From 33b272f8b45e8639f567e9aa24a7079b567e20de Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Fri, 27 Apr 2012 14:56:18 +0200
|
||||
Subject: [PATCH 06/12] libv4lconvert: Further Pixart JPEG decompression
|
||||
tweaks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Many thanks to Jean-François Moine <moinejf@free.fr> for digging the
|
||||
quantization tables out of the windows driver.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4lconvert/tinyjpeg.c | 71 ++++++++++++++++++++++++++++++++----------
|
||||
1 file changed, 54 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c
|
||||
index 8fc484e..d227c79 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg.c
|
||||
+++ b/lib/libv4lconvert/tinyjpeg.c
|
||||
@@ -205,6 +205,7 @@ static const unsigned char val_ac_chrominance[] = {
|
||||
0xf9, 0xfa
|
||||
};
|
||||
|
||||
+#if 0 /* unused */
|
||||
/* Standard JPEG quantization tables from Annex K of the JPEG standard.
|
||||
Note unlike in Annex K the entries here are in zigzag order! */
|
||||
const unsigned char standard_quantization[][64] = { {
|
||||
@@ -228,6 +229,7 @@ const unsigned char standard_quantization[][64] = { {
|
||||
0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
},
|
||||
};
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* 4 functions to manage the stream
|
||||
@@ -1402,39 +1404,74 @@ static void pixart_decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
different quantization table per MCU. So if the marker changes we
|
||||
need to rebuild the quantization tables. */
|
||||
if (marker != priv->marker) {
|
||||
- int i, j, comp;
|
||||
+ int i, j, comp, lumi, chroma;
|
||||
unsigned char qt[64];
|
||||
/* These values have been found by trial and error and seem to
|
||||
work reasonably. Markers with index 0 - 7 are never
|
||||
generated by the hardware, so they are likely wrong. */
|
||||
const int qfactor[32] = {
|
||||
- 10, 12, 14, 16, 18, 20, 22, 24,
|
||||
25, 30, 35, 40, 45, 50, 55, 60,
|
||||
- 64, 68, 80, 90, 100, 120, 140, 160,
|
||||
- 180, 200, 220, 240, 260, 280, 300, 320
|
||||
+ 65, 70, 75, 80, 85, 90, 95, 100,
|
||||
+ 100, 100, 120, 140, 160, 180, 210, 240,
|
||||
+ 270, 300, 330, 360, 390, 420, 450, 480
|
||||
};
|
||||
+ /* These tables were found in SPC230NC.SYS */
|
||||
+ const unsigned char pixart_q[][64] = { {
|
||||
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
||||
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
||||
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
||||
+ 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20,
|
||||
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
+ }, {
|
||||
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20,
|
||||
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
+ 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40,
|
||||
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
|
||||
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
|
||||
+ }, {
|
||||
+ 0x08, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20,
|
||||
+ 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40,
|
||||
+ 0x40, 0x40, 0x40, 0x40, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ }, {
|
||||
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20,
|
||||
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
|
||||
+ } };
|
||||
|
||||
i = (marker & 0x7c) >> 2; /* Bits 0 and 1 are always 0 */
|
||||
comp = qfactor[i];
|
||||
+ lumi = (marker & 0x40) ? 1 : 0;
|
||||
+ chroma = (marker & 0x80) ? 2 : 3;
|
||||
+ /* printf("marker %02x comp %d lumi %d chroma %d\n", marker, comp, lumi, chroma); */
|
||||
|
||||
- /* And another special Pixart feature, the DC quantization
|
||||
- factor is fixed! */
|
||||
- qt[0] = 7;
|
||||
+ /* Note the DC quantization factor is fixed! */
|
||||
+ qt[0] = pixart_q[lumi][0];
|
||||
for (i = 1; i < 64; i++) {
|
||||
- j = (standard_quantization[0][i] * comp + 50) / 100;
|
||||
+ j = (pixart_q[lumi][i] * comp + 50) / 100;
|
||||
qt[i] = (j < 255) ? j : 255;
|
||||
}
|
||||
build_quantization_table(priv->Q_tables[0], qt);
|
||||
|
||||
- /* And yet another Pixart JPEG special feature, Pixart JPEG
|
||||
- uses the luminance table for chrominance too! Either
|
||||
- as is or with all values multiplied by 2, this is encoded
|
||||
- in bit 7 of the marker. */
|
||||
- if (!(marker & 0x80)) {
|
||||
- for (i = 0; i < 64; i++) {
|
||||
- j = qt[i] * 2;
|
||||
- qt[i] = (j < 255) ? j : 255;
|
||||
- }
|
||||
+ qt[0] = pixart_q[chroma][0];
|
||||
+ for (i = 1; i < 64; i++) {
|
||||
+ j = (pixart_q[chroma][i] * comp + 50) / 100;
|
||||
+ qt[i] = (j < 255) ? j : 255;
|
||||
}
|
||||
build_quantization_table(priv->Q_tables[1], qt);
|
||||
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
From 6e43a82aee9ec84dfd016586ff8d4a11ac0ccaea Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Fri, 27 Apr 2012 17:40:53 +0200
|
||||
Subject: [PATCH 07/12] libv4lconvert: Fix interpretation of bit 7 of the
|
||||
Pixart JPEG marker
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4lconvert/tinyjpeg.c | 17 ++++++++++-------
|
||||
1 file changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c
|
||||
index d227c79..01bd409 100644
|
||||
--- a/lib/libv4lconvert/tinyjpeg.c
|
||||
+++ b/lib/libv4lconvert/tinyjpeg.c
|
||||
@@ -1404,7 +1404,7 @@ static void pixart_decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
different quantization table per MCU. So if the marker changes we
|
||||
need to rebuild the quantization tables. */
|
||||
if (marker != priv->marker) {
|
||||
- int i, j, comp, lumi, chroma;
|
||||
+ int i, j, comp, lumi;
|
||||
unsigned char qt[64];
|
||||
/* These values have been found by trial and error and seem to
|
||||
work reasonably. Markers with index 0 - 7 are never
|
||||
@@ -1457,8 +1457,7 @@ static void pixart_decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
i = (marker & 0x7c) >> 2; /* Bits 0 and 1 are always 0 */
|
||||
comp = qfactor[i];
|
||||
lumi = (marker & 0x40) ? 1 : 0;
|
||||
- chroma = (marker & 0x80) ? 2 : 3;
|
||||
- /* printf("marker %02x comp %d lumi %d chroma %d\n", marker, comp, lumi, chroma); */
|
||||
+ /* printf("marker %02x comp %d lumi %d\n", marker, comp, lumi); */
|
||||
|
||||
/* Note the DC quantization factor is fixed! */
|
||||
qt[0] = pixart_q[lumi][0];
|
||||
@@ -1468,10 +1467,14 @@ static void pixart_decode_MCU_2x1_3planes(struct jdec_private *priv)
|
||||
}
|
||||
build_quantization_table(priv->Q_tables[0], qt);
|
||||
|
||||
- qt[0] = pixart_q[chroma][0];
|
||||
- for (i = 1; i < 64; i++) {
|
||||
- j = (pixart_q[chroma][i] * comp + 50) / 100;
|
||||
- qt[i] = (j < 255) ? j : 255;
|
||||
+ /* If bit 7 of the marker is set chrominance uses the
|
||||
+ luminance quantization table */
|
||||
+ if (!(marker & 0x80)) {
|
||||
+ qt[0] = pixart_q[3][0];
|
||||
+ for (i = 1; i < 64; i++) {
|
||||
+ j = (pixart_q[3][i] * comp + 50) / 100;
|
||||
+ qt[i] = (j < 255) ? j : 255;
|
||||
+ }
|
||||
}
|
||||
build_quantization_table(priv->Q_tables[1], qt);
|
||||
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
From a03edd3d4f87d792fc3476081f21cb1ab627d3fc Mon Sep 17 00:00:00 2001
|
||||
From: Gregor Jasny <gjasny@googlemail.com>
|
||||
Date: Thu, 10 May 2012 20:15:25 +0200
|
||||
Subject: [PATCH 08/12] libv4lcontrol: Add another USB ID to ASUS table
|
||||
|
||||
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
|
||||
(cherry picked from commit 2ba650f05f83f08885fcd7cada608b089c4776e4)
|
||||
---
|
||||
lib/libv4lconvert/control/libv4lcontrol.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/lib/libv4lconvert/control/libv4lcontrol.c b/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
index 7b2150f..3648d91 100644
|
||||
--- a/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
+++ b/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
@@ -284,6 +284,7 @@ static const struct v4lcontrol_usb_id asus_camera_id[] = {
|
||||
{ 0x04f2, 0xb071 },
|
||||
{ 0x04f2, 0xb072 },
|
||||
{ 0x04f2, 0xb106 },
|
||||
+ { 0x04f2, 0xb169 },
|
||||
{ 0x04f2, 0xb16b },
|
||||
{ 0x04f2, 0xb1b9 },
|
||||
{ 0x04f2, 0xb1bb },
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
From 310e4b64d3116600c1bc085ac750098ec111141f Mon Sep 17 00:00:00 2001
|
||||
From: Jakob Haufe <sur5r@sur5r.net>
|
||||
Date: Thu, 10 May 2012 20:26:48 +0200
|
||||
Subject: [PATCH 09/12] libv4lcontrol: Add Lenovo Thinkpad X220 Tablet to
|
||||
upside down table
|
||||
|
||||
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
|
||||
(cherry picked from commit c8dc32601812326646e4e8fd1388a0cc9d2a512c)
|
||||
---
|
||||
lib/libv4lconvert/control/libv4lcontrol.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/libv4lconvert/control/libv4lcontrol.c b/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
index 3648d91..8795e2f 100644
|
||||
--- a/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
+++ b/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
@@ -132,6 +132,8 @@ static const struct v4lcontrol_flags_info v4lcontrol_flags[] = {
|
||||
{ 0x04f2, 0xb213, 0, "FUJITSU", "FJNBB19",
|
||||
V4LCONTROL_HFLIPPED | V4LCONTROL_VFLIPPED, 0,
|
||||
"FUJITSU", "LIFEBOOK NH751" },
|
||||
+ { 0x04f2, 0xb217, 0, "LENOVO", "42982YG",
|
||||
+ V4LCONTROL_HFLIPPED | V4LCONTROL_VFLIPPED },
|
||||
{ 0x04f2, 0xb217, 0, "LENOVO", "42992QG",
|
||||
V4LCONTROL_HFLIPPED | V4LCONTROL_VFLIPPED },
|
||||
{ 0x04f2, 0xb27c, 0, "LENOVO", "12973MG",
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
From 947f108f0860b5d55e4e506fa9521a797257d2b2 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Fri, 11 May 2012 13:51:03 +0200
|
||||
Subject: [PATCH 10/12] libv4l2: Improve VIDIOC_*_FMT logging
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4l2/log.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/libv4l2/log.c b/lib/libv4l2/log.c
|
||||
index f7ce06f..377f553 100644
|
||||
--- a/lib/libv4l2/log.c
|
||||
+++ b/lib/libv4l2/log.c
|
||||
@@ -154,6 +154,8 @@ void v4l2_log_ioctl(unsigned long int request, void *arg, int result)
|
||||
(int)fmt->fmt.pix.sizeimage);
|
||||
fprintf(v4l2_log_file, " colorspace: %d, priv: %x\n",
|
||||
(int)fmt->fmt.pix.colorspace, (int)fmt->fmt.pix.priv);
|
||||
+ } else {
|
||||
+ fprintf(v4l2_log_file, " type: %d\n", (int)fmt->type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,50 +0,0 @@
|
||||
From 1539b9211634f3546d08fa36593b02bf2fa3903a Mon Sep 17 00:00:00 2001
|
||||
From: Gregor Jasny <gjasny@googlemail.com>
|
||||
Date: Thu, 2 Feb 2012 20:25:07 +0100
|
||||
Subject: [PATCH 11/12] libv4lconvert: replace strndupa with more portable
|
||||
strndup
|
||||
|
||||
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
|
||||
---
|
||||
lib/libv4lconvert/control/libv4lcontrol.c | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4lconvert/control/libv4lcontrol.c b/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
index 8795e2f..f312354 100644
|
||||
--- a/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
+++ b/lib/libv4lconvert/control/libv4lcontrol.c
|
||||
@@ -452,6 +452,7 @@ static int find_dmi_string(const char **table_entries, const char *dmi_value)
|
||||
const char **entry_ptr;
|
||||
char *trimmed_dmi;
|
||||
size_t n;
|
||||
+ int found = 0;
|
||||
|
||||
if (!start) return 0;
|
||||
|
||||
@@ -459,16 +460,19 @@ static int find_dmi_string(const char **table_entries, const char *dmi_value)
|
||||
while (isspace(*start)) start++;
|
||||
n = strlen(start);
|
||||
while (n > 0 && isspace(start[n-1])) --n;
|
||||
- trimmed_dmi = strndupa(start, n);
|
||||
+ trimmed_dmi = strndup(start, n);
|
||||
|
||||
/* find trimmed value */
|
||||
for (entry_ptr = table_entries; *entry_ptr; entry_ptr++) {
|
||||
- const int found = fnmatch(*entry_ptr, trimmed_dmi, 0) == 0;
|
||||
+ found = fnmatch(*entry_ptr, trimmed_dmi, 0) == 0;
|
||||
/* fprintf(stderr, "find_dmi_string('%s', '%s'->'%s')=%i\n", *entry_ptr, dmi_value, trimmed_dmi, found); */
|
||||
if (found)
|
||||
- return 1;
|
||||
+ break;
|
||||
}
|
||||
- return 0;
|
||||
+
|
||||
+ free(trimmed_dmi);
|
||||
+
|
||||
+ return found;
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
From 9475926b6e50f60ac56175915cf82dd4f97d00ae Mon Sep 17 00:00:00 2001
|
||||
From: Gregor Jasny <gjasny@googlemail.com>
|
||||
Date: Tue, 15 May 2012 21:24:51 +0200
|
||||
Subject: [PATCH 12/12] libdvbv5: Add missing includes
|
||||
|
||||
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
|
||||
---
|
||||
utils/dvb/dvb-v5-std.h | 1 +
|
||||
utils/dvb/dvb-v5.h | 3 +++
|
||||
2 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/utils/dvb/dvb-v5-std.h b/utils/dvb/dvb-v5-std.h
|
||||
index 6403ad2..166bf55 100644
|
||||
--- a/utils/dvb/dvb-v5-std.h
|
||||
+++ b/utils/dvb/dvb-v5-std.h
|
||||
@@ -20,6 +20,7 @@
|
||||
* http://linuxtv.org/downloads/v4l-dvb-apis/FE_GET_SET_PROPERTY.html
|
||||
*/
|
||||
|
||||
+#include <stddef.h>
|
||||
#include "dvb_frontend.h"
|
||||
|
||||
const unsigned int sys_dvbt_props[] = {
|
||||
diff --git a/utils/dvb/dvb-v5.h b/utils/dvb/dvb-v5.h
|
||||
index 6ba6730..67cd725 100644
|
||||
--- a/utils/dvb/dvb-v5.h
|
||||
+++ b/utils/dvb/dvb-v5.h
|
||||
@@ -3,7 +3,10 @@
|
||||
*/
|
||||
#ifndef _DVB_V5_CONSTS_H
|
||||
#define _DVB_V5_CONSTS_H
|
||||
+
|
||||
+#include <stddef.h>
|
||||
#include "dvb_frontend.h"
|
||||
+
|
||||
struct fe_caps_name {
|
||||
unsigned idx;
|
||||
char *name;
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@ -1,125 +0,0 @@
|
||||
From 6662f9f04e529ddeae3828fe18b49f7b239fdb10 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 9 Jul 2012 10:13:11 +0200
|
||||
Subject: [PATCH 13/14] libv4l2: Ensure we always set buf->length when
|
||||
converting
|
||||
|
||||
Some apps blindly use buf->length when calling munmap, even if a previous
|
||||
call (ie dqbuf) on the buffer failed. We used to not set buf->length to
|
||||
our conversion buffer length when the actual ioctl call to the device, or
|
||||
the format conversion failed.
|
||||
|
||||
When a dqbuf succeeded and the conversion failed this which would cause
|
||||
us to leave buf->length set to the real buffer length rather then the
|
||||
conversion buffer length, if the app then wrongly uses buf->length (*)
|
||||
for a munmap we would not recognize this as munmap of the conversion
|
||||
buffer and pass it through to the real munmap unmapping a part of
|
||||
our conversion buf without being aware of this!
|
||||
|
||||
*) After from the point of the app a failed dqbuf, so it should not trust the
|
||||
contents of buf at all.
|
||||
|
||||
This patch makes things work even for buggy apps, by always setting
|
||||
buf->length when converting even if things fail.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
Conflicts:
|
||||
lib/libv4l2/libv4l2.c
|
||||
---
|
||||
lib/libv4l2/libv4l2.c | 52 +++++++++++++++++++++++++++++--------------------
|
||||
1 file changed, 31 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/lib/libv4l2/libv4l2.c b/lib/libv4l2/libv4l2.c
|
||||
index 089fc38..a8f17ed 100644
|
||||
--- a/lib/libv4l2/libv4l2.c
|
||||
+++ b/lib/libv4l2/libv4l2.c
|
||||
@@ -486,6 +486,23 @@ static int v4l2_needs_conversion(int index)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void v4l2_set_conversion_buf_params(int index, struct v4l2_buffer *buf)
|
||||
+{
|
||||
+ if (!v4l2_needs_conversion(index))
|
||||
+ return;
|
||||
+
|
||||
+ /* This may happen if the ioctl failed */
|
||||
+ if (buf->index >= devices[index].no_frames)
|
||||
+ buf->index = 0;
|
||||
+
|
||||
+ buf->m.offset = V4L2_MMAP_OFFSET_MAGIC | buf->index;
|
||||
+ buf->length = V4L2_FRAME_BUF_SIZE;
|
||||
+ if (devices[index].frame_map_count[buf->index])
|
||||
+ buf->flags |= V4L2_BUF_FLAG_MAPPED;
|
||||
+ else
|
||||
+ buf->flags &= ~V4L2_BUF_FLAG_MAPPED;
|
||||
+}
|
||||
+
|
||||
static int v4l2_buffers_mapped(int index)
|
||||
{
|
||||
unsigned int i;
|
||||
@@ -1182,19 +1199,14 @@ int v4l2_ioctl(int fd, unsigned long int request, ...)
|
||||
/* Do a real query even when converting to let the driver fill in
|
||||
things like buf->field */
|
||||
result = SYS_IOCTL(devices[index].fd, VIDIOC_QUERYBUF, buf);
|
||||
- if (result || !v4l2_needs_conversion(index))
|
||||
- break;
|
||||
|
||||
- buf->m.offset = V4L2_MMAP_OFFSET_MAGIC | buf->index;
|
||||
- buf->length = V4L2_FRAME_BUF_SIZE;
|
||||
- if (devices[index].frame_map_count[buf->index])
|
||||
- buf->flags |= V4L2_BUF_FLAG_MAPPED;
|
||||
- else
|
||||
- buf->flags &= ~V4L2_BUF_FLAG_MAPPED;
|
||||
+ v4l2_set_conversion_buf_params(index, buf);
|
||||
break;
|
||||
}
|
||||
|
||||
- case VIDIOC_QBUF:
|
||||
+ case VIDIOC_QBUF: {
|
||||
+ struct v4l2_buffer *buf = arg;
|
||||
+
|
||||
if (devices[index].flags & V4L2_STREAM_CONTROLLED_BY_READ) {
|
||||
result = v4l2_deactivate_read_stream(index);
|
||||
if (result)
|
||||
@@ -1209,7 +1221,10 @@ int v4l2_ioctl(int fd, unsigned long int request, ...)
|
||||
}
|
||||
|
||||
result = SYS_IOCTL(devices[index].fd, VIDIOC_QBUF, arg);
|
||||
+
|
||||
+ v4l2_set_conversion_buf_params(index, buf);
|
||||
break;
|
||||
+ }
|
||||
|
||||
case VIDIOC_DQBUF: {
|
||||
struct v4l2_buffer *buf = arg;
|
||||
@@ -1248,19 +1263,14 @@ int v4l2_ioctl(int fd, unsigned long int request, ...)
|
||||
}
|
||||
}
|
||||
|
||||
- result = v4l2_dequeue_and_convert(index, buf, 0, V4L2_FRAME_BUF_SIZE);
|
||||
- if (result < 0)
|
||||
- break;
|
||||
-
|
||||
- buf->bytesused = result;
|
||||
- buf->m.offset = V4L2_MMAP_OFFSET_MAGIC | buf->index;
|
||||
- buf->length = V4L2_FRAME_BUF_SIZE;
|
||||
- if (devices[index].frame_map_count[buf->index])
|
||||
- buf->flags |= V4L2_BUF_FLAG_MAPPED;
|
||||
- else
|
||||
- buf->flags &= ~V4L2_BUF_FLAG_MAPPED;
|
||||
+ result = v4l2_dequeue_and_convert(index, buf, 0,
|
||||
+ V4L2_FRAME_BUF_SIZE);
|
||||
+ if (result >= 0) {
|
||||
+ buf->bytesused = result;
|
||||
+ result = 0;
|
||||
+ }
|
||||
|
||||
- result = 0;
|
||||
+ v4l2_set_conversion_buf_params(index, buf);
|
||||
break;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
From 8fcfbbc58a0b6a0eeb31c02493e164f82236a8e6 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 9 Jul 2012 13:23:41 +0200
|
||||
Subject: [PATCH 14/14] libv4l2: dqbuf: Don't requeue buffers which we are
|
||||
returning to the app
|
||||
|
||||
We retry dqbuf when we get a short frame or a decode error, but if the retries
|
||||
are exhausted and the frame is short we will return the (short) buffer to the
|
||||
caller, since returning a short frame is better then not returning anything
|
||||
at all.
|
||||
|
||||
This means that we must not re-queue it then! Also see:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=838279
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
lib/libv4l2/libv4l2.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/libv4l2/libv4l2.c b/lib/libv4l2/libv4l2.c
|
||||
index a8f17ed..070ac0d 100644
|
||||
--- a/lib/libv4l2/libv4l2.c
|
||||
+++ b/lib/libv4l2/libv4l2.c
|
||||
@@ -317,7 +317,13 @@ static int v4l2_dequeue_and_convert(int index, struct v4l2_buffer *buf,
|
||||
V4L2_LOG_ERR("converting / decoding frame data: %s",
|
||||
v4lconvert_get_error_message(devices[index].convert));
|
||||
|
||||
- v4l2_queue_read_buffer(index, buf->index);
|
||||
+ /*
|
||||
+ * If this is the last try, and the frame is short
|
||||
+ * we will return the (short) buffer to the caller,
|
||||
+ * so we must not re-queue it then!
|
||||
+ */
|
||||
+ if (!(tries == 1 && errno == EPIPE))
|
||||
+ v4l2_queue_read_buffer(index, buf->index);
|
||||
errno = saved_err;
|
||||
}
|
||||
tries--;
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
2
sources
2
sources
@ -1 +1 @@
|
||||
40fdda3f4055ed818012d7a7b5ef5be5 v4l-utils-0.8.8.tar.bz2
|
||||
6947bea808b19207d89ec31afc3a9a89 v4l-utils-0.9.5.tar.bz2
|
||||
|
||||
@ -1,31 +1,16 @@
|
||||
Name: v4l-utils
|
||||
Version: 0.8.8
|
||||
Release: 6%{?dist}
|
||||
Version: 0.9.5
|
||||
Release: 1%{?dist}
|
||||
Summary: Utilities for video4linux and DVB devices
|
||||
Group: Applications/System
|
||||
# ir-keytable and v4l2-sysfs-path are GPLv2 only
|
||||
License: GPLv2+ and GPLv2
|
||||
URL: http://www.linuxtv.org/downloads/v4l-utils/
|
||||
Source0: http://linuxtv.org/downloads/v4l-utils/v4l-utils-%{version}.tar.bz2
|
||||
# Bugfixes from upstream git, these can all be dropped with the next release
|
||||
Patch1: 0001-dvb-Fix-spelling-errors-found-by-lintian.patch
|
||||
Patch2: 0002-libv4lconvert-Fix-decoding-of-160x120-Pixart-JPEG-im.patch
|
||||
Patch3: 0003-Revert-tinyjpeg-Better-luminance-quantization-table-.patch
|
||||
Patch4: 0004-libv4lconvert-Dynamic-quantization-tables-for-Pixart.patch
|
||||
Patch5: 0005-libv4lconvert-Drop-Pixart-JPEG-frames-with-changing-.patch
|
||||
Patch6: 0006-libv4lconvert-Further-Pixart-JPEG-decompression-twea.patch
|
||||
Patch7: 0007-libv4lconvert-Fix-interpretation-of-bit-7-of-the-Pix.patch
|
||||
Patch8: 0008-libv4lcontrol-Add-another-USB-ID-to-ASUS-table.patch
|
||||
Patch9: 0009-libv4lcontrol-Add-Lenovo-Thinkpad-X220-Tablet-to-ups.patch
|
||||
Patch10: 0010-libv4l2-Improve-VIDIOC_-_FMT-logging.patch
|
||||
Patch11: 0011-libv4lconvert-replace-strndupa-with-more-portable-st.patch
|
||||
Patch12: 0012-libdvbv5-Add-missing-includes.patch
|
||||
Patch13: 0013-libv4l2-Ensure-we-always-set-buf-length-when-convert.patch
|
||||
Patch14: 0014-libv4l2-dqbuf-Don-t-requeue-buffers-which-we-are-ret.patch
|
||||
BuildRequires: libjpeg-devel qt4-devel kernel-headers desktop-file-utils
|
||||
# For /lib/udev/rules.d ownership
|
||||
Requires: udev
|
||||
Requires: libv4l = %{version}-%{release}
|
||||
Requires: libv4l%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description
|
||||
v4l-utils is a collection of various video4linux (V4L) and DVB utilities. The
|
||||
@ -37,7 +22,7 @@ v4l2-sysfs-path.
|
||||
Summary: Utilities for v4l2 / DVB driver development and debugging
|
||||
# decode_tm6000 is GPLv2 only
|
||||
License: GPLv2+ and GPLv2
|
||||
Requires: libv4l = %{version}-%{release}
|
||||
Requires: libv4l%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description devel-tools
|
||||
Utilities for v4l2 / DVB driver authors: decode_tm6000, v4l2-compliance and
|
||||
@ -47,7 +32,7 @@ v4l2-dbg.
|
||||
%package -n qv4l2
|
||||
Summary: QT v4l2 test control and streaming test application
|
||||
License: GPLv2+
|
||||
Requires: libv4l = %{version}-%{release}
|
||||
Requires: libv4l%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description -n qv4l2
|
||||
QT v4l2 test control and streaming test application.
|
||||
@ -83,7 +68,7 @@ Summary: Development files for libv4l
|
||||
Group: Development/Libraries
|
||||
License: LGPLv2+
|
||||
URL: http://hansdegoede.livejournal.com/3636.html
|
||||
Requires: libv4l = %{version}-%{release}
|
||||
Requires: libv4l%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description -n libv4l-devel
|
||||
The libv4l-devel package contains libraries and header files for
|
||||
@ -92,29 +77,20 @@ developing applications that use libv4l.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
|
||||
|
||||
%build
|
||||
make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" \
|
||||
PREFIX=%{_prefix} LIBDIR=%{_libdir}
|
||||
%configure --disable-static
|
||||
# Don't use rpath!
|
||||
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
|
||||
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
|
||||
make %{?_smp_mflags}
|
||||
|
||||
|
||||
%install
|
||||
make install PREFIX=%{_prefix} LIBDIR=%{_libdir} DESTDIR=$RPM_BUILD_ROOT
|
||||
%make_install
|
||||
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
|
||||
rm $RPM_BUILD_ROOT%{_libdir}/{v4l1compat.so,v4l2convert.so}
|
||||
desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/qv4l2.desktop
|
||||
|
||||
|
||||
@ -136,49 +112,53 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc README
|
||||
%dir %{_sysconfdir}/rc_keymaps
|
||||
%config(noreplace) %{_sysconfdir}/rc_keymaps/*
|
||||
%config(noreplace) %{_sysconfdir}/rc_maps.cfg
|
||||
/lib/udev/rules.d/70-infrared.rules
|
||||
%{_udevrulesdir}/70-infrared.rules
|
||||
%{_prefix}/lib/udev/rc_keymaps/*
|
||||
%{_bindir}/cx18-ctl
|
||||
%{_bindir}/dvb*
|
||||
%{_bindir}/ir-keytable
|
||||
%{_bindir}/ivtv-ctl
|
||||
%{_bindir}/rds-ctl
|
||||
%{_bindir}/v4l2-ctl
|
||||
%{_bindir}/v4l2-sysfs-path
|
||||
%{_mandir}/man1/ir-keytable.1*
|
||||
|
||||
%files devel-tools
|
||||
%defattr(-,root,root,-)
|
||||
%doc README
|
||||
%{_bindir}/decode_tm6000
|
||||
%{_bindir}/v4l2-compliance
|
||||
%{_sbindir}/v4l2-dbg
|
||||
|
||||
%files -n qv4l2
|
||||
%defattr(-,root,root,-)
|
||||
%doc README
|
||||
%{_bindir}/qv4l2
|
||||
%{_datadir}/applications/qv4l2.desktop
|
||||
%{_datadir}/icons/hicolor/*/apps/qv4l2.*
|
||||
|
||||
%files -n libv4l
|
||||
%defattr(-,root,root,-)
|
||||
%doc COPYING.LIB COPYING ChangeLog README.lib TODO
|
||||
%{_libdir}/libv4l*.so.*
|
||||
%{_libdir}/libdvbv5.so.*
|
||||
%{_libdir}/libv4l
|
||||
%{_libdir}/libv4l*.so.*
|
||||
|
||||
%files -n libv4l-devel
|
||||
%defattr(-,root,root,-)
|
||||
%doc README.lib-multi-threading
|
||||
%{_includedir}/dvb*.h
|
||||
%{_includedir}/libv4l*.h
|
||||
%{_libdir}/libdvbv5.so
|
||||
%{_libdir}/libv4l*.so
|
||||
%{_libdir}/pkgconfig/libdvbv5*.pc
|
||||
%{_libdir}/pkgconfig/libv4l*.pc
|
||||
|
||||
|
||||
%changelog
|
||||
* Sun Jun 9 2013 Hans de Goede <hdegoede@redhat.com> - 0.9.5-1
|
||||
- New upstream release 0.9.5 (rhbz#970412)
|
||||
- Modernize specfile a bit
|
||||
|
||||
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.8.8-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user