[PATCH v2] [media] m2m: fix bad unlock balance

2015-08-17 Thread Zahari Doychev
This patch removes unnecessary mutex queue unlock/lock sequence causing bad
unlock balance in v4l2_m2m_poll when the last buffer on the destination
queue has been dequeued and adds spin lock protection for the done list
list_empty calls.

[  144.990873] =
[  144.995584] [ BUG: bad unlock balance detected! ]
[  145.000301] 4.1.0-00137-ga105070 #98 Tainted: GW
[  145.006140] -
[  145.010851] demux:sink/487 is trying to release lock (dev-dev_mutex) at:
[  145.017785] [808cc578] mutex_unlock+0x18/0x1c
[  145.022322] but there are no more locks to release!
[  145.027205]
[  145.027205] other info that might help us debug this:
[  145.033741] no locks held by demux:sink/487.
[  145.038015]
[  145.038015] stack backtrace:
[  145.042385] CPU: 2 PID: 487 Comm: demux:sink Tainted: GW   
4.1.0-00137-ga105070 #98
[  145.051089] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[  145.057622] Backtrace:
[  145.060102] [80014a4c] (dump_backtrace) from [80014cc4] 
(show_stack+0x20/0x24)
[  145.067679]  r6:80cedf78 r5: r4: r3:
[  145.073421] [80014ca4] (show_stack) from [808c61e0] 
(dump_stack+0x8c/0xa4)
[  145.080661] [808c6154] (dump_stack) from [80072b64] 
(print_unlock_imbalance_bug+0xb8/0xe8)
[  145.089277]  r6:808cc578 r5:ac6cd050 r4:ac38e400 r3:0001
[  145.095020] [80072aac] (print_unlock_imbalance_bug) from [80077db4] 
(lock_release+0x1a4/0x250)
[  145.103983]  r6:808cc578 r5:ac6cd050 r4:ac38e400 r3:
[  145.109728] [80077c10] (lock_release) from [808cc470] 
(__mutex_unlock_slowpath+0xc4/0x1b4)
[  145.118344]  r9:acb27a41 r8: r7:81553814 r6:808cc578 r5:60030013 
r4:ac6cd01c
[  145.126190] [808cc3ac] (__mutex_unlock_slowpath) from [808cc578] 
(mutex_unlock+0x18/0x1c)
[  145.134720]  r7: r6:aced7cd4 r5:0041 r4:acb87800
[  145.140468] [808cc560] (mutex_unlock) from [805a98b8] 
(v4l2_m2m_fop_poll+0x5c/0x64)
[  145.148494] [805a985c] (v4l2_m2m_fop_poll) from [805955a0] 
(v4l2_poll+0x6c/0xa0)
[  145.156243]  r6:aced7bec r5: r4:ac6cc380 r3:805a985c
[  145.161991] [80595534] (v4l2_poll) from [80156edc] 
(do_sys_poll+0x230/0x4c0)
[  145.169391]  r5: r4:aced7be4
[  145.173013] [80156cac] (do_sys_poll) from [801574a8] 
(SyS_ppoll+0x1d4/0x1fc)
[  145.180414]  r10: r9:aced6000 r8: r7: r6:75c04538 
r5:0002
[  145.188338]  r4:
[  145.190906] [801572d4] (SyS_ppoll) from [800108c0] 
(ret_fast_syscall+0x0/0x54)
[  145.198481]  r8:80010aa4 r7:0150 r6:75c04538 r5:0002 r4:0008

Signed-off-by: Zahari Doychev zahari.doyc...@linux.com
---
 drivers/media/v4l2-core/v4l2-mem2mem.c | 23 ---
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c 
b/drivers/media/v4l2-core/v4l2-mem2mem.c
index ec3ad4e..2f7291c 100644
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
@@ -583,32 +583,25 @@ unsigned int v4l2_m2m_poll(struct file *file, struct 
v4l2_m2m_ctx *m2m_ctx,
goto end;
}
 
