From patchwork Tue Jul 26 18:31:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Storsj=C3=B6?= X-Patchwork-Id: 10 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.67 with SMTP id o64csp1445513vsd; Tue, 26 Jul 2016 11:31:40 -0700 (PDT) X-Received: by 10.28.238.88 with SMTP id m85mr26392256wmh.92.1469557900842; Tue, 26 Jul 2016 11:31:40 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e8si2669441wmi.30.2016.07.26.11.31.40; Tue, 26 Jul 2016 11:31:40 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@martin-st.20150623.gappssmtp.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4852068A4E8; Tue, 26 Jul 2016 21:31:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf0-f67.google.com (mail-lf0-f67.google.com [209.85.215.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3B50D68A4D0 for ; Tue, 26 Jul 2016 21:31:19 +0300 (EEST) Received: by mail-lf0-f67.google.com with SMTP id l89so832393lfi.2 for ; Tue, 26 Jul 2016 11:31:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=martin-st.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=1O/2Y1oz2FPvmry7MhakTVbAu1bVRGT62oQv6Gtt2qs=; b=PPQD9paugMFJekDKj5kkGvyzqv93u0vGA9DUqgcJAQQWwMJPsCOBYwAxxoq4uOiNRT 7NFPloqy76/3fl/Uh2HtsEmt+eN0dO3lePpLW5I7bmvCau/f3GmRvnCAR5/s62tL+0jj rpgpT+nbuSTXt5C9ACP8mbrtdLyTDzsbRgr0TpdOxzKV9M3YcRWYcNllw1Jd1/wRgzvv zvaaLqJs+IX1+VGQWOhX7eqT7LILc7FAVNdx2/hDb5KN5GTDCEkDYApCjINsReucguIU 8doHMjXj85osYetCXVnjoxzYwKkCaU5rWLvbTiUCsz+9TK/BHGVZF208ul4OY0Jd2CNx rrWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=1O/2Y1oz2FPvmry7MhakTVbAu1bVRGT62oQv6Gtt2qs=; b=IDzrvEX8M/Jexqp2/T/QR1inuOKj8Ed76QtPMu08RqdVIG7YgThriSKPIdu8r9+sLt ih6T6liMXYlRNlD5XzLN/YbwKgg52vHLHXz1YEKQCjMOB10SvY16f/mWA5wP1xG6GNi+ h53ToDAD5JL3FJntMM5BG9YmzhlIqvdsui9wFW1Ax/bJqJmxfZiAJUqAQabQ3pm0WsO8 FztnKyu/w9n4zATH0u/sFEAqP7/OKUW63IOHH88+6rUhmCFsaCTirADPCui77+fPLWj/ pL5J8f4u1lQATJiWwLIRBwz4HGbI2X3l/UVktXUWR6ctBL9+QPVw7EN8KuSezdIURsz5 UQMg== X-Gm-Message-State: AEkoouuJDbQc7j4A3XsbcnzuOkp5afroP73z5ejH6nQyGbJT4vzw0va5QPWAiWdhObhnbQ== X-Received: by 10.25.127.214 with SMTP id a205mr10105773lfd.142.1469557882362; Tue, 26 Jul 2016 11:31:22 -0700 (PDT) Received: from localhost ([2001:470:28:11:543d:d314:4f6b:cc99]) by smtp.gmail.com with ESMTPSA id r196sm316194lfd.41.2016.07.26.11.31.21 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 26 Jul 2016 11:31:21 -0700 (PDT) From: =?UTF-8?q?Martin=20Storsj=C3=B6?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 26 Jul 2016 21:31:18 +0300 Message-Id: <1469557878-55883-2-git-send-email-martin@martin.st> X-Mailer: git-send-email 2.7.4 (Apple Git-66) In-Reply-To: <1469557878-55883-1-git-send-email-martin@martin.st> References: <1469557878-55883-1-git-send-email-martin@martin.st> Subject: [FFmpeg-devel] [PATCH 2/2] libopenh264: Support building with the 1.6 release X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This fixes trac issue #5417. This is cherry-picked from libav commit d825b1a5306576dcd0553b7d0d24a3a46ad92864. --- Updated the commit message to mention the ticket number. --- libavcodec/libopenh264dec.c | 2 ++ libavcodec/libopenh264enc.c | 26 ++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libavcodec/libopenh264dec.c b/libavcodec/libopenh264dec.c index f642082..6af60af 100644 --- a/libavcodec/libopenh264dec.c +++ b/libavcodec/libopenh264dec.c @@ -90,7 +90,9 @@ static av_cold int svc_decode_init(AVCodecContext *avctx) (*s->decoder)->SetOption(s->decoder, DECODER_OPTION_TRACE_CALLBACK, (void *)&callback_function); (*s->decoder)->SetOption(s->decoder, DECODER_OPTION_TRACE_CALLBACK_CONTEXT, (void *)&avctx); +#if !OPENH264_VER_AT_LEAST(1, 6) param.eOutputColorFormat = videoFormatI420; +#endif param.eEcActiveIdc = ERROR_CON_DISABLE; param.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT; diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index d27fc41..07af31d 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -33,6 +33,10 @@ #include "internal.h" #include "libopenh264.h" +#if !OPENH264_VER_AT_LEAST(1, 6) +#define SM_SIZELIMITED_SLICE SM_DYN_SLICE +#endif + typedef struct SVCContext { const AVClass *av_class; ISVCEncoder *encoder; @@ -48,11 +52,20 @@ typedef struct SVCContext { #define OFFSET(x) offsetof(SVCContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { +#if OPENH264_VER_AT_LEAST(1, 6) + { "slice_mode", "set slice mode", OFFSET(slice_mode), AV_OPT_TYPE_INT, { .i64 = SM_FIXEDSLCNUM_SLICE }, SM_SINGLE_SLICE, SM_RESERVED, VE, "slice_mode" }, +#else { "slice_mode", "set slice mode", OFFSET(slice_mode), AV_OPT_TYPE_INT, { .i64 = SM_AUTO_SLICE }, SM_SINGLE_SLICE, SM_RESERVED, VE, "slice_mode" }, +#endif { "fixed", "a fixed number of slices", 0, AV_OPT_TYPE_CONST, { .i64 = SM_FIXEDSLCNUM_SLICE }, 0, 0, VE, "slice_mode" }, +#if OPENH264_VER_AT_LEAST(1, 6) + { "dyn", "Size limited (compatibility name)", 0, AV_OPT_TYPE_CONST, { .i64 = SM_SIZELIMITED_SLICE }, 0, 0, VE, "slice_mode" }, + { "sizelimited", "Size limited", 0, AV_OPT_TYPE_CONST, { .i64 = SM_SIZELIMITED_SLICE }, 0, 0, VE, "slice_mode" }, +#else { "rowmb", "one slice per row of macroblocks", 0, AV_OPT_TYPE_CONST, { .i64 = SM_ROWMB_SLICE }, 0, 0, VE, "slice_mode" }, { "auto", "automatic number of slices according to number of threads", 0, AV_OPT_TYPE_CONST, { .i64 = SM_AUTO_SLICE }, 0, 0, VE, "slice_mode" }, { "dyn", "Dynamic slicing", 0, AV_OPT_TYPE_CONST, { .i64 = SM_DYN_SLICE }, 0, 0, VE, "slice_mode" }, +#endif { "loopfilter", "enable loop filter", OFFSET(loopfilter), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE }, { "profile", "set profile restrictions", OFFSET(profile), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, { "max_nal_size", "set maximum NAL size in bytes", OFFSET(max_nal_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, @@ -159,15 +172,24 @@ FF_ENABLE_DEPRECATION_WARNINGS s->slice_mode = SM_FIXEDSLCNUM_SLICE; if (s->max_nal_size) - s->slice_mode = SM_DYN_SLICE; + s->slice_mode = SM_SIZELIMITED_SLICE; +#if OPENH264_VER_AT_LEAST(1, 6) + param.sSpatialLayers[0].sSliceArgument.uiSliceMode = s->slice_mode; + param.sSpatialLayers[0].sSliceArgument.uiSliceNum = avctx->slices; +#else param.sSpatialLayers[0].sSliceCfg.uiSliceMode = s->slice_mode; param.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceNum = avctx->slices; +#endif - if (s->slice_mode == SM_DYN_SLICE) { + if (s->slice_mode == SM_SIZELIMITED_SLICE) { if (s->max_nal_size){ param.uiMaxNalSize = s->max_nal_size; +#if OPENH264_VER_AT_LEAST(1, 6) + param.sSpatialLayers[0].sSliceArgument.uiSliceSizeConstraint = s->max_nal_size; +#else param.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = s->max_nal_size; +#endif } else { av_log(avctx, AV_LOG_ERROR, "Invalid -max_nal_size, " "specify a valid max_nal_size to use -slice_mode dyn\n");