mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
[media] media: videobuf2: Prepare to divide videobuf2
Prepare to divide videobuf2 - Separate vb2 trace events from v4l2 trace event. - Make wrapper functions that will move to v4l2-side. - Make vb2_core_* functions that will remain in core-side. - Add a callback function table for buffer operation which makes vb2-core to be able to invoke a v4l2-side functions. - Rename internal functions as vb2_*. Signed-off-by: Junghak Sung <jh1009.sung@samsung.com> Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com> Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com> Acked-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
bed04f9342
commit
b0e0e1f83d
@ -14,7 +14,7 @@ ifeq ($(CONFIG_OF),y)
|
||||
videodev-objs += v4l2-of.o
|
||||
endif
|
||||
ifeq ($(CONFIG_TRACEPOINTS),y)
|
||||
videodev-objs += v4l2-trace.o
|
||||
videodev-objs += vb2-trace.o v4l2-trace.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_VIDEO_V4L2) += videodev.o
|
||||
|
@ -5,7 +5,7 @@
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/v4l2.h>
|
||||
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_done);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_queue);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_dqbuf);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_qbuf);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_buf_done);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_buf_queue);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_dqbuf);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_qbuf);
|
||||
|
9
drivers/media/v4l2-core/vb2-trace.c
Normal file
9
drivers/media/v4l2-core/vb2-trace.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include <media/videobuf2-core.h>
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/vb2.h>
|
||||
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_done);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_queue);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_dqbuf);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_qbuf);
|
File diff suppressed because it is too large
Load Diff
@ -363,6 +363,12 @@ struct vb2_ops {
|
||||
void (*buf_queue)(struct vb2_buffer *vb);
|
||||
};
|
||||
|
||||
struct vb2_buf_ops {
|
||||
int (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
|
||||
int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,
|
||||
struct vb2_plane *planes);
|
||||
int (*set_timestamp)(struct vb2_buffer *vb, const void *pb);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct vb2_queue - a videobuf queue
|
||||
@ -385,6 +391,8 @@ struct vb2_ops {
|
||||
* 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
|
||||
@ -440,6 +448,8 @@ struct vb2_queue {
|
||||
|
||||
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;
|
||||
|
@ -175,17 +175,12 @@ DEFINE_EVENT(v4l2_event_class, v4l2_qbuf,
|
||||
TP_ARGS(minor, buf)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(vb2_event_class,
|
||||
DECLARE_EVENT_CLASS(vb2_v4l2_event_class,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, minor)
|
||||
__field(u32, queued_count)
|
||||
__field(int, owned_by_drv_count)
|
||||
__field(u32, index)
|
||||
__field(u32, type)
|
||||
__field(u32, bytesused)
|
||||
__field(u32, flags)
|
||||
__field(u32, field)
|
||||
__field(s64, timestamp)
|
||||
@ -207,12 +202,6 @@ DECLARE_EVENT_CLASS(vb2_event_class,
|
||||
struct v4l2_fh *owner = q->owner;
|
||||
|
||||
__entry->minor = owner ? owner->vdev->minor : -1;
|
||||
__entry->queued_count = q->queued_count;
|
||||
__entry->owned_by_drv_count =
|
||||
atomic_read(&q->owned_by_drv_count);
|
||||
__entry->index = vb->index;
|
||||
__entry->type = vb->type;
|
||||
__entry->bytesused = vb->planes[0].bytesused;
|
||||
__entry->flags = vbuf->flags;
|
||||
__entry->field = vbuf->field;
|
||||
__entry->timestamp = timeval_to_ns(&vbuf->timestamp);
|
||||
@ -229,15 +218,10 @@ DECLARE_EVENT_CLASS(vb2_event_class,
|
||||
__entry->sequence = vbuf->sequence;
|
||||
),
|
||||
|
||||
TP_printk("minor = %d, queued = %u, owned_by_drv = %d, index = %u, "
|
||||
"type = %s, bytesused = %u, flags = %s, field = %s, "
|
||||
TP_printk("minor=%d flags = %s, field = %s, "
|
||||
"timestamp = %llu, timecode = { type = %s, flags = %s, "
|
||||
"frames = %u, seconds = %u, minutes = %u, hours = %u, "
|
||||
"userbits = { %u %u %u %u } }, sequence = %u", __entry->minor,
|
||||
__entry->queued_count,
|
||||
__entry->owned_by_drv_count,
|
||||
__entry->index, show_type(__entry->type),
|
||||
__entry->bytesused,
|
||||
show_flags(__entry->flags),
|
||||
show_field(__entry->field),
|
||||
__entry->timestamp,
|
||||
@ -255,22 +239,22 @@ DECLARE_EVENT_CLASS(vb2_event_class,
|
||||
)
|
||||
)
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_buf_done,
|
||||
DEFINE_EVENT(vb2_v4l2_event_class, vb2_v4l2_buf_done,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_buf_queue,
|
||||
DEFINE_EVENT(vb2_v4l2_event_class, vb2_v4l2_buf_queue,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_dqbuf,
|
||||
DEFINE_EVENT(vb2_v4l2_event_class, vb2_v4l2_dqbuf,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_qbuf,
|
||||
DEFINE_EVENT(vb2_v4l2_event_class, vb2_v4l2_qbuf,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
65
include/trace/events/vb2.h
Normal file
65
include/trace/events/vb2.h
Normal file
@ -0,0 +1,65 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM vb2
|
||||
|
||||
#if !defined(_TRACE_VB2_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_VB2_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include <media/videobuf2-core.h>
|
||||
|
||||
DECLARE_EVENT_CLASS(vb2_event_class,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(void *, owner)
|
||||
__field(u32, queued_count)
|
||||
__field(int, owned_by_drv_count)
|
||||
__field(u32, index)
|
||||
__field(u32, type)
|
||||
__field(u32, bytesused)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->owner = q->owner;
|
||||
__entry->queued_count = q->queued_count;
|
||||
__entry->owned_by_drv_count =
|
||||
atomic_read(&q->owned_by_drv_count);
|
||||
__entry->index = vb->index;
|
||||
__entry->type = vb->type;
|
||||
__entry->bytesused = vb->planes[0].bytesused;
|
||||
),
|
||||
|
||||
TP_printk("owner = %p, queued = %u, owned_by_drv = %d, index = %u, "
|
||||
"type = %u, bytesused = %u", __entry->owner,
|
||||
__entry->queued_count,
|
||||
__entry->owned_by_drv_count,
|
||||
__entry->index, __entry->type,
|
||||
__entry->bytesused
|
||||
)
|
||||
)
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_buf_done,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_buf_queue,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_dqbuf,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(vb2_event_class, vb2_qbuf,
|
||||
TP_PROTO(struct vb2_queue *q, struct vb2_buffer *vb),
|
||||
TP_ARGS(q, vb)
|
||||
);
|
||||
|
||||
#endif /* if !defined(_TRACE_VB2_H) || defined(TRACE_HEADER_MULTI_READ) */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
Loading…
Reference in New Issue
Block a user