Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
On Tue, Feb 21, 2017 at 05:15:59PM +, Saverio Blasi wrote: [...] > enabled libspeex && require_pkg_config speex speex/speex.h > speex_decoder_init -lspeex > enabled libtesseract && require_pkg_config tesseract tesseract/capi.h > TessBaseAPICreate > enabled libtheora && require libtheora theora/theoraenc.h > th_info_init -ltheoraenc -ltheoradec -logg > +enabled libturing && require_pkg_config libturing turing.h > turing_version You probably want to specify a minimal version [...] > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > +02110-1301 USA */ > + This looks mangled. > +#include Please add a line break after this > +#include "libavutil/internal.h" > +#include "libavutil/common.h" > +#include "libavutil/opt.h" > +#include "libavutil/pixdesc.h" > +#include "avcodec.h" > +#include "internal.h" > + > +#define MAX_OPTION_LENGTH 256 > + > +typedef struct libturingEncodeContext { > +const AVClass *class; > +turing_encoder *encoder; > +const char *options; > +} libturingEncodeContext; > + > +typedef struct optionContext { > +char** argv; > +char* options; > +char* s; Style here and in other places: * stick to the var > +int options_buffer_size; > +int buffer_filled; > +int options_added; > +} optionContext; > + > +static av_cold int libturing_encode_close(AVCodecContext *avctx) { Style: here and in other places missing line break before "{" for functions. > +libturingEncodeContext *ctx = avctx->priv_data; > + > +if (ctx->encoder) { > +turing_destroy_encoder(ctx->encoder); > +} Note: the NULL check should probably be part of the libturing API to simplify code paths for the users (just like the stdlib free(3) convention). > +return 0; > +} > + > +static av_cold int add_option(const char* current_option, > +optionContext* option_ctx) { This function should be replaced with AVBPrint API. It will be much simpler (that function will basically disappear) and will allow the caller to check for errors only once. [...] > +static av_cold int libturing_encode_init(AVCodecContext *avctx) { > +libturingEncodeContext *ctx = avctx->priv_data; > +const int bit_depth = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth; > +int error_code = 0; > + > +optionContext encoder_options; use "encoder_options = {0}" so you don't need to fill each and every field later on, and risk to forget one in the future. [...] > +int const illegal_option = > +!strcmp("input-res", en->key) || > +!strcmp("frame-rate", en->key) || > +!strcmp("f", en->key) || > +!strcmp("frames", en->key) || > +!strcmp("sar", en->key) || > +!strcmp("bit-depth", en->key) || > +!strcmp("internal-bit-depth", en->key); you could use av_match_name(en->key, "input-res,frame-rate,f,...") here. > +if (illegal_option) { > +av_log(avctx, AV_LOG_WARNING, "%s=%s ignored - this > parameter is inferred from ffmpeg.\n", en->key, en->value); > +} else { > +if (turing_check_binary_option(en->key)) { > +snprintf(option_string, MAX_OPTION_LENGTH, "--%s", > en->key); > +} else { > +snprintf(option_string, MAX_OPTION_LENGTH, > "--%s=%s", en->key, en->value); > +} > +if ((error_code = add_option(option_string, > _options)) > 0) { > +goto fail; leaking dict here. > +} > +} > +} > +av_dict_free(); > +} > +} > + > +if ((error_code = add_option("dummy-input-filename", _options)) > > 0) { > +goto fail; > +} > + > +if ((error_code = finalise_options(_options)) > 0) { > +goto fail; > +} > + > +settings.argv = (char const**)encoder_options.argv; > +settings.argc = encoder_options.options_added; > + > +for (int i=0; i+av_log(avctx, AV_LOG_VERBOSE, "arg %d: %s\n", i, settings.argv[i]); > +} > + > +ctx->encoder = turing_create_encoder(settings); > + > +if (!ctx->encoder) { > +av_log(avctx, AV_LOG_ERROR, "Failed to create libturing encoder.\n"); > +error_code = AVERROR_INVALIDDATA; > +goto fail; > +} > + > +if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { > +turing_bitstream const *bitstream; > +bitstream = turing_encode_headers(ctx->encoder); > +if (bitstream->size <= 0) { > +av_log(avctx, AV_LOG_ERROR, "Failed to encode headers.\n"); > +turing_destroy_encoder(ctx->encoder); > +error_code = AVERROR_INVALIDDATA; > +
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
Dear Mark, Sorry for the long delay in replying. We have now pushed some changes to our main Turing codec repository to address your comments below. Our custom boost libraries should now be correctly installed so there is no need for preserving any additional Turing build folder. These changes are completely transparent to our ffmpeg patch, which remains valid at v7. We would appreciate comments on this. Thanks, All the best, Saverio Blasi, PhD Senior Research Engineer BBC Research & Development Centre House|56 Wood Lane|London|W12 7SB -Original Message- From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf Of Mark Thompson Sent: 28 February 2017 11:02 To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg On 28/02/17 10:27, Saverio Blasi wrote: > Dear Mark, > > We provide our custom Boost libraries. In our tests we are able to build and > run using just "--enable-gpl --enable-libturing". We would prefer to keep the > pkgconfig file. I am not sure I fully understand what is required to be > changed there (if anything), could you please be a bit more specific? Well, where do those libraries end up? I agree the pkgconfig file is the correct way to do this, but it currently points at the libturing build directory which need not exist when building ffmpeg. You should be able to install the library with some prefix (below using the default /usr/local) and then use it in ffmpeg without any other magic: mkdir libturing-build cd libturing-build cmake ../path/to/libturing/source/ make make install cd .. rm -rf libturing-build mkdir ffmpeg-build cd ffmpeg-build ../path/to/ffmpeg/source/configure --enable-gpl --enable-libturing make ./ffmpeg ... -c:v libturing ... make install ffmpeg ... -c:v libturing ... For me, this sequence currently fails to link for the configure test because the custom boost libraries are not found (were not installed anywhere, as far as I can tell). Have you tried this on a vanilla install of a standard distribution? It sounds like you might have more stuff in your development setup which allows it to work. - Mark > -Original Message- > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf > Of Mark Thompson > Sent: 27 February 2017 11:14 > To: FFmpeg development discussions and patches > <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface > for ffmpeg > > On 27/02/17 08:29, Saverio Blasi wrote: >>> Right, I had a bit more of a look at it and was able to "fix" it by adding >>> the boost libraries to the ffmpeg configure line as well. >>> >>> Actually running it it all looks good to me, if as fast as a particularly >>> lethargic snail (like all H.265 encoders targetting quality). >>> >>> valgrind came up with some errors, but they appear to be on the libturing >>> side rather than in the ffmpeg wrapper (i.e. please do fix them, but they >>> don't matter to this patch). >>> >>> Thanks, >>> >>> - Mark >> >> Dear Mark, >> >> Thanks a lot for this, we are very happy to know the patch will be >> integrated. >> Regarding the problems you mention, we will have a look at the output of >> valgrind, and are also working on speeding up the encoder. > > Also the pkgconfig file: > * It refers to the libturing build directory, which need not exist after > installation. > * I think libstdc++ and the boost libraries are always required, not > just when linking statically. (Not sure how this interacts with other > parts, though - it seems to not like the system boost libraries on > Ubuntu 16.04 (1.58): do you need to install your custom boost > libraries as well?) > > It should be possible to build and run with just "--enable-gpl > --enable-libturing" on a clean "make install"ed libturing. > > Thanks, > > - Mark ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
On 28/02/17 10:27, Saverio Blasi wrote: > Dear Mark, > > We provide our custom Boost libraries. In our tests we are able to build and > run using just "--enable-gpl --enable-libturing". We would prefer to keep the > pkgconfig file. I am not sure I fully understand what is required to be > changed there (if anything), could you please be a bit more specific? Well, where do those libraries end up? I agree the pkgconfig file is the correct way to do this, but it currently points at the libturing build directory which need not exist when building ffmpeg. You should be able to install the library with some prefix (below using the default /usr/local) and then use it in ffmpeg without any other magic: mkdir libturing-build cd libturing-build cmake ../path/to/libturing/source/ make make install cd .. rm -rf libturing-build mkdir ffmpeg-build cd ffmpeg-build ../path/to/ffmpeg/source/configure --enable-gpl --enable-libturing make ./ffmpeg ... -c:v libturing ... make install ffmpeg ... -c:v libturing ... For me, this sequence currently fails to link for the configure test because the custom boost libraries are not found (were not installed anywhere, as far as I can tell). Have you tried this on a vanilla install of a standard distribution? It sounds like you might have more stuff in your development setup which allows it to work. - Mark > -Original Message- > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf Of Mark > Thompson > Sent: 27 February 2017 11:14 > To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for > ffmpeg > > On 27/02/17 08:29, Saverio Blasi wrote: >>> Right, I had a bit more of a look at it and was able to "fix" it by adding >>> the boost libraries to the ffmpeg configure line as well. >>> >>> Actually running it it all looks good to me, if as fast as a particularly >>> lethargic snail (like all H.265 encoders targetting quality). >>> >>> valgrind came up with some errors, but they appear to be on the libturing >>> side rather than in the ffmpeg wrapper (i.e. please do fix them, but they >>> don't matter to this patch). >>> >>> Thanks, >>> >>> - Mark >> >> Dear Mark, >> >> Thanks a lot for this, we are very happy to know the patch will be >> integrated. >> Regarding the problems you mention, we will have a look at the output of >> valgrind, and are also working on speeding up the encoder. > > Also the pkgconfig file: > * It refers to the libturing build directory, which need not exist after > installation. > * I think libstdc++ and the boost libraries are always required, not just > when linking statically. (Not sure how this interacts with other parts, > though - it seems to not like the system boost libraries on Ubuntu 16.04 > (1.58): do you need to install your custom boost libraries as well?) > > It should be possible to build and run with just "--enable-gpl > --enable-libturing" on a clean "make install"ed libturing. > > Thanks, > > - Mark ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
Dear Mark, We provide our custom Boost libraries. In our tests we are able to build and run using just "--enable-gpl --enable-libturing". We would prefer to keep the pkgconfig file. I am not sure I fully understand what is required to be changed there (if anything), could you please be a bit more specific? Thanks a lot, Saverio -Original Message- From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf Of Mark Thompson Sent: 27 February 2017 11:14 To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg On 27/02/17 08:29, Saverio Blasi wrote: >> Right, I had a bit more of a look at it and was able to "fix" it by adding >> the boost libraries to the ffmpeg configure line as well. >> >> Actually running it it all looks good to me, if as fast as a particularly >> lethargic snail (like all H.265 encoders targetting quality). >> >> valgrind came up with some errors, but they appear to be on the libturing >> side rather than in the ffmpeg wrapper (i.e. please do fix them, but they >> don't matter to this patch). >> >> Thanks, >> >> - Mark > > Dear Mark, > > Thanks a lot for this, we are very happy to know the patch will be integrated. > Regarding the problems you mention, we will have a look at the output of > valgrind, and are also working on speeding up the encoder. Also the pkgconfig file: * It refers to the libturing build directory, which need not exist after installation. * I think libstdc++ and the boost libraries are always required, not just when linking statically. (Not sure how this interacts with other parts, though - it seems to not like the system boost libraries on Ubuntu 16.04 (1.58): do you need to install your custom boost libraries as well?) It should be possible to build and run with just "--enable-gpl --enable-libturing" on a clean "make install"ed libturing. Thanks, - Mark ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel - http://www.bbc.co.uk This e-mail (and any attachments) is confidential and may contain personal views which are not the views of the BBC unless specifically stated. If you have received it in error, please delete it from your system. Do not use, copy or disclose the information in any way nor act in reliance on it and notify the sender immediately. Please note that the BBC monitors e-mails sent or received. Further communication will signify your consent to this. - ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
2017-02-27 12:13 GMT+01:00 Mark Thompson: > * I think libstdc++ and the boost libraries are always required If this is true, not using pkgconfig is the more user-friendly solution. Carl Eugen ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
On 27/02/17 08:29, Saverio Blasi wrote: >> Right, I had a bit more of a look at it and was able to "fix" it by adding >> the boost libraries to the ffmpeg configure line as well. >> >> Actually running it it all looks good to me, if as fast as a particularly >> lethargic snail (like all H.265 encoders targetting quality). >> >> valgrind came up with some errors, but they appear to be on the libturing >> side rather than in the ffmpeg wrapper (i.e. please do fix them, but they >> don't matter to this patch). >> >> Thanks, >> >> - Mark > > Dear Mark, > > Thanks a lot for this, we are very happy to know the patch will be > integrated. > Regarding the problems you mention, we will have a look at the output of > valgrind, and are also working on speeding up the encoder. Also the pkgconfig file: * It refers to the libturing build directory, which need not exist after installation. * I think libstdc++ and the boost libraries are always required, not just when linking statically. (Not sure how this interacts with other parts, though - it seems to not like the system boost libraries on Ubuntu 16.04 (1.58): do you need to install your custom boost libraries as well?) It should be possible to build and run with just "--enable-gpl --enable-libturing" on a clean "make install"ed libturing. Thanks, - Mark ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
> Right, I had a bit more of a look at it and was able to "fix" it by adding > the boost libraries to the ffmpeg configure line as well. > > Actually running it it all looks good to me, if as fast as a particularly > lethargic snail (like all H.265 encoders targetting quality). > > valgrind came up with some errors, but they appear to be on the libturing > side rather than in the ffmpeg wrapper (i.e. please do fix them, but they > don't matter to this patch). > > Thanks, > > - Mark Dear Mark, Thanks a lot for this, we are very happy to know the patch will be integrated. Regarding the problems you mention, we will have a look at the output of valgrind, and are also working on speeding up the encoder. All the best, Saverio Blasi, PhD Senior Research Engineer BBC Research & Development Centre House|56 Wood Lane|London|W12 7SB ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
On 23/02/17 20:47, Mark Thompson wrote: > On 21/02/17 17:15, Saverio Blasi wrote: >> Hi all, >> >> We have recently circulated this new iteration (see below) of our work >> towards integrating our HEVC Turing codec within FFMpeg. Assuming that there >> are no more requests for changes, we would like to understand what is the >> timeline for integration within the project. >> >> Thanks a lot, >> >> All the best, >> >> Saverio Blasi, PhD >> Senior Research Engineer >> BBC Research & Development >> Centre House|56 Wood Lane|London|W12 7SB >> >> >> >> >> -Original Message- >> From: Saverio Blasi [mailto:saverio.bl...@bbc.co.uk] >> Sent: 13 February 2017 13:37 >> To: ffmpeg-devel@ffmpeg.org >> Cc: Saverio Blasi>> Subject: [PATCH v7] - Added Turing codec interface for ffmpeg >> >> - This patch contains the changes to interface the Turing codec >> (http://turingcodec.org/) with ffmpeg. The patch was modified to address the >> comments in the review as follows: >> - Added a pkg-config file to list all dependencies required by libturing. >> This should address the issue pointed out by Hendrik Leppkes on Fri >> 18/11/2016 >> - As per suggestions of wm4, two functions (add_option and >> finalise_options) have been created. The former appends new options while >> the latter sets up the argv array of pointers to char* accordingly. >> add_option re-allocates the buffer for options using av_realloc >> - Additionally, both these functions handle the errors in case the memory >> wasn't allocated correctly >> - malloc|free|realloc have been substituted with their corresponding >> av_{malloc|free|realloc} version >> - Check on bit-depth has been removed since the ffmpeg already casts the >> right pix_fmt and bit depth >> - pix_fmts is now set in ff_libturing_encoder as in h264dec.c. >> - Changed usage of av_free with av_freep and fixed calls to free arrays >> - Added brackets to all if and for statements >> - Avoid repetition of code to free arrays in case of failure to initialise >> the libturing encoder >> - Some fixes to address the review from wm4 and Mark Thompson received on >> Wed 08/02/2017 >> - Fixed indentation >> --- >> LICENSE.md | 1 + >> configure | 5 + >> libavcodec/Makefile| 1 + >> libavcodec/allcodecs.c | 1 + >> libavcodec/libturing.c | 320 >> + >> 5 files changed, 328 insertions(+) >> create mode 100644 libavcodec/libturing.c >> >> diff --git a/LICENSE.md b/LICENSE.md >> index 640633c..86e5371 100644 >> --- a/LICENSE.md >> +++ b/LICENSE.md >> @@ -85,6 +85,7 @@ The following libraries are under GPL: >> - frei0r >> - libcdio >> - librubberband >> +- libturing >> - libvidstab >> - libx264 >> - libx265 >> diff --git a/configure b/configure >> index 7154142..a27cb8b 100755 >> --- a/configure >> +++ b/configure >> @@ -255,6 +255,7 @@ External library support: >>--enable-libssh enable SFTP protocol via libssh [no] >>--enable-libtesseractenable Tesseract, needed for ocr filter [no] >>--enable-libtheora enable Theora encoding via libtheora [no] >> + --enable-libturing enable H.265/HEVC encoding via libturing [no] >>--enable-libtwolame enable MP2 encoding via libtwolame [no] >>--enable-libv4l2 enable libv4l2/v4l-utils [no] >>--enable-libvidstab enable video stabilization using vid.stab [no] >> @@ -1562,6 +1563,7 @@ EXTERNAL_LIBRARY_LIST=" >> libssh >> libtesseract >> libtheora >> +libturing >> libtwolame >> libv4l2 >> libvidstab >> @@ -2858,6 +2860,7 @@ libspeex_decoder_deps="libspeex" >> libspeex_encoder_deps="libspeex" >> libspeex_encoder_select="audio_frame_queue" >> libtheora_encoder_deps="libtheora" >> +libturing_encoder_deps="libturing" >> libtwolame_encoder_deps="libtwolame" >> libvo_amrwbenc_encoder_deps="libvo_amrwbenc" >> libvorbis_decoder_deps="libvorbis" >> @@ -5131,6 +5134,7 @@ die_license_disabled gpl frei0r die_license_disabled >> gpl libcdio die_license_disabled gpl librubberband die_license_disabled >> gpl libsmbclient >> +die_license_disabled gpl libturing >> die_license_disabled gpl libvidstab >> die_license_disabled gpl libx264 >> die_license_disabled gpl libx265 >> @@ -5789,6 +5793,7 @@ enabled libssh&& require_pkg_config libssh >> libssh/sftp.h sftp_init >> enabled libspeex && require_pkg_config speex speex/speex.h >> speex_decoder_init -lspeex >> enabled libtesseract && require_pkg_config tesseract tesseract/capi.h >> TessBaseAPICreate >> enabled libtheora && require libtheora theora/theoraenc.h >> th_info_init -ltheoraenc -ltheoradec -logg >> +enabled libturing && require_pkg_config libturing turing.h >> turing_version >> enabled libtwolame&& require libtwolame twolame.h twolame_init >> -ltwolame &&
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
On 21/02/17 17:15, Saverio Blasi wrote: > Hi all, > > We have recently circulated this new iteration (see below) of our work > towards integrating our HEVC Turing codec within FFMpeg. Assuming that there > are no more requests for changes, we would like to understand what is the > timeline for integration within the project. > > Thanks a lot, > > All the best, > > Saverio Blasi, PhD > Senior Research Engineer > BBC Research & Development > Centre House|56 Wood Lane|London|W12 7SB > > > > > -Original Message- > From: Saverio Blasi [mailto:saverio.bl...@bbc.co.uk] > Sent: 13 February 2017 13:37 > To: ffmpeg-devel@ffmpeg.org > Cc: Saverio Blasi> Subject: [PATCH v7] - Added Turing codec interface for ffmpeg > > - This patch contains the changes to interface the Turing codec > (http://turingcodec.org/) with ffmpeg. The patch was modified to address the > comments in the review as follows: > - Added a pkg-config file to list all dependencies required by libturing. > This should address the issue pointed out by Hendrik Leppkes on Fri 18/11/2016 > - As per suggestions of wm4, two functions (add_option and > finalise_options) have been created. The former appends new options while the > latter sets up the argv array of pointers to char* accordingly. add_option > re-allocates the buffer for options using av_realloc > - Additionally, both these functions handle the errors in case the memory > wasn't allocated correctly > - malloc|free|realloc have been substituted with their corresponding > av_{malloc|free|realloc} version > - Check on bit-depth has been removed since the ffmpeg already casts the > right pix_fmt and bit depth > - pix_fmts is now set in ff_libturing_encoder as in h264dec.c. > - Changed usage of av_free with av_freep and fixed calls to free arrays > - Added brackets to all if and for statements > - Avoid repetition of code to free arrays in case of failure to initialise > the libturing encoder > - Some fixes to address the review from wm4 and Mark Thompson received on > Wed 08/02/2017 > - Fixed indentation > --- > LICENSE.md | 1 + > configure | 5 + > libavcodec/Makefile| 1 + > libavcodec/allcodecs.c | 1 + > libavcodec/libturing.c | 320 > + > 5 files changed, 328 insertions(+) > create mode 100644 libavcodec/libturing.c > > diff --git a/LICENSE.md b/LICENSE.md > index 640633c..86e5371 100644 > --- a/LICENSE.md > +++ b/LICENSE.md > @@ -85,6 +85,7 @@ The following libraries are under GPL: > - frei0r > - libcdio > - librubberband > +- libturing > - libvidstab > - libx264 > - libx265 > diff --git a/configure b/configure > index 7154142..a27cb8b 100755 > --- a/configure > +++ b/configure > @@ -255,6 +255,7 @@ External library support: >--enable-libssh enable SFTP protocol via libssh [no] >--enable-libtesseractenable Tesseract, needed for ocr filter [no] >--enable-libtheora enable Theora encoding via libtheora [no] > + --enable-libturing enable H.265/HEVC encoding via libturing [no] >--enable-libtwolame enable MP2 encoding via libtwolame [no] >--enable-libv4l2 enable libv4l2/v4l-utils [no] >--enable-libvidstab enable video stabilization using vid.stab [no] > @@ -1562,6 +1563,7 @@ EXTERNAL_LIBRARY_LIST=" > libssh > libtesseract > libtheora > +libturing > libtwolame > libv4l2 > libvidstab > @@ -2858,6 +2860,7 @@ libspeex_decoder_deps="libspeex" > libspeex_encoder_deps="libspeex" > libspeex_encoder_select="audio_frame_queue" > libtheora_encoder_deps="libtheora" > +libturing_encoder_deps="libturing" > libtwolame_encoder_deps="libtwolame" > libvo_amrwbenc_encoder_deps="libvo_amrwbenc" > libvorbis_decoder_deps="libvorbis" > @@ -5131,6 +5134,7 @@ die_license_disabled gpl frei0r die_license_disabled > gpl libcdio die_license_disabled gpl librubberband die_license_disabled gpl > libsmbclient > +die_license_disabled gpl libturing > die_license_disabled gpl libvidstab > die_license_disabled gpl libx264 > die_license_disabled gpl libx265 > @@ -5789,6 +5793,7 @@ enabled libssh&& require_pkg_config libssh > libssh/sftp.h sftp_init > enabled libspeex && require_pkg_config speex speex/speex.h > speex_decoder_init -lspeex > enabled libtesseract && require_pkg_config tesseract tesseract/capi.h > TessBaseAPICreate > enabled libtheora && require libtheora theora/theoraenc.h > th_info_init -ltheoraenc -ltheoradec -logg > +enabled libturing && require_pkg_config libturing turing.h > turing_version > enabled libtwolame&& require libtwolame twolame.h twolame_init > -ltwolame && > { check_lib twolame.h > twolame_encode_buffer_float32_interleaved -ltwolame || > die
Re: [FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
Hi all, We have recently circulated this new iteration (see below) of our work towards integrating our HEVC Turing codec within FFMpeg. Assuming that there are no more requests for changes, we would like to understand what is the timeline for integration within the project. Thanks a lot, All the best, Saverio Blasi, PhD Senior Research Engineer BBC Research & Development Centre House|56 Wood Lane|London|W12 7SB -Original Message- From: Saverio Blasi [mailto:saverio.bl...@bbc.co.uk] Sent: 13 February 2017 13:37 To: ffmpeg-devel@ffmpeg.org Cc: Saverio BlasiSubject: [PATCH v7] - Added Turing codec interface for ffmpeg - This patch contains the changes to interface the Turing codec (http://turingcodec.org/) with ffmpeg. The patch was modified to address the comments in the review as follows: - Added a pkg-config file to list all dependencies required by libturing. This should address the issue pointed out by Hendrik Leppkes on Fri 18/11/2016 - As per suggestions of wm4, two functions (add_option and finalise_options) have been created. The former appends new options while the latter sets up the argv array of pointers to char* accordingly. add_option re-allocates the buffer for options using av_realloc - Additionally, both these functions handle the errors in case the memory wasn't allocated correctly - malloc|free|realloc have been substituted with their corresponding av_{malloc|free|realloc} version - Check on bit-depth has been removed since the ffmpeg already casts the right pix_fmt and bit depth - pix_fmts is now set in ff_libturing_encoder as in h264dec.c. - Changed usage of av_free with av_freep and fixed calls to free arrays - Added brackets to all if and for statements - Avoid repetition of code to free arrays in case of failure to initialise the libturing encoder - Some fixes to address the review from wm4 and Mark Thompson received on Wed 08/02/2017 - Fixed indentation --- LICENSE.md | 1 + configure | 5 + libavcodec/Makefile| 1 + libavcodec/allcodecs.c | 1 + libavcodec/libturing.c | 320 + 5 files changed, 328 insertions(+) create mode 100644 libavcodec/libturing.c diff --git a/LICENSE.md b/LICENSE.md index 640633c..86e5371 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -85,6 +85,7 @@ The following libraries are under GPL: - frei0r - libcdio - librubberband +- libturing - libvidstab - libx264 - libx265 diff --git a/configure b/configure index 7154142..a27cb8b 100755 --- a/configure +++ b/configure @@ -255,6 +255,7 @@ External library support: --enable-libssh enable SFTP protocol via libssh [no] --enable-libtesseractenable Tesseract, needed for ocr filter [no] --enable-libtheora enable Theora encoding via libtheora [no] + --enable-libturing enable H.265/HEVC encoding via libturing [no] --enable-libtwolame enable MP2 encoding via libtwolame [no] --enable-libv4l2 enable libv4l2/v4l-utils [no] --enable-libvidstab enable video stabilization using vid.stab [no] @@ -1562,6 +1563,7 @@ EXTERNAL_LIBRARY_LIST=" libssh libtesseract libtheora +libturing libtwolame libv4l2 libvidstab @@ -2858,6 +2860,7 @@ libspeex_decoder_deps="libspeex" libspeex_encoder_deps="libspeex" libspeex_encoder_select="audio_frame_queue" libtheora_encoder_deps="libtheora" +libturing_encoder_deps="libturing" libtwolame_encoder_deps="libtwolame" libvo_amrwbenc_encoder_deps="libvo_amrwbenc" libvorbis_decoder_deps="libvorbis" @@ -5131,6 +5134,7 @@ die_license_disabled gpl frei0r die_license_disabled gpl libcdio die_license_disabled gpl librubberband die_license_disabled gpl libsmbclient +die_license_disabled gpl libturing die_license_disabled gpl libvidstab die_license_disabled gpl libx264 die_license_disabled gpl libx265 @@ -5789,6 +5793,7 @@ enabled libssh&& require_pkg_config libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex enabled libtesseract && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg +enabled libturing && require_pkg_config libturing turing.h turing_version enabled libtwolame&& require libtwolame twolame.h twolame_init -ltwolame && { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 43a6add..de5af1d 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -883,6 +883,7 @@ OBJS-$(CONFIG_LIBSHINE_ENCODER) += libshine.o
[FFmpeg-devel] [PATCH v7] - Added Turing codec interface for ffmpeg
- This patch contains the changes to interface the Turing codec (http://turingcodec.org/) with ffmpeg. The patch was modified to address the comments in the review as follows: - Added a pkg-config file to list all dependencies required by libturing. This should address the issue pointed out by Hendrik Leppkes on Fri 18/11/2016 - As per suggestions of wm4, two functions (add_option and finalise_options) have been created. The former appends new options while the latter sets up the argv array of pointers to char* accordingly. add_option re-allocates the buffer for options using av_realloc - Additionally, both these functions handle the errors in case the memory wasn't allocated correctly - malloc|free|realloc have been substituted with their corresponding av_{malloc|free|realloc} version - Check on bit-depth has been removed since the ffmpeg already casts the right pix_fmt and bit depth - pix_fmts is now set in ff_libturing_encoder as in h264dec.c. - Changed usage of av_free with av_freep and fixed calls to free arrays - Added brackets to all if and for statements - Avoid repetition of code to free arrays in case of failure to initialise the libturing encoder - Some fixes to address the review from wm4 and Mark Thompson received on Wed 08/02/2017 - Fixed indentation --- LICENSE.md | 1 + configure | 5 + libavcodec/Makefile| 1 + libavcodec/allcodecs.c | 1 + libavcodec/libturing.c | 320 + 5 files changed, 328 insertions(+) create mode 100644 libavcodec/libturing.c diff --git a/LICENSE.md b/LICENSE.md index 640633c..86e5371 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -85,6 +85,7 @@ The following libraries are under GPL: - frei0r - libcdio - librubberband +- libturing - libvidstab - libx264 - libx265 diff --git a/configure b/configure index 7154142..a27cb8b 100755 --- a/configure +++ b/configure @@ -255,6 +255,7 @@ External library support: --enable-libssh enable SFTP protocol via libssh [no] --enable-libtesseractenable Tesseract, needed for ocr filter [no] --enable-libtheora enable Theora encoding via libtheora [no] + --enable-libturing enable H.265/HEVC encoding via libturing [no] --enable-libtwolame enable MP2 encoding via libtwolame [no] --enable-libv4l2 enable libv4l2/v4l-utils [no] --enable-libvidstab enable video stabilization using vid.stab [no] @@ -1562,6 +1563,7 @@ EXTERNAL_LIBRARY_LIST=" libssh libtesseract libtheora +libturing libtwolame libv4l2 libvidstab @@ -2858,6 +2860,7 @@ libspeex_decoder_deps="libspeex" libspeex_encoder_deps="libspeex" libspeex_encoder_select="audio_frame_queue" libtheora_encoder_deps="libtheora" +libturing_encoder_deps="libturing" libtwolame_encoder_deps="libtwolame" libvo_amrwbenc_encoder_deps="libvo_amrwbenc" libvorbis_decoder_deps="libvorbis" @@ -5131,6 +5134,7 @@ die_license_disabled gpl frei0r die_license_disabled gpl libcdio die_license_disabled gpl librubberband die_license_disabled gpl libsmbclient +die_license_disabled gpl libturing die_license_disabled gpl libvidstab die_license_disabled gpl libx264 die_license_disabled gpl libx265 @@ -5789,6 +5793,7 @@ enabled libssh&& require_pkg_config libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex enabled libtesseract && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg +enabled libturing && require_pkg_config libturing turing.h turing_version enabled libtwolame&& require libtwolame twolame.h twolame_init -ltwolame && { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 43a6add..de5af1d 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -883,6 +883,7 @@ OBJS-$(CONFIG_LIBSHINE_ENCODER) += libshine.o OBJS-$(CONFIG_LIBSPEEX_DECODER) += libspeexdec.o OBJS-$(CONFIG_LIBSPEEX_ENCODER) += libspeexenc.o OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o +OBJS-$(CONFIG_LIBTURING_ENCODER) += libturing.o OBJS-$(CONFIG_LIBTWOLAME_ENCODER) += libtwolame.o OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER) += libvo-amrwbenc.o OBJS-$(CONFIG_LIBVORBIS_DECODER) += libvorbisdec.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index f92b2b7..f650591 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -615,6 +615,7 @@ void avcodec_register_all(void) REGISTER_ENCODER(LIBSHINE, libshine); REGISTER_ENCDEC (LIBSPEEX, libspeex);