From patchwork Mon Sep 26 18:42:50 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sasi Inguva X-Patchwork-Id: 736 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.66 with SMTP id o63csp2066225vsd; Mon, 26 Sep 2016 11:44:32 -0700 (PDT) X-Received: by 10.28.56.198 with SMTP id f189mr16807338wma.129.1474915472684; Mon, 26 Sep 2016 11:44:32 -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 uw3si15372241wjb.68.2016.09.26.11.44.24; Mon, 26 Sep 2016 11:44:32 -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=@google.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 F2478689E5D; Mon, 26 Sep 2016 21:44:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pa0-f41.google.com (mail-pa0-f41.google.com [209.85.220.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E574E689AE2 for ; Mon, 26 Sep 2016 21:43:57 +0300 (EEST) Received: by mail-pa0-f41.google.com with SMTP id gp7so8434777pac.1 for ; Mon, 26 Sep 2016 11:44:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oVdEo1/RJ9+8X4jV7SZWhPUPuAZfwShMQ/DhCbJ20GE=; b=KbZvSdoIZQtmdLs1c6rhXEEphq37J9r8CKZYpSWeNbBp5U5AWpKoMXzif5CK8qR7gc gtaBSyFC+OeKkM4gfEwMH14znJ7bGVInLv1wBQANG24ojbnXvqM8oF0MHTf1O3UHAe0I zAMqS8UUW0YuQorGgS5sz4i99E78asJl8d6ZXVTvk6kt9ttqb0QajQosQh/XxpbRsUb5 nAoXDgKxt6eCWb6pW9T108lPeJ8KaTLWQYuMlmE7ZR4PBiE6njxQc5i/z9IPOW5Vj7Cs P0ZAdeuMtbPLiav/WQqSemucJt2lbT1j+qRALzt0f5v4Z68lwT+LKt+NXhr9uu33HQ8j V94A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oVdEo1/RJ9+8X4jV7SZWhPUPuAZfwShMQ/DhCbJ20GE=; b=V/IJ7OH7eCjYvPrlQvfxxYTQfuy7QTd8ApmS3wU+8S6F6aACpPwlCr1F86mSh9pCzf 88MHKOrC2Kf3lh6ac+8slnEDWM8nCNjztO8f2xVZub1rJc44YavBOl3lynCTrhb+yg8d I0jZaQhWCjfHBB1O893phXHw5fV+itvBo+af9sL4HnlpgZ2IBwLn8aa3+8rc3qCqXjEE wqjcI/nMbiQRxnha/XNIlxg0QtBJs/CjbRi2Q/IYMC2oue0H+OZdX9rs6sVSvUNn8fEO RRjoliE+ZmKX+mrJCqc7zRkfuOTNdCbCsn+UeEa5BcXuljk+SJYZYYYbT2x8y1cubPeF Mvnw== X-Gm-Message-State: AA6/9RkFYqQbd7qbjuREE5AAM7sxSh3SD20q+A5Ko7Qq3gigdibD1cvOAJuHn66BFpBl0PN4 X-Received: by 10.66.8.37 with SMTP id o5mr24503808paa.96.1474915453441; Mon, 26 Sep 2016 11:44:13 -0700 (PDT) Received: from isasi.mtv.corp.google.com ([172.27.82.89]) by smtp.gmail.com with ESMTPSA id w9sm32811476pfg.34.2016.09.26.11.44.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 26 Sep 2016 11:44:12 -0700 (PDT) From: Sasi Inguva To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Sep 2016 11:42:50 -0700 Message-Id: <1474915372-25376-1-git-send-email-isasi@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <20160924015511.GT4975@nb4> References: <20160924015511.GT4975@nb4> Subject: [FFmpeg-devel] [PATCH 1/3] lavc/utils.c: Subtract skip_samples when frame is DISCARDed. 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: Sasi Inguva MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Sasi Inguva --- libavcodec/utils.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index b0345b6..6323156 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -2320,7 +2320,6 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, uint32_t discard_padding = 0; uint8_t skip_reason = 0; uint8_t discard_reason = 0; - int demuxer_skip_samples = 0; // copy to ensure we do not change avpkt AVPacket tmp = *avpkt; int did_split = av_packet_split_side_data(&tmp); @@ -2328,7 +2327,6 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, if (ret < 0) goto fail; - demuxer_skip_samples = avctx->internal->skip_samples; avctx->internal->pkt = &tmp; if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) ret = ff_thread_decode_frame(avctx, frame, got_frame_ptr, &tmp); @@ -2353,13 +2351,6 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, frame->sample_rate = avctx->sample_rate; } - - if (frame->flags & AV_FRAME_FLAG_DISCARD) { - // If using discard frame flag, ignore skip_samples set by the decoder. - avctx->internal->skip_samples = demuxer_skip_samples; - *got_frame_ptr = 0; - } - side= av_packet_get_side_data(avctx->internal->pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_size); if(side && side_size>=10) { avctx->internal->skip_samples = AV_RL32(side); @@ -2369,6 +2360,13 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, skip_reason = AV_RL8(side + 8); discard_reason = AV_RL8(side + 9); } + + if ((frame->flags & AV_FRAME_FLAG_DISCARD) && *got_frame_ptr && + !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { + avctx->internal->skip_samples -= frame->nb_samples; + *got_frame_ptr = 0; + } + if (avctx->internal->skip_samples > 0 && *got_frame_ptr && !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { if(frame->nb_samples <= avctx->internal->skip_samples){