On 2015-08-24 14:29, Vittorio Giovara wrote:
On Tue, Jul 28, 2015 at 6:56 PM, Luca Barbato <[email protected]> wrote:
On 28/07/15 16:23, Vittorio Giovara wrote:
From: Arttu Ylä-Outinen <[email protected]>
Signed-off-by: Vittorio Giovara <[email protected]>
---
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.
We have one now.
+#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.
I'll fix that. When would the dimensions of the input video actually
change in the middle? I tried using images of different sizes as input
to avconv but it didn't trigger those asserts.
+
+ // 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.
It looks like av_copy_image could be used for copying the pixels. Should
I change this to use that function or is it better to wait until Kvazaar
has the required changes for avoiding the copy entirely?
ping, is there any update on this?
(cc'ing the authors in case they missed these comments)
Sorry for not replying sooner.
- Arttu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel