All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hugues Fruchet <hugues.fruchet@st.com>
To: <linux-media@vger.kernel.org>, Hans Verkuil <hverkuil@xs4all.nl>
Cc: <kernel@stlinux.com>,
	Benjamin Gaignard <benjamin.gaignard@linaro.org>,
	Hugues Fruchet <hugues.fruchet@st.com>,
	Jean-Christophe Trotin <jean-christophe.trotin@st.com>
Subject: [PATCH v1 9/9] [media] st-delta: debug: trace stream/frame information & summary
Date: Tue, 20 Sep 2016 16:33:40 +0200	[thread overview]
Message-ID: <1474382020-17588-10-git-send-email-hugues.fruchet@st.com> (raw)
In-Reply-To: <1474382020-17588-1-git-send-email-hugues.fruchet@st.com>

Signed-off-by: Hugues Fruchet <hugues.fruchet@st.com>
---
 drivers/media/platform/sti/delta/Makefile      |   2 +-
 drivers/media/platform/sti/delta/delta-debug.c | 164 +++++++++++++++++++++++++
 drivers/media/platform/sti/delta/delta-debug.h |  18 +++
 drivers/media/platform/sti/delta/delta-v4l2.c  |  31 ++++-
 4 files changed, 210 insertions(+), 5 deletions(-)
 create mode 100644 drivers/media/platform/sti/delta/delta-debug.c
 create mode 100644 drivers/media/platform/sti/delta/delta-debug.h

diff --git a/drivers/media/platform/sti/delta/Makefile b/drivers/media/platform/sti/delta/Makefile
index 663be70..f95580e 100644
--- a/drivers/media/platform/sti/delta/Makefile
+++ b/drivers/media/platform/sti/delta/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_VIDEO_STI_DELTA) := st-delta.o
-st-delta-y := delta-v4l2.o delta-mem.o delta-ipc.o
+st-delta-y := delta-v4l2.o delta-mem.o delta-ipc.o delta-debug.o
 
 # MJPEG support
 st-delta-$(CONFIG_VIDEO_STI_DELTA_MJPEG) += delta-mjpeg-hdr.o
diff --git a/drivers/media/platform/sti/delta/delta-debug.c b/drivers/media/platform/sti/delta/delta-debug.c
new file mode 100644
index 0000000..726909f
--- /dev/null
+++ b/drivers/media/platform/sti/delta/delta-debug.c
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) STMicroelectronics SA 2015
+ * Authors: Hugues Fruchet <hugues.fruchet@st.com>
+ *          Fabrice Lecoultre <fabrice.lecoultre@st.com>
+ *          for STMicroelectronics.
+ * License terms:  GNU General Public License (GPL), version 2
+ */
+
+#include "delta.h"
+#include "delta-debug.h"
+
+char *delta_streaminfo_str(struct delta_streaminfo *s, char *str,
+			   unsigned int len)
+{
+	char *cur = str;
+	size_t left = len;
+	int ret = 0;
+	int cnt = 0;
+
+	if (!s)
+		return NULL;
+
+	ret = snprintf(cur, left,
+		       "%4.4s %dx%d %s %s dpb=%d %s",
+		       (char *)&s->streamformat,
+		       s->width, s->height,
+		       s->profile, s->level,
+		       s->dpb,
+		       (s->field == V4L2_FIELD_NONE) ?
+		       "progressive" : "interlaced");
+	cnt = (left > ret ? ret : left);
+
+	if (s->flags & DELTA_STREAMINFO_FLAG_CROP) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       " crop=%dx%d@(%d,%d)",
+			       s->crop.width, s->crop.height,
+			       s->crop.left, s->crop.top);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (s->flags & DELTA_STREAMINFO_FLAG_PIXELASPECT) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       " pixel aspect=%d/%d",
+			       s->pixelaspect.numerator,
+			       s->pixelaspect.denominator);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (s->flags & DELTA_STREAMINFO_FLAG_OTHER) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left, " %s", s->other);
+		cnt = (left > ret ? ret : left);
+	}
+
+	return str;
+}
+
+char *delta_frameinfo_str(struct delta_frameinfo *f, char *str,
+			  unsigned int len)
+{
+	char *cur = str;
+	size_t left = len;
+	int ret = 0;
+	int cnt = 0;
+
+	if (!f)
+		return NULL;
+
+	ret = snprintf(cur, left,
+		       "%4.4s %dx%d aligned %dx%d %s",
+		       (char *)&f->pixelformat,
+		       f->width, f->height,
+		       f->aligned_width, f->aligned_height,
+		       (f->field == V4L2_FIELD_NONE) ?
+		       "progressive" : "interlaced");
+	cnt = (left > ret ? ret : left);
+
+	if (f->flags & DELTA_FRAMEINFO_FLAG_CROP) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       " crop=%dx%d@(%d,%d)",
+			       f->crop.width, f->crop.height,
+			       f->crop.left, f->crop.top);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (f->flags & DELTA_FRAMEINFO_FLAG_PIXELASPECT) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       " pixel aspect=%d/%d",
+			       f->pixelaspect.numerator,
+			       f->pixelaspect.denominator);
+		cnt = (left > ret ? ret : left);
+	}
+
+	return str;
+}
+
+char *delta_summary_str(struct delta_ctx *ctx, char *str, unsigned int len)
+{
+	char *cur = str;
+	size_t left = len;
+	int cnt = 0;
+	int ret = 0;
+	unsigned char sstr[200] = "";
+
+	if (!(ctx->flags & DELTA_FLAG_STREAMINFO))
+		return NULL;
+
+	ret = snprintf(cur, left,
+		       "%s",
+		       delta_streaminfo_str(&ctx->streaminfo, sstr,
+					    sizeof(sstr)));
+	cnt = (left > ret ? ret : left);
+
+	if (ctx->decoded_frames) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       ", %d frames decoded", ctx->decoded_frames);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (ctx->output_frames) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       ", %d frames output", ctx->output_frames);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (ctx->dropped_frames) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       ", %d frames dropped", ctx->dropped_frames);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (ctx->stream_errors) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       ", %d stream errors", ctx->stream_errors);
+		cnt = (left > ret ? ret : left);
+	}
+
+	if (ctx->decode_errors) {
+		cur += cnt;
+		left -= cnt;
+		ret = snprintf(cur, left,
+			       ", %d decode errors", ctx->decode_errors);
+		cnt = (left > ret ? ret : left);
+	}
+
+	return str;
+}
diff --git a/drivers/media/platform/sti/delta/delta-debug.h b/drivers/media/platform/sti/delta/delta-debug.h
new file mode 100644
index 0000000..54ec0ff
--- /dev/null
+++ b/drivers/media/platform/sti/delta/delta-debug.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) STMicroelectronics SA 2015
+ * Authors: Hugues Fruchet <hugues.fruchet@st.com>
+ *          Fabrice Lecoultre <fabrice.lecoultre@st.com>
+ *          for STMicroelectronics.
+ * License terms:  GNU General Public License (GPL), version 2
+ */
+
+#ifndef DELTA_DEBUG_H
+#define DELTA_DEBUG_H
+
+char *delta_streaminfo_str(struct delta_streaminfo *s, char *str,
+			   unsigned int len);
+char *delta_frameinfo_str(struct delta_frameinfo *f, char *str,
+			  unsigned int len);
+char *delta_summary_str(struct delta_ctx *ctx, char *str, unsigned int len);
+
+#endif /* DELTA_DEBUG_H */
diff --git a/drivers/media/platform/sti/delta/delta-v4l2.c b/drivers/media/platform/sti/delta/delta-v4l2.c
index 8958f8b..c14b65e 100644
--- a/drivers/media/platform/sti/delta/delta-v4l2.c
+++ b/drivers/media/platform/sti/delta/delta-v4l2.c
@@ -17,6 +17,7 @@
 #include <media/videobuf2-dma-contig.h>
 
 #include "delta.h"
+#include "delta-debug.h"
 #include "delta-ipc.h"
 
 #define DELTA_NAME	"st-delta"
@@ -499,11 +500,13 @@ static int delta_g_fmt_stream(struct file *file, void *fh,
 	struct delta_dev *delta = ctx->dev;
 	struct v4l2_pix_format *pix = &f->fmt.pix;
 	struct delta_streaminfo *streaminfo = &ctx->streaminfo;
+	unsigned char str[100] = "";
 
 	if (!(ctx->flags & DELTA_FLAG_STREAMINFO))
 		dev_dbg(delta->dev,
-			"%s V4L2 GET_FMT (OUTPUT): no stream information available, using default\n",
-			ctx->name);
+			"%s V4L2 GET_FMT (OUTPUT): no stream information available, default to %s\n",
+			ctx->name,
+			delta_streaminfo_str(streaminfo, str, sizeof(str)));
 
 	pix->pixelformat = streaminfo->streamformat;
 	pix->width = streaminfo->width;
@@ -526,11 +529,13 @@ static int delta_g_fmt_frame(struct file *file, void *fh, struct v4l2_format *f)
 	struct v4l2_pix_format *pix = &f->fmt.pix;
 	struct delta_frameinfo *frameinfo = &ctx->frameinfo;
 	struct delta_streaminfo *streaminfo = &ctx->streaminfo;