-   if (m2m_ctx-m2m_dev-m2m_ops-unlock)
-   m2m_ctx-m2m_dev-m2m_ops-unlock(m2m_ctx-priv);
-   else if (m2m_ctx-q_lock)
-   mutex_unlock(m2m_ctx-q_lock);
-
+   spin_lock_irqsave(src_q-done_lock, flags);
if (list_empty(src_q-done_list))
poll_wait(file, src_q-done_wq, wait);
+   spin_unlock_irqrestore(src_q-done_lock, flags);
+
+   spin_lock_irqsave(dst_q-done_lock, flags);
if (list_empty(dst_q-done_list)) {
/*
 * If the last buffer was dequeued from the capture queue,
 * return immediately. DQBUF will return -EPIPE.
 */
-   if (dst_q-last_buffer_dequeued)
+   if (dst_q-last_buffer_dequeued) {
+   spin_unlock_irqrestore(dst_q-done_lock, flags);
return rc | POLLIN | POLLRDNORM;
+   }
 
poll_wait(file, dst_q-done_wq, wait);
}
-
-   if (m2m_ctx-m2m_dev-m2m_ops-lock)
-   m2m_ctx-m2m_dev-m2m_ops-lock(m2m_ctx-priv);
-   else if (m2m_ctx-q_lock) {
-   if (mutex_lock_interruptible(m2m_ctx-q_lock)) {
-   rc |= POLLERR;
-   goto end;
-   }
-   }
+   spin_unlock_irqrestore(dst_q-done_lock, flags);
 
spin_lock_irqsave(src_q-done_lock, flags);
if (!list_empty(src_q-done_list))
-- 
2.5.0

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] [media] m2m: fix bad unlock balance

2015-08-17 Thread Zahari Doychev
On Fri, Aug 14, 2015 at 01:57:51PM +0200, Hans Verkuil wrote:
 On 08/12/2015 05:50 PM, Kamil Debski wrote:
  Hi,
  
  On 12 August 2015 at 13:42, Marek Szyprowski m.szyprow...@samsung.com 
  wrote:
  Hello Hans,
 
  I'm sorry for a delay. Once again I've been busy with some other internal
  stuff.
 
  On 2015-07-28 11:02, Hans Verkuil wrote:
 
  Kamil, Marek,
 
  Why does v4l2_m2m_poll unlock and lock in that function?
 
 
  I've checked the code and indeed the poll_wait() function doesn't do
  anything that
  should not be done with queue mutex being taken. I don't remember if it was
  always
  like that. You are right that the unlocklock code should be removed.
 
  Zahari is right that the locking is unbalanced, but I don't see the reason
  for the unlock/lock sequence in the first place. I'm wondering if that
  shouldn't just be removed.
 
  Am I missing something?
 
  Instead, I would expect to see a spin_lock_irqsave(src/dst_q-done_lock,
  flags)
  around the list_empty(src/dst_q-done_list) calls.
 
 
  Indeed, that's another thing that should be fixed in this function. I looks
  that
  commit c16218402a000bb25c1277c43ae98c11bcb59bd1 ([media] videobuf2: return
  -EPIPE
  from DQBUF after the last buffer) is the root cause of both issues
  (unballanced
  locking and lack of spinlock protection), while the unnecessary queue
  unlock/lock
  sequence was there from the beginning.
 
  
  I am all with Marek on this. Unlock/lock was there from the beginning,
  it is not necessary. I agree also that spin_lock/unlock should be
  added for the list_empty call.
 
 Zahari, will you make a new version of this patch with the suggested changes?

yes I will do it.

Regards

Zahari

 
 Regards,
 
   Hans
 --
 To unsubscribe from this list: send the line unsubscribe linux-media in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] [media] coda: fix sequence counter increment

2015-08-03 Thread Zahari Doychev
On Tue, Jul 28, 2015 at 12:25:31PM +0200, Philipp Zabel wrote:
 Am Dienstag, den 28.07.2015, 10:54 +0200 schrieb Hans Verkuil:
  On 07/08/2015 05:49 PM, Philipp Zabel wrote:
   Hi Zahari,
   
   Am Mittwoch, den 08.07.2015, 15:37 +0200 schrieb Zahari Doychev:
   The coda context queue sequence counter is incremented only if the vb2
   source buffer payload is non zero. This makes possible to signal EOS
   otherwise the condition in coda_buf_is_end_of_stream is never met or more
   precisely buf-v4l2_buf.sequence == (ctx-qsequence - 1) never happens.
  
   Signed-off-by: Zahari Doychev zahari.doyc...@linux.com
   
   I think we should instead avoid calling coda_bitstream_queue with zero
   payload buffers altogether and dump them in coda_fill_bitstream already.
  
  Philipp, is this still outstanding or did you fix this already according
  to the suggestion you made above?
 
  Just wondering whether to set this bug report to 'Rejected' or 'Changes
  Requested'.
 
 Changes requested.

Ok, I will send a corected version of the patch.

regards
Zahari

 
 Is this something I should do myself for coda patches in the future?
 
 regards
 Philipp
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-media in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] [media] coda: drop zero payload bitstream buffers

2015-08-03 Thread Zahari Doychev
The buffers with zero payload are now dumped in coda_fill_bitstream and not
passed to coda_bitstream_queue. This avoids unnecessary fifo addition and
buffer sequence counter increment.

Signed-off-by: Zahari Doychev zahari.doyc...@linux.com
---
 drivers/media/platform/coda/coda-bit.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/drivers/media/platform/coda/coda-bit.c 
b/drivers/media/platform/coda/coda-bit.c
index 3d434a4..fd7819d 100644
--- a/drivers/media/platform/coda/coda-bit.c
+++ b/drivers/media/platform/coda/coda-bit.c
@@ -256,6 +256,13 @@ void coda_fill_bitstream(struct coda_ctx *ctx, bool 
streaming)
continue;
}
 
+   /* Dump empty buffers */
+   if (!vb2_get_plane_payload(src_buf, 0)) {
+   src_buf = v4l2_m2m_src_buf_remove(ctx-fh.m2m_ctx);
+   v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
+   continue;
+   }
+
/* Buffer start position */
start = ctx-bitstream_fifo.kfifo.in 
ctx-bitstream_fifo.kfifo.mask;
-- 
2.4.6

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 0/2] RFC: m2m device fixes

2015-07-08 Thread Zahari Doychev
Hi,

These patches fix some problems that I am experiencing when decoding video
using the coda driver. The first one fixes the video playback termination and
the second a kernel bug due to mutex unlock balance.

Regards
Zahari

Zahari Doychev (2):
  [media] coda: fix sequence counter increment
  [media] m2m: fix bad unlock balance

 drivers/media/platform/coda/coda-bit.c |  3 ++-
 drivers/media/v4l2-core/v4l2-mem2mem.c | 19 ++-
 2 files changed, 12 insertions(+), 10 deletions(-)

-- 
2.4.5

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] [media] coda: fix sequence counter increment

2015-07-08 Thread Zahari Doychev
The coda context queue sequence counter is incremented only if the vb2
source buffer payload is non zero. This makes possible to signal EOS
otherwise the condition in coda_buf_is_end_of_stream is never met or more
precisely buf-v4l2_buf.sequence == (ctx-qsequence - 1) never happens.

Signed-off-by: Zahari Doychev zahari.doyc...@linux.com
---
 drivers/media/platform/coda/coda-bit.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/coda/coda-bit.c 
b/drivers/media/platform/coda/coda-bit.c
index 109797b..d33f187 100644
--- a/drivers/media/platform/coda/coda-bit.c
+++ b/drivers/media/platform/coda/coda-bit.c
@@ -189,7 +189,8 @@ static int coda_bitstream_queue(struct coda_ctx *ctx,
if (n  src_size)
return -ENOSPC;
 
-   src_buf-v4l2_buf.sequence = ctx-qsequence++;
+   if (src_size)
+   src_buf-v4l2_buf.sequence = ctx-qsequence++;
 
return 0;
 }
-- 
2.4.5

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] [media] m2m: fix bad unlock balance

2015-07-08 Thread Zahari Doychev
This commit fixes bad unlock balance when polling. v4l2_m2m_poll is called
with mutex hold but the function releases the mutex and returns.
This leads to the bad unlock because after the  call of v4l2_m2m_poll in
v4l2_m2m_fop_poll the mutex is again unlocked. This patch makes sure that
the v4l2_m2m_poll returns always with balanced locks.

