*参照元 [#m1190ca3]
#backlinks

*説明 [#td28b60c]
-パス: [[linux-4.4.1/include/media/videobuf2-core.h]]

-FIXME: これは何?
--説明


**参考 [#se55206f]


*実装 [#t0fabaf3]
 /**
  * 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;
 
-
--[[linux-4.4.1/mutex]]

         const struct vb2_ops            *ops;
         const struct vb2_mem_ops        *mem_ops;
         const struct vb2_buf_ops        *buf_ops;
 
-
--[[linux-4.4.1/vb2_ops]]
--[[linux-4.4.1/vb2_mem_ops]]
--[[linux-4.4.1/vb2_buf_ops]]

         void                            *drv_priv;
         unsigned int                    buf_struct_size;
         u32                             timestamp_flags;
         gfp_t                           gfp_flags;
         u32                             min_buffers_needed;
 
-
--[[linux-4.4.1/gfp_t]]

         /* private: internal use only */
         struct mutex                    mmap_lock;
         unsigned int                    memory;
         struct vb2_buffer               *bufs[VB2_MAX_FRAME];
         unsigned int                    num_buffers;
 
-
--[[linux-4.4.1/vb2_buffer]]

         struct list_head                queued_list;
         unsigned int                    queued_count;
 
-
--[[linux-4.4.1/list_head]]

         atomic_t                        owned_by_drv_count;
         struct list_head                done_list;
         spinlock_t                      done_lock;
         wait_queue_head_t               done_wq;
 
-
--[[linux-4.4.1/atomic_t]]
--[[linux-4.4.1/spinlock_t]]
--[[linux-4.4.1/wait_queue_head_t]]

         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;
 
-
--[[linux-4.4.1/vb2_fileio_data]]
--[[linux-4.4.1/vb2_threadio_data]]

 #ifdef CONFIG_VIDEO_ADV_DEBUG
-
--[[linux-4.4.1/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
 };


*コメント [#qba40a5a]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS