From patchwork Fri Mar 5 16:33:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 26169 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:6d42:0:0:0:0:0 with SMTP id i63csp529903ybc; Fri, 5 Mar 2021 08:41:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJzo73wM0hmh5iAP1xRS0/4hSuhdm0QgteMfj4oJfFE8rTIsYoLIJmdt10rvUWFn9JukbQh8 X-Received: by 2002:a17:906:6c93:: with SMTP id s19mr2903556ejr.151.1614962463652; Fri, 05 Mar 2021 08:41:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614962463; cv=none; d=google.com; s=arc-20160816; b=Nuw4aKAHSTJFrrXIApFLAWDGuU91Bu91d5pe7UXq+hi3h4Km7SfCAjrIBWrEWBlp1o CtgO/kLkseZWGQbweljyCuzBJJpHOXLCaPXUWc8BKr2M92ScZPXsXJPiqGQTI1eNWESJ X/Vu/22kDPD3SGUUkJLC2z/JbcbLsiWEGYcfzw72UD3rhaXMJ0LC1mrPI5Foc7otXHul UmTANMYLZW5kY0iWyxIZTXOTz6SSkQtqzXqxByks2Tj6wczk3ovv36cMs6oIQjN6x9Qm yI3Zg7GoNSvDkaZK4968i5rpN4dmFsk8EbY2GVKJhrOjgafrqPV881DW4E8o0yZoSDrT yTSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=0Hx6J82pu7L7orpzHBPvECWBAWqlSpToyfaFgloXBck=; b=xTF3+Wn5n8KDhAgQQBWAjjPThMLDO4Uy0hoyVmMu0wAVpnvzVhTHHKDgkJKV6KNLOY TNhyOn1GxfK5DQ+9SgvN8LAhPErs1R1rTCvuJ83kT+D6xHUzuUPKLmHJRPXnw72XVrH+ bV2wiFqsO8qh1Gxy2TMhXmMGjM8L2127j6Bf9ziADq+tR7k6/SKByKE5T5ca+dF0umao /r4FfngNMdAjSOL2JaqShKm2HmHXjglimodoUzSTGFoOEiCFNZsauY+21reGpaoUzv4C oH4YdNHkpx6ht5idKnwvreiIyAO78WtaA02jSkdbBXE3nLQwUy1jlYOKdMY7sGKd1Aac wsqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=rjZ6Htds; 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 mp41si1638690ejc.10.2021.03.05.08.41.03; Fri, 05 Mar 2021 08:41:03 -0800 (PST) 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=rjZ6Htds; 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 87F3C68ACC4; Fri, 5 Mar 2021 18:36:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C55CA68AC35 for ; Fri, 5 Mar 2021 18:36:01 +0200 (EET) Received: by mail-qt1-f175.google.com with SMTP id d11so2146806qtx.9 for ; Fri, 05 Mar 2021 08:36:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=kdOjtR91a7y0nE6hBQ149jg9Uqy4bBbYf35qiq80+fw=; b=rjZ6HtdsJFhBKt8OaQ+B6SOwe6NEvWWsO6GbxwlMh9m5Qzj90MAf5c+3b9Ez57zT8G c+x6nQnmy4TtdFXuY8Zw71GUuclqQVP6Sdr3qDEtzfC4OG14UqvmS/KDavgIUEIHB1rc bNmZVNb/v+JpsjdmYw1QLXRmoRGE3LnuSxcPUx72I6JDx177LCsAC9IWNMn41iLxnJz5 4oqglBHpoBpuFUHamgwnRJTTNs6uI7gZT8588dR0iKoB2KXL0SNagDmfMXPhYCmoo5Xi GqPrIdhHHcOFopxhoaqm7k0NlB6cqf8u19KewrVh8Z1BNcCbuGQG50S/piJ5UHhR/KvE okAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kdOjtR91a7y0nE6hBQ149jg9Uqy4bBbYf35qiq80+fw=; b=iBz4b7xAfQJpTatH3tKV/vXyv077R0lgIlOSBuTqW9WGDGMbNEmtaAoavr0D6qd3ye GYQt09OxxSvUd+g5DGjFEUhNGip+DzKX6L3ssbdFMq9X18Fs+9JBeSRusbbK5/nd5yc5 pi+WQIJrEB6zzNZd5oUXBsv8mRCPwyLoPKihMpkJ2Q4Kr8ow8K3BSylKPb4/4bCr8b0s elLi+d+o3MLvDfsHxS2Yft/51VuAYTZyn4r+zKDsoLtg7xVFfA4IXUG2yFEB1DQk0l99 7TmNMI3yVRbpcgzyjAcl2hR7YyoBNhuX3qQSRHjRlmRQnpeVLY9UWVgIqsOH9OXFW4xb TNYQ== X-Gm-Message-State: AOAM532e6XFLsq4ZWj4YL3UZq0BY7GAM1l2KVkUs2q9rFikjbr85BONl BcfZvGquzOlNPJsuhLqS3jl7q/KjYWWISg== X-Received: by 2002:ac8:5ec8:: with SMTP id s8mr9513561qtx.256.1614962160015; Fri, 05 Mar 2021 08:36:00 -0800 (PST) Received: from localhost.localdomain ([181.23.89.132]) by smtp.gmail.com with ESMTPSA id b10sm2168494qtt.23.2021.03.05.08.35.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Mar 2021 08:35:59 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 5 Mar 2021 13:33:18 -0300 Message-Id: <20210305163339.63164-28-jamrial@gmail.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210305163339.63164-1-jamrial@gmail.com> References: <20210305163339.63164-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 27/48] avformat/rtpdec: use av_packet_alloc() to allocate packets 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Ckx1gKyQYiBu Content-Length: 8584 Signed-off-by: James Almer --- libavformat/rtpdec.c | 2 +- libavformat/rtpdec_qt.c | 63 ++++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index d592e34893..fd4601e654 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -964,7 +964,7 @@ int ff_parse_fmtp(AVFormatContext *s, int ff_rtp_finalize_packet(AVPacket *pkt, AVIOContext **dyn_buf, int stream_idx) { int ret; - av_init_packet(pkt); + av_packet_unref(pkt); pkt->size = avio_close_dyn_buf(*dyn_buf, &pkt->data); pkt->stream_index = stream_idx; diff --git a/libavformat/rtpdec_qt.c b/libavformat/rtpdec_qt.c index 93bf31746b..de6b12fb04 100644 --- a/libavformat/rtpdec_qt.c +++ b/libavformat/rtpdec_qt.c @@ -34,11 +34,21 @@ #include "libavcodec/get_bits.h" struct PayloadContext { - AVPacket pkt; + AVPacket *pkt; int bytes_per_frame, remaining; uint32_t timestamp; }; +static av_cold int qt_rtp_init(AVFormatContext *ctx, int st_index, + PayloadContext *qt) +{ + qt->pkt = av_packet_alloc(); + if (!qt->pkt) + return AVERROR(ENOMEM); + + return 0; +} + static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, @@ -51,18 +61,18 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, keyframe, ret; if (qt->remaining) { - int num = qt->pkt.size / qt->bytes_per_frame; + int num = qt->pkt->size / qt->bytes_per_frame; if ((ret = av_new_packet(pkt, qt->bytes_per_frame)) < 0) return ret; pkt->stream_index = st->index; - pkt->flags = qt->pkt.flags; + pkt->flags = qt->pkt->flags; memcpy(pkt->data, - &qt->pkt.data[(num - qt->remaining) * qt->bytes_per_frame], + &qt->pkt->data[(num - qt->remaining) * qt->bytes_per_frame], qt->bytes_per_frame); if (--qt->remaining == 0) { - av_freep(&qt->pkt.data); - qt->pkt.size = 0; + av_freep(&qt->pkt->data); + qt->pkt->size = 0; } return qt->remaining > 0; } @@ -171,31 +181,31 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, switch (packing_scheme) { case 3: /* one data packet spread over 1 or multiple RTP packets */ - if (qt->pkt.size > 0 && qt->timestamp == *timestamp) { + if (qt->pkt->size > 0 && qt->timestamp == *timestamp) { int err; - if ((err = av_reallocp(&qt->pkt.data, qt->pkt.size + alen + + if ((err = av_reallocp(&qt->pkt->data, qt->pkt->size + alen + AV_INPUT_BUFFER_PADDING_SIZE)) < 0) { - qt->pkt.size = 0; + qt->pkt->size = 0; return err; } } else { - av_freep(&qt->pkt.data); - av_init_packet(&qt->pkt); - qt->pkt.data = av_realloc(NULL, alen + AV_INPUT_BUFFER_PADDING_SIZE); - if (!qt->pkt.data) + av_freep(&qt->pkt->data); + av_packet_unref(qt->pkt); + qt->pkt->data = av_realloc(NULL, alen + AV_INPUT_BUFFER_PADDING_SIZE); + if (!qt->pkt->data) return AVERROR(ENOMEM); - qt->pkt.size = 0; + qt->pkt->size = 0; qt->timestamp = *timestamp; } - memcpy(qt->pkt.data + qt->pkt.size, buf + avio_tell(&pb), alen); - qt->pkt.size += alen; + memcpy(qt->pkt->data + qt->pkt->size, buf + avio_tell(&pb), alen); + qt->pkt->size += alen; if (has_marker_bit) { - int ret = av_packet_from_data(pkt, qt->pkt.data, qt->pkt.size); + int ret = av_packet_from_data(pkt, qt->pkt->data, qt->pkt->size); if (ret < 0) return ret; - qt->pkt.size = 0; - qt->pkt.data = NULL; + qt->pkt->size = 0; + qt->pkt->data = NULL; pkt->flags = keyframe ? AV_PKT_FLAG_KEY : 0; pkt->stream_index = st->index; memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); @@ -214,17 +224,17 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, pkt->flags = keyframe ? AV_PKT_FLAG_KEY : 0; pkt->stream_index = st->index; if (qt->remaining > 0) { - av_freep(&qt->pkt.data); - qt->pkt.data = av_realloc(NULL, qt->remaining * qt->bytes_per_frame); - if (!qt->pkt.data) { + av_freep(&qt->pkt->data); + qt->pkt->data = av_realloc(NULL, qt->remaining * qt->bytes_per_frame); + if (!qt->pkt->data) { av_packet_unref(pkt); return AVERROR(ENOMEM); } - qt->pkt.size = qt->remaining * qt->bytes_per_frame; - memcpy(qt->pkt.data, + qt->pkt->size = qt->remaining * qt->bytes_per_frame; + memcpy(qt->pkt->data, buf + avio_tell(&pb) + qt->bytes_per_frame, qt->remaining * qt->bytes_per_frame); - qt->pkt.flags = pkt->flags; + qt->pkt->flags = pkt->flags; return 1; } return 0; @@ -237,7 +247,7 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, static void qt_rtp_close(PayloadContext *qt) { - av_freep(&qt->pkt.data); + av_packet_free(&qt->pkt); } #define RTP_QT_HANDLER(m, n, s, t) \ @@ -246,6 +256,7 @@ const RTPDynamicProtocolHandler ff_ ## m ## _rtp_ ## n ## _handler = { \ .codec_type = t, \ .codec_id = AV_CODEC_ID_NONE, \ .priv_data_size = sizeof(PayloadContext), \ + .init = qt_rtp_init, \ .close = qt_rtp_close, \ .parse_packet = qt_rtp_parse_packet, \ }