[  144.990873] =
[  144.995584] [ BUG: bad unlock balance detected! ]
[  145.000301] 4.1.0-00137-ga105070 #98 Tainted: GW
[  145.006140] -
[  145.010851] demux:sink/487 is trying to release lock (dev-dev_mutex) at:
[  145.017785] [808cc578] mutex_unlock+0x18/0x1c
[  145.022322] but there are no more locks to release!
[  145.027205]
[  145.027205] other info that might help us debug this:
[  145.033741] no locks held by demux:sink/487.
[  145.038015]
[  145.038015] stack backtrace:
[  145.042385] CPU: 2 PID: 487 Comm: demux:sink Tainted: GW   
4.1.0-00137-ga105070 #98
[  145.051089] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[  145.057622] Backtrace:
[  145.060102] [80014a4c] (dump_backtrace) from [80014cc4] 
(show_stack+0x20/0x24)
[  145.067679]  r6:80cedf78 r5: r4: r3:
[  145.073421] [80014ca4] (show_stack) from [808c61e0] 
(dump_stack+0x8c/0xa4)
[  145.080661] [808c6154] (dump_stack) from [80072b64] 
(print_unlock_imbalance_bug+0xb8/0xe8)
[  145.089277]  r6:808cc578 r5:ac6cd050 r4:ac38e400 r3:0001
[  145.095020] [80072aac] (print_unlock_imbalance_bug) from [80077db4] 
(lock_release+0x1a4/0x250)
[  145.103983]  r6:808cc578 r5:ac6cd050 r4:ac38e400 r3:
[  145.109728] [80077c10] (lock_release) from [808cc470] 
(__mutex_unlock_slowpath+0xc4/0x1b4)
[  145.118344]  r9:acb27a41 r8: r7:81553814 r6:808cc578 r5:60030013 
r4:ac6cd01c
[  145.126190] [808cc3ac] (__mutex_unlock_slowpath) from [808cc578] 
(mutex_unlock+0x18/0x1c)
[  145.134720]  r7: r6:aced7cd4 r5:0041 r4:acb87800
[  145.140468] [808cc560] (mutex_unlock) from [805a98b8] 
(v4l2_m2m_fop_poll+0x5c/0x64)
[  145.148494] [805a985c] (v4l2_m2m_fop_poll) from [805955a0] 
(v4l2_poll+0x6c/0xa0)
[  145.156243]  r6:aced7bec r5: r4:ac6cc380 r3:805a985c
[  145.161991] [80595534] (v4l2_poll) from [80156edc] 
(do_sys_poll+0x230/0x4c0)
[  145.169391]  r5: r4:aced7be4
[  145.173013] [80156cac] (do_sys_poll) from [801574a8] 
(SyS_ppoll+0x1d4/0x1fc)
[  145.180414]  r10: r9:aced6000 r8: r7: r6:75c04538 
r5:0002
[  145.188338]  r4:
[  145.190906] [801572d4] (SyS_ppoll) from [800108c0] 
(ret_fast_syscall+0x0/0x54)
[  145.198481]  r8:80010aa4 r7:0150 r6:75c04538 r5:0002 r4:0008

Signed-off-by: Zahari Doychev zahari.doyc...@linux.com
---
 drivers/media/v4l2-core/v4l2-mem2mem.c | 19 ++-
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c 
b/drivers/media/v4l2-core/v4l2-mem2mem.c
index dc853e5..5392fb4 100644
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
@@ -583,16 +583,8 @@ unsigned int v4l2_m2m_poll(struct file *file, struct 
v4l2_m2m_ctx *m2m_ctx,
 
if (list_empty(src_q-done_list))
poll_wait(file, src_q-done_wq, wait);
-   if (list_empty(dst_q-done_list)) {
-   /*
-* If the last buffer was dequeued from the capture queue,
-* return immediately. DQBUF will return -EPIPE.
-*/
-   if (dst_q-last_buffer_dequeued)
-   return rc | POLLIN | POLLRDNORM;
-
+   if (list_empty(dst_q-done_list)  !dst_q-last_buffer_dequeued)
poll_wait(file, dst_q-done_wq, wait);
-   }
 
if (m2m_ctx-m2m_dev-m2m_ops-lock)
m2m_ctx-m2m_dev-m2m_ops-lock(m2m_ctx-priv);
@@ -603,6 +595,15 @@ unsigned int v4l2_m2m_poll(struct file *file, struct 
v4l2_m2m_ctx *m2m_ctx,
}
}
 
