From patchwork Tue Dec 10 21:59:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 16714 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id C455844A835 for ; Wed, 11 Dec 2019 00:00:43 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B0DAD68B6F1; Wed, 11 Dec 2019 00:00:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EAFCA68B095 for ; Wed, 11 Dec 2019 00:00:31 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id f129so4888074wmf.2 for ; Tue, 10 Dec 2019 14:00:31 -0800 (PST) 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=6xFKfn3u8xGeCLSff5mamkXMN8Chh30FgBca356QXuA=; b=L2/9woz7mYETyLojnV2nIQ4LkHy1O/gYFqM6VSlXxGd90tFCuld126Wj5vrAqpHaMQ mLrj/y2nQkZ4xy9UNixKZ3s5zueHLaeQVQmjzfs6H/dviSlVm6WRkqpVNxP3UAEX8ZGD UmQMrtC/G9SCNa5V4Ze+sz3ml0u9ivOCh5rgo9XvM+tg2IDnP72n0vIGXNWiengWymQV MRE7YIUHrnJQ8D9eI/+w1ThJE16+s3MzRpZcsapW/5lNYI0PwMwNWDx9UAoxx27L44jz yneTYgnXaPMJLOye94bmFsN0hZRDHM74bWnMd1DoXkP7UvebS91jp5zXsIQo5ePd+o1X QuQw== 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=6xFKfn3u8xGeCLSff5mamkXMN8Chh30FgBca356QXuA=; b=cstt6ip/R4ycKAi9J4ctkMw885ovKb4b60YQx93odhaKv0YOPKPHAIFFThhxsUztPj V/9q9Oln7KmZli7bEeR2rCDYc2LhauS+HR1Qhf9PWfjGScAqxU3mUAJKyIZdgfEgi4RJ Puq1VVqcBGJHd2WyIqWaA0cqbyB04IqNkRVGfA+ISExUWQtMvVgzp6bNZnXzWFmo3m0/ r5SourUIaSxsSweGDEhi5HBqYq35Mcfyu0v9POXA6NuTx/1zlU8rJz8Pz9jeYVuWPvRo iL8pefVZQVThbKQm7AasTKMh6gJiuKA7hGZN8HQFrrHT3odGLX0Ku03jqIyEk+Qm0JC7 75EQ== X-Gm-Message-State: APjAAAUB/VizSaaNuqfHU5a0tcWIOyWfkRvtPTN+/JJucXLfSBXZUTrO BxklJX4Tz2ks5qX/zCYBVzr2OsfJ X-Google-Smtp-Source: APXvYqxdckeb1bicLZdiLO4llwhlBwyvV127t47/ir7uT/qRLhNGL7y05VKKK8X9EJ3W9cQINokTJg== X-Received: by 2002:a1c:a543:: with SMTP id o64mr6247059wme.108.1576015231219; Tue, 10 Dec 2019 14:00:31 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08e23.dynamic.kabel-deutschland.de. [188.192.142.35]) by smtp.gmail.com with ESMTPSA id n129sm3876381wmb.1.2019.12.10.14.00.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2019 14:00:30 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Dec 2019 22:59:51 +0100 Message-Id: <20191210215955.11178-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191210215955.11178-1-andreas.rheinhardt@gmail.com> References: <20191210215955.11178-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/11] avformat/rtpdec_qt: Remove unnecessary AVPacket 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" rtpdec_qt contains an AVPacket inside its context. But actually only three fields of said packet were actually used: data, size and flags. E.g. av_init_packet() effectively only reset the flags. This has been changed: Only fields for the three elements that are actually used are kept; the actual AVPacket has been removed, so that rtpdec_qt no longer relies on sizeof(AVPacket). Signed-off-by: Andreas Rheinhardt --- libavformat/rtpdec_qt.c | 53 +++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/libavformat/rtpdec_qt.c b/libavformat/rtpdec_qt.c index 77a3ce40be..240f1a918c 100644 --- a/libavformat/rtpdec_qt.c +++ b/libavformat/rtpdec_qt.c @@ -34,7 +34,8 @@ #include "libavcodec/get_bits.h" struct PayloadContext { - AVPacket pkt; + uint8_t *data; + int size, flags; int bytes_per_frame, remaining; uint32_t timestamp; }; @@ -51,18 +52,18 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, keyframe; if (qt->remaining) { - int num = qt->pkt.size / qt->bytes_per_frame; + int num = qt->size / qt->bytes_per_frame; if (av_new_packet(pkt, qt->bytes_per_frame)) return AVERROR(ENOMEM); pkt->stream_index = st->index; - pkt->flags = qt->pkt.flags; + pkt->flags = qt->flags; memcpy(pkt->data, - &qt->pkt.data[(num - qt->remaining) * qt->bytes_per_frame], + &qt->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->data); + qt->size = 0; } return qt->remaining > 0; } @@ -171,31 +172,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->size > 0 && qt->timestamp == *timestamp) { int err; - if ((err = av_reallocp(&qt->pkt.data, qt->pkt.size + alen + + if ((err = av_reallocp(&qt->data, qt->size + alen + AV_INPUT_BUFFER_PADDING_SIZE)) < 0) { - qt->pkt.size = 0; + qt->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->data); + qt->flags = 0; + qt->data = av_realloc(NULL, alen + AV_INPUT_BUFFER_PADDING_SIZE); + if (!qt->data) return AVERROR(ENOMEM); - qt->pkt.size = 0; + qt->size = 0; qt->timestamp = *timestamp; } - memcpy(qt->pkt.data + qt->pkt.size, buf + avio_tell(&pb), alen); - qt->pkt.size += alen; + memcpy(qt->data + qt->size, buf + avio_tell(&pb), alen); + qt->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->data, qt->size); if (ret < 0) return ret; - qt->pkt.size = 0; - qt->pkt.data = NULL; + qt->size = 0; + qt->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 +215,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->data); + qt->data = av_realloc(NULL, qt->remaining * qt->bytes_per_frame); + if (!qt->data) { av_packet_unref(pkt); return AVERROR(ENOMEM); } - qt->pkt.size = qt->remaining * qt->bytes_per_frame; - memcpy(qt->pkt.data, + qt->size = qt->remaining * qt->bytes_per_frame; + memcpy(qt->data, buf + avio_tell(&pb) + qt->bytes_per_frame, qt->remaining * qt->bytes_per_frame); - qt->pkt.flags = pkt->flags; + qt->flags = pkt->flags; return 1; } return 0; @@ -237,7 +238,7 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, static void qt_rtp_close(PayloadContext *qt) { - av_freep(&qt->pkt.data); + av_freep(&qt->data); } #define RTP_QT_HANDLER(m, n, s, t) \