参照元

説明

参考

実装

/**
 * struct vb2_queue - a videobuf queue
 *
 * @type:       private buffer type whose content is defined by the vb2-core
 *              caller. For example, for V4L2, it should match
 *              the V4L2_BUF_TYPE_* in include/uapi/linux/videodev2.h
 * @io_modes:   supported io methods (see vb2_io_modes enum)
 * @fileio_read_once:           report EOF after reading the first buffer
 * @fileio_write_immediately:   queue buffer after each write() call
 * @allow_zero_bytesused:       allow bytesused == 0 to be passed to the driver
 * @lock:       pointer to a mutex that protects the vb2_queue struct. The
 *              driver can set this to a mutex to let the v4l2 core serialize
 *              the queuing ioctls. If the driver wants to handle locking
 *              itself, then this should be set to NULL. This lock is not used
 *              by the videobuf2 core API.
 * @owner:      The filehandle that 'owns' the buffers, i.e. the filehandle
 *              that called reqbufs, create_buffers or started fileio.
 *              This field is not used by the videobuf2 core API, but it allows
 *              drivers to easily associate an owner filehandle with the queue.
 * @ops:        driver-specific callbacks
 * @mem_ops:    memory allocator specific callbacks
 * @buf_ops:    callbacks to deliver buffer information
 *              between user-space and kernel-space
 * @drv_priv:   driver private data
 * @buf_struct_size: size of the driver-specific buffer structure;
 *              "0" indicates the driver doesn't want to use a custom buffer
 *              structure type. for example, sizeof(struct vb2_v4l2_buffer)
 *              will be used for v4l2.
 * @timestamp_flags: Timestamp flags; V4L2_BUF_FLAG_TIMESTAMP_* and
 *              V4L2_BUF_FLAG_TSTAMP_SRC_*
 * @gfp_flags:  additional gfp flags used when allocating the buffers.
 *              Typically this is 0, but it may be e.g. GFP_DMA or __GFP_DMA32
 *              to force the buffer allocation to a specific memory zone.
 * @min_buffers_needed: the minimum number of buffers needed before
 *              start_streaming() can be called. Used when a DMA engine
 *              cannot be started unless at least this number of buffers
 *              have been queued into the driver.
 */
/*
 * Private elements (won't appear at the DocBook):
 * @mmap_lock:  private mutex used when buffers are allocated/freed/mmapped
 * @memory:     current memory type used
 * @bufs:       videobuf buffer structures
 * @num_buffers: number of allocated/used buffers
 * @queued_list: list of buffers currently queued from userspace
 * @queued_count: number of buffers queued and ready for streaming.
 * @owned_by_drv_count: number of buffers owned by the driver
 * @done_list:  list of buffers ready to be dequeued to userspace
 * @done_lock:  lock to protect done_list list
 * @done_wq:    waitqueue for processes waiting for buffers ready to be dequeued
 * @alloc_ctx:  memory type/allocator-specific contexts for each plane
 * @streaming:  current streaming state
 * @start_streaming_called: start_streaming() was called successfully and we
 *              started streaming.
 * @error:      a fatal error occurred on the queue
 * @waiting_for_buffers: used in poll() to check if vb2 is still waiting for
 *              buffers. Only set for capture queues if qbuf has not yet been
 *              called since poll() needs to return POLLERR in that situation.
 * @is_multiplanar: set if buffer type is multiplanar
 * @is_output:  set if buffer type is output
 * @last_buffer_dequeued: used in poll() and DQBUF to immediately return if the
 *              last decoded buffer was already dequeued. Set for capture queues
 *              when a buffer with the V4L2_BUF_FLAG_LAST is dequeued.
 * @fileio:     file io emulator internal data, used only if emulator is active
 * @threadio:   thread io internal data, used only if thread is active
 */
struct vb2_queue {
        unsigned int                    type;
        unsigned int                    io_modes;
        unsigned                        fileio_read_once:1;
        unsigned                        fileio_write_immediately:1;
        unsigned                        allow_zero_bytesused:1;

        struct mutex                    *lock;
        void                            *owner;
        const struct vb2_ops            *ops;
        const struct vb2_mem_ops        *mem_ops;
        const struct vb2_buf_ops        *buf_ops;
        void                            *drv_priv;
        unsigned int                    buf_struct_size;
        u32                             timestamp_flags;
        gfp_t                           gfp_flags;
        u32                             min_buffers_needed;
        /* private: internal use only */
        struct mutex                    mmap_lock;
        unsigned int                    memory;
        struct vb2_buffer               *bufs[VB2_MAX_FRAME];
        unsigned int                    num_buffers;
        struct list_head                queued_list;
        unsigned int                    queued_count;
        atomic_t                        owned_by_drv_count;
        struct list_head                done_list;
        spinlock_t                      done_lock;
        wait_queue_head_t               done_wq;
        void                            *alloc_ctx[VB2_MAX_PLANES];
        unsigned int                    plane_sizes[VB2_MAX_PLANES];

        unsigned int                    streaming:1;
        unsigned int                    start_streaming_called:1;
        unsigned int                    error:1;
        unsigned int                    waiting_for_buffers:1;
        unsigned int                    is_multiplanar:1;
        unsigned int                    is_output:1;
        unsigned int                    last_buffer_dequeued:1;

        struct vb2_fileio_data          *fileio;
        struct vb2_threadio_data        *threadio;
#ifdef CONFIG_VIDEO_ADV_DEBUG
        /*
         * Counters for how often these queue-related ops are
         * called. Used to check for unbalanced ops.
         */
        u32                             cnt_queue_setup;
        u32                             cnt_wait_prepare;
        u32                             cnt_wait_finish;
        u32                             cnt_start_streaming;
        u32                             cnt_stop_streaming;
#endif
};

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-09 (火) 10:51:43