Linux Samsung SOC development
 help / color / mirror / Atom feed
From: Kukjin Kim <kgene.kim@samsung.com>
To: 'Kyungmin Park' <kyungmin.park@samsung.com>
Cc: 'Kamil Debski' <k.debski@samsung.com>,
	linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org,
	m.szyprowski@samsung.com, pawel@osciak.com,
	jaeryul.oh@samsung.com
Subject: RE: [RFC/PATCH v4 0/4] Multi Format Codec 5.0 driver for S5PC110 SoC
Date: Fri, 10 Dec 2010 12:40:03 +0900	[thread overview]
Message-ID: <028601cb981b$f04035f0$d0c0a1d0$%kim@samsung.com> (raw)
In-Reply-To: <AANLkTikP6V47pcvJFyWS9gZHOG90qXDyU4BnQKLWgiJH@mail.gmail.com>

Kyungmin Park wrote:
> 
> On Fri, Dec 10, 2010 at 11:32 AM, Kukjin Kim <kgene.kim@samsung.com>
wrote:
> > Kamil Debski wrote:
> >>
> >> Hello,
> >>
> >> Last week v3 of this driver has been posted. Since then the driver was
> >> changed
> >> to use the newest videobuf2 version - v6. Two very long functions have
> > been
> >> split to make the code more readible. Minor changes include tidying the
> >> comments and replacing remaining magic numbers with defines.
> >>
> >> I would be grateful for your comments. Original cover letter ant
detailed
> >> change
> >> log has been attached below.
> >>
> >> Best regards,
> >> Kamil Debski
> >>
> >> * Changelog:
> >>
> >> ==================
> >>  Changes since v3
> >> ==================
> >>
> >> 1) Update to the v6 videobuf2 API (here thanks go to Marek Szyprowski)
> >> - s5p_mfc_buf_negotiate and s5p_mfc_buf_setup_plane functions
> >> have been merged
> >> - queue initialization has been adapted to the new API
> >> - use of the allocator memops has been changed, now there are single
> >> memops for all the allocator contexts
> >>
> >> 2) Split of the s5p_mfc_try_run and s5p_mfc_handle_frame_int functions
> >> - parts of the s5p_mfc_try_run function have been moved to separate
> >> functions (s5p_mfc_get_new_ctx, s5p_mfc_run_dec_last_frames,
> >> s5p_mfc_run_dec_frame, s5p_mfc_run_get_inst_no, s5p_mfc_run_return_inst
> >> s5p_mfc_run_init_dec,s5p_mfc_run_init_dec_buffers)
> >> - s5p_mfc_handle_frame_int has been split to the following functions:
> >> s5p_mfc_handle_frame_all_extracted, s5p_mfc_handle_frame_new
> >> and s5p_mfc_handle_frame to handle different cases
> >>
> >> 3) Remove remaining magic numbers and tidy up comments
> >>
> >> ==================
> >>  Changes since v2
> >> ==================
> >>
> >> 1) Update to newest videobuf2 API
> >> This is the major change from v2. The videobuf2 API will hopefully have
no
> >> more
> >> major API changes. Buffer initialization has been moved from
buf_prepare
> >> callback to buf_init to simplify the process. Locking mechanism has
been
> >> modified to the requirements of new videobuf2 version.
> >> 2) Code cleanup
> >> Removed more magic contants and replaced them with appropriate defines.
> >> Changed
> >> code to use unlocked_ioctl instead of ioctl in v4l2 file ops.
> >> 3) Allocators
> >> All internal buffer allocations are done using the selected vb2
allocator,
> >> instead of using CMA functions directly.
> >>
> >> ==================
> >>  Changes since v1
> >> ==================
> >>
> >> 1) Cleanup accoridng to Peter Oh suggestions on the mailing list
(Thanks).
> >>
> >> * Original cover letter:
> >>
> >> ==============
> >>  Introduction
> >> ==============
> >>
> >> The purpose of this RFC is to discuss the driver for a hw video codec
> >> embedded in the new Samusng's SoCs. Multi Format Codec 5.0 is able to
> >> handle video decoding of in a range of formats.
> >>
> >> So far no hardware codec was supported in V4L2 and this would be the
> >> first one. I guess there are more similar device that would benefit
from
> >> a V4L2 unified interface. I suggest a separate control class for codec
> >> devices - V4L2_CTRL_CLASS_CODEC.
> >>
> >> Internally the driver uses videobuf2 framework and CMA memory
allocator.
> >> I am aware that those have not yet been merged, but I wanted to start
> >> discussion about the driver earlier so it could be merged sooner. The
> >> driver posted here is the initial version, so I suppose it will require
> >> more work.
> >>
> >> ==================
> >>  Device interface
> >> ==================
> >>
> >> The driver principle is based on the idea of memory-to-memory devices:
> >> it provides a single video node and each opened file handle gets its
own
> >> private context with separate buffer queues. Each context consist of 2
> >> buffer queues: OUTPUT (for source buffers, i.e. encoded video frames)
> >> and CAPTURE (for destination buffers, i.e. decoded raw video frames).
> >> The process of decoding video data from stream is a bit more
complicated
> >> than typical memory-to-memory processing, that's why the m2m framework
> >> is not directly used (it is too limited for this case). The main reason
> >> for this is the fact that the CAPTURE buffers can be dequeued in a
> >> different order than they queued. The hw block decides which buffer has
> >> been completely processed. This is due to the structure of most
> >> compressed video streams - use of B frames causes that decoding and
> >> display order may be different.
> >>
> >> ==============================
> >>  Decoding initialization path
> >> ==============================
> >>
> >> First the OUTPUT queue is initialized. With S_FMT the application
> >> chooses which video format to decode and what size should be the input
> >> buffer. Fourcc values have been defined for different codecs e.g.
> >> V4L2_PIX_FMT_H264 for h264. Then the OUTPUT buffers are requested and
> >> mmaped. The stream header frame is loaded into the first buffer, queued
> >> and streaming is enabled. At this point the hardware is able to start
> >> processing the stream header and afterwards it will have information
> >> about the video dimensions and the size of the buffers with raw video
> >> data.
> >>
> >> The next step is setting up the CAPTURE queue and buffers. The width,
> >> height, buffer size and minimum number of buffers can be read with
G_FMT
> >> call. The application can request more output buffer if necessary.
After
> >> requesting and mmaping buffers the device is ready to decode video
> >> stream.
> >>
> >> The stream frames (ES frames) are written to the OUTPUT buffers, and
> >> decoded video frames can be read from the CAPTURE buffers. When no more
> >> source frames are present a single buffer with bytesused set to 0
should
> >> be queued. This will inform the driver that processing should be
> >> finished and it can dequeue all video frames that are still left. The
> >> number of such frames is dependent on the stream and its internal
> >> structure (how many frames had to be kept as reference frames for
> >> decoding, etc).
> >>
> >> ===============
> >>  Usage summary
> >> ===============
> >>
> >> This is a step by step summary of the video decoding (from user
> >> application point of view, with 2 treads and blocking api):
> >>
> >> 01. S_FMT(OUTPUT, V4L2_PIX_FMT_H264, ...)
> >> 02. REQ_BUFS(OUTPUT, n)
> >> 03. for i=1..n MMAP(OUTPUT, i)
> >> 04. put stream header to buffer #1
> >> 05. QBUF(OUTPUT, #1)
> >> 06. STREAM_ON(OUTPUT)
> >> 07. G_FMT(CAPTURE)
> >> 08. REQ_BUFS(CAPTURE, m)
> >> 09. for j=1..m MMAP(CAPTURE, j)
> >> 10. for j=1..m QBUF(CAPTURE, #j)
> >> 11. STREAM_ON(CAPTURE)
> >>
> >> display thread:
> >> 12. DQBUF(CAPTURE) -> got decoded video data in buffer #j
> >> 13. display buffer #j
> >> 14. QBUF(CAPTURE, #j)
> >> 15. goto 12
> >>
> >> parser thread:
> >> 16. put next ES frame to buffer #i
> >> 17. QBUF(OUTPUT, #i)
> >> 18. DQBUF(OUTPUT) -> get next empty buffer #i 19. goto 16
> >>
> >> ...
> >>
> >> Similar usage sequence can be achieved with single threaded application
> >> and non-blocking api with poll() call.
> >>
> >> Branch with MFC, CMA and videobuf2 will be soon available at
> >> http://git.infradead.org/users/kmpark/linux-2.6-
> >> samsung/shortlog/refs/heads/vb2-mfc-fimc
> >> This tree is based on 2.6.37 rc4.
> >>
> >> Please have a look at the code and the idea of how to introduce codec
> >> devices to V4L2. Comments will be very much appreciated.
> >>
> >> Patch summary:
> >>
> >> Kamil Debski (4):
> >>   Changes in include/linux/videodev2.h for MFC
> >>   MFC: Add MFC 5.1 driver to plat-s5p, mach-s5pv210 and mach-s5pv210
> >>   MFC: Added MFC 5.1 V4L2 driver
> >>   s5pv210: Enable MFC on Goni
> >>
> >>  arch/arm/mach-s5pv210/Kconfig                   |    1 +
> >>  arch/arm/mach-s5pv210/clock.c                   |    6 +
> >>  arch/arm/mach-s5pv210/include/mach/map.h        |    4 +
> >>  arch/arm/mach-s5pv210/mach-goni.c               |    1 +
> >>  arch/arm/plat-s5p/Kconfig                       |    5 +
> >>  arch/arm/plat-s5p/Makefile                      |    1 +
> >>  arch/arm/plat-s5p/dev-mfc5.c                    |   37 +
> >>  arch/arm/plat-samsung/include/plat/devs.h       |    2 +
> >>  drivers/media/video/Kconfig                     |    8 +
> >>  drivers/media/video/Makefile                    |    1 +
> >>  drivers/media/video/s5p-mfc/Makefile            |    3 +
> >>  drivers/media/video/s5p-mfc/regs-mfc5.h         |  335 ++++
> >>  drivers/media/video/s5p-mfc/s5p_mfc.c           | 2031
> >> +++++++++++++++++++++++
> >>  drivers/media/video/s5p-mfc/s5p_mfc_common.h    |  222 +++
> >>  drivers/media/video/s5p-mfc/s5p_mfc_ctrls.h     |  173 ++
> >>  drivers/media/video/s5p-mfc/s5p_mfc_debug.h     |   47 +
> >>  drivers/media/video/s5p-mfc/s5p_mfc_intr.c      |   92 +
> >>  drivers/media/video/s5p-mfc/s5p_mfc_intr.h      |   26 +
> >>  drivers/media/video/s5p-mfc/s5p_mfc_memory.h    |   43 +
> >>  drivers/media/video/s5p-mfc/s5p_mfc_opr.c       |  870 ++++++++++
> >>  drivers/media/video/s5p-mfc/s5p_mfc_opr.h       |  131 ++
> >>  include/linux/videodev2.h                       |   48 +
> >>  25 files changed, 4136 insertions(+), 1 deletions(-)
> >>  create mode 100644 arch/arm/plat-s5p/dev-mfc5.c
> >>  create mode 100644 drivers/media/video/s5p-mfc/Makefile
> >>  create mode 100644 drivers/media/video/s5p-mfc/regs-mfc5.h
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc.c
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_common.h
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_ctrls.h
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_debug.h
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_intr.c
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_intr.h
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_memory.h
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_opr.c
> >>  create mode 100644 drivers/media/video/s5p-mfc/s5p_mfc_opr.h
> >>
> >
> > Hi Kamil,
> >
> > I think, should be added my e-mail in Cc...
> 
> No need to cc all, only machine specific only.
> and I hope minimal modification at machine specific and move to media
> if possible.
> 
Should be reviewed proper maintainer even though it is small changes.
Really, I don't want to argue to you about my maintaining ship...

And I have a wondering about your sign.
Did you really check this patch before Kamil's submitting?
Unfortunately, I don't think so...

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

  reply	other threads:[~2010-12-10  3:40 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-09 13:35 [RFC/PATCH v4 0/4] Multi Format Codec 5.0 driver for S5PC110 SoC Kamil Debski
2010-12-09 13:35 ` [RFC/PATCH v4 1/4] Changes in include/linux/videodev2.h for MFC 5.1 Kamil Debski
2010-12-10  3:32   ` 박정태
     [not found]     ` <4D01F0B6.8090800@redhat.com>
2010-12-10 10:10       ` Kamil Debski
2010-12-09 13:35 ` [RFC/PATCH v4 2/4] MFC: Add MFC 5.1 driver to plat-s5p Kamil Debski
2010-12-10  2:44   ` Kukjin Kim
2010-12-10 10:10     ` Kamil Debski
2010-12-10  3:41   ` Kukjin Kim
2010-12-09 13:35 ` [RFC/PATCH v4 3/4] MFC: Added MFC 5.1 V4L2 driver Kamil Debski
2010-12-09 13:35 ` [RFC/PATCH v4 4/4] s5pv210: Enable MFC on Goni Kamil Debski
2010-12-10  2:32 ` [RFC/PATCH v4 0/4] Multi Format Codec 5.0 driver for S5PC110 SoC Kukjin Kim
2010-12-10  2:40   ` Kyungmin Park
2010-12-10  3:40     ` Kukjin Kim [this message]
2010-12-10  4:02       ` Kyungmin Park
2010-12-10  5:23         ` Kukjin Kim

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='028601cb981b$f04035f0$d0c0a1d0$%kim@samsung.com' \
    --to=kgene.kim@samsung.com \
    --cc=jaeryul.oh@samsung.com \
    --cc=k.debski@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=pawel@osciak.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox