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/.
7.52. ioctl VIDIOC_REQBUFS¶
7.52.1. Tên¶
VIDIOC_REQBUFS - Khởi tạo ánh xạ bộ nhớ, I/O con trỏ người dùng hoặc I/O bộ đệm DMA
7.52.2. Tóm tắt¶
-
VIDIOC_REQBUFS¶
ZZ0000ZZ
7.52.3. Đối số¶
- ZZ0001ZZ
Bộ mô tả tệp được trả về bởi ZZ0000ZZ.
- ZZ0001ZZ
Con trỏ tới cấu trúc ZZ0000ZZ.
7.52.4. Sự miêu tả¶
Ioctl này được sử dụng để khởi tạo ZZ0000ZZ, I/O dựa trên ZZ0001ZZ hoặc ZZ0002ZZ. Bộ đệm được ánh xạ bộ nhớ được đặt trong bộ nhớ thiết bị và phải được phân bổ với ioctl này trước khi chúng có thể được ánh xạ vào địa chỉ của ứng dụng không gian. Bộ đệm người dùng được phân bổ bởi chính ứng dụng và điều này ioctl chỉ được sử dụng để chuyển trình điều khiển sang chế độ I/O con trỏ người dùng và để thiết lập một số cấu trúc bên trong. Tương tự, bộ đệm DMABUF là được phân bổ bởi các ứng dụng thông qua trình điều khiển thiết bị và chỉ ioctl này định cấu hình trình điều khiển sang chế độ I/O DMABUF mà không thực hiện bất kỳ thao tác trực tiếp nào phân bổ.
Để phân bổ bộ đệm thiết bị, các ứng dụng hãy khởi tạo tất cả các trường của cấu trúc ZZ0000ZZ. Họ đặt ZZ0001ZZ trường thành luồng hoặc loại bộ đệm tương ứng, trường ZZ0002ZZ thành số lượng bộ đệm mong muốn, ZZ0003ZZ phải được đặt thành số lượng bộ đệm được yêu cầu Phương thức I/O và mảng ZZ0004ZZ phải bằng 0. Khi ioctl là được gọi bằng một con trỏ tới cấu trúc này, trình điều khiển sẽ cố gắng phân bổ số lượng bộ đệm được yêu cầu và nó lưu trữ số lượng thực tế được phân bổ trong trường ZZ0005ZZ. Nó có thể nhỏ hơn số được yêu cầu, thậm chí bằng 0, khi trình điều khiển hết bộ nhớ trống. Một cái lớn hơn số này cũng có thể thực hiện được khi trình điều khiển yêu cầu nhiều bộ đệm hơn để hoạt động chính xác. Ví dụ: đầu ra video yêu cầu ít nhất hai bộ đệm, một bộ đệm được hiển thị và một bộ đệm được ứng dụng lấp đầy.
Khi phương thức I/O không được hỗ trợ, ioctl sẽ trả về lỗi ZZ0000ZZ mã.
Các ứng dụng có thể gọi lại ZZ0000ZZ để thay đổi số lượng bộ đệm. Lưu ý rằng nếu bất kỳ bộ đệm nào vẫn được ánh xạ hoặc xuất qua DMABUF, thì ZZ0001ZZ chỉ có thể thành công nếu Khả năng ZZ0004ZZ được thiết lập. Nếu không ZZ0002ZZ sẽ trả về mã lỗi ZZ0005ZZ. Nếu ZZ0006ZZ được đặt thì các bộ đệm này sẽ mồ côi và sẽ được giải phóng khi chúng không được ánh xạ hoặc khi DMABUF được xuất fds đã đóng cửa. Giá trị ZZ0007ZZ bằng 0 sẽ giải phóng hoặc loại bỏ tất cả các bộ đệm, sau hủy bỏ hoặc hoàn thiện bất kỳ DMA nào đang được thực hiện, một ẩn ý ZZ0003ZZ.
-
type v4l2_requestbuffers¶
__u32 |
|
The number of buffers requested or granted. |
__u32 |
|
Type of the stream or buffers, this is the same as the struct
|
__u32 |
|
Applications set this field to |
__u32 |
|
Set by the driver. If 0, then the driver doesn’t support
capabilities. In that case all you know is that the driver is
guaranteed to support If you want to query the capabilities with a minimum of side-effects,
then this can be called with |
__u8 |
|
Specifies additional buffer management attributes. See Memory Consistency Flags. |
__u8 |
|
Reserved for future extensions. |
|
0x00000001 |
This buffer type supports the |
|
0x00000002 |
This buffer type supports the |
|
0x00000004 |
This buffer type supports the |
|
0x00000008 |
This buffer type supports requests. |
|
0x00000010 |
The kernel allows calling ioctl VIDIOC_REQBUFS while buffers are still mapped or exported via DMABUF. These orphaned buffers will be freed when they are unmapped or when the exported DMABUF fds are closed. |
|
0x00000020 |
Only valid for stateless decoders. If set, then userspace can set the
|
|
0x00000040 |
This capability is set by the driver to indicate that the queue supports cache and memory management hints. However, it’s only valid when the queue is used for memory mapping streaming I/O. See V4L2_BUF_FLAG_NO_CACHE_INVALIDATE, V4L2_BUF_FLAG_NO_CACHE_CLEAN and V4L2_MEMORY_FLAG_NON_COHERENT. |
|
0x00000080 |
If set, then the |
|
0x00000100 |
If set, then |
|
0x00000001 |
A buffer is allocated either in coherent (it will be automatically coherent between the CPU and the bus) or non-coherent memory. The latter can provide performance gains, for instance the CPU cache sync/flush operations can be avoided if the buffer is accessed by the corresponding device only and the CPU does not read/write to/from that buffer. However, this requires extra care from the driver -- it must guarantee memory consistency by issuing a cache flush/sync when consistency is needed. If this flag is set V4L2 will attempt to allocate the buffer in non-coherent memory. The flag takes effect only if the buffer is used for memory mapping I/O and the queue reports the V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability. |
7.52.5. Giá trị trả về¶
Khi thành công, trả về 0, lỗi -1 và biến ZZ0001ZZ được đặt một cách thích hợp. Các mã lỗi chung được mô tả tại Chương ZZ0000ZZ.
- EINVAL
Loại bộ đệm (trường ZZ0000ZZ) hoặc phương thức I/O được yêu cầu (ZZ0001ZZ) không được hỗ trợ.