Vietnamese (machine translation)

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:

ioctl VIDIOC_REQBUFS

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
struct v4l2_requestbuffers

__u32

count

The number of buffers requested or granted.

__u32

type

Type of the stream or buffers, this is the same as the struct v4l2_format type field. See v4l2_buf_type for valid values.

__u32

memory

Applications set this field to V4L2_MEMORY_MMAP, V4L2_MEMORY_DMABUF or V4L2_MEMORY_USERPTR. See v4l2_memory.

__u32

capabilities

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 V4L2_MEMORY_MMAP and might support other v4l2_memory types. It will not support any other capabilities.

If you want to query the capabilities with a minimum of side-effects, then this can be called with count set to 0, memory set to V4L2_MEMORY_MMAP and type set to the buffer type. This will free any previously allocated buffers, so this is typically something that will be done at the start of the application.

__u8

flags

Specifies additional buffer management attributes. See Memory Consistency Flags.

__u8

reserved[3]

Reserved for future extensions.

V4L2 Buffer Capabilities Flags

V4L2_BUF_CAP_SUPPORTS_MMAP

0x00000001

This buffer type supports the V4L2_MEMORY_MMAP streaming mode.

V4L2_BUF_CAP_SUPPORTS_USERPTR

0x00000002

This buffer type supports the V4L2_MEMORY_USERPTR streaming mode.

V4L2_BUF_CAP_SUPPORTS_DMABUF

0x00000004

This buffer type supports the V4L2_MEMORY_DMABUF streaming mode.

V4L2_BUF_CAP_SUPPORTS_REQUESTS

0x00000008

This buffer type supports requests.

V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS

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.

V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF

0x00000020

Only valid for stateless decoders. If set, then userspace can set the V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF flag to hold off on returning the capture buffer until the OUTPUT timestamp changes.

V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS

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.

V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS

0x00000080

If set, then the max_num_buffers field in struct v4l2_create_buffers is valid. If not set, then the maximum is VIDEO_MAX_FRAME buffers.

V4L2_BUF_CAP_SUPPORTS_REMOVE_BUFS

0x00000100

If set, then VIDIOC_REMOVE_BUFS is supported.

Memory Consistency Flags

V4L2_MEMORY_FLAG_NON_COHERENT

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ợ.