From patchwork Tue Jul 20 12:07:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Liu X-Patchwork-Id: 28982 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp5275838ios; Tue, 20 Jul 2021 05:07:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzl49KNWfr/xZ1UMbvm72zwvargRH0YHKqwjC4GRg90rnXtHLrC2/5e2xSFuM5JZBIeXXne X-Received: by 2002:a17:906:6c8f:: with SMTP id s15mr32691935ejr.498.1626782878940; Tue, 20 Jul 2021 05:07:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626782878; cv=none; d=google.com; s=arc-20160816; b=EqunDlZWR5mtKkYPaw/vpipvCbwMUBOmhukC6RvN9/LWfmTn7RvgAhUIyg+3jRboT6 lkj1pEY4ebE38w5CT293/i3gmeCeJ/pPUGNuuaxH/D9+ugpan6QjSveC0p4zz5qaLJZU jaTxRiGHlQwpG2pRH+kOq4dZbeAgNBG44lmuMminSDaBaoE6Xlgv41aXWQZ//J1r90yo IKj+jPkqkG2TiPgurv6rnMuHycUxaSGr1HmXpcXkx4VATT1BXDA7hZZwoz1dy7g29sYS jPvpJyz0Nr6w4iF1BtDrHrSOifcK4NUvXQH8AN5P4JyiI0gyZ0O2bFRXJD7H9R9t87Wg feDw== 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:feedback-id:mime-version:message-id:date :to:from:delivered-to; bh=Kq8vl00R5Supx/b6u/ei94K1dTv28lf8gZZGf65T2xg=; b=p/7FJ67m7q5ZDqpI2gvRl07wbudOVdLO/jIJ4jBMqDwWZl7Mk2apA0FxdCsjHsCDNf qZP+9kybaZcoHeRiHpTXPPGCrlZmWPjt3huRSY+TD6YLoh9AWiTo2JDEBQMtB5x1l0IX Fi38m4i1k1Iyjpb5OoN77/ukjeBa52xfxO2BKkXYS0ohjAWPaiiVArKrBYDKYWm3XsrL WgdPryq8Hef67ZKghB0y1xywPaLy8Zikp66x+3aUrMW5aZpjRfo8ZVsefW92cGhp+ZnQ NnDy5oAMOaVRAJcadMS6sJpbOswhw+H+6NLM7ykEvYAV7fPpbkAlKDRuWxtJSjrsCo1h 6GyA== ARC-Authentication-Results: i=1; mx.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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kuaishou.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u26si2475243edo.182.2021.07.20.05.07.58; Tue, 20 Jul 2021 05:07:58 -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; 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=NONE dis=NONE) header.from=kuaishou.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F309D6805D6; Tue, 20 Jul 2021 15:07:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbg.qq.com (smtpbg127.qq.com [109.244.180.96]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 73759680A2B for ; Tue, 20 Jul 2021 15:07:47 +0300 (EEST) X-QQ-mid: bizesmtp43t1626782859tyxypk8b Received: from localhost (unknown [103.107.216.231]) by esmtp6.qq.com (ESMTP) with id ; Tue, 20 Jul 2021 20:07:37 +0800 (CST) X-QQ-SSF: 01100000001000Z0Z000B00A0020000 X-QQ-FEAT: FsG0r2mBeluRlHdXcrMZ+w5fYqp0CBAi6TCjJiJGHQdckS250krc+dx1Iejm4 fKQRdcOpPjQ346n6+BXrOKqmGPvukui961J1E4s0FXIkZj/ISN3fg6lJfZv37uM4FFzdTQJ QM+SWMpBnC0UsMqDbzNLf2UHfwci1ZJaeqwume+9jrGRiEie1OkH7Un9d32Cju1wxNe0oz4 NI+I2FVIluJXH5N0dLTgZCoJ20woByXtKaNzGYZln/rePz23qA3FGFp2t3K2MPK+cr4i7cY M1rSDlb3DniN0Lv8Eg6p8VQ0XCbTL3tKcxqOlAaeGz4gikDszxHiSy26qJw2IVw04OnSH/9 4O10hRD X-QQ-GoodBg: 0 X-QQ-CSender: lq@chinaffmpeg.org From: Steven Liu To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jul 2021 20:07:36 +0800 Message-Id: <20210720120736.46508-1-liuqi05@kuaishou.com> X-Mailer: git-send-email 2.25.0 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:chinaffmpeg.org:qybgspam:qybgspam1 Subject: [FFmpeg-devel] [PATCH] avformat/hlsenc: minus subtitle streams count when subtitle stream between video and audio streams 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: Steven Liu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: g8eGZ39DhD56 because subtitles streams will be written to webvtt m3u8 list so the stream index should minus subtitles streams count when subtitle between audio and video streams. testcase: before patch: ffmpeg -i input -map 0:a:0 -map 0:s:0 -map 0:v:0 -f hls aaaa.m3u8 will EXC_BAD_ACCESS after patch: ffmpeg -i input -map 0:a:0 -map 0:s:0 -map 0:v:0 -f hls aaaa.m3u8 will ok Signed-off-by: Steven Liu --- libavformat/hlsenc.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 5272ecabbb..28bfa73618 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -2292,6 +2292,7 @@ static int hls_write_header(AVFormatContext *s) VariantStream *vs = NULL; for (i = 0; i < hls->nb_varstreams; i++) { + int subtitle_streams = 0; vs = &hls->var_streams[i]; ret = avformat_write_header(vs->avf, NULL); @@ -2312,10 +2313,11 @@ static int hls_write_header(AVFormatContext *s) } if (outer_st->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) - inner_st = vs->avf->streams[j]; - else if (vs->vtt_avf) + inner_st = vs->avf->streams[j - subtitle_streams]; + else if (vs->vtt_avf) { inner_st = vs->vtt_avf->streams[0]; - else { + subtitle_streams++; + } else { /* We have a subtitle stream, when the user does not want one */ inner_st = NULL; continue; @@ -2402,6 +2404,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) int is_ref_pkt = 1; int ret = 0, can_split = 1, i, j; int stream_index = 0; + int subtitle_streams = 0; int range_length = 0; const char *proto = NULL; int use_temp_file = 0; @@ -2411,13 +2414,16 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) for (i = 0; i < hls->nb_varstreams; i++) { vs = &hls->var_streams[i]; for (j = 0; j < vs->nb_streams; j++) { + if (vs->streams[j]->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) { + subtitle_streams++; + } if (vs->streams[j] == st) { if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) { oc = vs->vtt_avf; stream_index = 0; } else { oc = vs->avf; - stream_index = j; + stream_index = j - subtitle_streams; } break; } @@ -2646,7 +2652,6 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (ret < 0) { return ret; } - } vs->packets_written++;