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