On 28/07/15 16:23, Vittorio Giovara wrote:
> From: Arttu Ylä-Outinen <arttu.yla-outi...@tut.fi>
> 
> Signed-off-by: Vittorio Giovara <vittorio.giov...@gmail.com>
> ---
>  Changelog               |   1 +
>  configure               |   4 +
>  doc/encoders.texi       |  24 +++++
>  doc/general.texi        |  10 +-
>  libavcodec/Makefile     |   1 +
>  libavcodec/allcodecs.c  |   1 +
>  libavcodec/libkvazaar.c | 258 
> ++++++++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/version.h    |   4 +-
>  8 files changed, 300 insertions(+), 3 deletions(-)
>  create mode 100644 libavcodec/libkvazaar.c
> 
> diff --git a/Changelog b/Changelog
> index 26efbf3..b91f6ee 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -41,6 +41,7 @@ version <next>:
>  - Intel QSV-accelerated MPEG-2 video and HEVC encoding
>  - bitstream filter for converting HEVC from MP4 to Annex B
>  - Intel QSV-accelerated MPEG-2 video and HEVC decoding
> +- libkvazaar HEVC encoder
>  
>  
>  version 11:
> diff --git a/configure b/configure
> index 88c167f..ad5233f 100755
> --- a/configure
> +++ b/configure
> @@ -191,6 +191,7 @@ External library support:
>    --enable-libfreetype     enable libfreetype [no]
>    --enable-libgsm          enable GSM de/encoding via libgsm [no]
>    --enable-libilbc         enable iLBC de/encoding via libilbc [no]
> +  --enable-libkvazaar      enable HEVC encoding via libkvazaar [no]
>    --enable-libmfx          enable HW acceleration through libmfx
>    --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
>    --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb 
> [no]
> @@ -1166,6 +1167,7 @@ EXTERNAL_LIBRARY_LIST="
>      libfreetype
>      libgsm
>      libilbc
> +    libkvazaar
>      libmfx
>      libmp3lame
>      libopencore_amrnb
> @@ -2099,6 +2101,7 @@ libgsm_ms_decoder_deps="libgsm"
>  libgsm_ms_encoder_deps="libgsm"
>  libilbc_decoder_deps="libilbc"
>  libilbc_encoder_deps="libilbc"
> +libkvazaar_encoder_deps="libkvazaar"
>  libmp3lame_encoder_deps="libmp3lame"
>  libmp3lame_encoder_select="audio_frame_queue"
>  libopencore_amrnb_decoder_deps="libopencore_amrnb"
> @@ -4336,6 +4339,7 @@ enabled libgsm            && { for gsm_hdr in "gsm.h" 
> "gsm/gsm.h"; do
>                                     check_lib "${gsm_hdr}" gsm_create -lgsm 
> && break;
>                                 done || die "ERROR: libgsm not found"; }
>  enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode 
> -lilbc
> +enabled libkvazaar        && require2 libkvazaar kvazaar.h kvz_api_get 
> -lkvazaar

kvazaar should have a pkg-conf file.

> +#include "libavutil/avassert.h"

This facility is abused here.

> +        av_assert0(frame->width  == ctx->config->width);
> +        av_assert0(frame->height == ctx->config->height);
> +        av_assert0(frame->format == avctx->pix_fmt);

This may happen normally, do not crash this way, return a clear message
stating that it is not currently supported.

> +
> +        // Allocate input picture for kvazaar.
> +        img_in = ctx->api->picture_alloc(frame->width, frame->height);
> +        if (!img_in) {
> +            av_log(avctx, AV_LOG_ERROR, "Failed to allocate picture.\n");
> +            retval = AVERROR(ENOMEM);
> +            goto done;
> +        }

I wonder if adding cropping support in kvz would avoid having this.

> +        // Copy pixels from frame to img_in.
> +        for (i = 0; i < 3; ++i) {
> +            uint8_t *dst = img_in->data[i];
> +            uint8_t *src = frame->data[i];
> +            int width  = i == 0 ? frame->width  : frame->width  / 2;
> +            int height = i == 0 ? frame->height : frame->height / 2;
> +            int y = 0;
> +            for (y = 0; y < height; y++) {
> +                memcpy(dst, src, width);
> +                src += frame->linesize[i];
> +                dst += width;
> +            }
> +        }

I think we have a function for that or we should and last year I think I
did something at least in the command line encoder to avoid this copy.

lu
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to