+	unsigned char str[100] = "";
 
 	if (!(ctx->flags & DELTA_FLAG_FRAMEINFO))
 		dev_dbg(delta->dev,
-			"%s V4L2 GET_FMT (CAPTURE): no frame information available, using default\n",
-			ctx->name);
+			"%s V4L2 GET_FMT (CAPTURE): no frame information available, default to %s\n",
+			ctx->name,
+			delta_frameinfo_str(frameinfo, str, sizeof(str)));
 
 	pix->pixelformat = frameinfo->pixelformat;
 	pix->width = frameinfo->aligned_width;
@@ -713,6 +718,7 @@ static int delta_s_fmt_frame(struct file *file, void *fh, struct v4l2_format *f)
 	const struct delta_dec *dec = ctx->dec;
 	struct v4l2_pix_format *pix = &f->fmt.pix;
 	struct delta_frameinfo frameinfo;
+	unsigned char str[100] = "";
 	struct vb2_queue *vq;
 	int ret;
 
@@ -764,6 +770,10 @@ static int delta_s_fmt_frame(struct file *file, void *fh, struct v4l2_format *f)
 
 	ctx->flags |= DELTA_FLAG_FRAMEINFO;
 	ctx->frameinfo = frameinfo;
+	dev_dbg(delta->dev,
+		"%s V4L2 SET_FMT (CAPTURE): frameinfo updated to %s\n",
+		ctx->name,
+		delta_frameinfo_str(&frameinfo, str, sizeof(str)));
 
 	pix->pixelformat = frameinfo.pixelformat;
 	pix->width = frameinfo.aligned_width;
@@ -1455,6 +1465,7 @@ static int delta_vb2_au_start_streaming(struct vb2_queue *q,
 	const struct delta_dec *dec = ctx->dec;
 	struct delta_au *au;
 	unsigned char str[100] = "";
+	unsigned char str2[100] = "";
 	int ret = 0;
 	struct vb2_v4l2_buffer *vbuf;
 	struct delta_streaminfo *streaminfo = &ctx->streaminfo;
@@ -1514,6 +1525,10 @@ static int delta_vb2_au_start_streaming(struct vb2_queue *q,
 
 	ctx->state = DELTA_STATE_READY;
 
+	dev_info(delta->dev, "%s %s => %s\n", ctx->name,
+		 delta_streaminfo_str(streaminfo, str, sizeof(str)),
+		 delta_frameinfo_str(frameinfo, str2, sizeof(str2)));
+
 	delta_au_done(ctx, au, ret);
 	return 0;
 
@@ -1826,12 +1841,20 @@ static int delta_release(struct file *file)
 	struct delta_ctx *ctx = to_ctx(file->private_data);
 	struct delta_dev *delta = ctx->dev;
 	const struct delta_dec *dec = ctx->dec;
+	unsigned char str[200] = "";
 
 	mutex_lock(&delta->lock);
 
 	/* close decoder */
 	call_dec_op(dec, close, ctx);
 
+	/* trace a summary of instance
+	 * before closing (debug purpose)
+	 */
+	if (ctx->flags & DELTA_FLAG_STREAMINFO)
+		dev_info(delta->dev, "%s %s\n", ctx->name,
+			 delta_summary_str(ctx, str, sizeof(str)));
+
 	v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
 
 	v4l2_fh_del(&ctx->fh);
-- 
1.9.1


      parent reply	other threads:[~2016-09-20 14:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-20 14:33 [PATCH v1 0/9] Add support for DELTA video decoder of STMicroelectronics STiH4xx SoC series Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 1/9] Documentation: DT: add bindings for ST DELTA Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 2/9] ARM: dts: STiH410: add DELTA dt node Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 3/9] [media] MAINTAINERS: add st-delta driver Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 4/9] [media] st-delta: STiH4xx multi-format video decoder v4l2 driver Hugues Fruchet
2016-11-03 15:35   ` Hans Verkuil
2016-11-04 15:16     ` Hugues FRUCHET
2016-09-20 14:33 ` [PATCH v1 5/9] [media] st-delta: add contiguous memory allocator Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 6/9] [media] st-delta: rpmsg ipc support Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 7/9] [media] st-delta: EOS (End Of Stream) support Hugues Fruchet
2016-09-20 14:33 ` [PATCH v1 8/9] [media] st-delta: add mjpeg support Hugues Fruchet
2016-09-20 14:33 ` Hugues Fruchet [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1474382020-17588-10-git-send-email-hugues.fruchet@st.com \
    --to=hugues.fruchet@st.com \
    --cc=benjamin.gaignard@linaro.org \
    --cc=hverkuil@xs4all.nl \
    --cc=jean-christophe.trotin@st.com \
    --cc=kernel@stlinux.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.