-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 ...
- Loading branch information
Showing
197 changed files
with
9,023 additions
and
4,211 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
|
||
-------------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.