You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (180 commits) V4L/DVB (4641): Trivial: use lowercase letters in hex subsystem ids V4L/DVB (4639): Cx88: add autodetection for alternate revision of Leadtek PVR V4L/DVB (4638): Basic DVB-T and analog TV support for the HVR1300. V4L/DVB (4637): Add a default method for VIDIOC_G_PARM V4L/DVB (4635): Extend bttv and saa7134 to check for both AGP and PCI PCI failure case V4L/DVB (4634): Zr36120: implement pcipci checks V4L/DVB (4632): Zoran: Implement pcipci failure check V4L/DVB (4631): Av7110: remove V4L2_CAP_VBI_CAPTURE flag V4L/DVB (4630): Av7110: FW_LOADER depemdency fixed V4L/DVB (4629): Saa7134: add card support for Proteus Pro 2309 V4L/DVB (4628): Fix VIDIOC_ENUMSTD ioctl in videodev.c V4L/DVB (4627): Vivi crashes with mplayer V4L/DVB (4626): On saa7111/7113, LUMA_CTRL need a different value V4L/DVB (4624): Tvaudio: Replaced kernel_thread() with kthread_run() V4L/DVB (4622): Copy-paste bug in videodev.c V4L/DVB (4620): Fix AGC configuration for MOD3000P-based boards V4L/DVB (4619): Fixes some I2C dependencies on V4L devices V4L/DVB (4617): Problem with dibusb-mb.c USB IDs V4L/DVB (4616): [PATCH] Nebula DigiTV USB RC support V4L/DVB (4614): Export symbol saa7134_tvaudio_setmute from saa7134 for saa7134-alsa ...
This commit is contained in:
@@ -47,7 +47,7 @@ Who: Jody McIntyre <scjody@modernduck.com>
|
||||
---------------------------
|
||||
|
||||
What: Video4Linux API 1 ioctls and video_decoder.h from Video devices.
|
||||
When: July 2006
|
||||
When: December 2006
|
||||
Why: V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6
|
||||
series. The old API have lots of drawbacks and don't provide enough
|
||||
means to work with all video and audio standards. The newer API is
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
6 -> AverTV Studio 303 (M126) [1461:000b]
|
||||
7 -> MSI TV-@nywhere Master [1462:8606]
|
||||
8 -> Leadtek Winfast DV2000 [107d:6620]
|
||||
9 -> Leadtek PVR 2000 [107d:663b,107d:663C]
|
||||
9 -> Leadtek PVR 2000 [107d:663b,107d:663c,107d:6632]
|
||||
10 -> IODATA GV-VCP3/PCI [10fc:d003]
|
||||
11 -> Prolink PlayTV PVR
|
||||
12 -> ASUS PVR-416 [1043:4823]
|
||||
12 -> ASUS PVR-416 [1043:4823,1461:c111]
|
||||
13 -> MSI TV-@nywhere
|
||||
14 -> KWorld/VStream XPert DVB-T [17de:08a6]
|
||||
15 -> DViCO FusionHDTV DVB-T1 [18ac:db00]
|
||||
@@ -51,3 +51,7 @@
|
||||
50 -> NPG Tech Real TV FM Top 10 [14f1:0842]
|
||||
51 -> WinFast DTV2000 H [107d:665e]
|
||||
52 -> Geniatech DVB-S [14f1:0084]
|
||||
53 -> Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T [0070:1404]
|
||||
54 -> Norwood Micro TV Tuner
|
||||
55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980]
|
||||
56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602]
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
57 -> Avermedia AVerTV GO 007 FM [1461:f31f]
|
||||
58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0351,1421:0370,1421:1370]
|
||||
59 -> Kworld/Tevion V-Stream Xpert TV PVR7134
|
||||
60 -> LifeView/Typhoon FlyDVB-T Duo Cardbus [5168:0502,4e42:0502]
|
||||
60 -> LifeView/Typhoon/Genius FlyDVB-T Duo Cardbus [5168:0502,4e42:0502,1489:0502]
|
||||
61 -> Philips TOUGH DVB-T reference design [1131:2004]
|
||||
62 -> Compro VideoMate TV Gold+II
|
||||
63 -> Kworld Xpert TV PVR7134
|
||||
@@ -83,7 +83,7 @@
|
||||
82 -> MSI TV@Anywhere plus [1462:6231]
|
||||
83 -> Terratec Cinergy 250 PCI TV [153b:1160]
|
||||
84 -> LifeView FlyDVB Trio [5168:0319]
|
||||
85 -> AverTV DVB-T 777 [1461:2c05]
|
||||
85 -> AverTV DVB-T 777 [1461:2c05,1461:2c05]
|
||||
86 -> LifeView FlyDVB-T / Genius VideoWonder DVB-T [5168:0301,1489:0301]
|
||||
87 -> ADS Instant TV Duo Cardbus PTV331 [0331:1421]
|
||||
88 -> Tevion/KWorld DVB-T 220RF [17de:7201]
|
||||
@@ -94,3 +94,6 @@
|
||||
93 -> Medion 7134 Bridge #2 [16be:0005]
|
||||
94 -> LifeView FlyDVB-T Hybrid Cardbus [5168:3306,5168:3502]
|
||||
95 -> LifeView FlyVIDEO3000 (NTSC) [5169:0138]
|
||||
96 -> Medion Md8800 Quadro [16be:0007,16be:0008]
|
||||
97 -> LifeView FlyDVB-S /Acorp TV134DS [5168:0300,4e42:0300]
|
||||
98 -> Proteus Pro 2309 [0919:2003]
|
||||
|
||||
@@ -54,6 +54,12 @@ bttv.o
|
||||
dropouts.
|
||||
chroma_agc=0/1 AGC of chroma signal, off by default.
|
||||
adc_crush=0/1 Luminance ADC crush, on by default.
|
||||
i2c_udelay= Allow reduce I2C speed. Default is 5 usecs
|
||||
(meaning 66,67 Kbps). The default is the
|
||||
maximum supported speed by kernel bitbang
|
||||
algoritm. You may use lower numbers, if I2C
|
||||
messages are lost (16 is known to work on
|
||||
all supported cards).
|
||||
|
||||
bttv_gpio=0/1
|
||||
gpiomask=
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
The cx23416 can produce (and the cx23415 can also read) raw YUV output. The
|
||||
format of a YUV frame is specific to this chip and is called HM12. 'HM' stands
|
||||
for 'Hauppauge Macroblock', which is a misnomer as 'Conexant Macroblock' would
|
||||
be more accurate.
|
||||
|
||||
The format is YUV 4:2:0 which uses 1 Y byte per pixel and 1 U and V byte per
|
||||
four pixels.
|
||||
|
||||
The data is encoded as two macroblock planes, the first containing the Y
|
||||
values, the second containing UV macroblocks.
|
||||
|
||||
The Y plane is divided into blocks of 16x16 pixels from left to right
|
||||
and from top to bottom. Each block is transmitted in turn, line-by-line.
|
||||
|
||||
So the first 16 bytes are the first line of the top-left block, the
|
||||
second 16 bytes are the second line of the top-left block, etc. After
|
||||
transmitting this block the first line of the block on the right to the
|
||||
first block is transmitted, etc.
|
||||
|
||||
The UV plane is divided into blocks of 16x8 UV values going from left
|
||||
to right, top to bottom. Each block is transmitted in turn, line-by-line.
|
||||
|
||||
So the first 16 bytes are the first line of the top-left block and
|
||||
contain 8 UV value pairs (16 bytes in total). The second 16 bytes are the
|
||||
second line of 8 UV pairs of the top-left block, etc. After transmitting
|
||||
this block the first line of the block on the right to the first block is
|
||||
transmitted, etc.
|
||||
|
||||
The code below is given as an example on how to convert HM12 to separate
|
||||
Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.
|
||||
|
||||
The width of a frame is always 720 pixels, regardless of the actual specified
|
||||
width.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static unsigned char frame[576*720*3/2];
|
||||
static unsigned char framey[576*720];
|
||||
static unsigned char frameu[576*720 / 4];
|
||||
static unsigned char framev[576*720 / 4];
|
||||
|
||||
static void de_macro_y(unsigned char* dst, unsigned char *src, int dstride, int w, int h)
|
||||
{
|
||||
unsigned int y, x, i;
|
||||
|
||||
// descramble Y plane
|
||||
// dstride = 720 = w
|
||||
// The Y plane is divided into blocks of 16x16 pixels
|
||||
// Each block in transmitted in turn, line-by-line.
|
||||
for (y = 0; y < h; y += 16) {
|
||||
for (x = 0; x < w; x += 16) {
|
||||
for (i = 0; i < 16; i++) {
|
||||
memcpy(dst + x + (y + i) * dstride, src, 16);
|
||||
src += 16;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void de_macro_uv(unsigned char *dstu, unsigned char *dstv, unsigned char *src, int dstride, int w, int h)
|
||||
{
|
||||
unsigned int y, x, i;
|
||||
|
||||
// descramble U/V plane
|
||||
// dstride = 720 / 2 = w
|
||||
// The U/V values are interlaced (UVUV...).
|
||||
// Again, the UV plane is divided into blocks of 16x16 UV values.
|
||||
// Each block in transmitted in turn, line-by-line.
|
||||
for (y = 0; y < h; y += 16) {
|
||||
for (x = 0; x < w; x += 8) {
|
||||
for (i = 0; i < 16; i++) {
|
||||
int idx = x + (y + i) * dstride;
|
||||
|
||||
dstu[idx+0] = src[0]; dstv[idx+0] = src[1];
|
||||
dstu[idx+1] = src[2]; dstv[idx+1] = src[3];
|
||||
dstu[idx+2] = src[4]; dstv[idx+2] = src[5];
|
||||
dstu[idx+3] = src[6]; dstv[idx+3] = src[7];
|
||||
dstu[idx+4] = src[8]; dstv[idx+4] = src[9];
|
||||
dstu[idx+5] = src[10]; dstv[idx+5] = src[11];
|
||||
dstu[idx+6] = src[12]; dstv[idx+6] = src[13];
|
||||
dstu[idx+7] = src[14]; dstv[idx+7] = src[15];
|
||||
src += 16;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
FILE *fin;
|
||||
int i;
|
||||
|
||||
if (argc == 1) fin = stdin;
|
||||
else fin = fopen(argv[1], "r");
|
||||
|
||||
if (fin == NULL) {
|
||||
fprintf(stderr, "cannot open input\n");
|
||||
exit(-1);
|
||||
}
|
||||
while (fread(frame, sizeof(frame), 1, fin) == 1) {
|
||||
de_macro_y(framey, frame, 720, 720, 576);
|
||||
de_macro_uv(frameu, framev, frame + 720 * 576, 720 / 2, 720 / 2, 576 / 2);
|
||||
fwrite(framey, sizeof(framey), 1, stdout);
|
||||
fwrite(framev, sizeof(framev), 1, stdout);
|
||||
fwrite(frameu, sizeof(frameu), 1, stdout);
|
||||
}
|
||||
fclose(fin);
|
||||
return 0;
|
||||
}
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
Format of embedded V4L2_MPEG_STREAM_VBI_FMT_IVTV VBI data
|
||||
=========================================================
|
||||
|
||||
This document describes the V4L2_MPEG_STREAM_VBI_FMT_IVTV format of the VBI data
|
||||
embedded in an MPEG-2 program stream. This format is in part dictated by some
|
||||
hardware limitations of the ivtv driver (the driver for the Conexant cx23415/6
|
||||
chips), in particular a maximum size for the VBI data. Anything longer is cut
|
||||
off when the MPEG stream is played back through the cx23415.
|
||||
|
||||
The advantage of this format is it is very compact and that all VBI data for
|
||||
all lines can be stored while still fitting within the maximum allowed size.
|
||||
|
||||
The stream ID of the VBI data is 0xBD. The maximum size of the embedded data is
|
||||
4 + 43 * 36, which is 4 bytes for a header and 2 * 18 VBI lines with a 1 byte
|
||||
header and a 42 bytes payload each. Anything beyond this limit is cut off by
|
||||
the cx23415/6 firmware. Besides the data for the VBI lines we also need 36 bits
|
||||
for a bitmask determining which lines are captured and 4 bytes for a magic cookie,
|
||||
signifying that this data package contains V4L2_MPEG_STREAM_VBI_FMT_IVTV VBI data.
|
||||
If all lines are used, then there is no longer room for the bitmask. To solve this
|
||||
two different magic numbers were introduced:
|
||||
|
||||
'itv0': After this magic number two unsigned longs follow. Bits 0-17 of the first
|
||||
unsigned long denote which lines of the first field are captured. Bits 18-31 of
|
||||
the first unsigned long and bits 0-3 of the second unsigned long are used for the
|
||||
second field.
|
||||
|
||||
'ITV0': This magic number assumes all VBI lines are captured, i.e. it implicitly
|
||||
implies that the bitmasks are 0xffffffff and 0xf.
|
||||
|
||||
After these magic cookies (and the 8 byte bitmask in case of cookie 'itv0') the
|
||||
captured VBI lines start:
|
||||
|
||||
For each line the least significant 4 bits of the first byte contain the data type.
|
||||
Possible values are shown in the table below. The payload is in the following 42
|
||||
bytes.
|
||||
|
||||
Here is the list of possible data types:
|
||||
|
||||
#define IVTV_SLICED_TYPE_TELETEXT 0x1 // Teletext (uses lines 6-22 for PAL)
|
||||
#define IVTV_SLICED_TYPE_CC 0x4 // Closed Captions (line 21 NTSC)
|
||||
#define IVTV_SLICED_TYPE_WSS 0x5 // Wide Screen Signal (line 23 PAL)
|
||||
#define IVTV_SLICED_TYPE_VPS 0x7 // Video Programming System (PAL) (line 16)
|
||||
|
||||
Hans Verkuil <hverkuil@xs4all.nl>
|
||||
Reference in New Issue
Block a user