+   if (list_empty(dst_q-done_list)  dst_q-last_buffer_dequeued) {
+   /*
+* If the last buffer was dequeued from the capture queue,
+* return immediately. DQBUF will return -EPIPE.
+*/
+   rc |= POLLIN | POLLRDNORM;
+   goto end;
+   }
+
spin_lock_irqsave(src_q-done_lock, flags);
if (!list_empty(src_q-done_list))
src_vb = list_first_entry(src_q-done_list, struct vb2_buffer,
-- 
2.4.5

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Using the coda driver with Gstreamer

2015-02-18 Thread Zahari Doychev

Hi Fabio,

On Mon, Dec 01, 2014 at 05:17:40PM -0200, Fabio Estevam wrote:
 On Tue, Nov 18, 2014 at 4:41 PM, Nicolas Dufresne
 nicolas.dufre...@collabora.com wrote:
 
  Ok, let us know when the switch is made. Assuming your goal is to get
  the HW decoder working, you should test with simpler pipeline. In your
  specific case, you should try and get this pipeline to preroll:
 
  gst-launch-1.0 \
filesrc location=/home/H264_test1_Talk inghead_mp4_480x360.mp4 \
! qtdemux ! h264parse ! v4l2video1dec ! fakesink
 
 After applying Philipp's dts patch:
 http://www.spinics.net/lists/arm-kernel/msg382314.html
 
 ,I am able to play the video clip with the following Gstreamer pipeline:
 
 gst-launch-1.0 filesrc
 location=/home/H264_test1_Talkinghead_mp4_480x360.mp4 ! qtdemux !
 h264parse ! v4l2video1dec ! videoconvert ! fbdevsink

I am using this pipeline with gstreamer 1.4.5 and current media branch but I am
getting very poor performance 1-2 fps when playing 800x400 video. Is it possible
that fbdevsink is too slow for that? Does anyone know what is going wrong?

Regards,

Zahari

Video Type:

root@imx6q-dmo-edm-qmx6:/# gst-discoverer-1.0 linux_800x480.mov -v
Analyzing file:///DemoVideos/linux_800x480.mov
Done discovering file:///DemoVideos/linux_800x480.mov
Missing plugins
 (gstreamer|1.0|gst-discoverer-1.0|MPEG-4 AAC decoder|decoder-audio/mpeg, 
mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, 
level=(string)2, base-profile=(string)lc, profile=(string)lc)

Topology:
  container: video/quicktime
audio: audio/mpeg, mpegversion=(int)4, framed=(boolean)true, 
stream-format=(string)raw, level=(string)2, base-profile=(string)lc, 
profile=(string)lc, codec_data=(buffer)120856e500, rate=(int)44100, 
channels=(int)1
  Codec:
audio/mpeg, mpegversion=(int)4, framed=(boolean)true, 
stream-format=(string)raw, level=(string)2, base-profile=(string)lc, 
profile=(string)lc, codec_data=(buffer)120856e500, rate=(int)44100, 
channels=(int)1
  Additional info:
None
  Stream ID: (null)
  Language: unknown
  Channels: 1
  Sample rate: 44100
  Depth: 0
  Bitrate: 0
  Max bitrate: 0
  Tags:
None
  
video: video/x-h264, stream-format=(string)avc, alignment=(string)au, 
level=(string)3.1, profile=(string)high, 
codec_data=(buffer)0164001fffe100176764001facd940c83da10303e9ea600f18319601000668ebe3cb22c0,
 width=(int)800, height=(int)480, framerate=(fraction)3/1001, 
pixel-aspect-ratio=(fraction)1/1
  Codec:
video/x-h264, stream-format=(string)avc, alignment=(string)au, 
level=(string)3.1, profile=(string)high, 
codec_data=(buffer)0164001fffe100176764001facd940c83da10303e9ea600f18319601000668ebe3cb22c0,
 width=(int)800, height=(int)480, framerate=(fraction)3/1001, 
pixel-aspect-ratio=(fraction)1/1
  Additional info:
None
  Stream ID: 
0b5ab36c52878431d95e588951bfa2cf80c530ad5deda45bf3f9fdd5a4d4a48f/001
  Width: 800
  Height: 480
  Depth: 24
  Frame rate: 3/1001
  Pixel aspect ratio: 1/1
  Interlaced: false
  Bitrate: 496256
  Max bitrate: 10069
  Tags:
taglist, application-name=(string)Lavf55.7.100, 
container-format=(string)Quicktime, video-codec=(string)H.264, 
language-code=(string)en, bitrate=(uint)496256, minimum-bitrate=(uint)10069, 
maximum-bitrate=(uint)10069;
  

Properties:
  Duration: 0:03:12.00600
  Seekable: yes
  Tags: 
  application name: Lavf55.7.100
  container format: Quicktime
  video codec: H.264
  language code: en
  bitrate: 496256
  minimum bitrate: 10069
  maximum bitrate: 10069
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Using the coda driver with Gstreamer

2015-02-18 Thread Zahari Doychev
On Wed, Feb 18, 2015 at 08:34:43AM -0500, Nicolas Dufresne wrote:
 
 Le 2015-02-18 03:42, Zahari Doychev a écrit :
 gst-launch-1.0 filesrc
 location=/home/H264_test1_Talkinghead_mp4_480x360.mp4 ! qtdemux !
 h264parse ! v4l2video1dec ! videoconvert ! fbdevsink
 I am using this pipeline with gstreamer 1.4.5 and current media branch but I 
 am
 getting very poor performance 1-2 fps when playing 800x400 video. Is it 
 possible
 that fbdevsink is too slow for that? Does anyone know what is going wrong?
 In this context, you most likely have a conversion happening in videoconvert
 followed by a copy at fbdevsink. Framebuffer device is not a very good
 solution if performance matter (no possible zero-copy). Specially if the
 selected framebuffer color format does not match the decoded format.

So can you tell me if there are some drivers and plugins that can do this
in efficient way. Is there some work going on in this directions. I suppose
glimagesink maybe will be a good way to go.

Regards,

Zahari


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC PATCH 00/26] i.MX5/6 IPUv3 CSI/IC

