From patchwork Tue Sep 26 00:36:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 5273 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.36.26 with SMTP id f26csp3230344jaa; Mon, 25 Sep 2017 17:43:30 -0700 (PDT) X-Received: by 10.223.188.70 with SMTP id a6mr7411633wrh.224.1506386610825; Mon, 25 Sep 2017 17:43:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506386610; cv=none; d=google.com; s=arc-20160816; b=wOd1m/5rx8Xn8LxB8xCSuJXdzHrlPFBDmQBpPBwVYCpnttH/wAbYaLwKUou/B6L+kz Gxkk4iRWk7ShAE9kwj4Vp82zfv3FwKoJNVbnI3u6yeTElF4o3fG+Oo6+IW1vI+hdB4Zx ujvYZpFxjIcq8XRGGnwi3DM8nA2KI+uP4RDdNMwCfrJaQkH5SEWmHr2SUmJbeT6Pu+15 j7k6MqxS4aBnzAO7Gsromz5xWnkvXNMsqUclEkKbwvxqx04OEFyPLngAKPqJX08BLJft 304QiUG9ewA0czZBmrsfmcjqYRBlNF81twHT1EohAJ37KHvgj5/i9lZRZuMumanarPvZ 3snw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=0A3RZk2mKXnl3v/krF77YxXA3+z0zgIDVtOKaySq2IA=; b=TB/qRaotXAk05S6A/1sN1XqiHMlEe418y7PCAQVwNnTEWntejiYSx5bhBJyi7xAELi z/M7+h/WeMddqWjfHYWQPamiKyVCeiz2mrzSby3Hoy2oUhl8so1U5VEOU1kMN0IRdL2B NgW1wkJRwe81QbXhrMJeplSMcB7Rm3APhvyTug/o0vJCOI3Lsax8EE2QQF2FgwFfyg5Q PgCP0AaanMocSFKc0E7cOhn/J/avEf9Y6NPTHvak3sdBxdv1olDEYFA7Cv9PejUdmFFj k02GQ4BS9UhnRoNLYyfGy+Piu3azjIFM+2w/7KVtgzRxdYX2r6B/F/DM4ghMbd9g00aB KYiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=vbIwmcKt; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a5si6336134wra.459.2017.09.25.17.43.30; Mon, 25 Sep 2017 17:43:30 -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=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=vbIwmcKt; 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 3128B689AE2; Tue, 26 Sep 2017 03:43:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f169.google.com (mail-pf0-f169.google.com [209.85.192.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D3D35689ACC for ; Tue, 26 Sep 2017 03:43:11 +0300 (EEST) Received: by mail-pf0-f169.google.com with SMTP id l188so4691453pfc.6 for ; Mon, 25 Sep 2017 17:43:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=23p3S2eg+hc8xUweikuari1GA7fPw1xqv6SEXXTcr10=; b=vbIwmcKt6iy1rpQdRKxeoeuD4IlpyoDk3MgpD2zAzYe8WBKH4lGMMCWMmxdhydGkQ7 TxKhH9n4JERanZ2SzrHgLduF6okqICGxZBMY1D5OWp31Phys6FzhmhSY0aP+wl+7B3Ps unRHWnBYc2+C+jcCoqs/KvZlElGOfkczwYD8AhK6Pl48DX6vzs00NgzCk5IJREQCQjhL beEu284uTv3Oh9vw6q3PSvv2wUwx0brH3u++l8IHfvHBorH1hD/ptfgIuco0pt4zjwYi 9BRJZ9hL2twfBBy6WWDyu2WmGnyAx1aR9yL31QuT16w1xP51S3bde2/zpGyI1pZNTIKH DTbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=23p3S2eg+hc8xUweikuari1GA7fPw1xqv6SEXXTcr10=; b=epGJnLa3IQ7IYlOr2Gx/1ClQwf0NOO/KkJmPiNsn7w6a13LV8X4dkzCXZ/zS/TGMfT WpLskAS7vrIh/YZwZweCFnq18XjYcK7Few81SORQHWVo7LIah1PrlxD4P7jM2LS2wMso OvoEnH9OM6yu85FR5li08R4jTypWuhH9+045Mev6/uFhu6Qnu07D6hnMRdH2HE73+pxD E90ShMofwA87GvsLGs7fYheTS+7v4bdLXzlR3l4RDsAz0DY5roP2UyEq8qhQJzr0mFD2 57KheDHalm5woG8eKL8ABK+HmeqSAVALPhCJFjycscAekU4bGUB1TqwA2V1vewNKqHIw HVbA== X-Gm-Message-State: AHPjjUjEu90D84RCwGoVsNhpkorqLXMyFTRIRi5owIHBRIFoB2Hf9cmt 36XVMhmKyGrZ1qaTWjNQW0cvzsOj X-Google-Smtp-Source: AOwi7QANM0GLXtLEZG8AV05mHDoxSPUPWhSHMvbjJph1J0/+568ymxmAZOxfJi45mN0A14y0nsmCMA== X-Received: by 10.84.139.67 with SMTP id 61mr9083735plq.51.1506386211517; Mon, 25 Sep 2017 17:36:51 -0700 (PDT) Received: from tmm1-macbook.local.net (c-73-252-174-83.hsd1.ca.comcast.net. [73.252.174.83]) by smtp.gmail.com with ESMTPSA id n18sm12483164pgd.69.2017.09.25.17.36.50 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 25 Sep 2017 17:36:51 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 25 Sep 2017 17:36:31 -0700 Message-Id: <20170926003631.55571-9-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.13.5 (Apple Git-94) In-Reply-To: <20170926003631.55571-1-ffmpeg@tmm1.net> References: <20170926003631.55571-1-ffmpeg@tmm1.net> Subject: [FFmpeg-devel] [PATCH 9/9] avcodec/videotoolbox: create avcC even when h264 extradata is missing 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 Cc: Aman Gupta MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta Removes the avctx->extradata_size requirement when creating avcC, since avctx->extradata is only used in the esds code path. This fixes an issue where the VideoToolbox decoder would not work unless avformat_find_stream_info() was called. --- libavcodec/videotoolbox.c | 65 +++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 6c8477c2ce..de51b9a7c4 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -538,46 +538,45 @@ static CFDictionaryRef videotoolbox_decoder_config_create(CMVideoCodecType codec kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder, kCFBooleanTrue); - if (avctx->extradata_size) { - CFMutableDictionaryRef avc_info; - CFDataRef data = NULL; + CFMutableDictionaryRef avc_info; + CFDataRef data = NULL; - avc_info = CFDictionaryCreateMutable(kCFAllocatorDefault, - 1, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); + avc_info = CFDictionaryCreateMutable(kCFAllocatorDefault, + 1, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); - switch (codec_type) { - case kCMVideoCodecType_MPEG4Video : + switch (codec_type) { + case kCMVideoCodecType_MPEG4Video: + if (avctx->extradata_size) data = videotoolbox_esds_extradata_create(avctx); - if (data) - CFDictionarySetValue(avc_info, CFSTR("esds"), data); - break; - case kCMVideoCodecType_H264 : { - H264Context *h = avctx->priv_data; - if (TARGET_OS_IPHONE && h->ps.sps->frame_mbs_only_flag == 0) { - av_log(avctx, AV_LOG_ERROR, "VideoToolbox cannot decode interlaced fields on iOS\n"); - CFRelease(avc_info); - goto fail; - } - data = ff_videotoolbox_avcc_extradata_create(avctx); - if (data) - CFDictionarySetValue(avc_info, CFSTR("avcC"), data); - break; - } - default: - break; + if (data) + CFDictionarySetValue(avc_info, CFSTR("esds"), data); + break; + case kCMVideoCodecType_H264: { + H264Context *h = avctx->priv_data; + if (TARGET_OS_IPHONE && h->ps.sps->frame_mbs_only_flag == 0) { + av_log(avctx, AV_LOG_ERROR, "VideoToolbox cannot decode interlaced fields on iOS\n"); + CFRelease(avc_info); + goto fail; } + data = ff_videotoolbox_avcc_extradata_create(avctx); + if (data) + CFDictionarySetValue(avc_info, CFSTR("avcC"), data); + break; + } + default: + break; + } - CFDictionarySetValue(config_info, - kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms, - avc_info); + CFDictionarySetValue(config_info, + kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms, + avc_info); - if (data) - CFRelease(data); + if (data) + CFRelease(data); - CFRelease(avc_info); - } + CFRelease(avc_info); return config_info; fail: