Lưu ý
Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.
- Bản gốc:
- Người dịch:
Google Translate (machine translation)
- Phiên bản gốc:
8541d8f725c6
Cảnh báo
Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.
4.7. Giao diện dữ liệu VBI được cắt lát¶
VBI là viết tắt của Khoảng trống theo chiều dọc, một khoảng trống trong chuỗi dòng tín hiệu video analog. Trong VBI không có thông tin hình ảnh truyền đi, chờ một thời gian để chùm electron của tia catôt TV ống trở lại đầu màn hình.
Các thiết bị VBI được cắt lát sử dụng phần cứng để giải điều chế dữ liệu được truyền trong VBI. Trình điều khiển V4L2 sẽ ZZ0001ZZ thực hiện việc này bằng phần mềm, xem thêm ZZ0000ZZ. Dữ liệu được truyền dưới dạng ngắn các gói có kích thước cố định, mỗi gói bao gồm một dòng quét. Số lượng các gói trên mỗi khung hình video có thể thay đổi.
Các thiết bị thu và xuất VBI được cắt lát được truy cập thông qua cùng một các tệp ký tự đặc biệt dưới dạng thiết bị VBI thô. Khi một trình điều khiển hỗ trợ cả hai giao diện, chức năng mặc định của thiết bị ZZ0001ZZ là ZZ0003ZZ VBI chụp hoặc xuất và chức năng VBI được cắt lát chỉ khả dụng sau gọi ZZ0000ZZ ioctl như được định nghĩa bên dưới. Tương tự, thiết bị ZZ0002ZZ có thể hỗ trợ VBI API được cắt lát, tuy nhiên chức năng mặc định ở đây là quay hoặc xuất video. Phải sử dụng các bộ mô tả tệp khác nhau để truyền dữ liệu VBI thô và được cắt lát đồng thời, nếu điều này được trình điều khiển hỗ trợ.
4.7.1. Khả năng truy vấn¶
Các thiết bị hỗ trợ VBI chụp hoặc xuất API được cắt lát sẽ đặt Cờ ZZ0003ZZ hoặc ZZ0004ZZ tương ứng, trong trường ZZ0005ZZ của cấu trúc ZZ0000ZZ được trả lại bởi ZZ0001ZZ ioctl. Ít nhất một trong số đọc/ghi hoặc phát trực tuyến ZZ0002ZZ phải được hỗ trợ. Các thiết bị VBI được cắt lát có thể có bộ điều chỉnh hoặc bộ điều biến.
4.7.2. Chức năng bổ sung¶
Các thiết bị VBI được cắt lát sẽ hỗ trợ ZZ0000ZZ và ZZ0001ZZ ioctls nếu họ có những thứ này khả năng và chúng có thể hỗ trợ ioctls ZZ0002ZZ. ZZ0003ZZ ioctls cung cấp thông tin quan trọng để lập trình một thiết bị VBI được cắt lát, do đó phải được hỗ trợ.
4.7.3. Cắt lát định dạng VBI¶
Để tìm hiểu dịch vụ dữ liệu nào được phần cứng hỗ trợ các ứng dụng có thể gọi ZZ0000ZZ ioctl. Tất cả các trình điều khiển triển khai giao diện VBI được cắt lát phải hỗ trợ điều này ioctl. Kết quả có thể khác với kết quả của ZZ0001ZZ ioctl khi số VBI các dòng mà phần cứng có thể chụp hoặc xuất ra trên mỗi khung hình hoặc số lượng các dịch vụ mà nó có thể xác định trên một đường dây nhất định đều bị hạn chế. Ví dụ trên PAL dòng 16 phần cứng có thể tìm kiếm tín hiệu VPS hoặc Teletext, nhưng không phải cả hai cùng một lúc.
Để xác định các ứng dụng dịch vụ hiện được chọn, hãy đặt Trường ZZ0003ZZ của cấu trúc ZZ0000ZZ tới ZZ0004ZZ hoặc ZZ0005ZZ và ZZ0001ZZ ioctl lấp đầy ZZ0006ZZ thành viên, một cấu trúc ZZ0002ZZ.
Các ứng dụng có thể yêu cầu các tham số khác nhau bằng cách khởi tạo hoặc sửa đổi thành viên ZZ0002ZZ và gọi ZZ0000ZZ ioctl với một con trỏ tới cấu trúc ZZ0001ZZ.
VBI API được cắt lát phức tạp hơn VBI API thô vì phần cứng phải được cho biết dịch vụ VBI nào sẽ được mong đợi trên mỗi dòng quét. Không tất cả các dịch vụ có thể được hỗ trợ bởi phần cứng trên tất cả các dòng (đây là đặc biệt đúng với đầu ra VBI nơi Teletext thường không được hỗ trợ và các dịch vụ khác chỉ có thể được chèn vào một dòng cụ thể). Ở nhiều nơi tuy nhiên, trong các trường hợp, chỉ cần đặt trường ZZ0000ZZ là đủ đến các dịch vụ được yêu cầu và để tài xế điền vào ZZ0001ZZ mảng theo khả năng phần cứng. Chỉ khi kiểm soát chính xác hơn là cần thiết nếu lập trình viên thiết lập mảng ZZ0002ZZ một cách rõ ràng.
ZZ0000ZZ ioctl sửa đổi các thông số theo khả năng phần cứng. Khi người lái xe phân bổ tài nguyên tại thời điểm này, nó có thể trả về mã lỗi ZZ0005ZZ nếu được yêu cầu tài nguyên tạm thời không có sẵn. Điểm phân bổ nguồn lực khác có thể trả về ZZ0006ZZ có thể là ZZ0001ZZ ioctl và lần đầu tiên ZZ0002ZZ, ZZ0003ZZ và Cuộc gọi ZZ0004ZZ.
-
type v4l2_sliced_vbi_format¶
4.7.3.1. cấu trúc v4l2_sliced_vbi_format¶
__u16 |
|
If On return the driver sets this field to the |
||
__u16 |
|
Applications initialize this array with sets of data services the driver shall look for or insert on the respective scan line. Subject to hardware capabilities drivers return the requested set, a subset, which may be just a single service, or an empty set. When the hardware cannot handle multiple services on the same line the driver shall choose one. No assumptions can be made on which service the driver chooses. Data services are defined in Sliced VBI services. Array indices map to ITU-R line numbers[2] as follows: |
||
Element |
525 line systems |
625 line systems |
||
|
1 |
1 |
||
|
23 |
23 |
||
|
264 |
314 |
||
|
286 |
336 |
||
Drivers must set |
||||
__u32 |
|
Maximum number of bytes passed by one
|
||
__u32 |
|
This array is reserved for future extensions. Applications and drivers must set it to zero. |
||
4.7.3.2. Dịch vụ VBI cắt lát¶
Symbol |
Value |
Reference |
Lines, usually |
Payload |
|---|---|---|---|---|
|
0x0001 |
PAL/SECAM line 7-22, 320-335 (second field 7-22) |
Last 42 of the 45 byte Teletext packet, that is without clock run-in and framing code, lsb first transmitted. |
|
|
0x0400 |
PAL line 16 |
Byte number 3 to 15 according to Figure 9 of ETS 300 231, lsb first transmitted. |
|
|
0x1000 |
NTSC line 21, 284 (second field 21) |
Two bytes in transmission order, including parity bit, lsb first transmitted. |
|
|
0x4000 |
PAL/SECAM line 23 |
See V4L2_SLICED_WSS_625 payload below. |
|
|
0x1000 |
Set of services applicable to 525 line systems. |
||
|
0x4401 |
Set of services applicable to 625 line systems. |
||
Trình điều khiển có thể trả về mã lỗi ZZ0005ZZ khi các ứng dụng cố gắng đọc hoặc ghi dữ liệu mà không cần thỏa thuận định dạng trước, sau khi chuyển đổi tiêu chuẩn video (có thể làm mất hiệu lực các tham số VBI đã thương lượng) và sau khi chuyển đổi đầu vào video (có thể thay đổi tiêu chuẩn video thành một tác dụng phụ). ZZ0000ZZ ioctl có thể trả về mã lỗi ZZ0006ZZ khi các ứng dụng cố gắng thay đổi định dạng trong khi quá trình nhập/xuất đang diễn ra (giữa một ZZ0001ZZ và Cuộc gọi ZZ0002ZZ và sau cuộc gọi đầu tiên Cuộc gọi ZZ0003ZZ hoặc ZZ0004ZZ).
4.7.3.2.1. Tải trọng V4L2_SLICED_WSS_625¶
Tải trọng cho ZZ0000ZZ là:
ZZ0000ZZ 0 ZZ0001ZZ +------+--------+---------+-------------+----------+ ZZ0002ZZ msb ZZ0003ZZ msb ZZ0004ZZ | +-+-+-+--+--+-+-+--+--+-+--+---+---+--+-+--+ ZZ0005ZZ7ZZ0006ZZ5ZZ0007ZZ 3|2|1|0 | x|x|13|12 | 11|10|9|8 | +------+-+-+-+--+--+-+-+--+--+-+--+---+---+--+-+--+
4.7.4. Đọc và ghi dữ liệu VBI được cắt lát¶
Một chiếc ZZ0000ZZ hoặc ZZ0001ZZ
cuộc gọi phải chuyển tất cả dữ liệu thuộc một khung hình video. Đó là một mảng
của cấu trúc ZZ0002ZZ với một hoặc
nhiều phần tử hơn và tổng kích thước không vượt quá byte ZZ0004ZZ. Tương tự như vậy
trong chế độ I/O phát trực tuyến, một bộ đệm byte ZZ0005ZZ phải chứa dữ liệu
của một khung hình video. ZZ0006ZZ chưa sử dụng
Các phần tử struct ZZ0003ZZ phải bằng 0.
-
type v4l2_sliced_vbi_data¶
4.7.4.1. cấu trúc v4l2_sliced_vbi_data¶
__u32 |
|
A flag from Sliced VBI services identifying the type of data in
this packet. Only a single bit must be set. When the |
__u32 |
|
The video field number this data has been captured from, or shall
be inserted at. |
__u32 |
|
The field (as opposed to frame) line number this data has been
captured from, or shall be inserted at. See ITU-R 525 line numbering (M/NTSC and M/PAL) and
ITU-R 625 line numbering for valid values. Sliced VBI capture devices can
set the line number of all packets to |
__u32 |
|
This field is reserved for future extensions. Applications and drivers must set it to zero. |
__u8 |
|
The packet payload. See Sliced VBI services for the contents and number of bytes passed for each data type. The contents of padding bytes at the end of this array are undefined, drivers and applications shall ignore them. |
Các gói luôn được truyền theo thứ tự số dòng tăng dần, không có số dòng trùng lặp. Chức năng ZZ0000ZZ và ioctl ZZ0001ZZ phải trả về ZZ0004ZZ mã lỗi khi ứng dụng vi phạm quy tắc này. Họ cũng phải trả lại một Mã lỗi EINVAL khi ứng dụng chuyển trường hoặc dòng không chính xác số hoặc sự kết hợp của ZZ0005ZZ, ZZ0006ZZ và ZZ0007ZZ chưa có đã được đàm phán với ZZ0002ZZ hoặc ZZ0003ZZ ioctl. Khi số dòng là trình điều khiển không xác định phải chuyển các gói theo thứ tự được truyền. các trình điều khiển có thể chèn các gói trống với ZZ0008ZZ được đặt thành 0 ở bất kỳ đâu trong mảng gói.
Để đảm bảo đồng bộ hóa và phân biệt với hiện tượng rớt khung hình, khi một khung đã chụp không mang bất kỳ trình điều khiển dịch vụ dữ liệu nào được yêu cầu phải chuyển một hoặc nhiều gói trống. Khi một ứng dụng không vượt qua được Dữ liệu VBI kịp thời xuất ra, trình điều khiển phải xuất VPS và WSS cuối cùng gói lại và vô hiệu hóa đầu ra của Phụ đề chi tiết và Teletext dữ liệu hoặc dữ liệu đầu ra bị Closed Caption và Teletext bỏ qua bộ giải mã.
Thiết bị VBI được cắt lát có thể hỗ trợ ZZ0000ZZ và/hoặc phát trực tuyến (ZZ0001ZZ và/hoặc ZZ0002ZZ) I/O. Cái sau có khả năng đồng bộ hóa dữ liệu video và VBI bằng cách sử dụng dấu thời gian đệm.
4.7.5. Dữ liệu VBI được cắt lát trong luồng MPEG¶
Nếu một thiết bị có thể tạo ra luồng đầu ra MPEG, nó có thể có khả năng cung cấp ZZ0000ZZ dưới dạng dữ liệu được nhúng trong luồng MPEG. Người dùng hoặc ứng dụng kiểm soát điều này chèn dữ liệu VBI được cắt lát bằng ZZ0001ZZ kiểm soát.
Nếu người lái xe không cung cấp ZZ0000ZZ điều khiển hoặc chỉ cho phép điều khiển đó được đặt thành ZZ0001ZZ, thì thiết bị không thể nhúng dữ liệu VBI được cắt lát vào luồng MPEG.
các ZZ0000ZZ điều khiển không ngầm thiết lập trình điều khiển thiết bị để chụp cũng như dừng thu thập dữ liệu VBI được cắt lát. Điều khiển chỉ cho biết nhúng cắt lát Dữ liệu VBI trong luồng MPEG, nếu một ứng dụng đã thương lượng VBI được cắt lát dịch vụ được nắm bắt.
Cũng có thể xảy ra trường hợp một thiết bị chỉ có thể nhúng dữ liệu VBI được cắt lát trong một số loại luồng MPEG nhất định: ví dụ như trong MPEG-2 PS nhưng không phải là MPEG-2 TS. Trong tình huống này, nếu yêu cầu chèn dữ liệu VBI được cắt lát, dữ liệu VBI được cắt lát sẽ được nhúng vào các loại luồng MPEG khi được hỗ trợ và âm thầm bị bỏ qua khỏi các loại luồng MPEG trong đó VBI được cắt lát thiết bị không hỗ trợ chèn dữ liệu.
Các phần phụ sau đây chỉ định định dạng của VBI được cắt lát được nhúng dữ liệu.
4.7.5.1. MPEG Luồng được nhúng, được cắt lát Định dạng dữ liệu VBI: NONE¶
các ZZ0000ZZ định dạng VBI được cắt lát được nhúng sẽ được trình điều khiển hiểu là một điều khiển ngừng nhúng dữ liệu VBI được cắt lát vào luồng MPEG. Cả thiết bị đều không trình điều khiển cũng không được chèn các gói dữ liệu VBI được cắt lát “trống” vào Luồng MPEG khi định dạng này được đặt. Không có cấu trúc dữ liệu luồng MPEG nào được chỉ định cho định dạng này.
4.7.5.2. MPEG Luồng được nhúng, được cắt lát Định dạng dữ liệu VBI: IVTV¶
các ZZ0000ZZ định dạng VBI được cắt lát được nhúng, khi được hỗ trợ, sẽ báo cho trình điều khiển biết nhúng tối đa 36 dòng dữ liệu VBI được cắt lát trên mỗi khung hình trong MPEG-2 Private Gói PES luồng 1 được đóng gói trong MPEG-2 ZZ0001ZZ trong Luồng MPEG.
ZZ0002ZZ: Đặc tả định dạng này bắt nguồn từ một định dạng dữ liệu VBI tùy chỉnh, được nhúng, cắt lát được sử dụng bởi trình điều khiển ZZ0000ZZ. Định dạng này đã được chỉ định không chính thức trong nguồn kernel trong tệp ZZ0001ZZ . các kích thước tối đa của tải trọng và các khía cạnh khác của định dạng này được điều khiển bởi khả năng và giới hạn của bộ giải mã CX23415 MPEG để trích xuất, giải mã và hiển thị dữ liệu VBI được cắt lát được nhúng bên trong một luồng MPEG.
Việc sử dụng định dạng này là ZZ0002ZZ dành riêng cho trình điều khiển ZZ0000ZZ ZZ0003ZZ dành riêng cho các thiết bị CX2341x, dưới dạng chèn gói dữ liệu VBI được cắt lát vào luồng MPEG được triển khai trong phần mềm trình điều khiển. Ít nhất là Trình điều khiển ZZ0001ZZ cung cấp tính năng chèn dữ liệu VBI được cắt lát vào MPEG-2 PS trong định dạng này là tốt.
Các định nghĩa sau đây chỉ định tải trọng của MPEG-2 Private Truyền 1 gói PES chứa dữ liệu VBI được cắt lát khi ZZ0000ZZ được thiết lập. (Tiêu đề gói MPEG-2 ZZ0001ZZ và Tiêu đề đóng gói MPEG-2 ZZ0002ZZ không được trình bày chi tiết ở đây. làm ơn tham khảo thông số kỹ thuật MPEG-2 để biết chi tiết về các tiêu đề gói đó.)
Tải trọng của các gói MPEG-2 ZZ0001ZZ có chứa
dữ liệu VBI được cắt lát được chỉ định bởi struct
ZZ0000ZZ. các
tải trọng có độ dài thay đổi, tùy thuộc vào số dòng thực tế của
dữ liệu VBI được cắt lát có trong khung hình video. Tải trọng có thể được đệm ở
phần cuối có byte điền không xác định để căn chỉnh phần cuối của tải trọng với một
Ranh giới 4 byte. Tải trọng không bao giờ vượt quá 1552 byte (2 trường
với 18 dòng/trường với 43 byte dữ liệu/dòng và phép thuật 4 byte
số).
-
type v4l2_mpeg_vbi_fmt_ivtv¶
4.7.5.3. cấu trúc v4l2_mpeg_vbi_fmt_ivtv¶
__u8 |
|
A “magic” constant from Magic Constants for struct v4l2_mpeg_vbi_fmt_ivtv magic field that
indicates this is a valid sliced VBI data payload and also
indicates which member of the anonymous union, |
union { |
(anonymous) |
|
struct |
|
The primary form of the sliced VBI data payload that contains anywhere from 1 to 35 lines of sliced VBI data. Line masks are provided in this form of the payload indicating which VBI lines are provided. |
struct v4l2_mpeg_vbi_ITV0 |
|
An alternate form of the sliced VBI data payload used when 36 lines of sliced VBI data are present. No line masks are provided in this form of the payload; all valid line mask bits are implicitly set. |
} |
||
4.7.5.4. Hằng số ma thuật cho trường ma thuật struct v4l2_mpeg_vbi_fmt_ivtv¶
Defined Symbol |
Value |
Description |
|---|---|---|
|
“itv0” |
Indicates the |
|
“ITV0” |
Indicates the |
-
type v4l2_mpeg_vbi_itv0¶
-
type v4l2_mpeg_vbi_ITV0¶
4.7.5.5. cấu trúc v4l2_mpeg_vbi_itv0 và v4l2_mpeg_vbi_ITV0¶
__le32 |
|
Bitmasks indicating the VBI service lines present. These
linemask[0] b0: line 6 first field
linemask[0] b17: line 23 first field
linemask[0] b18: line 6 second field
linemask[0] b31: line 19 second field
linemask[1] b0: line 20 second field
linemask[1] b3: line 23 second field
linemask[1] b4-b31: unused and set to 0
|
struct
|
|
This is a variable length array that holds from 1 to 35 lines of
sliced VBI data. The sliced VBI data lines present correspond to
the bits set in the |
4.7.5.6. cấu trúc v4l2_mpeg_vbi_ITV0¶
struct
|
|
A fixed length array of 36 lines of sliced VBI data. |
-
type v4l2_mpeg_vbi_itv0_line¶
4.7.5.7. cấu trúc v4l2_mpeg_vbi_itv0_line¶
__u8 |
|
A line identifier value from Line Identifiers for struct v4l2_mpeg_vbi_itv0_line id field that indicates the type of sliced VBI data stored on this line. |
__u8 |
|
The sliced VBI data for the line. |
4.7.5.8. Mã định danh dòng cho trường id struct v4l2_mpeg_vbi_itv0_line¶
Defined Symbol |
Value |
Description |
|---|---|---|
|
1 |
Refer to Sliced VBI services for a description of the line payload. |
|
4 |
Refer to Sliced VBI services for a description of the line payload. |
|
5 |
Refer to Sliced VBI services for a description of the line payload. |
|
7 |
Refer to Sliced VBI services for a description of the line payload. |