2014-08-05 Thread Zahari Doychev

Hi Philipp,

can you tell which kernel tree I have to use for this patch set?

Thanks and Regards,
Zahari

On Thu, Jun 12, 2014 at 07:06:14PM +0200, Philipp Zabel wrote:
 Hi,
 
 attached is a series of our work in progress i.MX6 capture drivers.
 I'm posting this now in reaction to Steve's i.MX6 Video capture series,
 as a reference for further discussion.
 Of the Image Converter (IC) we only use the postprocessor task, with
 tiling for larger frames, to implement v4l2 mem2mem scaler/colorspace
 converter and deinterlacer devices.
 The capture code capture code already uses the media controller framework
 and creates a subdevice representing the CSI, but the path to memory is
 fixed to IDMAC via SMFC, which is the only possible path for grayscale
 and  and anything with multiple output ports connected
 to the CSIs (such as the CSI2IPU gasket on i.MX6) doesn't work yet. Also,
 I think the CSI subdevice driver should be completely separate from the
 capture driver.
 
 regards
 Philipp
 
 Philipp Zabel (16):
   gpu: ipu-v3: Add function to setup CP channel as interlaced
   gpu: ipu-v3: Add ipu_cpmem_get_buffer function
   gpu: ipu-v3: Add support for partial interleaved YCbCr 4:2:0 (NV12)
 format
   gpu: ipu-v3: Add support for planar YUV 4:2:2 (YUV422P) format
   imx-drm: currently only IPUv3 is supported, make it mandatory
   [media] Add i.MX SoC wide media device driver
   [media] imx-ipu: Add i.MX IPUv3 capture driver
   [media] ipuv3-csi: Skip 3 lines for NTSC BT.656
   [media] imx-ipuv3-csi: Add support for temporarily stopping the stream
 on sync loss
   [media] imx-ipuv3-csi: Export sync lock event to userspace
   [media] v4l2-subdev.h: Add lock status notification
   [media] v4l2-subdev: Export v4l2_subdev_fops
   mfd: syscon: add child device support
   [media] imx: Add video switch
   ARM: dts: Add IPU aliases on i.MX6
   ARM: dts: imx6qdl: Add mipi_ipu1/2 multiplexers, mipi_csi, and their
 connections
 
 Sascha Hauer (10):
   gpu: ipu-v3: Add IC support
   gpu: ipu-v3: Register IC with IPUv3
   [media] imx-ipu: add ipu media common code
   [media] imx-ipu: Add i.MX IPUv3 scaler driver
   [media] imx-ipu: Add i.MX IPUv3 deinterlacer driver
   [media] v4l2: subdev: Add v4l2_device_register_subdev_node function
   [media] v4l2: Fix V4L2_CID_PIXEL_RATE
   [media] v4l2 async: remove from notifier list
   [media] ipuv3-csi: Pass ipucsi to v4l2_media_subdev_s_power
   [media] ipuv3-csi: make subdev controls available on video device
 
  Documentation/devicetree/bindings/mfd/syscon.txt |   11 +
  arch/arm/boot/dts/imx6dl.dtsi|  182 +++
  arch/arm/boot/dts/imx6q.dtsi |  119 ++
  arch/arm/boot/dts/imx6qdl.dtsi   |9 +
  drivers/gpu/ipu-v3/Makefile  |2 +-
  drivers/gpu/ipu-v3/ipu-common.c  |  119 ++
  drivers/gpu/ipu-v3/ipu-ic.c  | 1227 +++
  drivers/gpu/ipu-v3/ipu-prv.h |6 +
  drivers/media/platform/Kconfig   |4 +
  drivers/media/platform/Makefile  |1 +
  drivers/media/platform/imx/Kconfig   |   50 +
  drivers/media/platform/imx/Makefile  |6 +
  drivers/media/platform/imx/imx-ipu-scaler.c  |  825 +++
  drivers/media/platform/imx/imx-ipu-vdic.c|  716 +
  drivers/media/platform/imx/imx-ipu.c |  313 
  drivers/media/platform/imx/imx-ipu.h |   36 +
  drivers/media/platform/imx/imx-ipuv3-csi.c   | 1729 
 ++
  drivers/media/platform/imx/imx-media.c   |  174 +++
  drivers/media/platform/imx/imx-video-switch.c|  347 +
  drivers/media/v4l2-core/v4l2-async.c |1 +
  drivers/media/v4l2-core/v4l2-ctrls.c |8 +-
  drivers/media/v4l2-core/v4l2-device.c|   63 +-
  drivers/media/v4l2-core/v4l2-subdev.c|1 +
  drivers/mfd/syscon.c |3 +
  drivers/staging/imx-drm/Kconfig  |7 +-
  include/media/imx.h  |   25 +
  include/media/v4l2-device.h  |5 +
  include/media/v4l2-subdev.h  |3 +
  include/video/imx-ipu-v3.h   |   16 +
  29 files changed, 5976 insertions(+), 32 deletions(-)
  create mode 100644 drivers/gpu/ipu-v3/ipu-ic.c
  create mode 100644 drivers/media/platform/imx/Kconfig
  create mode 100644 drivers/media/platform/imx/Makefile
  create mode 100644 drivers/media/platform/imx/imx-ipu-scaler.c
  create mode 100644 drivers/media/platform/imx/imx-ipu-vdic.c
  create mode 100644 drivers/media/platform/imx/imx-ipu.c
  create mode 100644 drivers/media/platform/imx/imx-ipu.h
  create mode 100644 drivers/media/platform/imx/imx-ipuv3-csi.c
  create mode 100644 drivers/media/platform/imx/imx-media.c
  create mode 100644 drivers/media/platform/imx/imx-video-switch.c
  create mode 100644