From patchwork Sat Jun 5 20:42:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gustav Grusell X-Patchwork-Id: 28106 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp2244949iof; Sat, 5 Jun 2021 14:41:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxRKd1JOEnkwT3K0VLaKPiqKAenDpKPP76fvb15rCPnfl0xaPYlAca9xsJzlbVjHXWlr0PP X-Received: by 2002:a17:906:cd27:: with SMTP id oz39mr10737915ejb.429.1622929271435; Sat, 05 Jun 2021 14:41:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622929271; cv=none; d=google.com; s=arc-20160816; b=p5DL/wRitxRc0D0lBSi+b2O8ktHq0a9Why2Xcze4TsHFvpl86zLGuztQ01XGE4sZf4 nLJCrK7DY251AkSIloxN+XOQySrXu/vfKYfJg5dXKX3tjE94+2JnTtLS8J36+Ippe5tB +ZVkZieBUrZryp5FsW3hB6kXUYV44IPMrueAakUD5K4GMmu8kVeuqCV2tweG1u6arhc1 rHcNDYEDkSGUCShDzg0wh+eIJ73y47RacBklLXHa2+r7hxHDkac6xZO1J8UpsbEArqfu YaFNqqQR2m0UYyZ9WyjLQr8NkRDu0ptQCj8wC7f2+WvVrdwmn80eV6dDn10mGuiQgrC3 ZMzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=iQY8v8U+9Gmmbmto0eX2dxqAuy/w3pHaxaDMx77QmkU=; b=uNwbLxwLGEmPDZCMtXwZzJNLIRQ+qXwVurQvnqZV93hRtDZ376hh5ZmFn/JaCVAHAo UH2zca1NI0iVWfscnx0T2U+TGqqqi2rslv20iFG9lhZbZwTAtiV2Qx1GEwXmeITXIqQK IL27PCoRw+xHGQXp+32yC0KUJ6pw5UpXriieHRZ1FQg/r1Rlu4nDIQgLdx962XOVd1Jm noID4zp/WpnUjrt4RgrQn9GK9/is5lkBtKHUmjWkIEFTp/Uj75ZuHh92jfMr16brbe/z 8OuDgXoPlKCY70JNudD3yiJ3xIRZXk52z2vE3nY/8/JtQYW8g4ae55MrcxirIAy5gJyb 4hyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=pGjH4zeZ; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r13si8290377eds.77.2021.06.05.14.41.11; Sat, 05 Jun 2021 14:41:11 -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=@gmail.com header.s=20161025 header.b=pGjH4zeZ; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8CFBC68A642; Sun, 6 Jun 2021 00:41:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E209668A642 for ; Sun, 6 Jun 2021 00:41:02 +0300 (EEST) Received: by mail-lf1-f48.google.com with SMTP id p17so18798875lfc.6 for ; Sat, 05 Jun 2021 14:41:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sUEE5IiK81oYi6vmzvXk3HL+Lv8xlpuMpFRzOmrzTGg=; b=pGjH4zeZN4Z834xgzHVgIGXRoJ7T3ALhEdAbWiRQToOhLAUz/Ez2Cx2KcW8zalnmdX xq9KlRouulz5VXF7Pt3WMJEWGWYxaB7yjxmDtYiktCe1M1f78NYA6yXGFDzWo8J79jAb JnNTjpeO70khYI20GvWl9Iu2wNCW96VFboUnAIm6uN8k036cKL6b+JK7WsFJODmovMHb H16Ae9o12lpQNKDc+6V4yzvRTL4OJr+rOCNlsOJ7NYvt613X154+CXvy5TfvJu1JAoom iev/8kKno3sVYII19qvlx3T4r2AbMyehYp6k92bw3hl96+MSzsr3t/edSEeoCrlBH3zW 6oLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sUEE5IiK81oYi6vmzvXk3HL+Lv8xlpuMpFRzOmrzTGg=; b=qg6+xSJrSkK38cJV5EFGLI7qD5uQ+OgjlugD39PdSoWV4yTQYwc3fzqulV2g6RRQes Bi8Mb5N4q8skILFAmv9HmbqLPQN+6TXEJT1psPSl1MDmt57HJu8dM+ZfC7On22Jk9gl6 FPaZFuetijqKcRuIeJiDMzB4cJO1bpFtNDjlJsoTrosze6RBQnJ59EwdEwU2RjAcP/YU OWlmNM83T9dkYV2Wih43rH9XAqLM8d6VdtMUVrzYs0LkNqVpAhil7CJaPUwfcCwzHXtZ a3Y4bAcMmUWdkMcIJP7TuO8x4KbszdQ5WXRxdrCAxiE9e8Zve3Qlc4XkcvCHAwH2JzFG 7xOA== X-Gm-Message-State: AOAM530aBIlBnM+cmGNqQw6dc4xf5xVzlJ3WoCokU6pjb7GDzoxPEXp+ NOSIQSQyM2hMavNzN4+iHEN8BsJwzMb0xA== X-Received: by 2002:a19:c14c:: with SMTP id r73mr3442459lff.230.1622925699189; Sat, 05 Jun 2021 13:41:39 -0700 (PDT) Received: from localhost.localdomain (c80-216-190-179.bredband.tele2.se. [80.216.190.179]) by smtp.googlemail.com with ESMTPSA id m22sm1157466ljp.92.2021.06.05.13.41.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Jun 2021 13:41:38 -0700 (PDT) From: Gustav Grusell To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Jun 2021 22:42:26 +0200 Message-Id: <20210605204226.536754-1-gustav.grusell@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat/hls Implement support for using AVSEEK_FLAG_BACKWARD when seeking X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Gustav Grusell Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: SqhcB46vqJBl Before, seeking in hls streams would always seek to the next keyframe after the given timestamp. With this fix, if AVSEEK_FLAG_BACKWARD is set, seeking will be to the first keyframe of the segment containing the given timestamp. This fixes #7485. Signed-off-by: Gustav Grusell --- libavformat/hls.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libavformat/hls.c b/libavformat/hls.c index 8fc6924c90..fb8c9b071a 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -2197,6 +2197,15 @@ static int hls_read_packet(AVFormatContext *s, AVPacket *pkt) break; } + /* If AVSEEK_FLAG_BACKWARD set and not AVSEEK_FLAG_ANY, + * we return the first keyframe encountered */ + if (pls->seek_flags & AVSEEK_FLAG_BACKWARD && + !(pls->seek_flags & AVSEEK_FLAG_ANY) && + pls->pkt->flags & AV_PKT_FLAG_KEY) { + pls->seek_timestamp = AV_NOPTS_VALUE; + break; + } + tb = get_timebase(pls); ts_diff = av_rescale_rnd(pls->pkt->dts, AV_TIME_BASE, tb.den, AV_ROUND_DOWN) -