On Tue, 5 Apr 2016 16:09:42 -0700
Amancio Hasty <aha...@gmail.com> wrote:

> > On Apr 5, 2016, at 3:57 PM, Michael Niedermayer <mich...@niedermayer.cc> 
> > wrote:
> > 
> > On Tue, Apr 05, 2016 at 11:06:48PM +0200, Michael Niedermayer wrote:  
> >> On Tue, Apr 05, 2016 at 12:00:26PM -0700, Amancio Hasty wrote:  
> >>>   
> >>>> On Mar 31, 2016, at 7:27 PM, Amancio Hasty <aha...@gmail.com> wrote:
> >>>> 
> >>>> I am not a lawyer…
> >>>> 
> >>>> 
> >>>> I updated the patch.  vc264.c now has a the copyright notice embedded in 
> >>>> a volatile global so if a binary is compiled against vc264.o , the 
> >>>> copyright notice
> >>>> can be displayed by:
> >>>> strings ffmpeg | grep -i copyright
> >>>> 
> >>>> LICENSE.md has been updated to include Broadcom’s copyright notice.
> >>>> 
> >>>> A distribution of a  binary that includes vc264.o should include 
> >>>> LICENSE.md and if 
> >>>> that is missing,  the copyright notice can be displayed via the shell
> >>>> command ‘strings’ .
> >>>> 
> >>>> Amancio
> >>>> <c-0001-added-support-for-hardware-assist-H264-video-encodin.patch>  
> >>>>> On Mar 22, 2016, at 12:12 PM, Lou Logan <l...@lrcd.com> wrote:
> >>>>> 
> >>>>> On Mon, 21 Mar 2016 20:07:01 -0700, Amancio Hasty wrote:
> >>>>>   
> >>>>>> From 874a72eec2a78f4935fea091003e534b5f8d5413 Mon Sep 17 00:00:00 2001
> >>>>>> From: Amancio Hasty <aha...@gmail.com>
> >>>>>> Date: Mon, 21 Mar 2016 18:56:05 -0700
> >>>>>> Subject: [PATCH] added support for hardware assist H264  video 
> >>>>>> encoding for
> >>>>>> the Raspberry Pi
> >>>>>> 
> >>>>>> ---
> >>>>>> configure              |  12 ++
> >>>>>> libavcodec/Makefile    |   1 +
> >>>>>> libavcodec/allcodecs.c |   2 +
> >>>>>> libavcodec/vc264.c     | 387 
> >>>>>> +++++++++++++++++++++++++++++++++++++++++++++++++
> >>>>>> 4 files changed, 402 insertions(+)
> >>>>>> create mode 100644 libavcodec/vc264.c
> >>>>>>   
> >>>>> [...]  
> >>>>>> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> >>>>>> index 2a25d66..3c7bd9b 100644
> >>>>>> --- a/libavcodec/allcodecs.c
> >>>>>> +++ b/libavcodec/allcodecs.c
> >>>>>> @@ -74,6 +74,7 @@ void avcodec_register_all(void)
> >>>>>>   initialized = 1;
> >>>>>>   
> >>>>> 
> >>>>> Nit: Whitespace on the line above should be removed.
> >>>>> 
> >>>>> [...]  
> >>>>>> --- /dev/null
> >>>>>> +++ b/libavcodec/vc264.c
> >>>>>> @@ -0,0 +1,387 @@
> >>>>>> +/*  H.264 hardware assist video encoding code taken from
> >>>>>> + * raspberry's os :
> >>>>>> + *   /opt/vc/src/hello_pi/hello_encode/encode.c
> >>>>>> + */
> >>>>>> +
> >>>>>> +/*
> >>>>>> +Copyright (c) 2012, Broadcom Europe Ltd
> >>>>>> +Copyright (c) 2012, Kalle Vahlman <zuh@iki>
> >>>>>> +                    Tuomas Kulve <tuo...@kulve.fi>
> >>>>>> +All rights reserved.
> >>>>>> +
> >>>>>> +Redistribution and use in source and binary forms, with or without
> >>>>>> +modification, are permitted provided that the following conditions 
> >>>>>> are met:
> >>>>>> +* Redistributions of source code must retain the above copyright
> >>>>>> +      notice, this list of conditions and the following disclaimer.
> >>>>>> +      * Redistributions in binary form must reproduce the above 
> >>>>>> copyright
> >>>>>> +      notice, this list of conditions and the following disclaimer in 
> >>>>>> the
> >>>>>> +      documentation and/or other materials provided with the 
> >>>>>> distribution.
> >>>>>> +      * Neither the name of the copyright holder nor the
> >>>>>> +      names of its contributors may be used to endorse or promote 
> >>>>>> products
> >>>>>> +      derived from this software without specific prior written 
> >>>>>> permission.
> >>>>>> +
> >>>>>> +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
> >>>>>> "AS IS" AND
> >>>>>> +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
> >>>>>> IMPLIED
> >>>>>> +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> >>>>>> +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
> >>>>>> LIABLE FOR ANY
> >>>>>> +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
> >>>>>> DAMAGES
> >>>>>> +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
> >>>>>> SERVICES;
> >>>>>> +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
> >>>>>> CAUSED AND
> >>>>>> +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
> >>>>>> TORT
> >>>>>> +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
> >>>>>> OF THIS
> >>>>>> +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
> >>>>> 
> >>>>> I wonder if any of the above legalese is compatible. Granted, I see a
> >>>>> similar paragraph in "libavformat/aadec.c".
> >>>>>   
> >>>>>> + * ffmpeg driver for hardware assist video H.264 encoding using 
> >>>>>> Broadcom's GPU
> >>>>>> + * Copyright (C) 2016 Amancio Hasty aha...@gmail.com
> >>>>>> + *
> >>>>>> + *
> >>>>>> + * This file is part of FFmpeg.
> >>>>>> + *
> >>>>>> + * FFmpeg is free software; you can redistribute it and/or
> >>>>>> + * modify it under the terms of the GNU Lesser General Public
> >>>>>> + * License as published by the Free Software Foundation; either
> >>>>>> + * version 2.1 of the License, or (at your option) any later version.
> >>>>>> + *
> >>>>>> + * FFmpeg is distributed in the hope that it will be useful,
> >>>>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >>>>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> >>>>>> + * Lesser General Public License for more details.
> >>>>>> + *
> >>>>>> + * You should have received a copy of the GNU Lesser General Public
> >>>>>> + * License along with FFmpeg; if not, write to the Free Software
> >>>>>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
> >>>>>> 02110-1301 USA
> >>>>>> + *
> >>>>>> + */
> >>>>>> +
> >>>>>> +
> >>>>>> +/**
> >>>>>> + * @ file vc264.c
> >>>>>> + * Broadcom bm2865's Visual Core hardware assist h264 using
> >>>>>> +   openMax interface to the GPU.
> >>>>>> +
> >>>>>> +*/
> >>>>>> +
> >>>>>> +#include <stdio.h>
> >>>>>> +#include <stdlib.h>
> >>>>>> +#include <string.h>
> >>>>>> +#define OMX_SKIP64BIT
> >>>>>> +#include "bcm_host.h"
> >>>>>> +#include "ilclient.h"
> >>>>>> +#include "avcodec.h"
> >>>>>> +#include "internal.h"
> >>>>>> +
> >>>>>> +typedef struct VC264Context {
> >>>>>> +  OMX_VIDEO_PARAM_PORTFORMATTYPE format;
> >>>>>> +  OMX_PARAM_PORTDEFINITIONTYPE def;
> >>>>>> +  COMPONENT_T *video_encode;
> >>>>>> +  COMPONENT_T *list[5];
> >>>>>> +  OMX_BUFFERHEADERTYPE *buf;
> >>>>>> +  OMX_BUFFERHEADERTYPE *out;
> >>>>>> +  ILCLIENT_T *client;
> >>>>>> +  OMX_VIDEO_PARAM_BITRATETYPE bitrateType;
> >>>>>> +  int  width;
> >>>>>> +  int height;
> >>>>>> +  int bit_rate;
> >>>>>> +} VC264Context;
> >>>>>> +
> >>>>>> +
> >>>>>> +static int vc264_init(AVCodecContext *avctx) {
> >>>>>> +
> >>>>>> +
> >>>>>> +
> >>>>>> +   OMX_ERRORTYPE r;
> >>>>>> +   int error;
> >>>>>> +
> >>>>>> +
> >>>>>> +
> >>>>>> +   VC264Context *vc = avctx->priv_data;
> >>>>>> +
> >>>>>> +   vc->width = avctx->width;
> >>>>>> +   vc->height = avctx->height;
> >>>>>> +   vc->bit_rate = avctx->bit_rate;
> >>>>>> +   printf("vc264: bit rate %d \n", avctx->bit_rate);
> >>>>>> +#if FF_API_CODED_FRAME
> >>>>>> +FF_DISABLE_DEPRECATION_WARNINGS
> >>>>>> +
> >>>>>> +   avctx->coded_frame = av_frame_alloc();
> >>>>>> +   avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
> >>>>>> +FF_ENABLE_DEPRECATION_WARNINGS
> >>>>>> +#endif
> >>>>>> +
> >>>>>> +
> >>>>>> +   memset(&vc->list, 0, sizeof(vc->list));
> >>>>>> +   bcm_host_init();
> >>>>>> +   if ((vc->client = ilclient_init()) == NULL) {
> >>>>>> +      return -3;
> >>>>>> +   }
> >>>>>> +   error = OMX_Init();
> >>>>>> +
> >>>>>> +   if (error  != OMX_ErrorNone) {
> >>>>>> +      ilclient_destroy(vc->client);
> >>>>>> +      av_log(avctx,AV_LOG_ERROR,"in vc264_init OMX_Init failed ");
> >>>>>> +     return -4;
> >>>>>> +    }
> >>>>>> +
> >>>>>> +   // create video_encode
> >>>>>> +   r = ilclient_create_component(vc->client, &vc->video_encode, (char 
> >>>>>> *) "video_encode",
> >>>>>> +                               ILCLIENT_DISABLE_ALL_PORTS |
> >>>>>> +                               ILCLIENT_ENABLE_INPUT_BUFFERS |
> >>>>>> +                               ILCLIENT_ENABLE_OUTPUT_BUFFERS);  
> >>>>> 
> >>>>> Tabs should be converted to spaces. There are many instances of tabs
> >>>>> being used in this patch.
> >>>>> 
> >>>>> Others will have to provide a more technical review (not to mention
> >>>>> possible additions docs, Changelog, MAINTAINERS, and
> >>>>> libavcodec/version.h).
> >>>>> _______________________________________________
> >>>>> ffmpeg-devel mailing list
> >>>>> ffmpeg-devel@ffmpeg.org
> >>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel  
> >>>>   
> >>> 
> >>> Well, ffmpeg is very popular in the Raspberry community. For example, 
> >>> motionpie uses it for 
> >>> video monitoring;however, the encoding is done in software which limits 
> >>> its performance.
> >>> 
> >>> So yes quite  a  bit number of users are waiting for hardware assist H264 
> >>> encoding in ffmpeg.  
> >> 
> >> I see no harm in adding this, its a optional feature and apparently
> >> theres a user base who wants this
> >> 
> >> thus i intend to apply this patch and state so with this mail
> >> if someone objects please state that clearly in a reply  
> > 
> > from IRC:
> > 
> > <wm4> miI'm still against it
> > <wm4> s/mi/michaelni:/
> > 
> > so if you want this patch applied
> > talk with wm4
> > 
> > [...]
> > 
> > -- 
> > Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
> > 
> > Awnsering whenever a program halts or runs forever is
> > On a turing machine, in general impossible (turings halting problem).
> > On any real computer, always possible as a real computer has a finite number
> > of states N, and will either halt in less than N cycles or never halt.
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel 
> > <http://ffmpeg.org/mailman/listinfo/ffmpeg-devel>  
> If I provide the decoding and the encoding component will the patch be 
> accepted?

There's also an older (but now rebased) attempt at supporting both OMX
decoding and encoding, and not only on RPI but other OMX providers too:

 https://github.com/mstorsjo/libav/commits/bcm-omx

(Looks better than this patch to me.)
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to