Re: [PATCH v2 2/3] [media] hva: multi-format video encoder V4L2 driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 07/21/2016 11:49 AM, Hans Verkuil wrote:
>
>
> On 07/21/2016 09:30 AM, Jean Christophe TROTIN wrote:
>>
>> On 07/18/2016 01:45 PM, Hans Verkuil wrote:
>>> Hi Jean-Christophe,
>>>
>>> See my review comments below. Nothing really major, but I do need to know more
>>> about the g/s_parm and the restriction on the number of open()s has to be lifted.
>>> That's not allowed.
>>>
>>
>> Hi Hans,
>>
>> Thank you for your comments.
>> I've explained below why I would like to keep 'hva' as driver's name and why the
>> frame rate is needed (g/s_parm).
>> I've followed your advice for managing the hardware restriction with regards to
>> the number of codec instances (see also below).
>> Finally, I've taken into account all the other comments.
>> All these modifications will be reflected in the version 3.
>>
>> Best regards,
>> Jean-Christophe.
>>
>>> On 07/11/2016 05:14 PM, Jean-Christophe Trotin wrote:
>>>> This patch adds V4L2 HVA (Hardware Video Accelerator) video encoder
>>>> driver for STMicroelectronics SoC. It uses the V4L2 mem2mem framework.
>>>>
>>>> This patch only contains the core parts of the driver:
>>>> - the V4L2 interface with the userland (hva-v4l2.c)
>>>> - the hardware services (hva-hw.c)
>>>> - the memory management utilities (hva-mem.c)
>>>>
>>>> This patch doesn't include the support of specific codec (e.g. H.264)
>>>> video encoding: this support is part of subsequent patches.
>>>>
>>>> Signed-off-by: Yannick Fertre <yannick.fertre@xxxxxx>
>>>> Signed-off-by: Jean-Christophe Trotin <jean-christophe.trotin@xxxxxx>
>>>> ---
>>>>   drivers/media/platform/Kconfig            |   14 +
>>>>   drivers/media/platform/Makefile           |    1 +
>>>>   drivers/media/platform/sti/hva/Makefile   |    2 +
>>>>   drivers/media/platform/sti/hva/hva-hw.c   |  534 ++++++++++++
>>>>   drivers/media/platform/sti/hva/hva-hw.h   |   42 +
>>>>   drivers/media/platform/sti/hva/hva-mem.c  |   60 ++
>>>>   drivers/media/platform/sti/hva/hva-mem.h  |   36 +
>>>>   drivers/media/platform/sti/hva/hva-v4l2.c | 1299 +++++++++++++++++++++++++++++
>>>>   drivers/media/platform/sti/hva/hva.h      |  284 +++++++
>>>>   9 files changed, 2272 insertions(+)
>>>>   create mode 100644 drivers/media/platform/sti/hva/Makefile
>>>>   create mode 100644 drivers/media/platform/sti/hva/hva-hw.c
>>>>   create mode 100644 drivers/media/platform/sti/hva/hva-hw.h
>>>>   create mode 100644 drivers/media/platform/sti/hva/hva-mem.c
>>>>   create mode 100644 drivers/media/platform/sti/hva/hva-mem.h
>>>>   create mode 100644 drivers/media/platform/sti/hva/hva-v4l2.c
>>>>   create mode 100644 drivers/media/platform/sti/hva/hva.h
>>>>
>>>> diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
>>>> index 382f393..182d63f 100644
>>>> --- a/drivers/media/platform/Kconfig
>>>> +++ b/drivers/media/platform/Kconfig
>>>> @@ -227,6 +227,20 @@ config VIDEO_STI_BDISP
>>>>        help
>>>>          This v4l2 mem2mem driver is a 2D blitter for STMicroelectronics SoC.
>>>>
>>>> +config VIDEO_STI_HVA
>>>> +     tristate "STMicroelectronics STiH41x HVA multi-format video encoder V4L2 driver"
>>>> +     depends on VIDEO_DEV && VIDEO_V4L2
>>>> +     depends on ARCH_STI || COMPILE_TEST
>>>> +     select VIDEOBUF2_DMA_CONTIG
>>>> +     select V4L2_MEM2MEM_DEV
>>>> +     help
>>>> +       This V4L2 driver enables HVA multi-format video encoder of
>>>
>>> Please mention here what HVA stands for.
>>>
>>
>> Done in version 3.
>> HVA stands for "Hardware Video Accelerator".
>>
>>>> +       STMicroelectronics SoC STiH41x series, allowing hardware encoding of raw
>>>> +       uncompressed formats in various compressed video bitstreams format.
>>>> +
>>>> +       To compile this driver as a module, choose M here:
>>>> +       the module will be called hva.
>>>
>>> How about sti-hva as the module name? 'hva' is a bit too generic.
>>>
>>
>> 'hva' is a generic IP which could be used on different STMicroelectronics SoCs.
>> That's the reason why I would like to keep this name. It's not specific to  the
>> STiH41x series: thus, I've reworked the Kconfig's comment.
>
> How about st-hva? I really like it to be a bit more specific.
>

Hi Hans,

Thank you for your comments.
As discussed through IRC with you and Benjamin Gaignard last week, I will rename 
the module "st-hva" in the version 4.

>>>> +static int hva_s_parm(struct file *file, void *fh, struct v4l2_streamparm *sp)
>>>> +{
>>>> +     struct hva_ctx *ctx = fh_to_ctx(file->private_data);
>>>> +     struct device *dev = ctx_to_dev(ctx);
>>>> +     struct v4l2_fract *time_per_frame = &ctx->ctrls.time_per_frame;
>>>> +
>>>> +     time_per_frame->numerator = sp->parm.capture.timeperframe.numerator;
>>>> +     time_per_frame->denominator =
>>>> +             sp->parm.capture.timeperframe.denominator;
>>>> +
>>>> +     dev_dbg(dev, "%s set parameters %d/%d\n", ctx->name,
>>>> +             time_per_frame->numerator, time_per_frame->denominator);
>>>> +
>>>> +     return 0;
>>>> +}
>>>> +
>>>> +static int hva_g_parm(struct file *file, void *fh, struct v4l2_streamparm *sp)
>>>> +{
>>>> +     struct hva_ctx *ctx = fh_to_ctx(file->private_data);
>>>> +     struct device *dev = ctx_to_dev(ctx);
>>>> +     struct v4l2_fract *time_per_frame = &ctx->ctrls.time_per_frame;
>>>> +
>>>> +     sp->parm.capture.timeperframe.numerator = time_per_frame->numerator;
>>>> +     sp->parm.capture.timeperframe.denominator =
>>>> +             time_per_frame->denominator;
>>>> +
>>>> +     dev_dbg(dev, "%s get parameters %d/%d\n", ctx->name,
>>>> +             time_per_frame->numerator, time_per_frame->denominator);
>>>> +
>>>> +     return 0;
>>>> +}
>>>
>>> This is strange. Normally codecs don't need this. You give them a buffer and
>>> it will be encoded/decoded and then you give it the next one if it is available.
>>> There is normally no frame rate involved.
>>>
>>> How does this work in this SoC? I need to know a bit more about this to be
>>> certain there isn't a misunderstanding somewhere.
>>>
>>
>> Among the parameters dimensioning its buffer model, the 'hva' HW IP needs to
>> calculate the depletion that is the quantity of bits at the output of the
>> encoder in each time slot, basically bitrate/framerate. That's the reason for
>> these 2 functions.
>> Furthermore, I've seen that mtk-vcodec and coda encoders also get the frame rate
>> to configure their HW IPs (vidioc_venc_s_parm & coda_s_parm).
>
> Ah, OK. That makes sense. So this is *only* used in calculating the bitrate(s),
> not in actual scheduling of threads or something like that, right?
>
> Regards,
>
> 	Hans
>

About the frame rate (G/S-PARM), I confirm that it's not used for any scheduling 
of threads or anything like that: it's only for bitrate(s) calculation.

Best regards,
Jean-Christophe.--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux