From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 77F8945D45 for ; Fri, 7 Apr 2023 06:57:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AA9D968A9F0; Fri, 7 Apr 2023 09:56:59 +0300 (EEST) Received: from out162-62-57-137.mail.qq.com (out162-62-57-137.mail.qq.com [162.62.57.137]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 682C86809C7 for ; Fri, 7 Apr 2023 09:56:51 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1680850595; bh=qZUwQVsz/In3nl2KlAbvUAI/aBAmx2vxNDvJA1FBpY0=; h=From:To:Cc:Subject:Date; b=xuQdRdksa5Wq+B9YRj6ydZaWL92EVfo9PuvsJt20KF2ovq/oKCy812x584KW5bUR1 ix5rUES3Y5uJG5OjcbEk5bz+1rqVdipb/q/4TRgLV7a1C8NTjMmfK8oAkO3VJp/Oo7 hhM5I99icFQWCyqR4ibA37855v6vFfTpJ8BUbrL8= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id E2219216; Fri, 07 Apr 2023 14:56:34 +0800 X-QQ-mid: xmsmtpt1680850594tojnnm951 Message-ID: X-QQ-XMAILINFO: MW5hkHoBpWXySETBCfShLJJY6cERidhpu/DJt8GxKWnyYktsy8ptN1KqiVi+w1 P5AHrg+I7A+kaM8T4WbdYFqg3YGxQG4YPA9x4QPu4yDsrSfNroBE4TTR5TzdToCP+W9eXpPV74kI 8cBCqCKveVAxGeBMRLfJ67Q0LhVPjKeCRnoZk8a2/lYeaF9s/7TgpUCfuoGzMnJHdHgvR1aBO2ul 0xh8xfd15HCvYPVMk0V1vqIK9zi2gSJqX9dUVEf7kPtRfPE0D/4rkkFqXgnn53r+6wKC05HJfRFF YRTMs0wgyLDYuCXFRD00NhebwiJj5eSgrTguYuy/6bBHqDe0xe89mWzFEUPTSrtkK7jkxjuncvJF OaZ0sCTNEjw1F8lNqm08Kn8xFH3gHaQasY3JlmQ9Vi3xbIHnCcor8yq0RqNO3h6+Tg7ddKK7L+Bj /Jy3EiEb0OfUtzBU/w4SADdDyePn3tIKAOTkH/UoSmC7OS61XgyvGGYzMc0b2aFVfzs9pcQcUiqc 4aXpSW3AU7dtFte+5r6Aoi4cWi61+PdBqj2Rd/pjDrParEsFZi5ooCp+y0/Yzt0pxJHCyWlobql2 T9z3E/dtljlGy0lcALZmwQhtNUCgdafVVCz0Y2Dg1AgGMEdWXAsjnkO931mVG3W6S4+czVqvTInm wGbflP/Id5GyS/ItuuZZM1K2MrIIFdFhT6UHWkn6Hxoc04UvOplmY7Rth217OZ3bTYjYgW9rkq8b 1ryao063fds4EVan5C5sr/4x627pd2qRddis9VXtU5W1aKMjlImseeQLUXWIrvB43sIv8CaI9QTV lN5l5WVSGgZwgQc6JYSczeerIN0GGpciwP/Wy0GOnrn00L5Q8s/8uQzTEMgDhQeo4gSssKLRQr8h xhPfl6z+OTJwW0JAJO1E8WVWhzG/wz3335JJFJrsOpCG9YLFaTMH1Mv58OAH+wd3dUAU3+neZRk7 TB8gzrZ0dp7F3E4Oe6CvBt1fqrMyWFhG7Oe6HE2Ac= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Apr 2023 22:56:38 +0800 X-OQ-MSGID: <20230407145638.1140813-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat/flvenc: avoid an extra allocate 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: Zhao Zhili Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili --- 1. Change variable type from uint32_t to int64_t. 2. Check the number of streams. I'm not sure the maximum number of streams should be 3 or 4. And the code allowed multiple subtitle/data tracks, I think it's a bug. libavformat/flvenc.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index a7b5efde4b..bcc95ee5c1 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -117,12 +117,9 @@ typedef struct FLVContext { AVCodecParameters *data_par; int flags; + int64_t last_ts[FLV_STREAM_TYPE_NB]; } FLVContext; -typedef struct FLVStreamContext { - int64_t last_ts; ///< last timestamp for each stream -} FLVStreamContext; - static int get_audio_flags(AVFormatContext *s, AVCodecParameters *par) { int flags = (par->bits_per_coded_sample == 16) ? FLV_SAMPLESSIZE_16BIT @@ -609,9 +606,15 @@ static int flv_init(struct AVFormatContext *s) int i; FLVContext *flv = s->priv_data; + if (s->nb_streams > FLV_STREAM_TYPE_NB) { + av_log(s, AV_LOG_ERROR, "invalid number of streams %d\n", + s->nb_streams); + return AVERROR(EINVAL); + } + for (i = 0; i < s->nb_streams; i++) { AVCodecParameters *par = s->streams[i]->codecpar; - FLVStreamContext *sc; + switch (par->codec_type) { case AVMEDIA_TYPE_VIDEO: if (s->streams[i]->avg_frame_rate.den && @@ -675,12 +678,7 @@ static int flv_init(struct AVFormatContext *s) return AVERROR(EINVAL); } avpriv_set_pts_info(s->streams[i], 32, 1, 1000); /* 32 bit pts in ms */ - - sc = av_mallocz(sizeof(FLVStreamContext)); - if (!sc) - return AVERROR(ENOMEM); - s->streams[i]->priv_data = sc; - sc->last_ts = -1; + flv->last_ts[i] = -1; } flv->delay = AV_NOPTS_VALUE; @@ -783,10 +781,9 @@ end: /* Add EOS tag */ for (i = 0; i < s->nb_streams; i++) { AVCodecParameters *par = s->streams[i]->codecpar; - FLVStreamContext *sc = s->streams[i]->priv_data; if (par->codec_type == AVMEDIA_TYPE_VIDEO && (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4)) - put_eos_tag(pb, sc->last_ts, par->codec_id); + put_eos_tag(pb, flv->last_ts[i], par->codec_id); } } @@ -821,7 +818,6 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) AVIOContext *pb = s->pb; AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; FLVContext *flv = s->priv_data; - FLVStreamContext *sc = s->streams[pkt->stream_index]->priv_data; unsigned ts; int size = pkt->size; uint8_t *data = NULL; @@ -919,13 +915,13 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) } /* check Speex packet duration */ - if (par->codec_id == AV_CODEC_ID_SPEEX && ts - sc->last_ts > 160) + if (par->codec_id == AV_CODEC_ID_SPEEX && ts - flv->last_ts[pkt->stream_index] > 160) av_log(s, AV_LOG_WARNING, "Warning: Speex stream has more than " "8 frames per packet. Adobe Flash " "Player cannot handle this!\n"); - if (sc->last_ts < ts) - sc->last_ts = ts; + if (flv->last_ts[pkt->stream_index] < ts) + flv->last_ts[pkt->stream_index] = ts; if (size + flags_size >= 1<<24) { av_log(s, AV_LOG_ERROR, "Too large packet with size %u >= %u\n", -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".