From patchwork Thu Feb 4 19:09:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25436 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 C554644A960 for ; Thu, 4 Feb 2021 21:17:50 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AF65868AA8F; Thu, 4 Feb 2021 21:17:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 16D6C68A9A1 for ; Thu, 4 Feb 2021 21:17:44 +0200 (EET) Received: by mail-qt1-f177.google.com with SMTP id w20so3276611qta.0 for ; Thu, 04 Feb 2021 11:17:44 -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=LsRPh5fzs74VkUUl/Wp6A7vEZ7MWTWt3j86xG0KSyCY=; b=gEchnFkeYLWJ1zHpY3NAMT0xz9j/gl94HL3kznY4c6Bhsqz8Uajhk8n+Yvpp8cbOtl ZKYD1RxgZJl7eBG/iHeXyzWJrJNACNd1AWcOAG5cWktchBbqteNzInwTw68tcdt8HLyW OD4JyjFBEcf0jfPbaRl1BDV2qx/wv5Gs4xOazqm5kqEruC+o1y3ayZY421XtRvYt0wDa MMswe4NEiIvzJqS5Yqh9pOD3khLMS4mMEvjlUuBoRsLKhEw0qa5WZxD4HvuwNNQJH0wy W79IyBEUz6fdj94cpVR3GnsBbE2+BnS9j3yarpFN7F2dr5IB3uR/j3HIp9UpGOfwkCPO qi1A== 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=LsRPh5fzs74VkUUl/Wp6A7vEZ7MWTWt3j86xG0KSyCY=; b=fv0L4vBfzL1QtD5UX4Bl2HpxTEfIqubPqmaYUUkC7KIoiuSY9o2s01b94CzkYnWeAQ 4z26ndNhLwAJ60PaPCSE56pj3QZSVxSjaw956Ol9n9I2lvP9tGWdaw+P6Ajwp/BJNSIH eCDQHd3rrdegVGHFoVKZd+OOC0+L/v99IhY36u1PWia0xJh9+M15+7jYRzNl266xF1jp aBFyALAfO7LWzWkmU93erPbzp+jdA/erAnaMroYHgJ8nAjcL2OH9K6OV/YRBmdP2ySRF bAhlTjEUH7TSBlWxBQq089CHPL7aEIyexyuzwwSSo43YfhmBB74FjvAejx7mKIxsniWL zoew== X-Gm-Message-State: AOAM531H/12gO/h5G1l/fYiCrtQrvQwMYUjRc4TQgjOt+rmgrXGgYVNU z+0v0U4Yg8g4r3iEoGNKEPq8I7ief3c= X-Google-Smtp-Source: ABdhPJwWHffoYu6LMmnnUs0yYaJA5znIU2yi+9Cq35/PmUkefHauKPppWk+dTLjN5mB5rzs4UzF9YA== X-Received: by 2002:ac8:4313:: with SMTP id z19mr1020959qtm.225.1612465835694; Thu, 04 Feb 2021 11:10:35 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:35 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:16 -0300 Message-Id: <20210204191005.48190-2-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/50] avcodec/packet: deprecate av_init_packet() 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" Once removed, sizeof(AVPacket) will stop being a part of the public ABI. Signed-off-by: James Almer --- libavcodec/avpacket.c | 23 +++++++++++++++-------- libavcodec/packet.h | 23 +++++++++++++++++++---- libavcodec/version.h | 3 +++ libavformat/avformat.h | 4 ++++ 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index e4ba403cf6..ae0cbfb9f9 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -32,6 +32,7 @@ #include "packet.h" #include "packet_internal.h" +#if FF_API_INIT_PACKET void av_init_packet(AVPacket *pkt) { pkt->pts = AV_NOPTS_VALUE; @@ -49,6 +50,16 @@ FF_ENABLE_DEPRECATION_WARNINGS pkt->side_data = NULL; pkt->side_data_elems = 0; } +#endif + +static void get_packet_defaults(AVPacket *pkt) +{ + memset(pkt, 0, sizeof(*pkt)); + + pkt->pts = AV_NOPTS_VALUE; + pkt->dts = AV_NOPTS_VALUE; + pkt->pos = -1; +} AVPacket *av_packet_alloc(void) { @@ -56,7 +67,7 @@ AVPacket *av_packet_alloc(void) if (!pkt) return pkt; - av_init_packet(pkt); + get_packet_defaults(pkt); return pkt; } @@ -92,7 +103,7 @@ int av_new_packet(AVPacket *pkt, int size) if (ret < 0) return ret; - av_init_packet(pkt); + get_packet_defaults(pkt); pkt->buf = buf; pkt->data = buf->data; pkt->size = size; @@ -607,9 +618,7 @@ void av_packet_unref(AVPacket *pkt) { av_packet_free_side_data(pkt); av_buffer_unref(&pkt->buf); - av_init_packet(pkt); - pkt->data = NULL; - pkt->size = 0; + get_packet_defaults(pkt); } int av_packet_ref(AVPacket *dst, const AVPacket *src) @@ -664,9 +673,7 @@ AVPacket *av_packet_clone(const AVPacket *src) void av_packet_move_ref(AVPacket *dst, AVPacket *src) { *dst = *src; - av_init_packet(src); - src->data = NULL; - src->size = 0; + get_packet_defaults(src); } int av_packet_make_refcounted(AVPacket *pkt) diff --git a/libavcodec/packet.h b/libavcodec/packet.h index b9d4c9c2c8..c442b6a6eb 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -319,10 +319,6 @@ typedef struct AVPacketSideData { * packets, with no compressed data, containing only side data * (e.g. to update some stream parameters at the end of encoding). * - * AVPacket is one of the few structs in FFmpeg, whose size is a part of public - * ABI. Thus it may be allocated on stack and no new fields can be added to it - * without libavcodec and libavformat major bump. - * * The semantics of data ownership depends on the buf field. * If it is set, the packet data is dynamically allocated and is * valid indefinitely until a call to av_packet_unref() reduces the @@ -334,6 +330,12 @@ typedef struct AVPacketSideData { * The side data is always allocated with av_malloc(), copied by * av_packet_ref() and freed by av_packet_unref(). * + * sizeof(AVPacket) being a part of the public ABI is deprecated. once + * av_init_packet() is removed, new packets will only be able to be allocated + * with av_packet_alloc(), and new fields may be added to the end of the struct + * with a minor bump. + * + * @see av_packet_alloc * @see av_packet_ref * @see av_packet_unref */ @@ -394,7 +396,11 @@ typedef struct AVPacket { } AVPacket; typedef struct AVPacketList { +#if FF_API_INIT_PACKET AVPacket pkt; +#else + AVPacket *pkt; +#endif struct AVPacketList *next; } AVPacketList; @@ -460,6 +466,7 @@ AVPacket *av_packet_clone(const AVPacket *src); */ void av_packet_free(AVPacket **pkt); +#if FF_API_INIT_PACKET /** * Initialize optional fields of a packet with default values. * @@ -467,8 +474,16 @@ void av_packet_free(AVPacket **pkt); * initialized separately. * * @param pkt packet + * + * @see av_packet_alloc + * @see av_packet_unref + * + * @deprecated This function is deprecated. Once it's removed, + sizeof(AVPacket) will not be a part of the ABI anymore. */ +attribute_deprecated void av_init_packet(AVPacket *pkt); +#endif /** * Allocate the payload of a packet and initialize its fields with diff --git a/libavcodec/version.h b/libavcodec/version.h index 3cac8c5f30..247568ec7f 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -153,5 +153,8 @@ #ifndef FF_API_DEBUG_MV #define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) #endif +#ifndef FF_API_INIT_PACKET +#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) +#endif #endif /* AVCODEC_VERSION_H */ diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 523cf34d55..d2d31e1deb 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -950,7 +950,11 @@ typedef struct AVStream { * decoding: set by libavformat, must not be modified by the caller. * encoding: unused */ +#if FF_API_INIT_PACKET AVPacket attached_pic; +#else + AVPacket *attached_pic; +#endif /** * An array of side data that applies to the whole stream (i.e. the From patchwork Thu Feb 4 19:09:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25394 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 9AB68448077 for ; Thu, 4 Feb 2021 21:10:46 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6FE766881E8; Thu, 4 Feb 2021 21:10:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 18A84680571 for ; Thu, 4 Feb 2021 21:10:39 +0200 (EET) Received: by mail-qk1-f172.google.com with SMTP id d85so4445072qkg.5 for ; Thu, 04 Feb 2021 11:10:39 -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=WE7UV5PnqnGiE4CMRlpM7EfmnGDupaC9MjZ0yxNv14k=; b=l/q6Z9WhX6HfWvvt/T/6YuN07Ii2WO7gYYv4jzfL3NmfO4pNdoa1nIkY6Y+q2IUmQM xVON4GzL5MiMnaq5TXwjfTviuBewbjRkgV5yobk+r3j2zD7mz47TdP/VBoIM0ZdqV3B5 8Hpz2f5G/ke8w5XYtT3W2uVaave3npTnB7dxGXYhzUtCrltyt0vh7XdTJOSsph/C5eCi Tn1UqhTu0xyTaDZyZYhxmvKWvS/k0aA5d89X/0gyxUZpLsaTifufFNJKQm/K0f1oq8kt idxNyxAO8SQ70t8gOLL1FYoBaYc0Oq4S2vwe13mdvtmkB1c4njIy2K4e0r7EYcbE/gNG vnrQ== 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=WE7UV5PnqnGiE4CMRlpM7EfmnGDupaC9MjZ0yxNv14k=; b=Mz6r53TNRF570XHciTWys0t9Fw99au9q1I9z248MQL/ErMRzgagyHZay4Bax+7Q5kr XGPfZ4qASfwxiI1wiPZxuGfjzjM+0BOW0qZWghx36vRD0WYS4ovbERH0GjZNjF6g4IHa 64zur8SB2+d+gcq3twMSNuqinBwgMmDCSQWS/G/iBIQH1p9f+WG1REoQvIoelTMIDsil ubSNClO6foUUqm7DWtqrEDcdKv4h0awKKRQ+r52QmsKCbuXQzdgerStmN8e0q1rwR4QK 6RS61FJW/qchZJDH6lljNnEzd9eWlenNulN8Ys+lAuf6K3dQjK7etncBiYenWqG+ngSb lu0w== X-Gm-Message-State: AOAM531qqAuCAR16JTwtzWhDrGEvzzXSgTMAX1N27AAlXqqCO9FxlUg5 ZXEfo3LSfMAio4borTM9ir1BP+/z7nE= X-Google-Smtp-Source: ABdhPJzl4mspw41zlt8sSZ4uSjfgmcs/6latiDuygCiEiJjwvbXeoeP6M2XY7Kw/UcKxGF3Z054gOA== X-Received: by 2002:a05:620a:15ab:: with SMTP id f11mr636751qkk.498.1612465837301; Thu, 04 Feb 2021 11:10:37 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:36 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:17 -0300 Message-Id: <20210204191005.48190-3-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/50] avcodec/cri: 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" Signed-off-by: James Almer --- libavcodec/cri.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libavcodec/cri.c b/libavcodec/cri.c index efbccf4fee..8aadab7703 100644 --- a/libavcodec/cri.c +++ b/libavcodec/cri.c @@ -37,6 +37,7 @@ typedef struct CRIContext { AVCodecContext *jpeg_avctx; // wrapper context for MJPEG + AVPacket *jpkt; // encoded JPEG tile AVFrame *jpgframe; // decoded JPEG tile GetByteContext gb; @@ -56,6 +57,10 @@ static av_cold int cri_decode_init(AVCodecContext *avctx) if (!s->jpgframe) return AVERROR(ENOMEM); + s->jpkt = av_packet_alloc(); + if (!s->jpkt) + return AVERROR(ENOMEM); + codec = avcodec_find_decoder(AV_CODEC_ID_MJPEG); if (!codec) return AVERROR_BUG; @@ -342,13 +347,11 @@ skip: unsigned offset = 0; for (int tile = 0; tile < 4; tile++) { - AVPacket jpkt; - - av_init_packet(&jpkt); - jpkt.data = (uint8_t *)s->data + offset; - jpkt.size = s->tile_size[tile]; + av_packet_unref(s->jpkt); + s->jpkt->data = (uint8_t *)s->data + offset; + s->jpkt->size = s->tile_size[tile]; - ret = avcodec_send_packet(s->jpeg_avctx, &jpkt); + ret = avcodec_send_packet(s->jpeg_avctx, s->jpkt); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Error submitting a packet for decoding\n"); return ret; @@ -412,6 +415,7 @@ static av_cold int cri_decode_close(AVCodecContext *avctx) CRIContext *s = avctx->priv_data; av_frame_free(&s->jpgframe); + av_packet_free(&s->jpkt); avcodec_free_context(&s->jpeg_avctx); return 0; From patchwork Thu Feb 4 19:09: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: 25395 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 97A0E448077 for ; Thu, 4 Feb 2021 21:10:47 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8668B689F00; Thu, 4 Feb 2021 21:10:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 871DB688291 for ; Thu, 4 Feb 2021 21:10:40 +0200 (EET) Received: by mail-qk1-f174.google.com with SMTP id r77so4400520qka.12 for ; Thu, 04 Feb 2021 11:10:40 -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=WkqeBlLwUeTVJH7fvd5MmmzjgHpsfsWT5GxOlr3tsCo=; b=a77PM8eoGHzjbJj7gCuo92o7OF3ojj4UUSZ0/Qep+1/PTiE8NbjvL5Asc1ViibX3O3 BqW8ELSeRW7oVOQQLvfhF1uhvsxsQw76KZXLs4JXn+Y27V7upjfnJM2txry149EnJXem mIs8IsD9/FEfK/btl9s3x8FTJE48N3M1SGXAf4U6AzuYTtAcFR7bOsrw35zMPwisE+C7 ywfcR5SpHvOh50gbvRCRUCnFELg78lgi6TyNSW5wW8b3CfpUBYikMliUr0M0A2r/7mEf sSwAul7KFeZJeSbyTjwUPRUAykUr/P7L2caU+wQkVeBn8Yyl9KPdYfhm1wJ2PfDJFy2Z 4UYA== 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=WkqeBlLwUeTVJH7fvd5MmmzjgHpsfsWT5GxOlr3tsCo=; b=gGEnH4/wsf2g5OWP2AMp9DbCbHDb2inN7TY/3w742GoixbunpLG6K11L7frZN3XRUY A2bNFYRXINHSRi5+Btil8z8KIg0uqSsV8ClL8tXCCx8RLV0dGqucqEy8mZJdtGoqYMzE psBphCcMG0gRVmygEyDktvSq3j/SCVW+4oahsl42696DzLrQ4inxB2XCJD2fK7u9hW7z U2y5ibjzs++gR/OdkonixYq7KLNidgCnsHNecM8BXZpjT6nCPW4wJY0ie/Znu9kEeqDf 9nqFmmQI1u7SanfCPn3gO5LTvkJXFiH98TD3vweJRqY2ECDrNSY8GXbRtbgiJxdjwEFC CXOA== X-Gm-Message-State: AOAM532bdjfWIh4E4zgE9ng9jx06QyyQNENOS6GAShKDxqr3ICHMrVbN oW5/BaHhavWdeNugcyVUnzaKRexdlnM= X-Google-Smtp-Source: ABdhPJzLHEAs2TWCQd+DPMncQur7hOrqWQJ2kjuI680Rn+xYniPdt486rp0zhhOdoHqlAGzJdbI8eg== X-Received: by 2002:a37:b15:: with SMTP id 21mr645815qkl.330.1612465839073; Thu, 04 Feb 2021 11:10:39 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:38 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:18 -0300 Message-Id: <20210204191005.48190-4-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/50] avcodec/frame_thread_encoder: remove av_init_packet() call 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" The packet was allocated with av_packet_alloc(), so it's redundant. Signed-off-by: James Almer --- libavcodec/frame_thread_encoder.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c index 83229f620a..9ae9d72934 100644 --- a/libavcodec/frame_thread_encoder.c +++ b/libavcodec/frame_thread_encoder.c @@ -72,7 +72,6 @@ static void * attribute_align_arg worker(void *v){ if(!pkt) pkt = av_packet_alloc(); if(!pkt) continue; - av_init_packet(pkt); pthread_mutex_lock(&c->task_fifo_mutex); while (av_fifo_size(c->task_fifo) <= 0 || atomic_load(&c->exit)) { @@ -107,7 +106,7 @@ static void * attribute_align_arg worker(void *v){ pthread_mutex_unlock(&c->finished_task_mutex); } end: - av_free(pkt); + av_packet_free(&pkt); pthread_mutex_lock(&c->buffer_mutex); avcodec_close(avctx); pthread_mutex_unlock(&c->buffer_mutex); From patchwork Thu Feb 4 19:09:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25396 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 AC778448077 for ; Thu, 4 Feb 2021 21:10:48 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 95078689EC4; Thu, 4 Feb 2021 21:10:48 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 05953689F00 for ; Thu, 4 Feb 2021 21:10:42 +0200 (EET) Received: by mail-qk1-f181.google.com with SMTP id n15so4430976qkh.8 for ; Thu, 04 Feb 2021 11:10:41 -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=Doed7SeA4nFSq/EIfz+Shutvwjbm9H9dR8xp3H4y9xg=; b=rxVCY2rIq7pcNhXgG01La9hTdSDqMWeVQC5+d/uLTFcRJc+LZgOGIn0L3LNLHUWEib iAMj1o3T6dZ6cgxX2XiQyYKE1QaLfwdOaX3KOdJdb0/+tW83Vi7MPr0/YEMkiMd6ML/f ilGYm/De/GECsdsjCRvKB4jezMLNB4DHJtcB3fnOyo0vtZkcEgTyQwlc+PCsL8jWZUcX +s/o8jdK26Yb4vw5bQ3Z9UEW9S8xmBq3MpAtj3gL3/Unj0eqz+pDfH4uxFedgoRp0mjJ VGIcABA/XwN38WgIutyFKqSp5RZSQ1mBh7fp42Vi3U5MhT4yIul91YFPE2Wi4SHMl9Xa xG4w== 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=Doed7SeA4nFSq/EIfz+Shutvwjbm9H9dR8xp3H4y9xg=; b=milJcv7VYWONV9W1vmkM4lSoKyn106uion0rC42TBOSmMowsBkZF1d7n2A4hcYcwSS TjWeKZf97Cz/1UJlZQORcX5HvjxDIk0G6/vySKlHuDSKhKRwApUwRYG2ZkNUxC8gPLQ/ zTZ3ggGOpWeOi44+GBf73CnqT+F5PtgijXtBYle82Us/Q/zk6KWoaN4wdH4oj+2HZQ1+ K0JWCIkzDMY/zEnjwEPoLzjkF0aX9gbftjgGzro6gJrM+M03NrddkSabMe8h4DcWamQs TJeJ3JS1ezC03HnDiNBTVJqkiQ1krRBwvmDr91H8yfVkQjwMGo53tbCy6zU1OiFiP78P rrxw== X-Gm-Message-State: AOAM531lDnkW1lw4ic9gE28FIabkPjjI70357fRR2EJcoq5SI8Va1JFU VzbgUeigHx0MNI2TYJ1qPNMh46PKzpY= X-Google-Smtp-Source: ABdhPJwww7ugj6a/sul6zHfmw2U00OMD2jX6EYMvEumGYd/XREM9Uafnbd6PKhJThbQG8C0LwmAZzg== X-Received: by 2002:a05:620a:1537:: with SMTP id n23mr644557qkk.376.1612465840481; Thu, 04 Feb 2021 11:10:40 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:39 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:19 -0300 Message-Id: <20210204191005.48190-5-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/50] avcodec/mmal: 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" Signed-off-by: James Almer --- libavcodec/mmaldec.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c index cb15ac072a..ed51d74de5 100644 --- a/libavcodec/mmaldec.c +++ b/libavcodec/mmaldec.c @@ -776,12 +776,17 @@ static int ffmmal_decode(AVCodecContext *avctx, void *data, int *got_frame, int ret = 0; if (avctx->extradata_size && !ctx->extradata_sent) { - AVPacket pkt = {0}; - av_init_packet(&pkt); - pkt.data = avctx->extradata; - pkt.size = avctx->extradata_size; + AVPacket *pkt; + + pkt = av_packet_alloc(); + if (!pkt) + return AVERROR(ENOMEM); + pkt->data = avctx->extradata; + pkt->size = avctx->extradata_size; ctx->extradata_sent = 1; - if ((ret = ffmmal_add_packet(avctx, &pkt, 1)) < 0) + ret = ffmmal_add_packet(avctx, pkt, 1); + av_packet_free(&pkt); + if (ret < 0) return ret; } From patchwork Thu Feb 4 19:09:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25429 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 742D944A6BE for ; Thu, 4 Feb 2021 21:16:05 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5ADAF68A9C0; Thu, 4 Feb 2021 21:16:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 668E768A912 for ; Thu, 4 Feb 2021 21:16:03 +0200 (EET) Received: by mail-qk1-f173.google.com with SMTP id r77so4419049qka.12 for ; Thu, 04 Feb 2021 11:16:03 -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=WKpfCZxDtOIAcQwby/v/ajPtTHiS+ldYFNbsLUoiQmU=; b=Q7YYelRKC4eqkQVh4cf7A1jc7e7jpy+U3K+qY0oEaFzWP58Pwd2tULfl/4x1hJsNuW OKaVpTpX+hXbPZxztJyUyLzJIp75qNRUJxMnwSIFGLe3FprWRhVH1SwhxWpv4LE2xMYf R2OSS+0T5uvzEHkPzKIJ1M3ChHen/hlgU2Q4TeDoToyIOlVmmG/ht7+NomSO/f37R86K VoSOe4P9GuPHmWNyETtDq5QvyhmGmCcfqOpHtbkqjT9Wt4w1jLX/g9BE84DmiDwdnS1q dDfiqEImqjzQ0aGm/mhmzIkiXOemNBdHzRyWqJd1t9H88CbKGfvBcQhrD42vYxyT9oi0 KD1w== 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=WKpfCZxDtOIAcQwby/v/ajPtTHiS+ldYFNbsLUoiQmU=; b=dOLSfVwsKUW5S3D+lHVUowWN4tYvtejx5xaxCdiPnWdfdm1WrlK9IAGuQ8q8ofQnzE fcTs0F1O34dmQRxNCOhuKSXZNJzzQv+CUtbmRcqPpEMgfHCmI3lzKkjP1ZcoDuVy1VRe PIXHLsHpsd+CxNtfMXqgFakQvaXB98rRmkVsrzGLAkfLvOAWakSFwGURIIT7j4OX55Qx e2k+Je64dzctf3lrIbSAIVYmNTH1iJTfb9VzZ8mqDCgge0GVRVjjdO4PpMDGwEQxPJOM kPIEwxGliZspo8FF6+gVccsB5hhrvdwpkjCic7TEwBBdM/ouLVvCnAR7OnAoHJfWhb6q PJuw== X-Gm-Message-State: AOAM533sRSSBLSyI39VpmNvojTl0l9OWfRbMtxouVz9oEkRMQkg5IXZz chwAArxMRZdsJ9K7L5MnH0bE7MkDj2g= X-Google-Smtp-Source: ABdhPJzxxiSdCKo5c7f+ZHVhQ2q0lX6VbwEzZy+10EwSkbF6vrfBIDHMzrxC3BORag8aFhRrHsp8mg== X-Received: by 2002:aed:3943:: with SMTP id l61mr1017209qte.392.1612465841968; Thu, 04 Feb 2021 11:10:41 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:41 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:20 -0300 Message-Id: <20210204191005.48190-6-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/50] avcodec/libxvid: 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" Signed-off-by: James Almer --- libavcodec/libxvid.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index 857077dc3b..d880558893 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -685,10 +685,12 @@ FF_ENABLE_DEPRECATION_WARNINGS /* Encode a dummy frame to get the extradata immediately */ if (x->quicktime_format) { AVFrame *picture; - AVPacket packet = {0}; + AVPacket *packet; int size, got_packet, ret; - av_init_packet(&packet); + packet = av_packet_alloc(); + if (!packet) + return AVERROR(ENOMEM); picture = av_frame_alloc(); if (!picture) @@ -696,6 +698,7 @@ FF_ENABLE_DEPRECATION_WARNINGS xerr = xvid_encore(NULL, XVID_ENC_CREATE, &xvid_enc_create, NULL); if( xerr ) { + av_packet_free(&packet); av_frame_free(&picture); av_log(avctx, AV_LOG_ERROR, "Xvid: Could not create encoder reference\n"); return AVERROR_EXTERNAL; @@ -704,6 +707,7 @@ FF_ENABLE_DEPRECATION_WARNINGS size = ((avctx->width + 1) & ~1) * ((avctx->height + 1) & ~1); picture->data[0] = av_malloc(size + size / 2); if (!picture->data[0]) { + av_packet_free(&packet); av_frame_free(&picture); return AVERROR(ENOMEM); } @@ -711,9 +715,8 @@ FF_ENABLE_DEPRECATION_WARNINGS picture->data[2] = picture->data[1] + size / 4; memset(picture->data[0], 0, size); memset(picture->data[1], 128, size / 2); - ret = xvid_encode_frame(avctx, &packet, picture, &got_packet); - if (!ret && got_packet) - av_packet_unref(&packet); + ret = xvid_encode_frame(avctx, packet, picture, &got_packet); + av_packet_free(&packet); av_free(picture->data[0]); av_frame_free(&picture); xvid_encore(x->encoder_handle, XVID_ENC_DESTROY, NULL, NULL); From patchwork Thu Feb 4 19:09:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25441 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 EFEB144B07D for ; Thu, 4 Feb 2021 21:19:12 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D571B68ABB4; Thu, 4 Feb 2021 21:19:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CAAC168AB98 for ; Thu, 4 Feb 2021 21:19:10 +0200 (EET) Received: by mail-qt1-f177.google.com with SMTP id d15so3214411qtw.12 for ; Thu, 04 Feb 2021 11:19:10 -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=2+VIjd8Git9Ew6bzjgrAq32vfu6gcCL0J4mAIDsyRmk=; b=csUj2q/Mh6X3VTpPmDsFZitWnJ2k50QIigG5HN5GKzBi8TH436v3ke6DGvihaGOEwS jNbL3gEwXLm94US4ZH2SpEv6rZJEoAA42TandJHtDT9ouMi40QW30Ft1YTsfSkzy0YXq kNear5qT92Vvcd0mtbkQxCN9dMBiD5fzCNHi2Pi1cOTzjliwPOr8rBm3N1TDts7ZGR+i FKib23ZtGMN2HUZ74tQlr++FyzjuL0dnOHDFAHRov+9TkdO9U4P1N6BT27VusKygjakx iUQ1KvHMBwE1FH14ojkKmzm/1pz5F2n1SfxdfL3ouSUFEBPuqqrjpd9BggLGAb+ftXnw 9IQQ== 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=2+VIjd8Git9Ew6bzjgrAq32vfu6gcCL0J4mAIDsyRmk=; b=RFUqxOV7BC+cp6mZ1rHZmjC6PGnw1azFpFwUt0yGbV9IsRnynOR/tFDhdJUu8+fw4N pxYKoWrXRL9uPW6JZEx+fmU1OTw/ExkgxrEKidW9Cq80UUz5RyMp8xs9PneZjzzRcYg4 GRI9Yvfu0Kv1Z3c2c8fl3jG9lcSc/ld1LUL5x1t8LvKvNSe6zoE1dFN65SO3eqaL+XPQ JEyHghwIDXpE4ILGV2aOUK27hJkru/6OTF9YRgrjck96TGvlyBg0UsGYIPQeYFRUtbO1 n6T1wPwePAjbYdTKNKejL4x31mh3+ngE2hjj16cso/x28IAZP8i5s4i+F7ZsaBv9fzaD fhGw== X-Gm-Message-State: AOAM5310LuMCycHZLArQYAAT2OCJKV7OAydPCknODp+wN1pFK/6TQT8P UUuog/BF8LHRKlRm8zsb/pKZVYo7GtI= X-Google-Smtp-Source: ABdhPJzbHic8WqXM+LUmXwOomWLaV/T1rnOGwB7RnJC57LipLyXKypd9WcMJRfKWE+/1BS2UEYoXGQ== X-Received: by 2002:ac8:738c:: with SMTP id t12mr1037634qtp.141.1612465843474; Thu, 04 Feb 2021 11:10:43 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:42 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:21 -0300 Message-Id: <20210204191005.48190-7-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/50] avcodec/mpegvideo_enc: 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" Signed-off-by: James Almer --- libavcodec/mpegvideo_enc.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 34dcf8c313..411cadeae7 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1366,23 +1366,20 @@ static int skip_check(MpegEncContext *s, Picture *p, Picture *ref) return 0; } -static int encode_frame(AVCodecContext *c, AVFrame *frame) +static int encode_frame(AVCodecContext *c, AVFrame *frame, AVPacket *pkt) { - AVPacket pkt = { 0 }; int ret; int size = 0; - av_init_packet(&pkt); - ret = avcodec_send_frame(c, frame); if (ret < 0) return ret; do { - ret = avcodec_receive_packet(c, &pkt); + ret = avcodec_receive_packet(c, pkt); if (ret >= 0) { - size += pkt.size; - av_packet_unref(&pkt); + size += pkt->size; + av_packet_unref(pkt); } else if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) return ret; } while (ret >= 0); @@ -1448,6 +1445,7 @@ static int estimate_best_b_count(MpegEncContext *s) for (j = 0; j < s->max_b_frames + 1; j++) { AVCodecContext *c; + AVPacket *pkt; int64_t rd = 0; if (!s->input_picture[j]) @@ -1473,10 +1471,14 @@ static int estimate_best_b_count(MpegEncContext *s) if (ret < 0) goto fail; + pkt = av_packet_alloc(); + if (!pkt) + goto fail; + s->tmp_frames[0]->pict_type = AV_PICTURE_TYPE_I; s->tmp_frames[0]->quality = 1 * FF_QP2LAMBDA; - out_size = encode_frame(c, s->tmp_frames[0]); + out_size = encode_frame(c, s->tmp_frames[0], pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1491,7 +1493,7 @@ static int estimate_best_b_count(MpegEncContext *s) AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_B; s->tmp_frames[i + 1]->quality = is_p ? p_lambda : b_lambda; - out_size = encode_frame(c, s->tmp_frames[i + 1]); + out_size = encode_frame(c, s->tmp_frames[i + 1], pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1501,7 +1503,7 @@ static int estimate_best_b_count(MpegEncContext *s) } /* get the delayed frames */ - out_size = encode_frame(c, NULL); + out_size = encode_frame(c, NULL, pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1517,6 +1519,7 @@ static int estimate_best_b_count(MpegEncContext *s) fail: avcodec_free_context(&c); + av_packet_free(&pkt); if (ret < 0) return ret; } From patchwork Thu Feb 4 19:09:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25438 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 D732344AD4B for ; Thu, 4 Feb 2021 21:18:08 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C338A68AA98; Thu, 4 Feb 2021 21:18:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B5EE68A5A8 for ; Thu, 4 Feb 2021 21:18:06 +0200 (EET) Received: by mail-qk1-f180.google.com with SMTP id d85so4470229qkg.5 for ; Thu, 04 Feb 2021 11:18:06 -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=StZgGre1j42Pd64kKJyhq+7Jz+vPRm1znQc0H8dGnA0=; b=XzO5/eOhqvXOLhBVs3XevwXppgUEQQle01mMKdcIc7PDK+YLtzMPs/bqdcCdJVaSxP tGihAvq2u+kWscm+EZdOxOW/OFOZ0cQcNwPooSl8FqGOIpK20LU9KUwrpETaw4EGWtw4 CHtfDwjFxRptsfAdaFcN2XB5UVYykGFgROfoCzkkC1XhzK27j1sW/EFavt5DqARsYGEN QhSjiRejJ0uOQ1Lqht7wqsRq+URmi/cfDBI/PWVaO13HXzbNahEGXeRnZsE7nPM6LIu/ /tK7rPMUPnHABF4vVqudAvpHrH2HluAL4CsJpH3VPkcab8IhIqy2lD61MZFC0X8Szs1T gPBQ== 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=StZgGre1j42Pd64kKJyhq+7Jz+vPRm1znQc0H8dGnA0=; b=hquseLVX7RGhPyZzPTcugRM/vrM8K4f3PWVN9jRpP2WLEMykiX1UyUqlnGq+D2UQcf brbqU0oAWh9OpVazFIllEmhtXCYXM5eNyFbgh6mSOzboJNBrsFNdNbU5OROwsFtcVzzb En72piuXGPY4IPQBd1CFBQg+HXylm86nMZbzwB03ZzLUwKik/F7n7ac72Z3Y8pX5/1vn VH9olWP6PsSoh1v7nuEZduHR5k6axwhpMAJvzwpi3im5mTOIOyXTVVf48+nK5JL3UjRV wbpl+wtzxCR6VTgDC0F3yct96cTv5F0MYlEnmoPQo6vdu1j1TaAtLI7R0TACAMc3AiqR AY4A== X-Gm-Message-State: AOAM533IXSlXGWFTx6BTYTeGXtvX/b+s5M5FWu+ZIDSxXmnMDN1M4Rki kfiSuDK+YnsQXGJNQm08sZ236O+ZQJg= X-Google-Smtp-Source: ABdhPJwBaNRf/HM+apOgf6Wd/iqTgEGMAgeNrJhqPXtp/ZNgaTR+OUUUhrSyu3hbvQJhjnK8DAvKgA== X-Received: by 2002:ac8:7b86:: with SMTP id p6mr1018552qtu.23.1612465844990; Thu, 04 Feb 2021 11:10:44 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:44 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:22 -0300 Message-Id: <20210204191005.48190-8-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/50] avcodec/pthread_frame: 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" Signed-off-by: James Almer --- libavcodec/pthread_frame.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index 4429a4d59c..7bcb9a7bcc 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -81,7 +81,7 @@ typedef struct PerThreadContext { AVCodecContext *avctx; ///< Context used to decode packets passed to this thread. - AVPacket avpkt; ///< Input packet (for decoding) or output (for encoding). + AVPacket *avpkt; ///< Input packet (for decoding) or output (for encoding). AVFrame *frame; ///< Output frame (for decoding) or input (for encoding). int got_frame; ///< The output of got_picture_ptr from the last avcodec_decode_video() call. @@ -208,7 +208,7 @@ FF_ENABLE_DEPRECATION_WARNINGS av_frame_unref(p->frame); p->got_frame = 0; - p->result = codec->decode(avctx, p->frame, &p->got_frame, &p->avpkt); + p->result = codec->decode(avctx, p->frame, &p->got_frame, p->avpkt); if ((p->result < 0 || !p->got_frame) && p->frame->buf[0]) { if (avctx->codec->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) @@ -438,8 +438,8 @@ static int submit_packet(PerThreadContext *p, AVCodecContext *user_avctx, } } - av_packet_unref(&p->avpkt); - ret = av_packet_ref(&p->avpkt, avpkt); + av_packet_unref(p->avpkt); + ret = av_packet_ref(p->avpkt, avpkt); if (ret < 0) { pthread_mutex_unlock(&p->mutex); av_log(p->avctx, AV_LOG_ERROR, "av_packet_ref() failed in submit_packet()\n"); @@ -550,7 +550,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx, av_frame_move_ref(picture, p->frame); *got_picture_ptr = p->got_frame; - picture->pkt_dts = p->avpkt.dts; + picture->pkt_dts = p->avpkt->dts; err = p->result; /* @@ -725,7 +725,7 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) pthread_cond_destroy(&p->input_cond); pthread_cond_destroy(&p->progress_cond); pthread_cond_destroy(&p->output_cond); - av_packet_unref(&p->avpkt); + av_packet_free(&p->avpkt); #if FF_API_THREAD_SAFE_CALLBACKS for (int j = 0; j < p->released_buffers_allocated; j++) @@ -822,6 +822,12 @@ int ff_frame_thread_init(AVCodecContext *avctx) err = AVERROR(ENOMEM); goto error; } + p->avpkt = av_packet_alloc(); + if (!p->avpkt) { + av_freep(©); + err = AVERROR(ENOMEM); + goto error; + } p->parent = fctx; p->avctx = copy; @@ -841,7 +847,7 @@ int ff_frame_thread_init(AVCodecContext *avctx) } *copy->internal = *src->internal; copy->internal->thread_ctx = p; - copy->internal->last_pkt_props = &p->avpkt; + copy->internal->last_pkt_props = p->avpkt; copy->delay = avctx->delay; From patchwork Thu Feb 4 19:09:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25434 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 E808744A960 for ; Thu, 4 Feb 2021 21:17:20 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CDEDC68AA54; Thu, 4 Feb 2021 21:17:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 551C168A3A3 for ; Thu, 4 Feb 2021 21:17:18 +0200 (EET) Received: by mail-qt1-f182.google.com with SMTP id d15so3209990qtw.12 for ; Thu, 04 Feb 2021 11:17:18 -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=XdKSUHYe1VK+0sNt3PAUoKmXied7fVkOdX9OgaNp+QA=; b=shlprPBssmNwwk43Qkn1Ik6U+acGKjtK+LAUZvalCwQpKl9f6J83MogN9w9xtDYZfO ZWHJVFkwWkVXf10owHLRoOFYD88vj02ChTt54Cv+UyTkLEzBL0vNnQ4aBM7PPlQooPQT ACoZfpb99mMtKF02upWoR/A0PAb2Z03zf2nM8coMHVxl9SVX/1o1Q+hOf9WdAFnEO+ZZ I+UOUh1kz0ANg5YxfyZWGGBzHjx7mtvtNnPX/I9vUiKVa0K3+Kl4t1xnChgMR+qRnjYL ZHCcI8WyCDCoNoRsKVOrW5JccSIcmxXNychKgUdEaHjfocK4VhKVRuQp7qsXOk81e96t MGdQ== 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=XdKSUHYe1VK+0sNt3PAUoKmXied7fVkOdX9OgaNp+QA=; b=V02ApPIBsOYE7UdixyRDjT7FZHwur75NU+PXd1A5tTSVf7LbbRpFPE89dkaklyfI0Z reI+JjkOaLzw/WgKIyZVPBPQcVBxDVtBeDo3LJKII7vB6lRksACxqfboS8MCdzQcseAQ L2ZkyQhq4MeNi9B9pQi3+ERNoiS3E84Mb++AzwXZoDNGlEhjamwXqx/D0+xN659Yjo++ EpZUJ+Zwgfa+rKxBsSlDO5On/cz+JtjQR2+uMq6Spzfypu4maxucFPfJ6ZgRcatYf/yT rBBeMEpvEvOz/tPhAZql1BNx1gbXeTRit0XXapSOXcMe9iqNqsTkqeLFg/EShLOd2JL+ XqhA== X-Gm-Message-State: AOAM532fgNbrzLNuvxFOk/qbYitao3nhUaFAvy6eLcLnvNlm89gU13rP xJu6FYW3giO7yCV+0CayFZJ5Y4aE4k8= X-Google-Smtp-Source: ABdhPJz7xNshrcMMIsxqteoRe8KG056IPHruClpxKLVcPSrX1O10iGlzMuWmSdmUwqPiXrMWTp+QTw== X-Received: by 2002:ac8:58c5:: with SMTP id u5mr1078747qta.94.1612465846382; Thu, 04 Feb 2021 11:10:46 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:45 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:23 -0300 Message-Id: <20210204191005.48190-9-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/50] avcodec/tdsc: 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" Signed-off-by: James Almer --- libavcodec/tdsc.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libavcodec/tdsc.c b/libavcodec/tdsc.c index 7c888b6ec8..9e7381c2bb 100644 --- a/libavcodec/tdsc.c +++ b/libavcodec/tdsc.c @@ -53,6 +53,7 @@ typedef struct TDSCContext { GetByteContext gbc; AVFrame *refframe; // full decoded frame (without cursor) + AVPacket *jpkt; // encoded JPEG tile AVFrame *jpgframe; // decoded JPEG tile uint8_t *tilebuffer; // buffer containing tile data @@ -80,6 +81,7 @@ static av_cold int tdsc_close(AVCodecContext *avctx) av_frame_free(&ctx->refframe); av_frame_free(&ctx->jpgframe); + av_packet_free(&ctx->jpkt); av_freep(&ctx->deflatebuffer); av_freep(&ctx->tilebuffer); av_freep(&ctx->cursor); @@ -111,7 +113,8 @@ static av_cold int tdsc_init(AVCodecContext *avctx) /* Allocate reference and JPEG frame */ ctx->refframe = av_frame_alloc(); ctx->jpgframe = av_frame_alloc(); - if (!ctx->refframe || !ctx->jpgframe) + ctx->jpkt = av_packet_alloc(); + if (!ctx->refframe || !ctx->jpgframe || !ctx->jpkt) return AVERROR(ENOMEM); /* Prepare everything needed for JPEG decoding */ @@ -342,15 +345,14 @@ static int tdsc_decode_jpeg_tile(AVCodecContext *avctx, int tile_size, int x, int y, int w, int h) { TDSCContext *ctx = avctx->priv_data; - AVPacket jpkt; int ret; /* Prepare a packet and send to the MJPEG decoder */ - av_init_packet(&jpkt); - jpkt.data = ctx->tilebuffer; - jpkt.size = tile_size; + av_packet_unref(ctx->jpkt); + ctx->jpkt->data = ctx->tilebuffer; + ctx->jpkt->size = tile_size; - ret = avcodec_send_packet(ctx->jpeg_avctx, &jpkt); + ret = avcodec_send_packet(ctx->jpeg_avctx, ctx->jpkt); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Error submitting a packet for decoding\n"); return ret; From patchwork Thu Feb 4 19:09:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25397 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 CDACC448077 for ; Thu, 4 Feb 2021 21:10:50 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B6BAC68A199; Thu, 4 Feb 2021 21:10:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 50D12680571 for ; Thu, 4 Feb 2021 21:10:49 +0200 (EET) Received: by mail-qk1-f174.google.com with SMTP id k193so4435764qke.6 for ; Thu, 04 Feb 2021 11:10:49 -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=bM3cNm027j8qcvJwlXeuYmHJPSMzwVkJtMk+fsFvsTE=; b=JjYTauWKQtBGU/EJ0c0GCqbeQufNazy54sVDE8PxJRxefNnUC60Zben7ckxSw/8wLt TCyAD40+inPYgn4jIkTUAAgYaQo7rj9aWLW5hcs+AWUhzEtmYicuRl6GJitqGLWWTo6o EVv90gauZbwiQ4eoEj7MBiTR7I24VJKTSFUBKoRT53erHdE9lHTBus28hoSexYgPY2E4 gVwSkNkEbBo79UFOQ9ddDhpZzAQL64wDvVyA58R1RR5sZjAeOLFVNfsSOf3IIGBs4CHh zjpeAIaiX2UDEgigY9PTDjxGpqXJrG2z8f9ZLdJsUP/0LBZ1Eyf5icPhJ4c48vvZ02oa mtSw== 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=bM3cNm027j8qcvJwlXeuYmHJPSMzwVkJtMk+fsFvsTE=; b=MKpuAPRqkFNH3TVKUsxGCjd7TMNaFOEsxAwRFZBGo9yIBnF8hV+lAQZH5bbzo6wTEb b2y1bz6Zc+uLVY08gH0F3zjwfkXa04JM04zYtTcnlK1v3vFMD7bElX+v007gU8JWQSKl cfyiBN1e3khyW4KKZOjZ93Yu7W/b9UEvJZy45xWa41/Iwk7KLO1YLHKE4pvCq12tsOwZ TvyK9nlRIIqL5pjNKzo8DCkwVSRP+UVlt5Mo2/rsBMUQQnBjTd7wJVW5/84W76sExic2 dgL5CyCvi1JN+gsHq6NlPLZR9i2MoWcB82BXqgXGf/BZK3zkhEkS7V98kvtyb+1ucOFs H97A== X-Gm-Message-State: AOAM531lg9vMnZAh4M1+37XGsCVB35sjHLKGSzGw6Y42e3UUEgfus0eC YvhAkJfeRCw4kTZVo1Q5nQtgBmoLrzo= X-Google-Smtp-Source: ABdhPJzU4REbLxkGIpfc7MVg+EfHN7twjvCHbUGuXWd+O1RaR+xM7EMPiqZTElCdNMSoE3NcWe3mjQ== X-Received: by 2002:a05:620a:15ab:: with SMTP id f11mr637551qkk.498.1612465847865; Thu, 04 Feb 2021 11:10:47 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:47 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:24 -0300 Message-Id: <20210204191005.48190-10-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/50] avcodec/tiff: use av_packet_alloc() to allocate AVPackets 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" Signed-off-by: James Almer --- libavcodec/tiff.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index f68f9818ad..c92c4170ab 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -58,6 +58,7 @@ typedef struct TiffContext { /* JPEG decoding for DNG */ AVCodecContext *avctx_mjpeg; // wrapper context for MJPEG + AVPacket *jpkt; // encoded JPEG tile AVFrame *jpgframe; // decoded JPEG tile int get_subimage; @@ -877,7 +878,6 @@ static int dng_decode_jpeg(AVCodecContext *avctx, AVFrame *frame, int tile_byte_count, int dst_x, int dst_y, int w, int h) { TiffContext *s = avctx->priv_data; - AVPacket jpkt; uint8_t *dst_data, *src_data; uint32_t dst_offset; /* offset from dst buffer in pixels */ int is_single_comp, is_u16, pixel_size; @@ -887,9 +887,9 @@ static int dng_decode_jpeg(AVCodecContext *avctx, AVFrame *frame, return AVERROR_INVALIDDATA; /* Prepare a packet and send to the MJPEG decoder */ - av_init_packet(&jpkt); - jpkt.data = (uint8_t*)s->gb.buffer; - jpkt.size = tile_byte_count; + av_packet_unref(s->jpkt); + s->jpkt->data = (uint8_t*)s->gb.buffer; + s->jpkt->size = tile_byte_count; if (s->is_bayer) { MJpegDecodeContext *mjpegdecctx = s->avctx_mjpeg->priv_data; @@ -898,7 +898,7 @@ static int dng_decode_jpeg(AVCodecContext *avctx, AVFrame *frame, mjpegdecctx->bayer = 1; } - ret = avcodec_send_packet(s->avctx_mjpeg, &jpkt); + ret = avcodec_send_packet(s->avctx_mjpeg, s->jpkt); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Error submitting a packet for decoding\n"); return ret; @@ -2157,7 +2157,8 @@ static av_cold int tiff_init(AVCodecContext *avctx) /* Allocate JPEG frame */ s->jpgframe = av_frame_alloc(); - if (!s->jpgframe) + s->jpkt = av_packet_alloc(); + if (!s->jpgframe || !s->jpkt) return AVERROR(ENOMEM); /* Prepare everything needed for JPEG decoding */ @@ -2193,6 +2194,7 @@ static av_cold int tiff_end(AVCodecContext *avctx) av_freep(&s->fax_buffer); s->fax_buffer_size = 0; av_frame_free(&s->jpgframe); + av_packet_free(&s->jpkt); avcodec_free_context(&s->avctx_mjpeg); return 0; } From patchwork Thu Feb 4 19:09:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25431 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 6EAF444A6BE for ; Thu, 4 Feb 2021 21:16:22 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5164E68A9F3; Thu, 4 Feb 2021 21:16:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A94DD68A98A for ; Thu, 4 Feb 2021 21:16:20 +0200 (EET) Received: by mail-qk1-f182.google.com with SMTP id a7so4413457qkb.13 for ; Thu, 04 Feb 2021 11:16:20 -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=ZoW/66agalCTMm5TPOz7KadFnh21rMYER3UA2o/UBYs=; b=TRT+Yw8d1/UwgrlqmRfNlxvLEU/FqZE0icIPQeTGRxVmDoJAiDGkqpKDDajVzUFQW1 wxDZ+GtcnDW/6DrsEk6M3v2xTGD3lIOsM71DQy5WgTko2/r6TAHq4/aT2H6L1+vdFS8P XFDSZvfnYBYoLVeezGbIfqv19R1kuAGleNgUOz3RTFqfGIgToJPXfib0IheaeVgpix0o oXFvF3IRveuaMY+6R5EFXWcT3mUJDxpQQSxHpSpMgefLaFtrrtGWWx/BBdyVovNCM+kh FI6DIHevYToxZNQAghrRa0Eg3nx0nNhKxbRb+/d5PBIG+wmevwLUO7UMFji8cyvjiYJ3 xasQ== 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=ZoW/66agalCTMm5TPOz7KadFnh21rMYER3UA2o/UBYs=; b=a2tELUDRHWvwkEf85iIENImXmbA/bhStK3CiMKodO+P/yVytcWaC0rDZb4c90VnPmF iVIKY5ee5co3dDtCMvgynjx0x2ifqowj1XMuYuUkboE07gIcjVZfBTlH8IyIm36h7feR oQWjPheP2g3PbW3XSwT5SVWKzVoXcfaHZww4djFl0m+UerakEBV1Xfm8ZuHvcQ/pYuP5 +RHECqUlQfeM1fVyegMf9GkzmHBLGYLZAK7WupCwP7qLe8UbQh4m3H2oBQaZ6sECjLqj otGPPh4/ZzlH9bJ3k6FSoYoFfCMmtq79e+E4z4TvYiD40uRSqB33QPsPunzH7Ci6jPpx 5v/g== X-Gm-Message-State: AOAM532Ssx4ALjF299v1xxvGBN5d+aruV8uV9J1/gGKfgfmQZr7wEzGq OoZ5r5u6dluTVe5l9xmvPWIJ44KVScQ= X-Google-Smtp-Source: ABdhPJwYJVtpGUqBCIA2V8WEcH+MWAxC+7W4s+/0idR98IEQ4JPz6RRFnrffgT0lQ+GwQ5e36r4hLA== X-Received: by 2002:ac8:7257:: with SMTP id l23mr1024786qtp.264.1612465849321; Thu, 04 Feb 2021 11:10:49 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:48 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:25 -0300 Message-Id: <20210204191005.48190-11-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/50] avcodec/webp: 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" Signed-off-by: James Almer --- libavcodec/webp.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/libavcodec/webp.c b/libavcodec/webp.c index 6de6a5c036..5a7aebc587 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -189,6 +189,7 @@ typedef struct WebPContext { VP8Context v; /* VP8 Context used for lossy decoding */ GetBitContext gb; /* bitstream reader for main image chunk */ AVFrame *alpha_frame; /* AVFrame for alpha data decompressed from VP8L */ + AVPacket *pkt; /* AVPacket to be passed to the underlying VP8 decoder */ AVCodecContext *avctx; /* parent AVCodecContext */ int initialized; /* set once the VP8 context is initialized */ int has_alpha; /* has a separate alpha chunk */ @@ -1290,7 +1291,6 @@ static int vp8_lossy_decode_frame(AVCodecContext *avctx, AVFrame *p, unsigned int data_size) { WebPContext *s = avctx->priv_data; - AVPacket pkt; int ret; if (!s->initialized) { @@ -1306,11 +1306,11 @@ static int vp8_lossy_decode_frame(AVCodecContext *avctx, AVFrame *p, return AVERROR_PATCHWELCOME; } - av_init_packet(&pkt); - pkt.data = data_start; - pkt.size = data_size; + av_packet_unref(s->pkt); + s->pkt->data = data_start; + s->pkt->size = data_size; - ret = ff_vp8_decode_frame(avctx, p, got_frame, &pkt); + ret = ff_vp8_decode_frame(avctx, p, got_frame, s->pkt); if (ret < 0) return ret; @@ -1527,10 +1527,23 @@ exif_end: return avpkt->size; } +static av_cold int webp_decode_init(AVCodecContext *avctx) +{ + WebPContext *s = avctx->priv_data; + + s->pkt = av_packet_alloc(); + if (!s->pkt) + return AVERROR(ENOMEM); + + return 0; +} + static av_cold int webp_decode_close(AVCodecContext *avctx) { WebPContext *s = avctx->priv_data; + av_packet_free(&s->pkt); + if (s->initialized) return ff_vp8_decode_free(avctx); @@ -1543,6 +1556,7 @@ AVCodec ff_webp_decoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_WEBP, .priv_data_size = sizeof(WebPContext), + .init = webp_decode_init, .decode = webp_decode_frame, .close = webp_decode_close, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, From patchwork Thu Feb 4 19:09:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25398 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 D5317448077 for ; Thu, 4 Feb 2021 21:10:53 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BDC8B68A192; Thu, 4 Feb 2021 21:10:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D4D1689D35 for ; Thu, 4 Feb 2021 21:10:52 +0200 (EET) Received: by mail-qt1-f170.google.com with SMTP id c1so3258524qtc.1 for ; Thu, 04 Feb 2021 11:10:52 -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=UckXziS53Jo7HuCTcoRtcVV7KlGye2cVVj8etXiWuG4=; b=XCr0SvfoYFhujQqxEYEAd52feKjq6i4j/V6YXCh4XwrFYYhOsD4MbdibSZtu7xa39b CzrBGWxe8c4tx41tKBu3s9IuOD837oM7QLk+TqDcX8Ilyvztk32/sGevDPQiwg4yKMm6 g2p8lqTN0JiVNf4AVGiOke95AZa0zCF6Fuumd7c+eD3igpRJVARgLqod2YB/3bw1RNoH mPXSym++e6NhduUj1D4YwYZoLNaLbzGLE/jFtQXFYKEgaZhpsO3q1sw7B9+IaEOsYBnw faHurVc5AiwCPE9LFipp4UUPfPtEXqO5CcqCHum8HA+7olc7vK9zpCXw/cG6b+dgNziQ 02uQ== 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=UckXziS53Jo7HuCTcoRtcVV7KlGye2cVVj8etXiWuG4=; b=izOQ1aGNqGzyCBjYanY4+DzO7lTc+JT9P0VKvDSi1gm42EMQMOdi34LRPkir6qaH4X n7pWS/wziAZN70OUBMr5mjGLNte8Oftxh7YgvYrFBknoWRtssCAANGPhOMbSnZlSwpaJ Roqb151suDxebRCdFKQwAcCx7x+6he5wnSpt7Jfnxrrtsl2u8V3hifR1TazDv085GWMg heM/9IVBUbfIzBNBrXlLGXoRA7KBi67xrzxHESeEE751L3qsC3ammF1mamU/GtvrABIc vxK6IIUPW5tmXUgFxkr8CFJ/Rdv6rz+y4dy/n4PV/yQPeFzvTxN2P8pTN1uK0cC1+jB1 2sUQ== X-Gm-Message-State: AOAM532To/Mr1anhnzBrgdtz63UB5qO/grConM1WIK5mXjTU6iHxb3xa NIQJWwfuIx4ZZHJ7yl5CTD9cWSYzbrA= X-Google-Smtp-Source: ABdhPJzhl7d1FjBp1HJispKoFeo3T4rqiRdmOUlopQsbU1KD57J+TTOEXsROXGwRiZv/FpgU3txRsQ== X-Received: by 2002:ac8:5cd0:: with SMTP id s16mr981875qta.309.1612465850786; Thu, 04 Feb 2021 11:10:50 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:50 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:26 -0300 Message-Id: <20210204191005.48190-12-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/50] avcodec/tests/avpacket: 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" Signed-off-by: James Almer --- libavcodec/tests/avpacket.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libavcodec/tests/avpacket.c b/libavcodec/tests/avpacket.c index 90b72341f4..7a70ade4c3 100644 --- a/libavcodec/tests/avpacket.c +++ b/libavcodec/tests/avpacket.c @@ -63,9 +63,6 @@ static int initializations(AVPacket* avpkt) const static uint8_t* data = "selftest for av_packet_clone(...)"; int ret = 0; - /* initialize avpkt */ - av_init_packet(avpkt); - /* set values for avpkt */ avpkt->pts = 17; avpkt->dts = 2; @@ -82,16 +79,24 @@ static int initializations(AVPacket* avpkt) int main(void) { - AVPacket avpkt; + AVPacket *avpkt = NULL; AVPacket *avpkt_clone = NULL; int ret = 0; - if(initializations(&avpkt) < 0){ + /* test av_packet_alloc */ + avpkt = av_packet_alloc(); + if(!avpkt) { + av_log(NULL, AV_LOG_ERROR, "av_packet_alloc failed to allcoate AVPacket\n"); + return 1; + } + + if (initializations(avpkt) < 0) { printf("failed to initialize variables\n"); + av_packet_free(&avpkt); return 1; } /* test av_packet_clone*/ - avpkt_clone = av_packet_clone(&avpkt); + avpkt_clone = av_packet_clone(avpkt); if(!avpkt_clone) { av_log(NULL, AV_LOG_ERROR,"av_packet_clone failed to clone AVPacket\n"); @@ -121,7 +126,7 @@ int main(void) } /*clean up*/ av_packet_free(&avpkt_clone); - av_packet_unref(&avpkt); + av_packet_free(&avpkt); return ret; From patchwork Thu Feb 4 19:09:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25399 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 B2225448077 for ; Thu, 4 Feb 2021 21:10:55 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 987B568A477; Thu, 4 Feb 2021 21:10:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ED9EA68A3A0 for ; Thu, 4 Feb 2021 21:10:53 +0200 (EET) Received: by mail-qk1-f173.google.com with SMTP id n15so4431688qkh.8 for ; Thu, 04 Feb 2021 11:10:53 -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=Rv5NcxaruHxh6/pjT0zUgWfyd2v1ov9Q1D2DDbPg86M=; b=AqcfKhjYqGbd5inVFteWCUmWEToGPslu0rO+CtEVcYE/8LsVT3GIDZ0CECHA0cuKqK yX0Kfb1FjDxDlC9WsaGdPKUkEZqUH7iBFM78bZB9WRpUKzrTfEALbgusmMfpAt397NKY dj7nLcdAyD7no5XeLQDFO7Q7/baNtt2HKU/B7Cw8rEw1v8iy6JiG2LL9SWOjP6M3HRT+ 2wuYbe4/ucJ8glqDx9v6tNRzSJ05Q/CNseE0S0y08BBj5FiUmqB2KBzgc/EQf49txy87 dC5GQ93anIPv1dsyQGHXbqd/+9Yuc1kN/fw2a+7PM+fOq7EgyT2Ntv8rfL3SL6og9EcB vqwA== 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=Rv5NcxaruHxh6/pjT0zUgWfyd2v1ov9Q1D2DDbPg86M=; b=HlYWV2T8D00458mUX30R68uf6tMc/kl0AJQkP9RcWDYi4Noa2ncOJaQ6tMqQiCLSvT 6JAZBCxW/hNIS2ZT/r9kJ6SeR91+BB3BvszoYtkZrevG0izhLRWNYx0OBva4CdORO0mf PBHuNVsaytL/iMVmvd6do9D4MXZZtc+ZnSbqpo4vFvFLviBT43Qk6j3xCBa0J9+xs96O KZqjKLA+u4cts6UrUs2TIWgW0994euIzrNjOByqtrEorgJQW/VdWL6Z/Qh0mxe0YZ0OB Tgq6cyw5h8jt+YbU3d9clLf2S+QoAl5bWciA+PKdmGABEupOwEzRtelZl87CquEA2JtG NlJQ== X-Gm-Message-State: AOAM531I48vagZSEoZ2SKU/+t54se5X/v14xmSWrEMnASSge/LjA0sQ6 rXB/7SHoTLbDH01sR6XYAb5wItja8v8= X-Google-Smtp-Source: ABdhPJw/eUPhsLlSqL++gDKhAwol00nPq7URihZC9mdJipyHDW9G9pHB1OdBD4XKIDje7ojjUHiVAg== X-Received: by 2002:a37:78c4:: with SMTP id t187mr626056qkc.139.1612465852230; Thu, 04 Feb 2021 11:10:52 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:51 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:27 -0300 Message-Id: <20210204191005.48190-13-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/50] avformat/amvenc: 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" Signed-off-by: James Almer --- libavformat/amvenc.c | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/libavformat/amvenc.c b/libavformat/amvenc.c index 4d4ec7a2b1..5d13b618f4 100644 --- a/libavformat/amvenc.c +++ b/libavformat/amvenc.c @@ -62,8 +62,8 @@ typedef struct AMVContext int32_t aframe_size; /* Expected audio frame size. */ int32_t ablock_align; /* Expected audio block align. */ - AVPacket apad; /* Dummy audio packet for padding. */ - AVPacket vpad; /* Most recent video frame, for padding. */ + AVPacket *apad; /* Dummy audio packet for padding. */ + AVPacket *vpad; /* Most recent video frame, for padding. */ /* * Cumulative PTS values for each stream, used for the final @@ -183,16 +183,25 @@ static av_cold int amv_init(AVFormatContext *s) } /* Allocate and fill dummy packet so we can pad the audio. */ - if ((ret = av_new_packet(&amv->apad, amv->ablock_align)) < 0) + amv->apad = av_packet_alloc(); + if (!amv->apad) + return AVERROR(ENOMEM); + if ((ret = av_new_packet(amv->apad, amv->ablock_align)) < 0) { + av_packet_free(&amv->apad); return ret; + } - amv->apad.stream_index = AMV_STREAM_AUDIO; - memset(amv->apad.data, 0, amv->ablock_align); - AV_WL32(amv->apad.data + 4, amv->aframe_size); + amv->apad->stream_index = AMV_STREAM_AUDIO; + memset(amv->apad->data, 0, amv->ablock_align); + AV_WL32(amv->apad->data + 4, amv->aframe_size); - av_init_packet(&amv->vpad); - amv->vpad.stream_index = AMV_STREAM_VIDEO; - amv->vpad.duration = 1; + amv->vpad = av_packet_alloc(); + if (!amv->vpad) { + av_packet_free(&amv->apad); + return AVERROR(ENOMEM); + } + amv->vpad->stream_index = AMV_STREAM_VIDEO; + amv->vpad->duration = 1; return 0; } @@ -200,8 +209,8 @@ static void amv_deinit(AVFormatContext *s) { AMVContext *amv = s->priv_data; - av_packet_unref(&amv->apad); - av_packet_unref(&amv->vpad); + av_packet_free(&amv->apad); + av_packet_free(&amv->vpad); } static void amv_write_vlist(AVFormatContext *s, AVCodecParameters *par) @@ -325,9 +334,9 @@ static int amv_pad(AVFormatContext *s, AVPacket *pkt) stream_index = (stream_index + 1) % s->nb_streams; if (stream_index == AMV_STREAM_VIDEO) - return amv_write_packet_internal(s, &amv->vpad); + return amv_write_packet_internal(s, amv->vpad); else if (stream_index == AMV_STREAM_AUDIO) - return amv_write_packet_internal(s, &amv->apad); + return amv_write_packet_internal(s, amv->apad); else av_assert0(0); @@ -348,8 +357,8 @@ static int amv_write_packet(AVFormatContext *s, AVPacket *pkt) if (pkt->stream_index == AMV_STREAM_VIDEO) { /* Save the last packet for padding. */ - av_packet_unref(&amv->vpad); - if ((ret = av_packet_ref(&amv->vpad, pkt)) < 0) + av_packet_unref(amv->vpad); + if ((ret = av_packet_ref(amv->vpad, pkt)) < 0) return ret; } @@ -366,7 +375,7 @@ static int amv_write_trailer(AVFormatContext *s) /* Pad-out one last audio frame if needed. */ if (amv->last_stream == AMV_STREAM_VIDEO) { - if ((ret = amv_write_packet_internal(s, &amv->apad)) < 0) + if ((ret = amv_write_packet_internal(s, amv->apad)) < 0) return ret; } From patchwork Thu Feb 4 19:09:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25400 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 91743448077 for ; Thu, 4 Feb 2021 21:10:56 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7B96D68A370; Thu, 4 Feb 2021 21:10:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5FA9568A329 for ; Thu, 4 Feb 2021 21:10:55 +0200 (EET) Received: by mail-qk1-f182.google.com with SMTP id x81so4489819qkb.0 for ; Thu, 04 Feb 2021 11:10:55 -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=a/wz1id2mH8tBNGqHl6wQgCGwH60R6lvPsmm+wvMPgo=; b=bF7VkVk69WmBQO7pyQ0eKbskglCclVWudSW3zo5EfJDK141FMqBG5cAK65YQkYUStQ 5feholcdQga6uZHEMSVQPSGekConx794LlqWG1Wcit2JqWW2+vOGdtwqeUtdf4KegWoJ 82o5ezVupD21XYmJTc53smnslOe19q85WTpUhYiRl8g5YzYRBibtrnBQE04PnkmXipGD 2fIVzefgqlTENaE1etZAS+FFkgojujI4r8AiT+tMYOjd2d68DzZPUB9hlIKEepJCvmiK dFzVv7XOooKOhrwvYkiL+j/EjI0aM10yElaX1elw7JTN51X0jKLNApcAZsUkEFakbGFz EYpw== 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=a/wz1id2mH8tBNGqHl6wQgCGwH60R6lvPsmm+wvMPgo=; b=gFxdAVWJdRVAVvGn6b9uPrdc90+X9DzcxCOu1TRniKjlgmTVwigLWYFiCoarTFSwdm 9QHwGK8elZhNGo4fSyv4ejxpgGrI5r1rWuQFGvDcIq31PtxXcCZWe/xd1ehgIYzX82Bn 2AcH4++GkE7gGZ818mXLyyxBhdscgen95U0Q8j1SAT3Iv5CK9o6j3t3xyZK307hnroc9 72VYedh8J/DDzTBrax8whB0EvzFj/mjFHGDRi4FrS2WHWO6/qydNCJKyHNngxvzZJYK5 /oRYxuvt+Zs5AvzIKre+hC/6i4JshWB3vRWJHGwtX5gzrPu/FRdul2CUDqEWxHk4nvAq 2OMw== X-Gm-Message-State: AOAM532BunMT2FpHA10voTlOciwReIDe8CRIzVQ8zM+uZJyjilkNGOGw 9ZOjBuBI4XrQlPBAY0vNIGZo1rrpaXk= X-Google-Smtp-Source: ABdhPJwElYZhlugjOK5v0360GxXHa2hynRZsue4NqjrpwLuC3ycue2+e0IEitR1aI8wK+J5HWtUsuQ== X-Received: by 2002:a37:7b02:: with SMTP id w2mr616979qkc.291.1612465853736; Thu, 04 Feb 2021 11:10:53 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:53 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:28 -0300 Message-Id: <20210204191005.48190-14-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/50] avformat/asfdec_o: 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" Signed-off-by: James Almer --- libavformat/asfdec_o.c | 63 ++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/libavformat/asfdec_o.c b/libavformat/asfdec_o.c index c1d90360b4..34ae541934 100644 --- a/libavformat/asfdec_o.c +++ b/libavformat/asfdec_o.c @@ -63,7 +63,7 @@ typedef struct GUIDParseTable { } GUIDParseTable; typedef struct ASFPacket { - AVPacket avpkt; + AVPacket *avpkt; int64_t dts; uint32_t frame_num; // ASF payloads with the same number are parts of the same frame int flags; @@ -781,8 +781,10 @@ static int asf_read_stream_properties(AVFormatContext *s, const GUIDParseTable * asf_st->index = st->index; asf_st->indexed = 0; st->id = flags & ASF_STREAM_NUM; - av_init_packet(&asf_st->pkt.avpkt); asf_st->pkt.data_size = 0; + asf_st->pkt.avpkt = av_packet_alloc(); + if (!asf_st->pkt.avpkt) + return AVERROR(ENOMEM); avio_skip(pb, 4); // skip reserved field switch (type) { @@ -1140,7 +1142,7 @@ static void reset_packet(ASFPacket *asf_pkt) asf_pkt->duration = 0; asf_pkt->flags = 0; asf_pkt->dts = 0; - av_packet_unref(&asf_pkt->avpkt); + av_packet_unref(asf_pkt->avpkt); } static int asf_read_replicated_data(AVFormatContext *s, ASFPacket *asf_pkt) @@ -1153,7 +1155,7 @@ static int asf_read_replicated_data(AVFormatContext *s, ASFPacket *asf_pkt) data_size = avio_rl32(pb); // read media object size if (data_size <= 0) return AVERROR_INVALIDDATA; - if ((ret = av_new_packet(&asf_pkt->avpkt, data_size)) < 0) + if ((ret = av_new_packet(asf_pkt->avpkt, data_size)) < 0) return ret; asf_pkt->data_size = asf_pkt->size_left = data_size; } else @@ -1194,7 +1196,7 @@ static int asf_read_multiple_payload(AVFormatContext *s, AVPacket *pkt, pay_len, asf->packet_size, avio_tell(pb)); return AVERROR_INVALIDDATA; } - p = asf_pkt->avpkt.data + asf_pkt->data_size - asf_pkt->size_left; + p = asf_pkt->avpkt->data + asf_pkt->data_size - asf_pkt->size_left; if (pay_len > asf_pkt->size_left) { av_log(s, AV_LOG_ERROR, "Error: invalid buffer size, pay_len %d, data size left %d.\n", @@ -1229,7 +1231,7 @@ static int asf_read_single_payload(AVFormatContext *s, ASFPacket *asf_pkt) data_size = avio_rl32(pb); // read media object size if (data_size <= 0) return AVERROR_EOF; - if ((ret = av_new_packet(&asf_pkt->avpkt, data_size)) < 0) + if ((ret = av_new_packet(asf_pkt->avpkt, data_size)) < 0) return ret; asf_pkt->data_size = asf_pkt->size_left = data_size; } else @@ -1250,7 +1252,7 @@ static int asf_read_single_payload(AVFormatContext *s, ASFPacket *asf_pkt) avio_tell(pb)); return AVERROR_INVALIDDATA; } - p = asf_pkt->avpkt.data + asf_pkt->data_size - asf_pkt->size_left; + p = asf_pkt->avpkt->data + asf_pkt->data_size - asf_pkt->size_left; if (size > asf_pkt->size_left || asf_pkt->size_left <= 0) return AVERROR_INVALIDDATA; if (asf_pkt->size_left > size) @@ -1387,16 +1389,18 @@ static int asf_deinterleave(AVFormatContext *s, ASFPacket *asf_pkt, int st_num) { ASFContext *asf = s->priv_data; ASFStream *asf_st = asf->asf_st[st_num]; - unsigned char *p = asf_pkt->avpkt.data; + unsigned char *p = asf_pkt->avpkt->data; uint16_t pkt_len = asf->asf_st[st_num]->virtual_pkt_len; uint16_t chunk_len = asf->asf_st[st_num]->virtual_chunk_len; int nchunks = pkt_len / chunk_len; - AVPacket pkt; + uint8_t *data; int pos = 0, j, l, ret; - if ((ret = av_new_packet(&pkt, asf_pkt->data_size)) < 0) - return ret; + data = av_malloc(asf_pkt->data_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!data) + return AVERROR(ENOMEM); + memset(data + asf_pkt->data_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); while (asf_pkt->data_size >= asf_st->span * pkt_len + pos) { if (pos >= asf_pkt->data_size) { @@ -1409,20 +1413,22 @@ static int asf_deinterleave(AVFormatContext *s, ASFPacket *asf_pkt, int st_num) for (j = 0; j < asf_st->span; j++) { if ((pos + chunk_len) >= asf_pkt->data_size) break; - memcpy(pkt.data + pos, + memcpy(data + pos, p + (j * nchunks + l) * chunk_len, chunk_len); pos += chunk_len; } } p += asf_st->span * pkt_len; - if (p > asf_pkt->avpkt.data + asf_pkt->data_size) + if (p > asf_pkt->avpkt->data + asf_pkt->data_size) break; } - av_packet_unref(&asf_pkt->avpkt); - asf_pkt->avpkt = pkt; + av_packet_unref(asf_pkt->avpkt); + ret = av_packet_from_data(asf_pkt->avpkt, data, asf_pkt->data_size); + if (ret < 0) + av_free(data); - return 0; + return ret; } static int asf_read_packet(AVFormatContext *s, AVPacket *pkt) @@ -1492,7 +1498,7 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt) asf->asf_st[i]->type == AVMEDIA_TYPE_AUDIO) if ((ret = asf_deinterleave(s, asf_pkt, i)) < 0) return ret; - av_packet_move_ref(pkt, &asf_pkt->avpkt); + av_packet_move_ref(pkt, asf_pkt->avpkt); pkt->stream_index = asf->asf_st[i]->index; pkt->flags = asf_pkt->flags; pkt->dts = asf_pkt->dts - asf->preroll; @@ -1517,7 +1523,7 @@ static int asf_read_close(AVFormatContext *s) for (i = 0; i < ASF_MAX_STREAMS; i++) { av_dict_free(&asf->asf_sd[i].asf_met); if (i < asf->nb_streams) { - av_packet_unref(&asf->asf_st[i]->pkt.avpkt); + av_packet_free(&asf->asf_st[i]->pkt.avpkt); av_freep(&asf->asf_st[i]); } } @@ -1567,9 +1573,12 @@ static int64_t asf_read_timestamp(AVFormatContext *s, int stream_index, { ASFContext *asf = s->priv_data; int64_t pkt_pos = *pos, pkt_offset, dts = AV_NOPTS_VALUE, data_end; - AVPacket pkt; + AVPacket *pkt = av_packet_alloc(); int n; + if (!pkt) + return AVERROR(ENOMEM); + data_end = asf->data_offset + asf->data_size; n = (pkt_pos - asf->first_packet_offset + asf->packet_size - 1) / @@ -1585,9 +1594,9 @@ static int64_t asf_read_timestamp(AVFormatContext *s, int stream_index, int i, ret, st_found; - av_init_packet(&pkt); pkt_offset = avio_tell(s->pb); - if ((ret = asf_read_packet(s, &pkt)) < 0) { + if ((ret = asf_read_packet(s, pkt)) < 0) { + av_packet_free(&pkt); dts = AV_NOPTS_VALUE; return ret; } @@ -1599,11 +1608,11 @@ static int64_t asf_read_timestamp(AVFormatContext *s, int stream_index, ASFStream *st = asf->asf_st[i]; st_found = 0; - if (pkt.flags & AV_PKT_FLAG_KEY) { - dts = pkt.dts; + if (pkt->flags & AV_PKT_FLAG_KEY) { + dts = pkt->dts; if (dts) { - av_add_index_entry(s->streams[pkt.stream_index], pkt_pos, - dts, pkt.size, 0, AVINDEX_KEYFRAME); + av_add_index_entry(s->streams[pkt->stream_index], pkt_pos, + dts, pkt->size, 0, AVINDEX_KEYFRAME); if (stream_index == st->index) { st_found = 1; break; @@ -1613,11 +1622,11 @@ static int64_t asf_read_timestamp(AVFormatContext *s, int stream_index, } if (st_found) break; - av_packet_unref(&pkt); + av_packet_unref(pkt); } *pos = pkt_pos; - av_packet_unref(&pkt); + av_packet_free(&pkt); return dts; } From patchwork Thu Feb 4 19:09:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25401 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 87E70448077 for ; Thu, 4 Feb 2021 21:10:58 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6D99868A675; Thu, 4 Feb 2021 21:10:58 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B3C1568A56C for ; Thu, 4 Feb 2021 21:10:56 +0200 (EET) Received: by mail-qk1-f170.google.com with SMTP id s77so4460747qke.4 for ; Thu, 04 Feb 2021 11:10:56 -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=8mf8QciBeECNnY4FivJ4XrWGHjPHgiGapUyqtZISTbU=; b=rCofW7ZnLnse3fDtYlCmOBi7TT27mY9LSbqtH7eYqy4YPdiY/Uk9YTWXsaHbf/EAXN 0XdfwKcwKYb/iFaRsgH1udvND4f9chWGelh3VvJI950QcvrByyW4le65qZgKQg13fENA tjs4Uhrx3WmUxtulb/FAjJMBp8RRcRh83DRbgmZBL893/hJzVYGBnOSbbMfIoDy8gUTn vraKmzhAtnvN/S23vyARY844qL9x8Fm6Y0fu2VMB7Hfn2Xd6ifg7j4AecdsA2lF37miZ mMwtsNnBSC/lQ09+Y8PMGAVz5He9INsTs+E2nne+IDHV7Yk7mdtMOXWhalVT6Pf4y6BE DwBQ== 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=8mf8QciBeECNnY4FivJ4XrWGHjPHgiGapUyqtZISTbU=; b=E8GFfpiixP9Tm7A+2HItfSUeJWb1DgkGfu+KKaAuDcUsTkFq13feMYSgnjnjL5o5ZD VjDAX+149skzuJ3NdcVM3NA0aNu1Fs9+zLJrqNCLMGsVlEU0U4FHJHmlP8PsCvUOpzFS d8fZAX4wZVxZ6b4gjScYsa+nW3afdEMMnO+3yewvEd873bVtjy9tsHcvPOHcCnnJNLYr Dh9MpwsPvBJrpdFn1PggmaHWLVNonLP1WsILS528YQUUU0vaUPC88JEYcik3vrp/TM3M rtRULSiclbHifADG81cqPjha8B58jNBt7zwIAU3hG1/rK2yiWIZ4uqtsSED1cIJ59iBh nTqg== X-Gm-Message-State: AOAM533PHmOJuK/oS46ecE9SlIzFIFZrhUh4GetD8cF0ygUkR7ppDNM+ XC/2ukAZiUwG2EvivenfLjt2pmS9ThY= X-Google-Smtp-Source: ABdhPJwv+/cDX3NXeeOS2nVXfxW7vh41W6rD4rpGmY2VhBW87M95JDRLsqjuS1e7BoiITz0bp8lCdg== X-Received: by 2002:a05:620a:24c:: with SMTP id q12mr612488qkn.203.1612465855158; Thu, 04 Feb 2021 11:10:55 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:54 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:29 -0300 Message-Id: <20210204191005.48190-15-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/50] avformat/avidec: 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" Signed-off-by: James Almer --- libavformat/avidec.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 79000f3e81..0dd447aa7f 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -59,7 +59,7 @@ typedef struct AVIStream { * the MS dshow demuxer */ AVFormatContext *sub_ctx; - AVPacket sub_pkt; + AVPacket *sub_pkt; AVBufferRef *sub_buffer; int64_t seek_pos; @@ -1124,6 +1124,9 @@ static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) if (strcmp(sub_demuxer->name, "srt") && strcmp(sub_demuxer->name, "ass")) goto error; + if (!(ast->sub_pkt = av_packet_alloc())) + goto error; + if (!(ast->sub_ctx = avformat_alloc_context())) goto error; @@ -1135,7 +1138,7 @@ static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) if (!avformat_open_input(&ast->sub_ctx, "", sub_demuxer, NULL)) { if (ast->sub_ctx->nb_streams != 1) goto error; - ff_read_packet(ast->sub_ctx, &ast->sub_pkt); + ff_read_packet(ast->sub_ctx, ast->sub_pkt); avcodec_parameters_copy(st->codecpar, ast->sub_ctx->streams[0]->codecpar); time_base = ast->sub_ctx->streams[0]->time_base; avpriv_set_pts_info(st, 64, time_base.num, time_base.den); @@ -1146,6 +1149,7 @@ static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) return 1; error: + av_packet_free(&ast->sub_pkt); av_freep(&ast->sub_ctx); avio_context_free(&pb); } @@ -1166,8 +1170,8 @@ static AVStream *get_subtitle_pkt(AVFormatContext *s, AVStream *next_st, for (i = 0; i < s->nb_streams; i++) { st = s->streams[i]; ast = st->priv_data; - if (st->discard < AVDISCARD_ALL && ast && ast->sub_pkt.data) { - ts = av_rescale_q(ast->sub_pkt.dts, st->time_base, AV_TIME_BASE_Q); + if (st->discard < AVDISCARD_ALL && ast && ast->sub_pkt && ast->sub_pkt->data) { + ts = av_rescale_q(ast->sub_pkt->dts, st->time_base, AV_TIME_BASE_Q); if (ts <= next_ts && ts < ts_min) { ts_min = ts; sub_st = st; @@ -1177,11 +1181,11 @@ static AVStream *get_subtitle_pkt(AVFormatContext *s, AVStream *next_st, if (sub_st) { ast = sub_st->priv_data; - *pkt = ast->sub_pkt; + av_packet_move_ref(pkt, ast->sub_pkt); pkt->stream_index = sub_st->index; - if (ff_read_packet(ast->sub_ctx, &ast->sub_pkt) < 0) - ast->sub_pkt.data = NULL; + if (ff_read_packet(ast->sub_ctx, ast->sub_pkt) < 0) + ast->sub_pkt->data = NULL; } return sub_st; } @@ -1800,10 +1804,10 @@ static void seek_subtitle(AVStream *st, AVStream *st2, int64_t timestamp) { AVIStream *ast2 = st2->priv_data; int64_t ts2 = av_rescale_q(timestamp, st->time_base, st2->time_base); - av_packet_unref(&ast2->sub_pkt); + av_packet_unref(ast2->sub_pkt); if (avformat_seek_file(ast2->sub_ctx, 0, INT64_MIN, ts2, ts2, 0) >= 0 || avformat_seek_file(ast2->sub_ctx, 0, ts2, ts2, INT64_MAX, 0) >= 0) - ff_read_packet(ast2->sub_ctx, &ast2->sub_pkt); + ff_read_packet(ast2->sub_ctx, ast2->sub_pkt); } static int avi_read_seek(AVFormatContext *s, int stream_index, @@ -1937,7 +1941,7 @@ static int avi_read_close(AVFormatContext *s) avformat_close_input(&ast->sub_ctx); } av_buffer_unref(&ast->sub_buffer); - av_packet_unref(&ast->sub_pkt); + av_packet_free(&ast->sub_pkt); } } From patchwork Thu Feb 4 19:09:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25402 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 934D0448077 for ; Thu, 4 Feb 2021 21:11:00 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7C75468A5CC; Thu, 4 Feb 2021 21:11:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0BF7C68A558 for ; Thu, 4 Feb 2021 21:10:58 +0200 (EET) Received: by mail-qk1-f170.google.com with SMTP id a12so4419160qkh.10 for ; Thu, 04 Feb 2021 11:10:57 -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=1m0oLs0eGGPjgYae43TRc0rWDufcTHKFKackRRIKUZM=; b=MwYys19Auioy9e6RtBglVDZgTk88Eh7GqhY+kJQ2+2dl8c5fIXhAKVpfVIHtMb59dd yI1rGJ2vN5UxbuDpS9KD5WCtOvNPklXqP6AWijJyS0Uv7mRT4aPLYUAbdd8szsAdzrIg gwJsBKASnRgsx5JzX5o1pGw40m6RrAi2larmcopYKLqAYjiWhmPjzQnyLT00ULYawx/4 DJI2V/ASDVFQm24e6Zg9cDbmoPL1lJ2GEU2DxhI4ycqILwg5za6tp7/RuezUB9v67V/N F88HxnfxRJt38TjurNYJkqDHdQp9HWDHbSfUby1sAxOBLePzHhhshbKvAfDWHAU1PW9K NhRg== 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=1m0oLs0eGGPjgYae43TRc0rWDufcTHKFKackRRIKUZM=; b=DhAxNDb5/aPU+E305KnBIXANItW9yDpFb4TnLML/Fu90+tz0ELTYWYXi6tfWsM4NGK fRBjUQKUnn0Uc2Pcr/qt18jIxLHr/ymhxa9YFyun3jzIaE1O3CRua/UZIT6TV/S2VJcO fpCsSg9fVs2MJlgfnTj0iArbRZigRkL3aS+g8VeyJATXjW/J3BUYEIYkAut3E6d3tA14 5MscIo0cfCuKS8rqXW3Cd4m6bJdjEBre8qfvxYV2OuGf6BSgtLrJfChEM2XPOFubmLSH BfEhuIReX8wVLa8g8fH1+BOEEp8eXzeiUgX/LHm2SZKBrF+bU0mPlwVSuWuhw4X/4cn6 EHVA== X-Gm-Message-State: AOAM532c5Rhonqfs7VcxsXEpFxvGhLg893jEetlq+fgsIeaVPM59RzoZ jg2BpGd1sEEDIyLKkDhzMcwdwMjD3B0= X-Google-Smtp-Source: ABdhPJyto8DX+ZKlryvE68MCndVkB0PYf1ZFy6IcyFqUqemCJXKuouPY12LOQ4mFQaHAQecoe14dSw== X-Received: by 2002:a37:63d4:: with SMTP id x203mr637951qkb.105.1612465856621; Thu, 04 Feb 2021 11:10:56 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:56 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:30 -0300 Message-Id: <20210204191005.48190-16-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 15/50] avformat/avienc: 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" Signed-off-by: James Almer --- libavformat/avienc.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libavformat/avienc.c b/libavformat/avienc.c index 1b2cb529b9..58bd081fcb 100644 --- a/libavformat/avienc.c +++ b/libavformat/avienc.c @@ -85,6 +85,8 @@ typedef struct AVIStream { int64_t last_dts; + AVPacket *empty_packet; + AVIIndex indexes; int64_t strh_flags_offset; @@ -275,9 +277,17 @@ static int avi_write_header(AVFormatContext *s) } for (n = 0; n < s->nb_streams; n++) { + AVIStream *avist; + s->streams[n]->priv_data = av_mallocz(sizeof(AVIStream)); if (!s->streams[n]->priv_data) return AVERROR(ENOMEM); + + avist = s->streams[n]->priv_data; + avist->empty_packet = av_packet_alloc(); + if (!avist->empty_packet) + return AVERROR(ENOMEM); + avist->empty_packet->stream_index = n; } /* header list */ @@ -745,18 +755,13 @@ static int write_skip_frames(AVFormatContext *s, int stream_index, int64_t dts) ff_dlog(s, "dts:%s packet_count:%d stream_index:%d\n", av_ts2str(dts), avist->packet_count, stream_index); while (par->block_align == 0 && dts != AV_NOPTS_VALUE && dts > avist->packet_count && par->codec_id != AV_CODEC_ID_XSUB && avist->packet_count) { - AVPacket empty_packet; if (dts - avist->packet_count > 60000) { av_log(s, AV_LOG_ERROR, "Too large number of skipped frames %"PRId64" > 60000\n", dts - avist->packet_count); return AVERROR(EINVAL); } - av_init_packet(&empty_packet); - empty_packet.size = 0; - empty_packet.data = NULL; - empty_packet.stream_index = stream_index; - avi_write_packet_internal(s, &empty_packet); + avi_write_packet_internal(s, avist->empty_packet); ff_dlog(s, "dup dts:%s packet_count:%d\n", av_ts2str(dts), avist->packet_count); } @@ -985,6 +990,7 @@ static void avi_deinit(AVFormatContext *s) for (int j = 0; j < avist->indexes.ents_allocated / AVI_INDEX_CLUSTER_SIZE; j++) av_freep(&avist->indexes.cluster[j]); av_freep(&avist->indexes.cluster); + av_packet_free(&avist->empty_packet); avist->indexes.ents_allocated = avist->indexes.entry = 0; } } From patchwork Thu Feb 4 19:09:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25444 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a5b:101:0:0:0:0:0 with SMTP id 1csp1376251ybx; Thu, 4 Feb 2021 11:12:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJzDz9Vrqmn2ovTex6EukUHk1PNvPtcQT7xTYxua4DcvEh6aCoQc+4/XPhlLzzyaydXOFtiO X-Received: by 2002:a17:907:933:: with SMTP id au19mr562593ejc.51.1612465961161; Thu, 04 Feb 2021 11:12:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612465961; cv=none; d=google.com; s=arc-20160816; b=CuoCuQ96S/didz4ZQd8FGiE990JOZIefLf8UJfaIX0BUv0AfcPKz8LwzNc4PywbqO7 y9NYrmi7zrlV5rt39mqnKtzxw7JQsP1tPHEASe6KG9agPpJedZwxUddHyuI56PlkzNnt BbUzpAXsoBfpm9By4bL/fcXk0PM7SrROfCt4R44L/q7AqK+Hd7CRZY2apkiPpki3lera 0nBe/WXnR8XaTWk/DnLZUmlv4KzGewixouotQ+mrBAI9mBLquhM3XI7C8wjcQFki7s5j mARSE5Z5p66+/464YeKEPRdECjTXjO5m6xXAnQ/OY+CxE3mn7XmXhTOVzseYLaesYWQp zGdg== 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=6wR8d8czPSW2hKy7UtvYz58oGQnA3c/s/4nVT16yq/g=; b=RKGeehX0jZtGvG7cpDoo4+UTFtwogGfYJQyG8yaOOm3gQBDoPzPsLjZBzSXnDqfy+q 1rkbCgE5ay93CiFLZ8mV4XedR66F/O6J2350vFFvO4oJBafBUVmTNbR/Z4I71sckpknF zpH4AW2+1v9YJYlKGpBveSoPDbncrQJSzMy5SHF/Sjfrd72uxaA/pOQ237qV3BO32wwp 6NkkHIJ521ZfCruAzMWCUMZTWRSkQM1/pBWTdM8cgsrnh8CfyyaQCqVaumSWxhfn4iz3 NTaljgBLFmaZguKHURmSqqTgBgcfxjKSqDu3fWuPikhzx+z9ERApbzKAjTMUemmKCnin gAFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=VqP5jWG4; 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 m19si3471028ejj.220.2021.02.04.11.12.40; Thu, 04 Feb 2021 11:12:41 -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=VqP5jWG4; 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 C3C3968A779; Thu, 4 Feb 2021 21:11:01 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02BBC6880AF for ; Thu, 4 Feb 2021 21:10:59 +0200 (EET) Received: by mail-qt1-f169.google.com with SMTP id e11so3223262qtg.6 for ; Thu, 04 Feb 2021 11:10:59 -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=kGUf7GpJDUg/AMJ01vO/31sHTCnRNffWzJgst1pmEyw=; b=VqP5jWG46/yGMI4XTWV7E2cE9mgL+QXPkH0u4jDIvEtEnnyW/dekqO2wV3dmkCKJ01 P00fOMZj8NnWgcRtVIg8yZy1m/VCLlmbBGcvlmBzDZmD55teY+4O0NbBITDsfL/aY81k 2abQmgeSfv46IDHcf/3LIJg8ndmUwjt6Xux2NAQHhL4QZf5sxhvwGWiiC+1jKx/Mvg05 3cV/LpjLiRUoCkA3LGqjUG1iAGBysGl15mUc6Xd6pDVGw73ZeJMnw73dFxS8O9XZOWjK uH2Sm+Gnr8YaDyHujmHQzguvz6FBiOH48KXEdYi+dAgPpVCHBb14Wy/X79s7FtetBUGJ bBPg== 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=kGUf7GpJDUg/AMJ01vO/31sHTCnRNffWzJgst1pmEyw=; b=GmXmanTQirprxppwig4xvu1jAAMA6NOPkuT07JKQK+7IvGMpv+wLtvZ8Z2iQc6Szv0 AyJGVe7mLW/a4pZOa75RdT/rCc2NvJ9DFJ6yBAuiIxTx6oEomKhEIlIbL4wi48sqCFHM LurEThlfSDmppr/4EipEffGAc3QllRVsXbPQdjBK3YbWP6eVB90Cpih4DOBedrqEG45v X+n1AhFEaW5DIH3m4zLAgELXx0NcTLX52EYTnYB19mhD1t6QDbUK4RLyq6RUMJn0wdjy lJfPjH2DoRQxcFwbS/tYWZIm8bf12AXqeXTr90hiYC37Avzxw28lEeCGgIhNb3l6VEwv K/mg== X-Gm-Message-State: AOAM530faDUIdw4nHAGJlUPABbOMYe3NTpn5/YSbxX5iO1cFRmqU0Oom QpspGny82aRBsX7mHmCDlupOtCZOSA8= X-Received: by 2002:ac8:768c:: with SMTP id g12mr1085186qtr.24.1612465858065; Thu, 04 Feb 2021 11:10:58 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:57 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:31 -0300 Message-Id: <20210204191005.48190-17-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/50] avformat/dv: 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: K/TYcOShWtat Content-Length: 8179 Signed-off-by: James Almer --- This one must be committed after the upcoming major bump, as it changes the return value of an avpriv function. libavdevice/iec61883.c | 2 +- libavformat/dv.c | 56 ++++++++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/libavdevice/iec61883.c b/libavdevice/iec61883.c index cafafb2672..4582ada151 100644 --- a/libavdevice/iec61883.c +++ b/libavdevice/iec61883.c @@ -191,7 +191,7 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt) int size; size = avpriv_dv_get_packet(dv->dv_demux, pkt); - if (size > 0) + if (size) return size; packet = dv->queue_first; diff --git a/libavformat/dv.c b/libavformat/dv.c index 26a78139f5..f5c0c44afc 100644 --- a/libavformat/dv.c +++ b/libavformat/dv.c @@ -45,7 +45,7 @@ struct DVDemuxContext { AVFormatContext* fctx; AVStream* vst; AVStream* ast[4]; - AVPacket audio_pkt[4]; + AVPacket *audio_pkt[4]; uint8_t audio_buf[4][8192]; int ach; int frames; @@ -261,11 +261,10 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame) c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; c->ast[i]->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; - av_init_packet(&c->audio_pkt[i]); - c->audio_pkt[i].size = 0; - c->audio_pkt[i].data = c->audio_buf[i]; - c->audio_pkt[i].stream_index = c->ast[i]->index; - c->audio_pkt[i].flags |= AV_PKT_FLAG_KEY; + c->audio_pkt[i]->size = 0; + c->audio_pkt[i]->data = c->audio_buf[i]; + c->audio_pkt[i]->stream_index = c->ast[i]->index; + c->audio_pkt[i]->flags |= AV_PKT_FLAG_KEY; } c->ast[i]->codecpar->sample_rate = dv_audio_frequency[freq]; c->ast[i]->codecpar->channels = 2; @@ -332,6 +331,12 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c) c->vst->codecpar->bit_rate = 25000000; c->vst->start_time = 0; + for (int i = 0; i < 4; i++) { + c->audio_pkt[i] = av_packet_alloc(); + if (!c->audio_pkt[i]) + return AVERROR(ENOMEM); + } + return 0; } @@ -353,13 +358,15 @@ DVDemuxContext *avpriv_dv_init_demux(AVFormatContext *s) int avpriv_dv_get_packet(DVDemuxContext *c, AVPacket *pkt) { - int size = -1; + int size = 0; int i; for (i = 0; i < c->ach; i++) { - if (c->ast[i] && c->audio_pkt[i].size) { - *pkt = c->audio_pkt[i]; - c->audio_pkt[i].size = 0; + if (c->ast[i] && c->audio_pkt[i]->size) { + int ret = av_packet_ref(pkt, c->audio_pkt[i]); + if (ret < 0) + return ret; + c->audio_pkt[i]->size = 0; size = pkt->size; break; } @@ -384,9 +391,9 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt, /* FIXME: in case of no audio/bad audio we have to do something */ size = dv_extract_audio_info(c, buf); for (i = 0; i < c->ach; i++) { - c->audio_pkt[i].pos = pos; - c->audio_pkt[i].size = size; - c->audio_pkt[i].pts = (c->sys->height == 720) ? (c->frames & ~1) : c->frames; + c->audio_pkt[i]->pos = pos; + c->audio_pkt[i]->size = size; + c->audio_pkt[i]->pts = (c->sys->height == 720) ? (c->frames & ~1) : c->frames; ppcm[i] = c->audio_buf[i]; } if (c->ach) @@ -396,15 +403,14 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt, * channels 0,1 and odd 2,3. */ if (c->sys->height == 720) { if (buf[1] & 0x0C) { - c->audio_pkt[2].size = c->audio_pkt[3].size = 0; + c->audio_pkt[2]->size = c->audio_pkt[3]->size = 0; } else { - c->audio_pkt[0].size = c->audio_pkt[1].size = 0; + c->audio_pkt[0]->size = c->audio_pkt[1]->size = 0; } } /* Now it's time to return video packet */ size = dv_extract_video_info(c, buf); - av_init_packet(pkt); pkt->data = buf; pkt->pos = pos; pkt->size = size; @@ -439,8 +445,8 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c, void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset) { c->frames = frame_offset; - c->audio_pkt[0].size = c->audio_pkt[1].size = 0; - c->audio_pkt[2].size = c->audio_pkt[3].size = 0; + c->audio_pkt[0]->size = c->audio_pkt[1]->size = 0; + c->audio_pkt[2]->size = c->audio_pkt[3]->size = 0; } /************************************************************ @@ -539,7 +545,7 @@ static int dv_read_packet(AVFormatContext *s, AVPacket *pkt) size = avpriv_dv_get_packet(&c->dv_demux, pkt); - if (size < 0) { + if (!size) { int ret; int64_t pos = avio_tell(s->pb); if (!c->dv_demux.sys) @@ -614,6 +620,17 @@ static int dv_probe(const AVProbeData *p) return 0; } +static int dv_read_close(AVFormatContext *s) +{ + RawDVContext *r = s->priv_data; + DVDemuxContext *c = &r->dv_demux; + + for (int i = 0; i < 4; i++) + av_packet_free(&c->audio_pkt[i]); + + return 0; +} + AVInputFormat ff_dv_demuxer = { .name = "dv", .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), @@ -622,5 +639,6 @@ AVInputFormat ff_dv_demuxer = { .read_header = dv_read_header, .read_packet = dv_read_packet, .read_seek = dv_read_seek, + .read_close = dv_read_close, .extensions = "dv,dif", }; From patchwork Thu Feb 4 19:09:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25403 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 317E5448077 for ; Thu, 4 Feb 2021 21:11:04 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1CDA668A77B; Thu, 4 Feb 2021 21:11:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C0A868A755 for ; Thu, 4 Feb 2021 21:11:00 +0200 (EET) Received: by mail-qk1-f174.google.com with SMTP id a19so4486648qka.2 for ; Thu, 04 Feb 2021 11:11:00 -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=RZ7TtkMMX0XgGFHn2R5r8m01hGacN7yJhMynt2ZYeNI=; b=soLVa+Z49T5Lgh90jQ2iGkoSHLwDBHXGZE95YEcPZHGqtQh2geu0+hzDrFk61afb0O Qys18IXkJcW9juiNJVbCXPmTQimI1BgcQHGpgo0LgrY04zzUPUhn/kIuouHyynyilU0U +SZMHVzrY2xUhqkgBM4rTM4v6kC1YiHrM+Y+8hoYlmL5LteULh3pTFliCFP6f2wFcZAB WYCSFBVkCJGdXYUTavMizCkRx5EmWzUWZPeDngq2B7G1umy+VS+8l7jg1a1lHuKFGtgB PNh5kBnr2Vm7Ipq4IP3sU9uU8gQ11BHPmbgxKqSqHbDw0bV3AXIDkslI4ah6UIg8SmKA z3jw== 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=RZ7TtkMMX0XgGFHn2R5r8m01hGacN7yJhMynt2ZYeNI=; b=qMwbbyck86cZyInRoKohMXqC0jHzLpLdPbwG/4pMxis4w9yJZX3g8fJH6EN/FaMjFI wCUT0hnxT318D/zok7sOReR3fVbd+zrxTGV0rtNUZv7wOQNZOdpDTUd/Ll7mwwr/7DXP bLhU0E3cTsTbwSFeIwZywHDYYJYGvK3N1FL1tDvhhKlj2xpghCKaxB0zxTdPSPZ6T9+c dAWUCdnW16fE7IJvujyETPD6QpFDwfvRlpYCBLHUcNfZc3deaRQk+pSIT4u6Pnv8Lt6S 6k3+U2z8ZErAn6TEgEAUZ9ukfvRI+Scyu2mqNtr71kZb0NZ/GtGScxC7oFemMkwTwMFG QTPQ== X-Gm-Message-State: AOAM531iDxnp43HD/3VHJXp9klyJuEmBwukZY//wdq4djF72tSdPdd2O EnlCcsAvpYWqYREOvmg50gKZxWwZb+k= X-Google-Smtp-Source: ABdhPJw5RQueJnsFuQKoHY/E0iFTTmfeGcF46A+cYOO4i9sH+3W0gKVRUJw98kHo8tp1gmQ8+eXyiw== X-Received: by 2002:a05:620a:15ab:: with SMTP id f11mr638389qkk.498.1612465859664; Thu, 04 Feb 2021 11:10:59 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:10:59 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:32 -0300 Message-Id: <20210204191005.48190-18-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 17/50] avformat/flac_picture: replace call to av_init_packet() 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" Signed-off-by: James Almer --- libavformat/flac_picture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/flac_picture.c b/libavformat/flac_picture.c index 53e24b28b7..f15cfa877a 100644 --- a/libavformat/flac_picture.c +++ b/libavformat/flac_picture.c @@ -165,7 +165,7 @@ int ff_flac_parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size, int tr RETURN_ERROR(AVERROR(ENOMEM)); } - av_init_packet(&st->attached_pic); + av_packet_unref(&st->attached_pic); st->attached_pic.buf = data; st->attached_pic.data = data->data; st->attached_pic.size = len; From patchwork Thu Feb 4 19:09:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25404 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 E271B448077 for ; Thu, 4 Feb 2021 21:11:04 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D221A68A7FD; Thu, 4 Feb 2021 21:11:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B18C868A77B for ; Thu, 4 Feb 2021 21:11:02 +0200 (EET) Received: by mail-qt1-f173.google.com with SMTP id h16so3195568qth.11 for ; Thu, 04 Feb 2021 11:11:02 -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=RhQaKCpQseDnTCA4XNzU5CLyNrk4fhz9lvsnD2FiDDA=; b=kMFlPfJBZZgPbVA7Ai/AP0dI7Q7asmyVSmk15msB6tWUpx2uiJ+enS1c7dD0wPrstD 1QSl194RsaMoZlNHbiJTEaqoKTSpxdsbjzrhDifSsBUma2KOcYNQxUqbFqo1OHoxWQAZ oGcEcO1krvVyzQciaS6l18KyvlT0zkm9oUElRzBrLvBEsIS7qPcJ24zc48hSvqGenPlV spoLt4nrcIYDVL4Rs85LltF99VRQgjqE4g/yHYRKUIbNawaE1jL7SY55vVqdVgBGCzaF qRjLl2Ulqf83TKsQbgYjpvZMGI1zFmfYBMZcHBZ3ppDbV6jh+5YkafKTeG3k//s7Guo+ 19oQ== 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=RhQaKCpQseDnTCA4XNzU5CLyNrk4fhz9lvsnD2FiDDA=; b=CKtU/giz4+f6/O/JbCyLDg8d44TZYuNYZ+vnRdCErSJbNnnkQ9GBW7v5eZAVBdhoQy UgEPKlcSEwEDJqweK0pTkpLTIE6MmaWcB1r7JGv23Wav0Or5yxIscqDHfzjoxmoMnvw7 nF7qCebum/Wsw+zZ0X3F4SDZn+VBzAe2k0hF7NF4T232AP3mx6Rp+5IhbRiZVHTvI9Ga eAP831NTCT6mcz+BeqIIJNxqZeTe+gwbMm/91YkUbGVH4IasonOt8E5GnVYwAr59F9oR LbsXHJCASUXAiHF+aJNAt9ET4MBYkRDfDSz2qnU7PIhdy00RylwJIFEweM48hR0ZAOSX ewQA== X-Gm-Message-State: AOAM531cRxZmfWjjfRoZEsHkvP0Gnrn5MorhnJt+9T9rCIScy7Zyd3PU iq42Pxj7ztIyTS+dMJH6u2+QOEIeO+M= X-Google-Smtp-Source: ABdhPJxYPWhQMFXuwc8IuH94gmDbdw8F3Sx+eSJmmmHnhLPho9yj/Obxe5QaO/NM/gGxb3AjdpcJqA== X-Received: by 2002:ac8:4510:: with SMTP id q16mr1080751qtn.144.1612465861096; Thu, 04 Feb 2021 11:11:01 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.10.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:00 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:33 -0300 Message-Id: <20210204191005.48190-19-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 18/50] avformat/id3v2: replace call to av_init_packet() 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" Signed-off-by: James Almer --- libavformat/id3v2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c index 97f6cc8a68..3800f21ef9 100644 --- a/libavformat/id3v2.c +++ b/libavformat/id3v2.c @@ -1159,7 +1159,7 @@ int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta *extra_meta) av_dict_set(&st->metadata, "comment", apic->type, 0); - av_init_packet(&st->attached_pic); + av_packet_unref(&st->attached_pic); st->attached_pic.buf = apic->buf; st->attached_pic.data = apic->buf->data; st->attached_pic.size = apic->buf->size - AV_INPUT_BUFFER_PADDING_SIZE; From patchwork Thu Feb 4 19:09:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25405 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 BACB2448077 for ; Thu, 4 Feb 2021 21:11:06 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A56D968A791; Thu, 4 Feb 2021 21:11:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E328768A33F for ; Thu, 4 Feb 2021 21:11:03 +0200 (EET) Received: by mail-qk1-f173.google.com with SMTP id a12so4419518qkh.10 for ; Thu, 04 Feb 2021 11:11:03 -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=vYDZ2n4KqxB5Eoy08fM04FZI3Tnm5OXQvN8gYAKx9Rw=; b=a87ERa2pMM0oZe9elX972g5BoXsgkCwx60ZW2Iz3mjezIAqBBtyUZHR4FkIlpQrPe8 ovI+1+BpzxnxZ1OeYG33gRT4dEttxcNIkMsasW81wFDO7gBrQXxb2PbBMTUx8WzAr7xb gurUP6P7m5HinAl2xNHkXBOwnbDhQ10oUTY+lJMkYMYPg9CqcnQjB44XsrkwEsvHouCu 74jX78WH3O3VPSm2Br3mwevfbPATHBOLx3QX4xmUQvHflkTpCXUHvY5SfvTp+EnjTH4w VteKb8QmhT3cGXsAcToq9leVybaKACfI0/R6OgTiQ7RcDMoIcd0wnox6Ss/W46/i7Nlf rpbA== 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=vYDZ2n4KqxB5Eoy08fM04FZI3Tnm5OXQvN8gYAKx9Rw=; b=sG51YV75ik+msSBxD/1KoR35izbjY+PSYnj/fHNwxQE7acHKv1GGv8a2CUvS9fATSf vBQXDXVS/zRltleuEBsT4oQenC2nYJ14siXYWPo2HqRMjZ5PtOJ8PMkSOuadO/Of/xwi oLwRWUL9pmNiyWaRbiH2tA4yll0i1inLF2Ja39+G6ZY7P0IAtSUiKIpl4MKI4KpjYuaQ WAG66qh6eKyH8ZwzGStQ4Z6YbXeL+Eqlj4/xS2tpwbbTV1JDk9zZkRTSsZDjK7Lq+KSV bPxWLmNpYCFqeLwWSKtSm+KzMW5bHddo6slWPZcwYpzVj4Gv0qIomDiwooq8A7OVsTqz X+GA== X-Gm-Message-State: AOAM532+S+EGSPPDu8rTTrWt7G4UzAMnimajKldmIarrtZuicLeS40mN ACSnFzbL2C0H6asFlX5N+cF35g4Tn44= X-Google-Smtp-Source: ABdhPJwKky2mD+XJyrlLOIEqwpQqxKN8zKHVtwrGeh9HKekzzEMovofddrClcrcl7cQFNMbQv5wkeg== X-Received: by 2002:a05:620a:901:: with SMTP id v1mr605831qkv.331.1612465862488; Thu, 04 Feb 2021 11:11:02 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:01 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:34 -0300 Message-Id: <20210204191005.48190-20-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 19/50] avformat/flacdec: 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" Signed-off-by: James Almer --- libavformat/flacdec.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c index 6aca4755a1..7852a79d39 100644 --- a/libavformat/flacdec.c +++ b/libavformat/flacdec.c @@ -259,7 +259,7 @@ static int flac_probe(const AVProbeData *p) static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit) { - AVPacket pkt; + AVPacket *pkt; AVStream *st = s->streams[stream_index]; AVCodecParserContext *parser; int ret; @@ -268,9 +268,12 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde if (avio_seek(s->pb, *ppos, SEEK_SET) < 0) return AV_NOPTS_VALUE; - av_init_packet(&pkt); + pkt = av_packet_alloc(); + if (!pkt) + return AV_NOPTS_VALUE; parser = av_parser_init(st->codecpar->codec_id); if (!parser){ + av_packet_free(&pkt); return AV_NOPTS_VALUE; } parser->flags |= PARSER_FLAG_USE_CODEC_TS; @@ -279,20 +282,20 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde uint8_t *data; int size; - ret = ff_raw_read_partial_packet(s, &pkt); + ret = ff_raw_read_partial_packet(s, pkt); if (ret < 0){ if (ret == AVERROR(EAGAIN)) continue; else { - av_packet_unref(&pkt); - av_assert1(!pkt.size); + av_packet_unref(pkt); + av_assert1(!pkt->size); } } av_parser_parse2(parser, st->internal->avctx, - &data, &size, pkt.data, pkt.size, - pkt.pts, pkt.dts, *ppos); + &data, &size, pkt->data, pkt->size, + pkt->pts, pkt->dts, *ppos); - av_packet_unref(&pkt); + av_packet_unref(pkt); if (size) { if (parser->pts != AV_NOPTS_VALUE){ // seeking may not have started from beginning of a frame @@ -304,6 +307,7 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde } else if (ret < 0) break; } + av_packet_free(&pkt); av_parser_close(parser); return pts; } From patchwork Thu Feb 4 19:09:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25420 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 93CDB4482EE for ; Thu, 4 Feb 2021 21:13:15 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7DA5168A800; Thu, 4 Feb 2021 21:11:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6DB4868A800 for ; Thu, 4 Feb 2021 21:11:05 +0200 (EET) Received: by mail-qt1-f173.google.com with SMTP id z32so3214759qtd.8 for ; Thu, 04 Feb 2021 11:11:05 -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=Gb0NzGiJfIuWHaJGQ6hvcDL1hl1/K1S1iw8TJLFHl9w=; b=ohfgiBKwi8p6olOtctl9JNIM5U3xYk2taXP3C3c+AIA4YTskIcu7Xqm8SpSJmCmF2B 6xhKvmiHDDJ2YRauTXgXyLVv45C0Ipn8o7ON0F74tIrLsNj3bTzLL9Gb2xmHASTyT2L+ paOrOmtneiRywyz5EHlQmewqsfCOf4Sw2W1i2thHmXYXSXIHRVxDwugnXVx5KWCm5fQA 7q2Ycy1tjTBEZPqe5HR7nZJKY8BRatYKk89AkGBRGcXiHB8YSfUR21wt6wUdk0801vs4 e7mEc/BQdCkAYb8b+F2WS+GErdHDRfVctzpSHjrZC9hF/vrGtdvV4NyVh4owNWWCT5TP xHrA== 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=Gb0NzGiJfIuWHaJGQ6hvcDL1hl1/K1S1iw8TJLFHl9w=; b=Ycz6/d+odmuOAyGPwHg/ytUnnKnccNdibXqRYpSIgkBPImDNowemVv3CNInTKBS90D ZFEU9A7iHGVcDLiIkwOz6ixX6HLtN39ZfYk3hPQnm/AouoBBVrdvw5zi3j7xGhi1pLYq pP1YbBDlLo5Dtjawpyal7QJXZEikkaQ/4GFMacM+rhzdudzP7C//zCET6pfTOsFIYSZC tZGZ5J+k37S4WmyT26vb8l4zhm0MqPOz29jBuGOqYYvj0wXDnrKTFst6U0f4hSdNDH17 jrKIpLT6UWZsoTKsKsv4caPzKSXcsRp86sVN+m+FAIcSKdf+erwqvshmLBVMtgFUcetz adNg== X-Gm-Message-State: AOAM530De96FDBXjk3p4J70wE+qyUJyMw+INU9AeAnn1pl6Y8hVUhwk5 2bxFYhBEzHaPBDWh6IxtQUM6+cZCq5Q= X-Google-Smtp-Source: ABdhPJzyElR+USQoxzfZxUjcAX1Qad9sy07izlE3VEF6owJEnuCnND/SW9FTQF0SKvoq3udVG5lLXQ== X-Received: by 2002:ac8:5ad4:: with SMTP id d20mr1103403qtd.224.1612465863917; Thu, 04 Feb 2021 11:11:03 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:03 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:35 -0300 Message-Id: <20210204191005.48190-21-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 20/50] avformat/hls: 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" Signed-off-by: James Almer --- libavformat/hls.c | 73 +++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index af2468ad9b..dfc91fd5cb 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -101,7 +101,7 @@ struct playlist { AVFormatContext *parent; int index; AVFormatContext *ctx; - AVPacket pkt; + AVPacket *pkt; int has_noheader_flag; /* main demuxer streams associated with this playlist @@ -256,7 +256,7 @@ static void free_playlist_list(HLSContext *c) av_dict_free(&pls->id3_initial); ff_id3v2_free_extra_meta(&pls->id3_deferred_extra); av_freep(&pls->init_sec_buf); - av_packet_unref(&pls->pkt); + av_packet_free(&pls->pkt); av_freep(&pls->pb.buffer); ff_format_io_close(c->ctx, &pls->input); pls->input_read_done = 0; @@ -299,12 +299,17 @@ static struct playlist *new_playlist(HLSContext *c, const char *url, struct playlist *pls = av_mallocz(sizeof(struct playlist)); if (!pls) return NULL; + pls->pkt = av_packet_alloc(); + if (!pls->pkt) { + av_free(pls); + return NULL; + } ff_make_absolute_url(pls->url, sizeof(pls->url), base, url); if (!pls->url[0]) { + av_packet_free(&pls->pkt); av_free(pls); return NULL; } - av_init_packet(&pls->pkt); pls->seek_timestamp = AV_NOPTS_VALUE; pls->is_id3_timestamped = -1; @@ -2102,26 +2107,26 @@ static int recheck_discard_flags(AVFormatContext *s, int first) static void fill_timing_for_id3_timestamped_stream(struct playlist *pls) { if (pls->id3_offset >= 0) { - pls->pkt.dts = pls->id3_mpegts_timestamp + + pls->pkt->dts = pls->id3_mpegts_timestamp + av_rescale_q(pls->id3_offset, - pls->ctx->streams[pls->pkt.stream_index]->time_base, + pls->ctx->streams[pls->pkt->stream_index]->time_base, MPEG_TIME_BASE_Q); - if (pls->pkt.duration) - pls->id3_offset += pls->pkt.duration; + if (pls->pkt->duration) + pls->id3_offset += pls->pkt->duration; else pls->id3_offset = -1; } else { /* there have been packets with unknown duration * since the last id3 tag, should not normally happen */ - pls->pkt.dts = AV_NOPTS_VALUE; + pls->pkt->dts = AV_NOPTS_VALUE; } - if (pls->pkt.duration) - pls->pkt.duration = av_rescale_q(pls->pkt.duration, - pls->ctx->streams[pls->pkt.stream_index]->time_base, + if (pls->pkt->duration) + pls->pkt->duration = av_rescale_q(pls->pkt->duration, + pls->ctx->streams[pls->pkt->stream_index]->time_base, MPEG_TIME_BASE_Q); - pls->pkt.pts = AV_NOPTS_VALUE; + pls->pkt->pts = AV_NOPTS_VALUE; } static AVRational get_timebase(struct playlist *pls) @@ -2129,7 +2134,7 @@ static AVRational get_timebase(struct playlist *pls) if (pls->is_id3_timestamped) return MPEG_TIME_BASE_Q; - return pls->ctx->streams[pls->pkt.stream_index]->time_base; + return pls->ctx->streams[pls->pkt->stream_index]->time_base; } static int compare_ts_with_wrapdetect(int64_t ts_a, struct playlist *pls_a, @@ -2153,25 +2158,25 @@ static int hls_read_packet(AVFormatContext *s, AVPacket *pkt) struct playlist *pls = c->playlists[i]; /* Make sure we've got one buffered packet from each open playlist * stream */ - if (pls->needed && !pls->pkt.data) { + if (pls->needed && !pls->pkt->data) { while (1) { int64_t ts_diff; AVRational tb; - ret = av_read_frame(pls->ctx, &pls->pkt); + ret = av_read_frame(pls->ctx, pls->pkt); if (ret < 0) { if (!avio_feof(&pls->pb) && ret != AVERROR_EOF) return ret; break; } else { /* stream_index check prevents matching picture attachments etc. */ - if (pls->is_id3_timestamped && pls->pkt.stream_index == 0) { + if (pls->is_id3_timestamped && pls->pkt->stream_index == 0) { /* audio elementary streams are id3 timestamped */ fill_timing_for_id3_timestamped_stream(pls); } if (c->first_timestamp == AV_NOPTS_VALUE && - pls->pkt.dts != AV_NOPTS_VALUE) - c->first_timestamp = av_rescale_q(pls->pkt.dts, + pls->pkt->dts != AV_NOPTS_VALUE) + c->first_timestamp = av_rescale_q(pls->pkt->dts, get_timebase(pls), AV_TIME_BASE_Q); } @@ -2179,35 +2184,35 @@ static int hls_read_packet(AVFormatContext *s, AVPacket *pkt) break; if (pls->seek_stream_index < 0 || - pls->seek_stream_index == pls->pkt.stream_index) { + pls->seek_stream_index == pls->pkt->stream_index) { - if (pls->pkt.dts == AV_NOPTS_VALUE) { + if (pls->pkt->dts == AV_NOPTS_VALUE) { pls->seek_timestamp = AV_NOPTS_VALUE; break; } tb = get_timebase(pls); - ts_diff = av_rescale_rnd(pls->pkt.dts, AV_TIME_BASE, + ts_diff = av_rescale_rnd(pls->pkt->dts, AV_TIME_BASE, tb.den, AV_ROUND_DOWN) - pls->seek_timestamp; if (ts_diff >= 0 && (pls->seek_flags & AVSEEK_FLAG_ANY || - pls->pkt.flags & AV_PKT_FLAG_KEY)) { + pls->pkt->flags & AV_PKT_FLAG_KEY)) { pls->seek_timestamp = AV_NOPTS_VALUE; break; } } - av_packet_unref(&pls->pkt); + av_packet_unref(pls->pkt); } } /* Check if this stream has the packet with the lowest dts */ - if (pls->pkt.data) { + if (pls->pkt->data) { struct playlist *minpls = minplaylist < 0 ? NULL : c->playlists[minplaylist]; if (minplaylist < 0) { minplaylist = i; } else { - int64_t dts = pls->pkt.dts; - int64_t mindts = minpls->pkt.dts; + int64_t dts = pls->pkt->dts; + int64_t mindts = minpls->pkt->dts; if (dts == AV_NOPTS_VALUE || (mindts != AV_NOPTS_VALUE && compare_ts_with_wrapdetect(dts, pls, mindts, minpls) < 0)) @@ -2224,7 +2229,7 @@ static int hls_read_packet(AVFormatContext *s, AVPacket *pkt) ret = update_streams_from_subdemuxer(s, pls); if (ret < 0) { - av_packet_unref(&pls->pkt); + av_packet_unref(pls->pkt); return ret; } @@ -2245,17 +2250,17 @@ static int hls_read_packet(AVFormatContext *s, AVPacket *pkt) update_noheader_flag(s); } - if (pls->pkt.stream_index >= pls->n_main_streams) { + if (pls->pkt->stream_index >= pls->n_main_streams) { av_log(s, AV_LOG_ERROR, "stream index inconsistency: index %d, %d main streams, %d subdemuxer streams\n", - pls->pkt.stream_index, pls->n_main_streams, pls->ctx->nb_streams); - av_packet_unref(&pls->pkt); + pls->pkt->stream_index, pls->n_main_streams, pls->ctx->nb_streams); + av_packet_unref(pls->pkt); return AVERROR_BUG; } - ist = pls->ctx->streams[pls->pkt.stream_index]; - st = pls->main_streams[pls->pkt.stream_index]; + ist = pls->ctx->streams[pls->pkt->stream_index]; + st = pls->main_streams[pls->pkt->stream_index]; - av_packet_move_ref(pkt, &pls->pkt); + av_packet_move_ref(pkt, pls->pkt); pkt->stream_index = st->index; if (pkt->dts != AV_NOPTS_VALUE) @@ -2331,7 +2336,7 @@ static int hls_read_seek(AVFormatContext *s, int stream_index, pls->input_read_done = 0; ff_format_io_close(pls->parent, &pls->input_next); pls->input_next_requested = 0; - av_packet_unref(&pls->pkt); + av_packet_unref(pls->pkt); pls->pb.eof_reached = 0; /* Clear any buffered data */ pls->pb.buf_end = pls->pb.buf_ptr = pls->pb.buffer; From patchwork Thu Feb 4 19:09:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25406 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 5AAA8448077 for ; Thu, 4 Feb 2021 21:11:09 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 431D068A878; Thu, 4 Feb 2021 21:11:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 29C2968A857 for ; Thu, 4 Feb 2021 21:11:07 +0200 (EET) Received: by mail-qk1-f178.google.com with SMTP id k193so4436786qke.6 for ; Thu, 04 Feb 2021 11:11:06 -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=Xf57ueLbPT0kwtq6oHF447nePynFG/3nVdWO2mbbueE=; b=bM1+kog+8OjESVXPIlvtlLD94nj4yQeJmIun7zmOTPxcsVXXzQnCUBBNLQc5pjGq5J a3ZJl3UFKUJPdyFyqKNZY9bKV8Cm/ImobeNY8gsj9VBB8miIgDPKIYhNlqwAEM76H9RX 0yZ73+AYD+MYnHMO23ObdH0HOCxhBCdjtVVeLzJrRtltgoWjOWZJxbju4w8ogFWoh7Sg 1SCujC92dfvYU+aYMNXVxINeAsFXlA2J6/fNFJGtI4DLdqyBF+QbLqNf2kUU3Y+byJGz 0YhCRvplcEIcj2CfeGQHmf4kc8zWKumlB2euIVIIXWpMoUYs3H3yPuL0MPFglwNIXGDY 6K+A== 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=Xf57ueLbPT0kwtq6oHF447nePynFG/3nVdWO2mbbueE=; b=rMVUj1NZrTGFol4rbS5u17dh/sM05BEkyWWqZKFL1dbdcz1YB+7CDQPzU/z62/6J94 xICYyhz2x8xOaJcScXfyQPAes8iyCStCOMog+9rJZur36vfx4DhR8p4OFHF6lhhgS06J iVF5vWB0FYzrHyB62YOAAIO6Y1KRyx9VWOChj7gwGm3q2PhKyCGx27dfCdCvzrjnBIfy 7DC8Vm0xOck/5VbjYaT6mo4uyqkUYAoS3bFs/QQSIJ1Pdo5bEfwekzOSDuEbyHyUnYDA dR9F/5PchErez3qX5+OaFZ5RV04szpQ7xZQRdv3oVejFPRyluN3SH5a0RPMfuJ6uphDB bmWQ== X-Gm-Message-State: AOAM533cMJUCK/gJTz2w0OrZ7LHocX0NXE990iNR/L0IsBqVIrZFYAzY E4vXBxoGE7yGz+zn4kT35Gvg7gZ1Y8o= X-Google-Smtp-Source: ABdhPJwEXvVM8jh6yJuwVLN1Bz/jaQv4VprhPqK4bQNHFIjlx2QxxMJ1fLEGk8psqboHcWhgukFV+A== X-Received: by 2002:a05:620a:24c:: with SMTP id q12mr613251qkn.203.1612465865490; Thu, 04 Feb 2021 11:11:05 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:04 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:36 -0300 Message-Id: <20210204191005.48190-22-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 21/50] avformat/matroskadec: 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" Signed-off-by: James Almer --- libavformat/matroskadec.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 374831baa3..9fad78c78b 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -365,6 +365,8 @@ typedef struct MatroskaDemuxContext { /* byte position of the segment inside the stream */ int64_t segment_start; + AVPacket *pkt; + /* the packet queue */ AVPacketList *queue; AVPacketList *queue_end; @@ -2885,6 +2887,10 @@ static int matroska_read_header(AVFormatContext *s) } ebml_free(ebml_syntax, &ebml); + matroska->pkt = av_packet_alloc(); + if (!matroska->pkt) + goto fail; + /* The next thing is a segment. */ pos = avio_tell(matroska->ctx->pb); res = ebml_parse(matroska, matroska_segments, matroska); @@ -2947,7 +2953,7 @@ static int matroska_read_header(AVFormatContext *s) st->disposition |= AV_DISPOSITION_ATTACHED_PIC; st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; - av_init_packet(pkt); + av_packet_unref(pkt); pkt->buf = attachments[j].bin.buf; attachments[j].bin.buf = NULL; pkt->data = attachments[j].bin.data; @@ -3180,7 +3186,7 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, while (track->audio.pkt_cnt) { int ret; - AVPacket pktl, *pkt = &pktl; + AVPacket *pkt = matroska->pkt; ret = av_new_packet(pkt, a); if (ret < 0) { @@ -3317,7 +3323,7 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, uint64_t duration, int64_t pos) { - AVPacket pktl, *pkt = &pktl; + AVPacket *pkt = matroska->pkt; uint8_t *id, *settings, *text, *buf; int id_len, settings_len, text_len; uint8_t *p, *q; @@ -3434,7 +3440,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, { uint8_t *pkt_data = data; int res = 0; - AVPacket pktl, *pkt = &pktl; + AVPacket *pkt = matroska->pkt; if (st->codecpar->codec_id == AV_CODEC_ID_WAVPACK) { res = matroska_parse_wavpack(track, &pkt_data, &pkt_size); @@ -3464,7 +3470,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, if (!pkt_size && !additional_size) goto no_output; - av_init_packet(pkt); + av_packet_unref(pkt); if (!buf) pkt->buf = av_buffer_create(pkt_data, pkt_size + AV_INPUT_BUFFER_PADDING_SIZE, NULL, NULL, 0); @@ -3838,6 +3844,7 @@ static int matroska_read_close(AVFormatContext *s) int n; matroska_clear_queue(matroska); + av_packet_free(&matroska->pkt); for (n = 0; n < matroska->tracks.nb_elem; n++) if (tracks[n].type == MATROSKA_TRACK_TYPE_AUDIO) From patchwork Thu Feb 4 19:09:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25421 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 9493F4482EE for ; Thu, 4 Feb 2021 21:13:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 14A5368A8E2; Thu, 4 Feb 2021 21:11:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 804D268A82A for ; Thu, 4 Feb 2021 21:11:08 +0200 (EET) Received: by mail-qv1-f44.google.com with SMTP id u20so2251011qvx.7 for ; Thu, 04 Feb 2021 11:11:08 -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=9XS139Fjcw+7jb5e9J/n9hPNwbkduXin3TnhOFjfBpk=; b=d/iEGTWOsKeNIsbRD8y5lE9SfoCsJNwp0HBTFG/EwF8I5hGl4IqOo0TWXscT0Gj356 OU2nPeRYsXQM05iuMEVXCCP9W20jlCLUKZDwezntkHsqS1Uh5FM9HcC1Jpwem9vBnkuN syFBU325J1AZ6MvwRLO9zFeKnrQ4ig75Ioqj+SrShc7Y4BV4oi1btA7v8mLN+gAqq2vI Wgb6rlDVJz85/fy0fjMlRJ4UoaLeWhpJFcVqt93WOztMs1FHKKxXS8TFwsOyKtmNZE69 EN3Z+kSjdPU2xeRJPrObVY9DtizWoBUgUcgQE6nxTp+7VLIK/JBUsDn3JwZyeV+HyYp3 MMow== 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=9XS139Fjcw+7jb5e9J/n9hPNwbkduXin3TnhOFjfBpk=; b=FLmVkHbmila41y/O6VgV24XhY4qxsh/hfK8e5xR85r8GT1RCAiyI+5LwUyeCnjGDLi NqhBVSxsNR3uITBvtdP1Fxdazd37nmuHSLnsfN0ZdUqLCdmhyC7CItILLYj2ApVwtBS5 YMT6PmwN80RGj5EDxgbXXppSAGBi8Upac/T711qiPGI5hpO1J7Jwpw1h0/jPwbN29tEA 2XA9gmE1oxeVN14ukyUNauMpc2jePM+k9mmZT8syKbPlxGdSh5SlqpO85WaHk/JsxCRV 9V23MeDafXQ9+5d6yEouXLc/iUdKLO8YlBXz1id/3A+8tTlGOn59N+kw6PXM7uWbp2gh WlJw== X-Gm-Message-State: AOAM533YLUanoIJ8d+JL/LKhWmtmSXb98RjJU+RKEEqSbWKvk6tJnJ9y AGCrxDoqlrt5E8TW4jJYOUe7PFWqdi4= X-Google-Smtp-Source: ABdhPJwvGlMTZ3M2/VEeAr+FcJRp9HKZeNDLrhZdRnPfp48jNyf/QXb9GhQ7qwlA5ij4vjDr5Smlfw== X-Received: by 2002:a05:6214:c8a:: with SMTP id r10mr706217qvr.13.1612465866902; Thu, 04 Feb 2021 11:11:06 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:06 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:37 -0300 Message-Id: <20210204191005.48190-23-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 22/50] avformat/matroskaenc: 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" Signed-off-by: James Almer --- libavformat/matroskaenc.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 233c472b8f..012442f7f2 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -137,7 +137,7 @@ typedef struct MatroskaMuxContext { mkv_cues cues; int64_t cues_pos; - AVPacket cur_audio_pkt; + AVPacket *cur_audio_pkt; unsigned nb_attachments; int have_video; @@ -451,7 +451,7 @@ static void mkv_deinit(AVFormatContext *s) { MatroskaMuxContext *mkv = s->priv_data; - av_packet_unref(&mkv->cur_audio_pkt); + av_packet_free(&mkv->cur_audio_pkt); ffio_free_dyn_buf(&mkv->cluster_bc); ffio_free_dyn_buf(&mkv->info.bc); @@ -1919,8 +1919,6 @@ static int mkv_write_header(AVFormatContext *s) mkv->reserve_cues_space = -1; } - av_init_packet(&mkv->cur_audio_pkt); - mkv->cur_audio_pkt.size = 0; mkv->cluster_pos = -1; // start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or @@ -2414,9 +2412,9 @@ static int mkv_write_packet(AVFormatContext *s, const AVPacket *pkt) keyframe && (mkv->have_video ? codec_type == AVMEDIA_TYPE_VIDEO : 1) ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); // check if we have an audio packet cached - if (mkv->cur_audio_pkt.size > 0) { - ret = mkv_write_packet_internal(s, &mkv->cur_audio_pkt); - av_packet_unref(&mkv->cur_audio_pkt); + if (mkv->cur_audio_pkt->size > 0) { + ret = mkv_write_packet_internal(s, mkv->cur_audio_pkt); + av_packet_unref(mkv->cur_audio_pkt); if (ret < 0) { av_log(s, AV_LOG_ERROR, "Could not write cached audio packet ret:%d\n", ret); @@ -2428,7 +2426,7 @@ static int mkv_write_packet(AVFormatContext *s, const AVPacket *pkt) // keyframe's timecode is contained in the same cluster for WebM if (codec_type == AVMEDIA_TYPE_AUDIO) { if (pkt->size > 0) - ret = av_packet_ref(&mkv->cur_audio_pkt, pkt); + ret = av_packet_ref(mkv->cur_audio_pkt, pkt); } else ret = mkv_write_packet_internal(s, pkt); return ret; @@ -2460,8 +2458,8 @@ static int mkv_write_trailer(AVFormatContext *s) int ret, ret2 = 0; // check if we have an audio packet cached - if (mkv->cur_audio_pkt.size > 0) { - ret = mkv_write_packet_internal(s, &mkv->cur_audio_pkt); + if (mkv->cur_audio_pkt->size > 0) { + ret = mkv_write_packet_internal(s, mkv->cur_audio_pkt); if (ret < 0) { av_log(s, AV_LOG_ERROR, "Could not write cached audio packet ret:%d\n", ret); @@ -2685,6 +2683,9 @@ static int mkv_init(struct AVFormatContext *s) } else mkv->mode = MODE_MATROSKAv2; + mkv->cur_audio_pkt = av_packet_alloc(); + if (!mkv->cur_audio_pkt) + return AVERROR(ENOMEM); mkv->tracks = av_mallocz_array(s->nb_streams, sizeof(*mkv->tracks)); if (!mkv->tracks) return AVERROR(ENOMEM); From patchwork Thu Feb 4 19:09:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25422 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 A503C4482EE for ; Thu, 4 Feb 2021 21:13:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BA5AC68A89C; Thu, 4 Feb 2021 21:11:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DA90568A880 for ; Thu, 4 Feb 2021 21:11:09 +0200 (EET) Received: by mail-qk1-f181.google.com with SMTP id a12so4419871qkh.10 for ; Thu, 04 Feb 2021 11:11:09 -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=3AfTQETeuLmE+9oYlJF2WIJAWJh/h+Sp3SbmyEg2X3c=; b=QxNfQwmJg06klnbZ3jlR2HBC/SxIkrfkWZcYUiFDsMtdsEoFowZXC1vg0HbjlM3vep Rtaw7P47f5hPoWz7odIjifJQQYjWeoB1QFm3CVHIMVTfhu3ejkpD2j9hpi3rf7FA9EgF PuPpMJcqzsPD76k8SWbZ+S30m2GzDB5vYcHRPlaThcnLZRp6TxYPV+f8W8VlZFz65YWE GQoPjIdZxNUtVnoFf07L2Q1HDFPkWx9VzB24o+1vTXbjR/bzwHEXh7VNMG+KPPBTL663 zyLwvKu7OcdPfGTb4Px5GERW3YkmctaJ2lV78wifdEly8G4cnRWuyaKM83S12qX7HZV2 n0mA== 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=3AfTQETeuLmE+9oYlJF2WIJAWJh/h+Sp3SbmyEg2X3c=; b=iv+wrtJDwUsqQC+3KtD2vQKzZj/LFBH9X0uwKmwKZUrAP5gMmOX4yVpGy4g2sbG48N P506IDpNxdSO7lV8e8Pc5wezKNclh+Uwi/d6Q+JiXCBAsaXP0kf+Du56X221pY7sNaoF bGzHkXw67H0JSc/JaetOM/C0oPNwwUvzVSNtFgZB1TMsJ1OoPZUmvoPqDy8mimTBI/WE OrUH7jNRrnEFLtNK06iYIh99oYzArLgSciibdzV9xo4mhkqmIRSL3qRyMFdxJfTAp+HK 7B4m4lWTNiIGtdfWoTkQ8PnhFOX901b8AVfaMQ7iFiuZseWooSDGDiWy0Zt46QmUQEQu 2eqw== X-Gm-Message-State: AOAM530F1V9vxT/t16USsx/iCLpAHp4cteHY3XCzzRfOkWytmnWULD7a b4FazR9bYFMEvJNG2eKdz9wyFUm3YdQ= X-Google-Smtp-Source: ABdhPJx2/eLaDiiC15wy0/6oJqCFh/R7M3BNS5rY0qVq8xiVnmfrF54PT84UcLR3Vtmp5pmtPby1jw== X-Received: by 2002:a37:63d4:: with SMTP id x203mr638833qkb.105.1612465868371; Thu, 04 Feb 2021 11:11:08 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:07 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:38 -0300 Message-Id: <20210204191005.48190-24-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 23/50] avformat/mux: 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" Signed-off-by: James Almer --- libavformat/internal.h | 5 +++++ libavformat/mux.c | 44 ++++++++++++++++++++++-------------------- libavformat/options.c | 6 ++++++ libavformat/utils.c | 1 + 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index d0db331b96..69a7caff93 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -92,6 +92,11 @@ struct AVFormatInternal { */ struct AVPacketList *parse_queue; struct AVPacketList *parse_queue_end; + + /** + * Used to hold temporary packets. + */ + AVPacket *pkt; /** * Remaining size available for raw_packet_buffer, in bytes. */ diff --git a/libavformat/mux.c b/libavformat/mux.c index 84c56ac6ba..3600e74a50 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -1052,7 +1052,9 @@ int ff_interleaved_peek(AVFormatContext *s, int stream, AVPacketList *pktl = s->internal->packet_buffer; while (pktl) { if (pktl->pkt.stream_index == stream) { - *pkt = pktl->pkt; + int ret = av_packet_ref(pkt, &pktl->pkt); + if (ret < 0) + return ret; if (add_offset) { AVStream *st = s->streams[pkt->stream_index]; int64_t offset = st->internal->mux_ts_offset; @@ -1208,7 +1210,7 @@ static int write_packets_common(AVFormatContext *s, AVPacket *pkt, int interleav int av_write_frame(AVFormatContext *s, AVPacket *in) { - AVPacket local_pkt, *pkt = &local_pkt; + AVPacket *pkt = s->internal->pkt; int ret; if (!in) { @@ -1229,6 +1231,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *in) * The following avoids copying in's data unnecessarily. * Copying side data is unavoidable as a bitstream filter * may change it, e.g. free it on errors. */ + av_packet_unref(pkt); pkt->buf = NULL; pkt->data = in->data; pkt->size = in->size; @@ -1270,14 +1273,14 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) int av_write_trailer(AVFormatContext *s) { int i, ret1, ret = 0; - AVPacket pkt = {0}; - av_init_packet(&pkt); + AVPacket *pkt = s->internal->pkt; + av_packet_unref(pkt); for (i = 0; i < s->nb_streams; i++) { if (s->streams[i]->internal->bsfc) { - ret1 = write_packets_from_bsfs(s, s->streams[i], &pkt, 1/*interleaved*/); + ret1 = write_packets_from_bsfs(s, s->streams[i], pkt, 1/*interleaved*/); if (ret1 < 0) - av_packet_unref(&pkt); + av_packet_unref(pkt); if (ret >= 0) ret = ret1; } @@ -1351,7 +1354,7 @@ static void uncoded_frame_free(void *unused, uint8_t *data) static int write_uncoded_frame_internal(AVFormatContext *s, int stream_index, AVFrame *frame, int interleaved) { - AVPacket pkt, *pktp; + AVPacket *pkt = s->internal->pkt; av_assert0(s->oformat); if (!s->oformat->write_uncoded_frame) { @@ -1360,18 +1363,17 @@ static int write_uncoded_frame_internal(AVFormatContext *s, int stream_index, } if (!frame) { - pktp = NULL; + pkt = NULL; } else { size_t bufsize = sizeof(frame) + AV_INPUT_BUFFER_PADDING_SIZE; AVFrame **framep = av_mallocz(bufsize); if (!framep) goto fail; - pktp = &pkt; - av_init_packet(&pkt); - pkt.buf = av_buffer_create((void *)framep, bufsize, + av_packet_unref(pkt); + pkt->buf = av_buffer_create((void *)framep, bufsize, uncoded_frame_free, NULL, 0); - if (!pkt.buf) { + if (!pkt->buf) { av_free(framep); fail: av_frame_free(&frame); @@ -1379,17 +1381,17 @@ static int write_uncoded_frame_internal(AVFormatContext *s, int stream_index, } *framep = frame; - pkt.data = (void *)framep; - pkt.size = sizeof(frame); - pkt.pts = - pkt.dts = frame->pts; - pkt.duration = frame->pkt_duration; - pkt.stream_index = stream_index; - pkt.flags |= AV_PKT_FLAG_UNCODED_FRAME; + pkt->data = (void *)framep; + pkt->size = sizeof(frame); + pkt->pts = + pkt->dts = frame->pts; + pkt->duration = frame->pkt_duration; + pkt->stream_index = stream_index; + pkt->flags |= AV_PKT_FLAG_UNCODED_FRAME; } - return interleaved ? av_interleaved_write_frame(s, pktp) : - av_write_frame(s, pktp); + return interleaved ? av_interleaved_write_frame(s, pkt) : + av_write_frame(s, pkt); } int av_write_uncoded_frame(AVFormatContext *s, int stream_index, diff --git a/libavformat/options.c b/libavformat/options.c index 59e0389815..8d7c4fe4cb 100644 --- a/libavformat/options.c +++ b/libavformat/options.c @@ -220,6 +220,12 @@ AVFormatContext *avformat_alloc_context(void) av_free(ic); return NULL; } + internal->pkt = av_packet_alloc(); + if (!internal->pkt) { + av_free(internal); + av_free(ic); + return NULL; + } avformat_get_context_defaults(ic); ic->internal = internal; ic->internal->offset = AV_NOPTS_VALUE; diff --git a/libavformat/utils.c b/libavformat/utils.c index fb3299503e..2587bedc05 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -4445,6 +4445,7 @@ void avformat_free_context(AVFormatContext *s) av_freep(&s->chapters); av_dict_free(&s->metadata); av_dict_free(&s->internal->id3v2_meta); + av_packet_free(&s->internal->pkt); av_freep(&s->streams); flush_packet_queue(s); av_freep(&s->internal); From patchwork Thu Feb 4 19:09:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25409 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 792434480C6 for ; Thu, 4 Feb 2021 21:11:31 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 583CE68A94D; Thu, 4 Feb 2021 21:11:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C5CFC68A91B for ; Thu, 4 Feb 2021 21:11:24 +0200 (EET) Received: by mail-qt1-f178.google.com with SMTP id v3so3249241qtw.4 for ; Thu, 04 Feb 2021 11:11:24 -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=GleGUmm9s16pfryYVUqKThnZD88Ce5XoX8MRXuoofvw=; b=A4VT5fIkVQSI7hwR1Q8D5go6eaNjX2mtSO0bi21PPk/1L2z9DRk/aVJdUX0yBUbaj1 o/+IDGihawV/hQ1yxPLzw7Rw1Oa/8Oc1IJBX55BgwJnFqoeP5bvANNl9BFUYE3hNFOdO lPeG6NwqTbDLtTsxTr3dskEmDzH2NXC+k0Ud6qIYdfHPGlyszYZZlNtGAdNir/AvR9QM PvMmTUUhmlhIRJL3jurwFSngfDB5ikr4IgMUBD+fgLKIRQhRVldbWnEWRB+9QtQOmH+f PG0PqapP8JfeLI+jkM9+V7rnCP/dtxAC7GuBFTtSGm8yPB0fKY6UVSdBqjaa+rRs9RQs Wb8A== 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=GleGUmm9s16pfryYVUqKThnZD88Ce5XoX8MRXuoofvw=; b=NPO/IM3rptWP7rrmQ4QxVEtMZveHNeKjOfmqqXSbmZAPD4IflEfC1jOqWLIDHKYIl5 dufxLlFnP3vg7gKYBwQ+JSI6W3fPUrZuF7mmpy+YJCe3c9B6TCCYi/UWp6hr4tf36dL9 9e9r7moI2wfoKXrodpEI6FVRUoh6CT4uSgVJ4LtbXR8gCZ7uyVLiEmMzw2sdLfKac+Sa a0OiO8Hk3OZxAx6HOiqlh45ZO2V4HGygduYSc/yFcC1J+diLptlLIqrPWS/+tEYNMZlY 3TCmCvyLfBL/3jsyNO9gHUHl+7fpJXa1uFHGiSt58dBYEmHC2argecIQPQlE4YMFrPeF e6sw== X-Gm-Message-State: AOAM532MA5T3hWk6EdZdwYr64VvnUmQHc2EmEygLpaP4AFoHpkC8jDLo LXsKfwlRPaXfl1n/aiM/cxB9I9Yh7Y4= X-Google-Smtp-Source: ABdhPJzRwQXe+q0J3Gj3kLhwmtGQAvemlq2NP4j9JSxgMcEJdCO3os87rxTCZZ3PhioFqv2Flnlg3A== X-Received: by 2002:aed:29e6:: with SMTP id o93mr960203qtd.283.1612465883191; Thu, 04 Feb 2021 11:11:23 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:09 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:39 -0300 Message-Id: <20210204191005.48190-25-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 24/50] avformat/movenc: 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" Signed-off-by: James Almer --- libavformat/movenc.c | 116 ++++++++++++++++++++++++--------------- libavformat/movenc.h | 4 +- libavformat/movenchint.c | 19 ++++--- 3 files changed, 85 insertions(+), 54 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 372c04295d..0af4f9ae21 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -365,7 +365,7 @@ static int mov_write_ac3_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *trac } struct eac3_info { - AVPacket pkt; + AVPacket *pkt; uint8_t ec3_done; uint8_t num_blocks; @@ -407,6 +407,9 @@ static int handle_eac3(MOVMuxContext *mov, AVPacket *pkt, MOVTrack *track) return AVERROR(ENOMEM); info = track->eac3_priv; + if (!info->pkt && !(info->pkt = av_packet_alloc())) + return AVERROR(ENOMEM); + if (avpriv_ac3_parse_header(&hdr, pkt->data, pkt->size) < 0) { /* drop the packets until we see a good one */ if (!track->entry) { @@ -511,20 +514,20 @@ concatenate: } if (!info->num_blocks) { - ret = av_packet_ref(&info->pkt, pkt); + ret = av_packet_ref(info->pkt, pkt); if (!ret) info->num_blocks = num_blocks; goto end; } else { - if ((ret = av_grow_packet(&info->pkt, pkt->size)) < 0) + if ((ret = av_grow_packet(info->pkt, pkt->size)) < 0) goto end; - memcpy(info->pkt.data + info->pkt.size - pkt->size, pkt->data, pkt->size); + memcpy(info->pkt->data + info->pkt->size - pkt->size, pkt->data, pkt->size); info->num_blocks += num_blocks; - info->pkt.duration += pkt->duration; + info->pkt->duration += pkt->duration; if (info->num_blocks != 6) goto end; av_packet_unref(pkt); - av_packet_move_ref(pkt, &info->pkt); + av_packet_move_ref(pkt, info->pkt); info->num_blocks = 0; } ret = pkt->size; @@ -3734,7 +3737,7 @@ static int mov_write_covr(AVIOContext *pb, AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { MOVTrack *trk = &mov->tracks[i]; - if (!is_cover_image(trk->st) || trk->cover_image.size <= 0) + if (!is_cover_image(trk->st) || trk->cover_image->size <= 0) continue; if (!pos) { @@ -3742,11 +3745,11 @@ static int mov_write_covr(AVIOContext *pb, AVFormatContext *s) avio_wb32(pb, 0); ffio_wfourcc(pb, "covr"); } - avio_wb32(pb, 16 + trk->cover_image.size); + avio_wb32(pb, 16 + trk->cover_image->size); ffio_wfourcc(pb, "data"); avio_wb32(pb, trk->tag); avio_wb32(pb , 0); - avio_write(pb, trk->cover_image.data, trk->cover_image.size); + avio_write(pb, trk->cover_image->data, trk->cover_image->size); } return pos ? update_size(pb, pos) : 0; @@ -5303,16 +5306,17 @@ static int mov_flush_fragment(AVFormatContext *s, int force) for (i = 0; i < s->nb_streams; i++) { MOVTrack *track = &mov->tracks[i]; if (!track->end_reliable) { - AVPacket pkt; - if (!ff_interleaved_peek(s, i, &pkt, 1)) { + AVPacket *pkt = mov->pkt; + if (!ff_interleaved_peek(s, i, pkt, 1)) { if (track->dts_shift != AV_NOPTS_VALUE) - pkt.dts += track->dts_shift; - track->track_duration = pkt.dts - track->start_dts; - if (pkt.pts != AV_NOPTS_VALUE) - track->end_pts = pkt.pts; + pkt->dts += track->dts_shift; + track->track_duration = pkt->dts - track->start_dts; + if (pkt->pts != AV_NOPTS_VALUE) + track->end_pts = pkt->pts; else - track->end_pts = pkt.dts; + track->end_pts = pkt->dts; } + av_packet_unref(pkt); } } @@ -5965,20 +5969,20 @@ static int mov_write_single_packet(AVFormatContext *s, AVPacket *pkt) static int mov_write_subtitle_end_packet(AVFormatContext *s, int stream_index, int64_t dts) { - AVPacket end; + MOVMuxContext *mov = s->priv_data; + AVPacket *end = mov->pkt; uint8_t data[2] = {0}; int ret; - av_init_packet(&end); - end.size = sizeof(data); - end.data = data; - end.pts = dts; - end.dts = dts; - end.duration = 0; - end.stream_index = stream_index; + end->size = sizeof(data); + end->data = data; + end->pts = dts; + end->dts = dts; + end->duration = 0; + end->stream_index = stream_index; - ret = mov_write_single_packet(s, &end); - av_packet_unref(&end); + ret = mov_write_single_packet(s, end); + av_packet_unref(end); return ret; } @@ -6005,7 +6009,7 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt) return 0; } - if ((ret = av_packet_ref(&trk->cover_image, pkt)) < 0) + if ((ret = av_packet_ref(trk->cover_image, pkt)) < 0) return ret; return 0; @@ -6091,7 +6095,7 @@ static int mov_create_chapter_track(AVFormatContext *s, int tracknum) MOVMuxContext *mov = s->priv_data; MOVTrack *track = &mov->tracks[tracknum]; - AVPacket pkt = { .stream_index = tracknum, .flags = AV_PKT_FLAG_KEY }; + AVPacket *pkt = mov->pkt; int i, len; track->mode = mov->mode; @@ -6153,13 +6157,16 @@ static int mov_create_chapter_track(AVFormatContext *s, int tracknum) } #endif + pkt->stream_index = tracknum; + pkt->flags = AV_PKT_FLAG_KEY; + for (i = 0; i < s->nb_chapters; i++) { AVChapter *c = s->chapters[i]; AVDictionaryEntry *t; int64_t end = av_rescale_q(c->end, c->time_base, (AVRational){1,MOV_TIMESCALE}); - pkt.pts = pkt.dts = av_rescale_q(c->start, c->time_base, (AVRational){1,MOV_TIMESCALE}); - pkt.duration = end - pkt.dts; + pkt->pts = pkt->dts = av_rescale_q(c->start, c->time_base, (AVRational){1,MOV_TIMESCALE}); + pkt->duration = end - pkt->dts; if ((t = av_dict_get(c->metadata, "title", NULL, 0))) { static const char encd[12] = { @@ -6167,18 +6174,22 @@ static int mov_create_chapter_track(AVFormatContext *s, int tracknum) 'e', 'n', 'c', 'd', 0x00, 0x00, 0x01, 0x00 }; len = strlen(t->value); - pkt.size = len + 2 + 12; - pkt.data = av_malloc(pkt.size); - if (!pkt.data) + pkt->size = len + 2 + 12; + pkt->data = av_malloc(pkt->size); + if (!pkt->data) { + av_packet_unref(pkt); return AVERROR(ENOMEM); - AV_WB16(pkt.data, len); - memcpy(pkt.data + 2, t->value, len); - memcpy(pkt.data + len + 2, encd, sizeof(encd)); - ff_mov_write_packet(s, &pkt); - av_freep(&pkt.data); + } + AV_WB16(pkt->data, len); + memcpy(pkt->data + 2, t->value, len); + memcpy(pkt->data + len + 2, encd, sizeof(encd)); + ff_mov_write_packet(s, pkt); + av_freep(&pkt->data); } } + av_packet_unref(mov->pkt); + return 0; } @@ -6198,9 +6209,9 @@ static int mov_create_timecode_track(AVFormatContext *s, int index, int src_inde MOVTrack *track = &mov->tracks[index]; AVStream *src_st = s->streams[src_index]; uint8_t data[4]; - AVPacket pkt = { .data = data, .stream_index = index, - .flags = AV_PKT_FLAG_KEY, .size = 4 }; + AVPacket *pkt = mov->pkt; AVRational rate = find_fps(s, src_st); + int ret; /* tmcd track based on video stream */ track->mode = mov->mode; @@ -6222,8 +6233,14 @@ static int mov_create_timecode_track(AVFormatContext *s, int index, int src_inde track->st->avg_frame_rate = av_inv_q(rate); /* the tmcd track just contains one packet with the frame number */ - AV_WB32(pkt.data, tc.start); - return ff_mov_write_packet(s, &pkt); + pkt->data = data; + pkt->stream_index = index; + pkt->flags = AV_PKT_FLAG_KEY; + pkt->size = 4; + AV_WB32(pkt->data, tc.start); + ret = ff_mov_write_packet(s, pkt); + av_packet_unref(pkt); + return ret; } /* @@ -6284,6 +6301,8 @@ static void mov_free(AVFormatContext *s) MOVMuxContext *mov = s->priv_data; int i; + av_packet_free(&mov->pkt); + if (!mov->tracks) return; @@ -6298,11 +6317,11 @@ static void mov_free(AVFormatContext *s) av_freep(&mov->tracks[i].par); av_freep(&mov->tracks[i].cluster); av_freep(&mov->tracks[i].frag_info); - av_packet_unref(&mov->tracks[i].cover_image); + av_packet_free(&mov->tracks[i].cover_image); if (mov->tracks[i].eac3_priv) { struct eac3_info *info = mov->tracks[i].eac3_priv; - av_packet_unref(&info->pkt); + av_packet_free(&info->pkt); av_freep(&mov->tracks[i].eac3_priv); } if (mov->tracks[i].vos_len) @@ -6531,6 +6550,10 @@ static int mov_init(AVFormatContext *s) mov->nb_streams += mov->nb_meta_tmcd; } + mov->pkt = av_packet_alloc(); + if (!mov->pkt) + return AVERROR(ENOMEM); + // Reserve an extra stream for chapters for the case where chapters // are written in the trailer mov->tracks = av_mallocz_array((mov->nb_streams + 1), sizeof(*mov->tracks)); @@ -6638,6 +6661,11 @@ static int mov_init(AVFormatContext *s) av_log(s, AV_LOG_ERROR, "VP8 muxing is currently not supported.\n"); return AVERROR_PATCHWELCOME; } + if (is_cover_image(st)) { + track->cover_image = av_packet_alloc(); + if (!track->cover_image) + return AVERROR(ENOMEM); + } } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { track->timescale = st->codecpar->sample_rate; if (!st->codecpar->frame_size && !av_get_bits_per_sample(st->codecpar->codec_id)) { diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 997b2d61c0..cdbc4074c3 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -134,7 +134,7 @@ typedef struct MOVTrack { uint32_t default_size; HintSampleQueue sample_queue; - AVPacket cover_image; + AVPacket *cover_image; AVIOContext *mdat_buf; int64_t data_offset; @@ -215,6 +215,8 @@ typedef struct MOVMuxContext { int per_stream_grouping; AVFormatContext *fc; + AVPacket *pkt; + int use_editlist; float gamma; diff --git a/libavformat/movenchint.c b/libavformat/movenchint.c index 964026ec71..47276091f3 100644 --- a/libavformat/movenchint.c +++ b/libavformat/movenchint.c @@ -408,7 +408,7 @@ int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, uint8_t *buf = NULL; int size; AVIOContext *hintbuf = NULL; - AVPacket hint_pkt; + AVPacket *hint_pkt = mov->pkt; int ret = 0, count; if (!rtp_ctx) @@ -437,21 +437,22 @@ int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, /* Open a buffer for writing the hint */ if ((ret = avio_open_dyn_buf(&hintbuf)) < 0) goto done; - av_init_packet(&hint_pkt); - count = write_hint_packets(hintbuf, buf, size, trk, &hint_pkt.dts); + av_packet_unref(hint_pkt); + count = write_hint_packets(hintbuf, buf, size, trk, &hint_pkt->dts); av_freep(&buf); /* Write the hint data into the hint track */ - hint_pkt.size = size = avio_close_dyn_buf(hintbuf, &buf); - hint_pkt.data = buf; - hint_pkt.pts = hint_pkt.dts; - hint_pkt.stream_index = track_index; + hint_pkt->size = size = avio_close_dyn_buf(hintbuf, &buf); + hint_pkt->data = buf; + hint_pkt->pts = hint_pkt->dts; + hint_pkt->stream_index = track_index; if (pkt->flags & AV_PKT_FLAG_KEY) - hint_pkt.flags |= AV_PKT_FLAG_KEY; + hint_pkt->flags |= AV_PKT_FLAG_KEY; if (count > 0) - ff_mov_write_packet(s, &hint_pkt); + ff_mov_write_packet(s, hint_pkt); done: av_free(buf); + av_packet_unref(hint_pkt); sample_queue_retain(&trk->sample_queue); return ret; } From patchwork Thu Feb 4 19:09:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25407 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 A9AAD4480C6 for ; Thu, 4 Feb 2021 21:11:28 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 92EAE689F27; Thu, 4 Feb 2021 21:11:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C505689CC9 for ; Thu, 4 Feb 2021 21:11:26 +0200 (EET) Received: by mail-qt1-f176.google.com with SMTP id o18so3205841qtp.10 for ; Thu, 04 Feb 2021 11:11:26 -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=iH29oA5nYa1qsbdTblhl1SFwYOdrSVmS3rAJqOKVKhc=; b=DkadlOnEeVfPuz6byf4hiNkxYoJXPKxtEnRM9Tcitdi6cgiLBQcC3xU9OsVro2cCH/ Apnskpm+JJSs5D4bU6bWhisouzSP/7KR1qboMg4oHjp318EVO3lku226xRrKbYqn2jQB cplgDx2gDctp8b1xvZSFwUtRyljuByboXIww9kY2twd/nxkQFwaYo0Bx5x7lrWHC+BgH KLHpcRrx1rMsuYKQAh5l1q8ZGqBMdWnEkEQ4jYHOKJIvvm9W8js4MKMqPfgZ2TDGqvTE n0reEqa0JbTSHre8K7YrNJbSgr25a6JENFnvafws3rhf4quAOyRMyI9LLrDmuaynSL14 4oBA== 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=iH29oA5nYa1qsbdTblhl1SFwYOdrSVmS3rAJqOKVKhc=; b=s3SUaOvF0MgboqFLsTZ7zcrtovRGGacT6S8sP/yjZl+Jm1AWlDBos/KyH4uEoe5sCs Zzf/Bhzfp6tMcK0IhH6RQJJYNr7DW8LytXVWe2oLiehG7TzU7sQ09b+bn2kMnwfyowgx FtGIpGQf3YQtricGOmsgLZpaxJxEvicq7jcz6HSjSEF+5+AAzBzTj8PFtRa6jwr7Pfbq LZQZ2t7Jj8KegIUMOGy31uwXAO62OBZN4LvlIQrHnDaZSI9mmxd4F/NjEXui7565nUJq uzjbAOOQg3nI+ckfzhRAFecqKl4ODbkuXwf/zy8ge3LaAPJ8siEqmYSbm9gMNN4P0O9a j4BA== X-Gm-Message-State: AOAM530C2qSKl3qHwCu5eej6KdLZMjjvIOieorVqghOQzVlCA3lztCtt ZwMPIZoSCOx/3xtis15Rw2ZcvObzUWY= X-Google-Smtp-Source: ABdhPJyaZV+u2o3e3dsSl4ncLm1GfY/gh52MQg0O8Q41D0cY5EEdCl/3mD6xCPlMMc4EBim5cq2yBg== X-Received: by 2002:ac8:1009:: with SMTP id z9mr1029735qti.347.1612465884678; Thu, 04 Feb 2021 11:11:24 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:24 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:40 -0300 Message-Id: <20210204191005.48190-26-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 25/50] avformat/mpegts: 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" Signed-off-by: James Almer --- libavformat/mpegts.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index e283ec09d7..6e0d9d7496 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -981,7 +981,7 @@ static void reset_pes_packet_state(PESContext *pes) static void new_data_packet(const uint8_t *buffer, int len, AVPacket *pkt) { - av_init_packet(pkt); + av_packet_unref(pkt); pkt->data = (uint8_t *)buffer; pkt->size = len; } @@ -990,7 +990,7 @@ static int new_pes_packet(PESContext *pes, AVPacket *pkt) { uint8_t *sd; - av_init_packet(pkt); + av_packet_unref(pkt); pkt->buf = pes->buffer; pkt->data = pes->buffer->data; @@ -3298,33 +3298,37 @@ static int64_t mpegts_get_dts(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit) { MpegTSContext *ts = s->priv_data; + AVPacket *pkt; int64_t pos; int pos47 = ts->pos47_full % ts->raw_packet_size; pos = ((*ppos + ts->raw_packet_size - 1 - pos47) / ts->raw_packet_size) * ts->raw_packet_size + pos47; ff_read_frame_flush(s); if (avio_seek(s->pb, pos, SEEK_SET) < 0) return AV_NOPTS_VALUE; + pkt = av_packet_alloc(); + if (!pkt) + return AV_NOPTS_VALUE; while(pos < pos_limit) { - int ret; - AVPacket pkt; - av_init_packet(&pkt); - ret = av_read_frame(s, &pkt); - if (ret < 0) + int ret = av_read_frame(s, pkt); + if (ret < 0) { + av_packet_free(&pkt); return AV_NOPTS_VALUE; - if (pkt.dts != AV_NOPTS_VALUE && pkt.pos >= 0) { - ff_reduce_index(s, pkt.stream_index); - av_add_index_entry(s->streams[pkt.stream_index], pkt.pos, pkt.dts, 0, 0, AVINDEX_KEYFRAME /* FIXME keyframe? */); - if (pkt.stream_index == stream_index && pkt.pos >= *ppos) { - int64_t dts = pkt.dts; - *ppos = pkt.pos; - av_packet_unref(&pkt); + } + if (pkt->dts != AV_NOPTS_VALUE && pkt->pos >= 0) { + ff_reduce_index(s, pkt->stream_index); + av_add_index_entry(s->streams[pkt->stream_index], pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME /* FIXME keyframe? */); + if (pkt->stream_index == stream_index && pkt->pos >= *ppos) { + int64_t dts = pkt->dts; + *ppos = pkt->pos; + av_packet_free(&pkt); return dts; } } - pos = pkt.pos; - av_packet_unref(&pkt); + pos = pkt->pos; + av_packet_unref(pkt); } + av_packet_free(&pkt); return AV_NOPTS_VALUE; } From patchwork Thu Feb 4 19:09:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25408 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 864514480C6 for ; Thu, 4 Feb 2021 21:11:29 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6AC6F68A87F; Thu, 4 Feb 2021 21:11:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A91D7689F27 for ; Thu, 4 Feb 2021 21:11:27 +0200 (EET) Received: by mail-qk1-f172.google.com with SMTP id s77so4462461qke.4 for ; Thu, 04 Feb 2021 11:11:27 -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=eCJIFux/iOaxrK1tJaGSIrgU26dFOo4cPEvsQu+3/TA=; b=cAoroxzev/8EdxRRDumo6WbB8H1PiqcYii2q9N3tU8anuV3YrJeSWs5hpjSaq1Jm+b kKDFDGV0j9mLOrYBOiHVLF89dNAex7C0KDW7EUI6Nz2eeRrQuoabvtACIQrPDeH3r7fn 6RzsvOW5iv7o2LeZ6HthTr8aXVliNjTkLhRyjQU8pwRzb5ZkHI4Sf8hZomDv3iwW7zje xNJnQs7tcET5kT0d0ZtH2nEw8zd0H8rn9ymLeLpWWDgdE7DeA6trGc+G42GR/S+jk1Uu xNFxeyPuG2N6vXK83bd42oI46dO2pLRcMefTziM4VTLBKuM0Jk33gNV1Ly3vwV3ogE6Q ocFQ== 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=eCJIFux/iOaxrK1tJaGSIrgU26dFOo4cPEvsQu+3/TA=; b=CA+QsMoXoAVF/ONklsCwcMq/MH1vmZjXj6KzcZxHQBPZiNEUWexzAmiKJUY0yMfrHD wqlPaK6Dr2Y/Lcmth7XIIw2nECtrRz865XQ8GdcM4N7MCxk0dbbqnDT4vViWv2hnul5T CzLAONVQHMIU2r/GcI1jLiGFQhLV1BJCNwp8YyOTVTZA8L5NIPZPClaln8Z5bLhprP8n zgpGykrZmJ6Yl3eMUMefQco/Kqzm8mhMDR7M7bqS2oObFTCGcBmchCgoJU4zHFaI8Jin Rt0z8Sc/RUuj/rK4h4U5Gf22/3CfG2XJGDdZQb3/1PwcMJGRrxxttP2qw+uWvzrNioIk ZAug== X-Gm-Message-State: AOAM531UZKTsUUu7zH5jfSQidK8knUiqGV0HdFqMG5LAqkpi0ZiLCRv+ 8C5GXmU8Va4Ws5vAlHOrLINBopxiyig= X-Google-Smtp-Source: ABdhPJzH9iPLrFsgH+g9N1sknyRLWzNxaCDUJFjnlIPWsaY/nMGmvyXtGDRVKAX0Lfvwhvy7rY9SBQ== X-Received: by 2002:a05:620a:1090:: with SMTP id g16mr622222qkk.147.1612465886214; Thu, 04 Feb 2021 11:11:26 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:25 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:41 -0300 Message-Id: <20210204191005.48190-27-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 26/50] avformat/mpegtsenc: 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" Signed-off-by: James Almer --- libavformat/mpegtsenc.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 45f8d5f373..baf303dc60 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -77,6 +77,7 @@ typedef struct MpegTSWrite { MpegTSSection pat; /* MPEG-2 PAT table */ MpegTSSection sdt; /* MPEG-2 SDT table context */ MpegTSService **services; + AVPacket *pkt; int64_t sdt_period; /* SDT period in PCR time base */ int64_t pat_period; /* PAT/PMT period in PCR time base */ int nb_services; @@ -1022,6 +1023,10 @@ static int mpegts_init(AVFormatContext *s) ts->sdt.write_packet = section_write_packet; ts->sdt.opaque = s; + ts->pkt = av_packet_alloc(); + if (!ts->pkt) + return AVERROR(ENOMEM); + /* assign pids to each stream */ for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; @@ -1745,23 +1750,23 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) } if ((AV_RB16(pkt->data) & 0xfff0) != 0xfff0) { int ret; - AVPacket pkt2; + AVPacket *pkt2 = ts->pkt; if (!ts_st->amux) { av_log(s, AV_LOG_ERROR, "AAC bitstream not in ADTS format " "and extradata missing\n"); } else { - av_init_packet(&pkt2); - pkt2.data = pkt->data; - pkt2.size = pkt->size; + av_packet_unref(pkt2); + pkt2->data = pkt->data; + pkt2->size = pkt->size; av_assert0(pkt->dts != AV_NOPTS_VALUE); - pkt2.dts = av_rescale_q(pkt->dts, st->time_base, ts_st->amux->streams[0]->time_base); + pkt2->dts = av_rescale_q(pkt->dts, st->time_base, ts_st->amux->streams[0]->time_base); ret = avio_open_dyn_buf(&ts_st->amux->pb); if (ret < 0) return ret; - ret = av_write_frame(ts_st->amux, &pkt2); + ret = av_write_frame(ts_st->amux, pkt2); if (ret < 0) { ffio_free_dyn_buf(&ts_st->amux->pb); return ret; @@ -2020,6 +2025,8 @@ static void mpegts_deinit(AVFormatContext *s) MpegTSService *service; int i; + av_packet_free(&ts->pkt); + for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; MpegTSWriteStream *ts_st = st->priv_data; From patchwork Thu Feb 4 19:09:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25423 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 0DE3644A506 for ; Thu, 4 Feb 2021 21:14:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B469468A96E; Thu, 4 Feb 2021 21:11:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 53E9D689BEC for ; Thu, 4 Feb 2021 21:11:29 +0200 (EET) Received: by mail-qv1-f46.google.com with SMTP id w11so2241257qvz.12 for ; Thu, 04 Feb 2021 11:11:29 -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=Kcc5LhinrtMbpx2vjwSQRTK6plo4m9Je4+YtBZVPyNQ=; b=ob2ZJdIe0Z/g5B/+FqopH9rXO/k9K4I1xTyWX3iFTksCC4tJlKx4KPewIUcIFo6wTQ KPYUfpyKflDi2sIbWAhMPV6hEnEk2RKXZcVuLatH0duHMo64zoYYmaX0QORtshRz5IfF 67XZ4uOGQpIB4zZJSQlhtUpnWlEiegZXHqWoeXZcteiDtn+R9QJ47FZnmt/OCCv5h7qT gDQpORE0i7GAWOH38lG0U0Eheofg0gE85/fdz2l4eopfLO+bEHOsNwTIwUZ7zHaeWzPy ka2jEkawhKdrpz4QMbuezmdwjyoVrR/LAwulCgMqeAIMA1aIUs5D4Jk1+55bcpiXZIDH dO0Q== 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=Kcc5LhinrtMbpx2vjwSQRTK6plo4m9Je4+YtBZVPyNQ=; b=oX4xJkX7nKar70gYWKB8m9PKYVzjPaxy8RiI7EgNCMuwZrx6qRhq6wLEDOOwxXbZRS vsegmLSiZ4yqI5IOjAMN1qvGzh4j7hhfcVnw3KBZTzDDERNZ5N2bWYHa53BI8xnwYj3D 2ofNsRYoL+XkcrGjL/MccpPxHhSis88m0Z8kXr2wfhFG8aUjJEc1o7NFT7tHxNddnN1z aO4tXRHBmwNEEvPhtTmRj9LalA09f0WxYrpofyKS9ntTzEWAHArrDfAeP7l40xBiDXG5 QGRfblW/Y+kdbDl+xYGDqbvVftrj0lnAKP26YBTxkU9w0d2hJlj4TmJ/nm8FZy+V5S+/ nwQw== X-Gm-Message-State: AOAM530cbJKYmchNAb5A2UQg9FZ/zNAR6ttpVzpGYPhEygfrQqw6wRZy H/NIeS7fIWH4E2mVuPUfaHeUhvmxqpU= X-Google-Smtp-Source: ABdhPJy/qDXe1LzITiLqhMgXZlI7QyyPqbCKCmnN3cKlOSgpq4WvtVuKgIXA9/1aSLtIbG8Xkp7Bmw== X-Received: by 2002:a05:6214:410:: with SMTP id z16mr699156qvx.39.1612465887723; Thu, 04 Feb 2021 11:11:27 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:27 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:42 -0300 Message-Id: <20210204191005.48190-28-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 27/50] 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" 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, \ } From patchwork Thu Feb 4 19:09:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25410 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 892E74480C6 for ; Thu, 4 Feb 2021 21:11:32 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6E8DC68A8F1; Thu, 4 Feb 2021 21:11:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CCA206809EB for ; Thu, 4 Feb 2021 21:11:30 +0200 (EET) Received: by mail-qv1-f46.google.com with SMTP id j13so2242121qvu.10 for ; Thu, 04 Feb 2021 11:11:30 -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=0epvoKDu2DBJ30HkcCtbSFrFPepxAb7V0rHFUAwEkvo=; b=acgUCMc+9i6obnBMuKMLmB49BSlXiAv2QpBEwk5JhrAYLdKR93fgLrofMXJ7oEWpBT 7Hcerq1wtj+hIJMa3fRlS8uwnnQewDrb3oL2H7DpnC9Lw81AZOGOvZCSXZUnwRVRxM5z Y4dD90kjybrjWx73xV8HL97g8deKRFGMBgOO/WeUS7HqL7uaItxANdFw6sbZqmkIRP9C DAzNcghnYb9F/ey0Fb3QUi7TmiIya6Mt1MqWSlcW6Q7D40pocXxywJ+W6z+QEa+ibgpj xpVGaohCNf9KL8gy5N+HV2cd6i3XYh1CmmLEZ0IJFM4n4hneCeSB+mbEH2UIVBSAL9ZV 5TfQ== 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=0epvoKDu2DBJ30HkcCtbSFrFPepxAb7V0rHFUAwEkvo=; b=rTapESL2VYpiqyHH7NTmk7ZJ52cMGNgxOsEMnwR9V7aZ3Cs3cw0OkdpZaeB/IoLbia jOpiBSD9MXm4WMj06Ogoec1kIuU/Oy7/6gqcxc90hRXzxYksSUYEfgVSSYFOdXwdJuVo BoAe/7Pe1FafvPDTSrkAkV8/bcZDnED11mhV+6oiyJc4XFYTI1U1D3a3pz6WkFxHNgQa n7f4al2p5ZPWZHOQp5ZVIhmJtNbuBq199Ur8cY4EkWy2z4z7lWp7HCO78ToRYCogIPEW 4hVmvRh+yLWn4O/buqA2xDBytpHHwESGlG7bo2OSrq9zsGjXhyf1YoL0GYmekdst42/f J6dQ== X-Gm-Message-State: AOAM533Th0gaG7QJJEHq08+2G4su5X+wlAd/KV4EaOHfIO5DKiYkhbhw VXApnmMIkb7K22RlcqCJRYeBkyzydDY= X-Google-Smtp-Source: ABdhPJxzegAji/WqhbOpQIPnjDSI6Yixzv358ORWeGtVhrd36xqTnElxDnVt3IaVyza+qHYtsbP0DA== X-Received: by 2002:a0c:b4a8:: with SMTP id c40mr719042qve.60.1612465889327; Thu, 04 Feb 2021 11:11:29 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:28 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:43 -0300 Message-Id: <20210204191005.48190-29-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 28/50] avformat/rtpenc_mpegts: 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" Signed-off-by: James Almer --- libavformat/rtpenc_mpegts.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libavformat/rtpenc_mpegts.c b/libavformat/rtpenc_mpegts.c index 7d7377db7a..50cebf68a3 100644 --- a/libavformat/rtpenc_mpegts.c +++ b/libavformat/rtpenc_mpegts.c @@ -26,6 +26,7 @@ struct MuxChain { AVFormatContext *mpegts_ctx; AVFormatContext *rtp_ctx; + AVPacket *pkt; }; static int rtp_mpegts_write_close(AVFormatContext *s) @@ -41,6 +42,9 @@ static int rtp_mpegts_write_close(AVFormatContext *s) av_write_trailer(chain->rtp_ctx); avformat_free_context(chain->rtp_ctx); } + + av_packet_free(&chain->pkt); + return 0; } @@ -58,6 +62,9 @@ static int rtp_mpegts_write_header(AVFormatContext *s) mpegts_ctx = avformat_alloc_context(); if (!mpegts_ctx) return AVERROR(ENOMEM); + chain->pkt = av_packet_alloc(); + if (!chain->pkt) + goto fail; mpegts_ctx->oformat = mpegts_format; mpegts_ctx->max_delay = s->max_delay; av_dict_copy(&mpegts_ctx->metadata, s->metadata, 0); @@ -116,7 +123,7 @@ static int rtp_mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) struct MuxChain *chain = s->priv_data; int ret = 0, size; uint8_t *buf; - AVPacket local_pkt; + AVPacket *local_pkt = chain->pkt; if (!chain->mpegts_ctx->pb) { if ((ret = avio_open_dyn_buf(&chain->mpegts_ctx->pb)) < 0) @@ -130,19 +137,19 @@ static int rtp_mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) av_free(buf); return 0; } - av_init_packet(&local_pkt); - local_pkt.data = buf; - local_pkt.size = size; - local_pkt.stream_index = 0; + av_packet_unref(local_pkt); + local_pkt->data = buf; + local_pkt->size = size; + local_pkt->stream_index = 0; if (pkt->pts != AV_NOPTS_VALUE) - local_pkt.pts = av_rescale_q(pkt->pts, + local_pkt->pts = av_rescale_q(pkt->pts, s->streams[pkt->stream_index]->time_base, chain->rtp_ctx->streams[0]->time_base); if (pkt->dts != AV_NOPTS_VALUE) - local_pkt.dts = av_rescale_q(pkt->dts, + local_pkt->dts = av_rescale_q(pkt->dts, s->streams[pkt->stream_index]->time_base, chain->rtp_ctx->streams[0]->time_base); - ret = av_write_frame(chain->rtp_ctx, &local_pkt); + ret = av_write_frame(chain->rtp_ctx, local_pkt); av_free(buf); return ret; From patchwork Thu Feb 4 19:09:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25411 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 994BB4480C6 for ; Thu, 4 Feb 2021 21:11:34 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7367D68A980; Thu, 4 Feb 2021 21:11:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 94D3B688148 for ; Thu, 4 Feb 2021 21:11:32 +0200 (EET) Received: by mail-qv1-f44.google.com with SMTP id j13so2242168qvu.10 for ; Thu, 04 Feb 2021 11:11:32 -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=6E5hXq/VnzIDS/R6b/ikfLgz6ME2ou/yE5X38uLDNXk=; b=kJXeLlDl8OFLPmPJJGgYclmWCX318+iJQo8WN2D0v8RO58HvfczI6t/iMLf4NqbCE7 UiuFQT0o9j9eZku4yIFOAjkqQbSe8zGoYm/9A3i37oaL/IPOPb6tzjyBXWDFbHoOjF+7 8mSgn8QpJhWqvnFh6RcMQkHVPDrGO9zUcNvgJNrZp4jUf6T+ikQK9kK/KqGQ9O4xdvid Xzvyx5+8lzQJuwWLLQixLoxnFZ6bIL3asJK7nPov73wYeQP10C8xqRYeELTkQKnkp7FM a31IC0Ur+YNsmyE70GgxSgioBhgL3PA0eN7tgLGcv11tVwi1fU43SNZC6aCqrx6mWdRu WJkQ== 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=6E5hXq/VnzIDS/R6b/ikfLgz6ME2ou/yE5X38uLDNXk=; b=SD5/WwStVkRa4DMUpDFK8uTJPw2i/QzkGgXdWvy9GYb3Oor54GeQd2SnEUl3hFumzD 4jLsAvqRQSELljyVpzyX8xwYdDBfJUQrM+9ekxVBJXH4wp9pMLjBaoGAxVAvKeLqPzD3 BMrlNfWMqczkEyQ1/ZbyDFU0udfTPKHazKDuXLUB00DnNDmdsHRq/wz7hbR2bGGhj5On GOKSjMp5sm57n9XTCFkDrGRKFuo/GvkS1wi92yO5F5OqNBxfwJ17zs6ozPUmml4fEHLW kfviAcNuJM9E/JXW+3cjB1YKUa11E6+mCX+tpIPlwmLFG7EzewH4NlbYajAk2/SxCot/ RiHg== X-Gm-Message-State: AOAM530QdI5KLDGefiYINZe03a4y35DVMLFeoJKayYt5bymPMouDXhEG 5ZJNRkzLFC4q4zLon5oMiYTjkZBkF9Y= X-Google-Smtp-Source: ABdhPJzWvhub3v36bFqD938bgtpo3Pn0YswZVMY1hXsKwLeCDH0rcrkUR1CQFB6Ko03DL4GEe3BLRg== X-Received: by 2002:a05:6214:949:: with SMTP id dn9mr673012qvb.35.1612465890832; Thu, 04 Feb 2021 11:11:30 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:30 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:44 -0300 Message-Id: <20210204191005.48190-30-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 29/50] avformat/utils: 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" Signed-off-by: James Almer --- libavformat/internal.h | 1 + libavformat/options.c | 5 ++- libavformat/utils.c | 100 +++++++++++++++++++++++------------------ 3 files changed, 62 insertions(+), 44 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index 69a7caff93..bf0cb798d3 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -90,6 +90,7 @@ struct AVFormatInternal { /** * Packets split by the parser get queued here. */ + AVPacket *parse_pkt; struct AVPacketList *parse_queue; struct AVPacketList *parse_queue_end; diff --git a/libavformat/options.c b/libavformat/options.c index 8d7c4fe4cb..07403b533e 100644 --- a/libavformat/options.c +++ b/libavformat/options.c @@ -221,7 +221,10 @@ AVFormatContext *avformat_alloc_context(void) return NULL; } internal->pkt = av_packet_alloc(); - if (!internal->pkt) { + internal->parse_pkt = av_packet_alloc(); + if (!internal->pkt || !internal->parse_pkt) { + av_packet_free(&internal->pkt); + av_packet_free(&internal->parse_pkt); av_free(internal); av_free(ic); return NULL; diff --git a/libavformat/utils.c b/libavformat/utils.c index 2587bedc05..43c0be97e2 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -309,9 +309,15 @@ static int append_packet_chunked(AVIOContext *s, AVPacket *pkt, int size) int av_get_packet(AVIOContext *s, AVPacket *pkt, int size) { +#if FF_API_INIT_PACKET +FF_DISABLE_DEPRECATION_WARNINGS av_init_packet(pkt); pkt->data = NULL; pkt->size = 0; +FF_ENABLE_DEPRECATION_WARNINGS +#else + av_packet_unref(pkt); +#endif pkt->pos = avio_tell(s); return append_packet_chunked(s, pkt, size); @@ -799,9 +805,15 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt) int ret, i, err; AVStream *st; +#if FF_API_INIT_PACKET +FF_DISABLE_DEPRECATION_WARNINGS pkt->data = NULL; pkt->size = 0; av_init_packet(pkt); +FF_ENABLE_DEPRECATION_WARNINGS +#else + av_packet_unref(pkt); +#endif for (;;) { AVPacketList *pktl = s->internal->raw_packet_buffer; @@ -1401,14 +1413,14 @@ FF_ENABLE_DEPRECATION_WARNINGS static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index, int flush) { - AVPacket out_pkt; + AVPacket *out_pkt = s->internal->parse_pkt; AVStream *st = s->streams[stream_index]; uint8_t *data = pkt->data; int size = pkt->size; int ret = 0, got_output = flush; if (size || flush) { - av_init_packet(&out_pkt); + av_packet_unref(out_pkt); } else if (st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) { // preserve 0-size sync packets compute_pkt_fields(s, st, st->parser, pkt, AV_NOPTS_VALUE, AV_NOPTS_VALUE); @@ -1420,7 +1432,7 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int64_t next_dts = pkt->dts; len = av_parser_parse2(st->parser, st->internal->avctx, - &out_pkt.data, &out_pkt.size, data, size, + &out_pkt->data, &out_pkt->size, data, size, pkt->pts, pkt->dts, pkt->pos); pkt->pts = pkt->dts = AV_NOPTS_VALUE; @@ -1429,39 +1441,39 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, data += len; size -= len; - got_output = !!out_pkt.size; + got_output = !!out_pkt->size; - if (!out_pkt.size) + if (!out_pkt->size) continue; - if (pkt->buf && out_pkt.data == pkt->data) { - /* reference pkt->buf only when out_pkt.data is guaranteed to point + if (pkt->buf && out_pkt->data == pkt->data) { + /* reference pkt->buf only when out_pkt->data is guaranteed to point * to data in it and not in the parser's internal buffer. */ /* XXX: Ensure this is the case with all parsers when st->parser->flags * is PARSER_FLAG_COMPLETE_FRAMES and check for that instead? */ - out_pkt.buf = av_buffer_ref(pkt->buf); - if (!out_pkt.buf) { + out_pkt->buf = av_buffer_ref(pkt->buf); + if (!out_pkt->buf) { ret = AVERROR(ENOMEM); goto fail; } } else { - ret = av_packet_make_refcounted(&out_pkt); + ret = av_packet_make_refcounted(out_pkt); if (ret < 0) goto fail; } if (pkt->side_data) { - out_pkt.side_data = pkt->side_data; - out_pkt.side_data_elems = pkt->side_data_elems; + out_pkt->side_data = pkt->side_data; + out_pkt->side_data_elems = pkt->side_data_elems; pkt->side_data = NULL; pkt->side_data_elems = 0; } /* set the duration */ - out_pkt.duration = (st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0; + out_pkt->duration = (st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0; if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { if (st->internal->avctx->sample_rate > 0) { - out_pkt.duration = + out_pkt->duration = av_rescale_q_rnd(st->parser->duration, (AVRational) { 1, st->internal->avctx->sample_rate }, st->time_base, @@ -1469,30 +1481,30 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, } } - out_pkt.stream_index = st->index; - out_pkt.pts = st->parser->pts; - out_pkt.dts = st->parser->dts; - out_pkt.pos = st->parser->pos; - out_pkt.flags |= pkt->flags & AV_PKT_FLAG_DISCARD; + out_pkt->stream_index = st->index; + out_pkt->pts = st->parser->pts; + out_pkt->dts = st->parser->dts; + out_pkt->pos = st->parser->pos; + out_pkt->flags |= pkt->flags & AV_PKT_FLAG_DISCARD; if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW) - out_pkt.pos = st->parser->frame_offset; + out_pkt->pos = st->parser->frame_offset; if (st->parser->key_frame == 1 || (st->parser->key_frame == -1 && st->parser->pict_type == AV_PICTURE_TYPE_I)) - out_pkt.flags |= AV_PKT_FLAG_KEY; + out_pkt->flags |= AV_PKT_FLAG_KEY; if (st->parser->key_frame == -1 && st->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY)) - out_pkt.flags |= AV_PKT_FLAG_KEY; + out_pkt->flags |= AV_PKT_FLAG_KEY; - compute_pkt_fields(s, st, st->parser, &out_pkt, next_dts, next_pts); + compute_pkt_fields(s, st, st->parser, out_pkt, next_dts, next_pts); ret = avpriv_packet_list_put(&s->internal->parse_queue, &s->internal->parse_queue_end, - &out_pkt, NULL, 0); + out_pkt, NULL, 0); if (ret < 0) { - av_packet_unref(&out_pkt); + av_packet_unref(out_pkt); goto fail; } } @@ -2368,7 +2380,7 @@ static int seek_frame_generic(AVFormatContext *s, int stream_index, return -1; if (index < 0 || index == st->internal->nb_index_entries - 1) { - AVPacket pkt; + AVPacket *pkt = s->internal->pkt; int nonkey = 0; if (st->internal->nb_index_entries) { @@ -2381,25 +2393,26 @@ static int seek_frame_generic(AVFormatContext *s, int stream_index, if ((ret = avio_seek(s->pb, s->internal->data_offset, SEEK_SET)) < 0) return ret; } + av_packet_unref(pkt); for (;;) { int read_status; do { - read_status = av_read_frame(s, &pkt); + read_status = av_read_frame(s, pkt); } while (read_status == AVERROR(EAGAIN)); if (read_status < 0) break; - if (stream_index == pkt.stream_index && pkt.dts > timestamp) { - if (pkt.flags & AV_PKT_FLAG_KEY) { - av_packet_unref(&pkt); + if (stream_index == pkt->stream_index && pkt->dts > timestamp) { + if (pkt->flags & AV_PKT_FLAG_KEY) { + av_packet_unref(pkt); break; } if (nonkey++ > 1000 && st->codecpar->codec_id != AV_CODEC_ID_CDGRAPHICS) { av_log(s, AV_LOG_ERROR,"seek_frame_generic failed as this stream seems to contain no keyframes after the target timestamp, %d non keyframes found\n", nonkey); - av_packet_unref(&pkt); + av_packet_unref(pkt); break; } } - av_packet_unref(&pkt); + av_packet_unref(pkt); } index = av_index_search_timestamp(st, timestamp, flags); } @@ -2747,7 +2760,7 @@ static void estimate_timings_from_bit_rate(AVFormatContext *ic) /* only usable for MPEG-PS streams */ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset) { - AVPacket pkt1, *pkt = &pkt1; + AVPacket *pkt = ic->internal->pkt; AVStream *st; int num, den, read_size, i, ret; int found_duration = 0; @@ -3576,7 +3589,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) int64_t read_size; AVStream *st; AVCodecContext *avctx; - AVPacket pkt1; + AVPacket *pkt1 = ic->internal->pkt; int64_t old_offset = avio_tell(ic->pb); // new streams might appear, no options for those int orig_nb_streams = ic->nb_streams; @@ -3779,7 +3792,7 @@ FF_ENABLE_DEPRECATION_WARNINGS /* NOTE: A new stream can be added there if no header in file * (AVFMTCTX_NOHEADER). */ - ret = read_frame_internal(ic, &pkt1); + ret = read_frame_internal(ic, pkt1); if (ret == AVERROR(EAGAIN)) continue; @@ -3792,13 +3805,13 @@ FF_ENABLE_DEPRECATION_WARNINGS if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) { ret = avpriv_packet_list_put(&ic->internal->packet_buffer, &ic->internal->packet_buffer_end, - &pkt1, NULL, 0); + pkt1, NULL, 0); if (ret < 0) goto unref_then_goto_end; pkt = &ic->internal->packet_buffer_end->pkt; } else { - pkt = &pkt1; + pkt = pkt1; } st = ic->streams[pkt->stream_index]; @@ -3878,7 +3891,7 @@ FF_ENABLE_DEPRECATION_WARNINGS limit, t, pkt->stream_index); if (ic->flags & AVFMT_FLAG_NOBUFFER) - av_packet_unref(&pkt1); + av_packet_unref(pkt1); break; } if (pkt->duration) { @@ -3915,7 +3928,7 @@ FF_ENABLE_DEPRECATION_WARNINGS (options && i < orig_nb_streams) ? &options[i] : NULL); if (ic->flags & AVFMT_FLAG_NOBUFFER) - av_packet_unref(&pkt1); + av_packet_unref(pkt1); st->codec_info_nb_frames++; count++; @@ -3948,9 +3961,9 @@ FF_ENABLE_DEPRECATION_WARNINGS } if (flush_codecs) { - AVPacket empty_pkt = { 0 }; + AVPacket *empty_pkt = ic->internal->pkt; int err = 0; - av_init_packet(&empty_pkt); + av_packet_unref(empty_pkt); for (i = 0; i < ic->nb_streams; i++) { @@ -3959,7 +3972,7 @@ FF_ENABLE_DEPRECATION_WARNINGS /* flush the decoders */ if (st->internal->info->found_decoder == 1) { do { - err = try_decode_frame(ic, st, &empty_pkt, + err = try_decode_frame(ic, st, empty_pkt, (options && i < orig_nb_streams) ? &options[i] : NULL); } while (err > 0 && !has_codec_parameters(st, NULL)); @@ -4182,7 +4195,7 @@ find_stream_info_err: return ret; unref_then_goto_end: - av_packet_unref(&pkt1); + av_packet_unref(pkt1); goto find_stream_info_err; } @@ -4446,6 +4459,7 @@ void avformat_free_context(AVFormatContext *s) av_dict_free(&s->metadata); av_dict_free(&s->internal->id3v2_meta); av_packet_free(&s->internal->pkt); + av_packet_free(&s->internal->parse_pkt); av_freep(&s->streams); flush_packet_queue(s); av_freep(&s->internal); From patchwork Thu Feb 4 19:09:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25412 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 E391F4480C6 for ; Thu, 4 Feb 2021 21:11:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CDC7968A9C8; Thu, 4 Feb 2021 21:11:36 +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 0A79D689AB3 for ; Thu, 4 Feb 2021 21:11:34 +0200 (EET) Received: by mail-qt1-f175.google.com with SMTP id e11so3224604qtg.6 for ; Thu, 04 Feb 2021 11:11:34 -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=Hk3DiNja2vyA2nWGuVCjhzaO6j80YakNzOUbHRsPdWQ=; b=jxIF3Cu7MpDVVe4XOopwjr4wOEUgUZFlX7I2tuVvMuEfDCZpagflqAQ2xB0ybB1QL5 VfItXNCJ91zf1gJkZ+sw1xwkLjphMYeDRa4Zhj2U0o9BXLx2OGQnNy6H5k1zRfSQQGj0 ByOtN5tV5+PEzqhCZt2hvjZIdjGQfwtcUVhtT3wPshgJyFHIwS/D9EesldVD8DViicmn wxIlqTOg16pv7VG8QTixdRuqRNNtKWmrAd9MJICwdhQUnIsKcA/6R+7EMIfAWtMCtDLu 0tEw99GMpF0E7UskBIndnsWvqUob5rEvwhwCU/R3RHlgu+hYNY31sbHf7QFvCjwtQ2rj 5unw== 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=Hk3DiNja2vyA2nWGuVCjhzaO6j80YakNzOUbHRsPdWQ=; b=A49M3/mCEXSGVDYP8ENY+eSTuRLcMKDq0yXQPAoMmp3IBONRFLFdGPbpyrJ8qSeOfA kITTlN/9GArkaq12auZO4PRE3rUJvVNyPbxJYbZcjcwEoH+R7uM5vlWuQek67LYD0Xpw EkjTs7laEpmgsJfnVkaqrMyROenfoHhqS73iEXUVD7G4k/hAxf/ovp6BWMu89dguVfs1 cqmJGM8JfICo0lELBj8vOpCszK79D+DsjB+wG2sGyEpmUjD4y0YWlPdDTlctuOHiuG2f V7M1buSZ/AD0IzvqjCyH+sfbZNwhtRhcfYJzddAkizso7lRK4ptgrVEFPmOVBzvkqHiY SE+g== X-Gm-Message-State: AOAM53287aiBwMKaUiAzZw70ujDQ5mAFO6Jpu9D8Ouq0FmLS8tQlsKKT fwlXg3MkLFjYs9fbJOgjoiMSUe4rcTQ= X-Google-Smtp-Source: ABdhPJyeBSqyDY7XiAFmvKnHjPsvVIqqnamkUFrPUCRQD/z9t1bDpaenEI0RCz+HvYPFWcujj/Ml8w== X-Received: by 2002:ac8:5a4b:: with SMTP id o11mr1072652qta.202.1612465892427; Thu, 04 Feb 2021 11:11:32 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:31 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:45 -0300 Message-Id: <20210204191005.48190-31-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 30/50] avformat/subtitles: 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" Signed-off-by: James Almer --- libavformat/jacosubdec.c | 2 +- libavformat/mpeg.c | 4 +-- libavformat/mpsubdec.c | 4 +-- libavformat/subtitles.c | 64 +++++++++++++++++++----------------- libavformat/subtitles.h | 2 +- libavformat/tedcaptionsdec.c | 4 +-- 6 files changed, 42 insertions(+), 38 deletions(-) diff --git a/libavformat/jacosubdec.c b/libavformat/jacosubdec.c index 14221b166c..b44e3b7783 100644 --- a/libavformat/jacosubdec.c +++ b/libavformat/jacosubdec.c @@ -250,7 +250,7 @@ static int jacosub_read_header(AVFormatContext *s) /* SHIFT and TIMERES affect the whole script so packet timing can only be * done in a second pass */ for (i = 0; i < jacosub->q.nb_subs; i++) { - AVPacket *sub = &jacosub->q.subs[i]; + AVPacket *sub = jacosub->q.subs[i]; read_ts(jacosub, sub->data, &sub->pts, &sub->duration); } ff_subtitles_queue_finalize(s, &jacosub->q); diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 20d1e10168..79610ec600 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -934,7 +934,7 @@ static int vobsub_read_packet(AVFormatContext *s, AVPacket *pkt) if (tmpq->current_sub_idx >= tmpq->nb_subs) continue; - ts = tmpq->subs[tmpq->current_sub_idx].pts; + ts = tmpq->subs[tmpq->current_sub_idx]->pts; if (ts < min_ts) { min_ts = ts; sid = i; @@ -950,7 +950,7 @@ static int vobsub_read_packet(AVFormatContext *s, AVPacket *pkt) /* compute maximum packet size using the next packet position. This is * useful when the len in the header is non-sense */ if (q->current_sub_idx < q->nb_subs) { - psize = q->subs[q->current_sub_idx].pos - pkt->pos; + psize = q->subs[q->current_sub_idx]->pos - pkt->pos; } else { int64_t fsize = avio_size(pb); psize = fsize < 0 ? 0xffff : fsize - pkt->pos; diff --git a/libavformat/mpsubdec.c b/libavformat/mpsubdec.c index 2e6dc883eb..c113be5eba 100644 --- a/libavformat/mpsubdec.c +++ b/libavformat/mpsubdec.c @@ -147,8 +147,8 @@ static int mpsub_read_header(AVFormatContext *s) if (common_factor > 1) { common_factor = av_gcd(pts_info.num, common_factor); for (i = 0; i < mpsub->q.nb_subs; i++) { - mpsub->q.subs[i].pts /= common_factor; - mpsub->q.subs[i].duration /= common_factor; + mpsub->q.subs[i]->pts /= common_factor; + mpsub->q.subs[i]->duration /= common_factor; } pts_info.num /= common_factor; } diff --git a/libavformat/subtitles.c b/libavformat/subtitles.c index ad7f68938e..ec10b99822 100644 --- a/libavformat/subtitles.c +++ b/libavformat/subtitles.c @@ -111,13 +111,13 @@ int ff_text_peek_r8(FFTextReader *r) AVPacket *ff_subtitles_queue_insert(FFDemuxSubtitlesQueue *q, const uint8_t *event, size_t len, int merge) { - AVPacket *subs, *sub; + AVPacket **subs, *sub; if (merge && q->nb_subs > 0) { /* merge with previous event */ int old_len; - sub = &q->subs[q->nb_subs - 1]; + sub = q->subs[q->nb_subs - 1]; old_len = sub->size; if (av_grow_packet(sub, len) < 0) return NULL; @@ -132,7 +132,10 @@ AVPacket *ff_subtitles_queue_insert(FFDemuxSubtitlesQueue *q, if (!subs) return NULL; q->subs = subs; - sub = &subs[q->nb_subs]; + subs[q->nb_subs] = av_packet_alloc(); + if (!subs[q->nb_subs]) + return NULL; + sub = subs[q->nb_subs]; if (av_new_packet(sub, len) < 0) return NULL; q->nb_subs++; @@ -145,8 +148,8 @@ AVPacket *ff_subtitles_queue_insert(FFDemuxSubtitlesQueue *q, static int cmp_pkt_sub_ts_pos(const void *a, const void *b) { - const AVPacket *s1 = a; - const AVPacket *s2 = b; + const AVPacket *s1 = *(const AVPacket **)a; + const AVPacket *s2 = *(const AVPacket **)b; if (s1->pts == s2->pts) return FFDIFFSIGN(s1->pos, s2->pos); return FFDIFFSIGN(s1->pts , s2->pts); @@ -154,8 +157,8 @@ static int cmp_pkt_sub_ts_pos(const void *a, const void *b) static int cmp_pkt_sub_pos_ts(const void *a, const void *b) { - const AVPacket *s1 = a; - const AVPacket *s2 = b; + const AVPacket *s1 = *(const AVPacket **)a; + const AVPacket *s2 = *(const AVPacket **)b; if (s1->pos == s2->pos) { if (s1->pts == s2->pts) return 0; @@ -170,18 +173,18 @@ static void drop_dups(void *log_ctx, FFDemuxSubtitlesQueue *q) for (i = 1; i < q->nb_subs; i++) { const int last_id = i - 1 - drop; - const AVPacket *last = &q->subs[last_id]; + const AVPacket *last = q->subs[last_id]; - if (q->subs[i].pts == last->pts && - q->subs[i].duration == last->duration && - q->subs[i].stream_index == last->stream_index && - !strcmp(q->subs[i].data, last->data)) { + if (q->subs[i]->pts == last->pts && + q->subs[i]->duration == last->duration && + q->subs[i]->stream_index == last->stream_index && + !strcmp(q->subs[i]->data, last->data)) { - av_packet_unref(&q->subs[i]); + av_packet_free(&q->subs[i]); drop++; } else if (drop) { q->subs[last_id + 1] = q->subs[i]; - memset(&q->subs[i], 0, sizeof(q->subs[i])); // for safety + q->subs[i] = NULL; } } @@ -202,8 +205,8 @@ void ff_subtitles_queue_finalize(void *log_ctx, FFDemuxSubtitlesQueue *q) q->sort == SUB_SORT_TS_POS ? cmp_pkt_sub_ts_pos : cmp_pkt_sub_pos_ts); for (i = 0; i < q->nb_subs; i++) - if (q->subs[i].duration < 0 && i < q->nb_subs - 1) - q->subs[i].duration = q->subs[i + 1].pts - q->subs[i].pts; + if (q->subs[i]->duration < 0 && i < q->nb_subs - 1) + q->subs[i]->duration = q->subs[i + 1]->pts - q->subs[i]->pts; if (!q->keep_duplicates) drop_dups(log_ctx, q); @@ -211,11 +214,12 @@ void ff_subtitles_queue_finalize(void *log_ctx, FFDemuxSubtitlesQueue *q) int ff_subtitles_queue_read_packet(FFDemuxSubtitlesQueue *q, AVPacket *pkt) { - AVPacket *sub = q->subs + q->current_sub_idx; + AVPacket *sub; int ret; if (q->current_sub_idx == q->nb_subs) return AVERROR_EOF; + sub = q->subs[q->current_sub_idx]; if ((ret = av_packet_ref(pkt, sub)) < 0) { return ret; } @@ -238,9 +242,9 @@ static int search_sub_ts(const FFDemuxSubtitlesQueue *q, int64_t ts) if (s1 == s2) return s1; if (s1 == s2 - 1) - return q->subs[s1].pts <= q->subs[s2].pts ? s1 : s2; + return q->subs[s1]->pts <= q->subs[s2]->pts ? s1 : s2; mid = (s1 + s2) / 2; - if (q->subs[mid].pts <= ts) + if (q->subs[mid]->pts <= ts) s1 = mid; else s2 = mid; @@ -262,24 +266,24 @@ int ff_subtitles_queue_seek(FFDemuxSubtitlesQueue *q, AVFormatContext *s, int st if (idx < 0) return idx; - for (i = idx; i < q->nb_subs && q->subs[i].pts < min_ts; i++) - if (stream_index == -1 || q->subs[i].stream_index == stream_index) + for (i = idx; i < q->nb_subs && q->subs[i]->pts < min_ts; i++) + if (stream_index == -1 || q->subs[i]->stream_index == stream_index) idx = i; - for (i = idx; i > 0 && q->subs[i].pts > max_ts; i--) - if (stream_index == -1 || q->subs[i].stream_index == stream_index) + for (i = idx; i > 0 && q->subs[i]->pts > max_ts; i--) + if (stream_index == -1 || q->subs[i]->stream_index == stream_index) idx = i; - ts_selected = q->subs[idx].pts; + ts_selected = q->subs[idx]->pts; if (ts_selected < min_ts || ts_selected > max_ts) return AVERROR(ERANGE); /* look back in the latest subtitles for overlapping subtitles */ for (i = idx - 1; i >= 0; i--) { - int64_t pts = q->subs[i].pts; - if (q->subs[i].duration <= 0 || - (stream_index != -1 && q->subs[i].stream_index != stream_index)) + int64_t pts = q->subs[i]->pts; + if (q->subs[i]->duration <= 0 || + (stream_index != -1 && q->subs[i]->stream_index != stream_index)) continue; - if (pts >= min_ts && pts > ts_selected - q->subs[i].duration) + if (pts >= min_ts && pts > ts_selected - q->subs[i]->duration) idx = i; else break; @@ -291,7 +295,7 @@ int ff_subtitles_queue_seek(FFDemuxSubtitlesQueue *q, AVFormatContext *s, int st * queue is ordered by pts and then filepos, so we can take the first * entry for a given timestamp. */ if (stream_index == -1) - while (idx > 0 && q->subs[idx - 1].pts == q->subs[idx].pts) + while (idx > 0 && q->subs[idx - 1]->pts == q->subs[idx]->pts) idx--; q->current_sub_idx = idx; @@ -304,7 +308,7 @@ void ff_subtitles_queue_clean(FFDemuxSubtitlesQueue *q) int i; for (i = 0; i < q->nb_subs; i++) - av_packet_unref(&q->subs[i]); + av_packet_free(&q->subs[i]); av_freep(&q->subs); q->nb_subs = q->allocated_size = q->current_sub_idx = 0; } diff --git a/libavformat/subtitles.h b/libavformat/subtitles.h index 6b418e3621..ca769639be 100644 --- a/libavformat/subtitles.h +++ b/libavformat/subtitles.h @@ -100,7 +100,7 @@ int ff_text_peek_r8(FFTextReader *r); void ff_text_read(FFTextReader *r, char *buf, size_t size); typedef struct { - AVPacket *subs; ///< array of subtitles packets + AVPacket **subs; ///< array of subtitles packets int nb_subs; ///< number of subtitles packets int allocated_size; ///< allocated size for subs int current_sub_idx; ///< current position for the read packet callback diff --git a/libavformat/tedcaptionsdec.c b/libavformat/tedcaptionsdec.c index c15aeea06c..9a882c4d79 100644 --- a/libavformat/tedcaptionsdec.c +++ b/libavformat/tedcaptionsdec.c @@ -293,9 +293,9 @@ static av_cold int tedcaptions_read_header(AVFormatContext *avf) } ff_subtitles_queue_finalize(avf, &tc->subs); for (i = 0; i < tc->subs.nb_subs; i++) - tc->subs.subs[i].pts += tc->start_time; + tc->subs.subs[i]->pts += tc->start_time; - last = &tc->subs.subs[tc->subs.nb_subs - 1]; + last = tc->subs.subs[tc->subs.nb_subs - 1]; st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; st->codecpar->codec_id = AV_CODEC_ID_TEXT; avpriv_set_pts_info(st, 64, 1, 1000); From patchwork Thu Feb 4 19:09:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25426 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 7C4CD44A506 for ; Thu, 4 Feb 2021 21:15:05 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E8C9768A9E9; Thu, 4 Feb 2021 21:11:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 79A4D68A9A8 for ; Thu, 4 Feb 2021 21:11:35 +0200 (EET) Received: by mail-qv1-f44.google.com with SMTP id es14so2262707qvb.3 for ; Thu, 04 Feb 2021 11:11:35 -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=eMxBnMHsA7Sr+LrHM0qpNb5qtEiByT6CvKqTe9O8Wo8=; b=faotrTgEOIPbQ4yiIBjmV9lG0jVdfLDQUGE9+SqNCIC53H9KFUrAHxmC9ZtlNvTnCm oJf2FpqJ8tgd5eqGCDn5GWqcvtYliXrZSLu7hebC+Mn4xae3I+kUE6idn61F3CyISb4W WYgRGDCEyYmejkEC12S83NcOxFgRVGvcCYcA6Dh+mSyJQu5OVqXcCz9KGAX8ungsB196 kxRzdJDRQxIGUWqGhkdDbXROlZpHuYQ2QN6mWgXPuN/AZJtBEoECbYHgkCaLsbFFT7Kn DhIOY2e0BLVxGW58aiM0fwWuhLKWjKFYoVfzq6u2pJ+MA78T/Rc1GG02Y9bEGiz+y+nG m3og== 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=eMxBnMHsA7Sr+LrHM0qpNb5qtEiByT6CvKqTe9O8Wo8=; b=obN06DeE3M/7l+WQtGdGZ/ZhnuVplitmhIyjMIDd+YXBK9idhX5/a0Y33Ce8i+x2Vb HkeDyQdu7aUyMmVn4jlXoqrGL+f/v/FaIYLcL6Z9wdzMXbaSt6fyFeQ9pAJinBoi7rgp pYbxw0gzZGqYYU8/Tu4CovCcYQAD+NVdKIDZFqDgu4zrdoAEU9RB8jqSjo9SzAWLbVGs Awl3TXwbrcO0GlA2hAf6stlWPBTsyMWixLBK5QNXRemi8dp5Y/JnT5/1NlPyvv2oTmgA EtkeZiV7b5dkrFmE6Riq/G+dqMh8FreI9UpE+6jv62UCeUAr6WXBxYi3TnToKUyjYcQh tWEg== X-Gm-Message-State: AOAM533qEgOlI5IuHNCWO8lryPK5cEFcEy8Bgbniy8R8V19Hccasztvm m9CGLbTN9TS3iZZZKTY2nR6ohZum+bo= X-Google-Smtp-Source: ABdhPJyLYU7degEoMlpIX8eVeZCWsZiLppo7Gkk98QlOgid+mGOWbBZN/IPPPshNNMfDHlmhS1nm+A== X-Received: by 2002:a05:6214:913:: with SMTP id dj19mr919331qvb.33.1612465894058; Thu, 04 Feb 2021 11:11:34 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:33 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:46 -0300 Message-Id: <20210204191005.48190-32-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 31/50] avformat/wc3movie: 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" Signed-off-by: James Almer --- libavformat/wc3movie.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libavformat/wc3movie.c b/libavformat/wc3movie.c index 76e945d261..1fe582945a 100644 --- a/libavformat/wc3movie.c +++ b/libavformat/wc3movie.c @@ -69,7 +69,7 @@ typedef struct Wc3DemuxContext { int video_stream_index; int audio_stream_index; - AVPacket vpkt; + AVPacket *vpkt; } Wc3DemuxContext; @@ -77,8 +77,7 @@ static int wc3_read_close(AVFormatContext *s) { Wc3DemuxContext *wc3 = s->priv_data; - if (wc3->vpkt.size > 0) - av_packet_unref(&wc3->vpkt); + av_packet_free(&wc3->vpkt); return 0; } @@ -110,8 +109,9 @@ static int wc3_read_header(AVFormatContext *s) wc3->height = WC3_DEFAULT_HEIGHT; wc3->pts = 0; wc3->video_stream_index = wc3->audio_stream_index = 0; - av_init_packet(&wc3->vpkt); - wc3->vpkt.data = NULL; wc3->vpkt.size = 0; + wc3->vpkt = av_packet_alloc(); + if (!wc3->vpkt) + goto fail; /* skip the first 3 32-bit numbers */ avio_skip(pb, 12); @@ -162,7 +162,7 @@ static int wc3_read_header(AVFormatContext *s) case PALT_TAG: /* one of several palettes */ avio_seek(pb, -8, SEEK_CUR); - av_append_packet(pb, &wc3->vpkt, 8 + PALETTE_SIZE); + av_append_packet(pb, wc3->vpkt, 8 + PALETTE_SIZE); break; default: @@ -248,18 +248,17 @@ static int wc3_read_packet(AVFormatContext *s, case SHOT_TAG: /* load up new palette */ avio_seek(pb, -8, SEEK_CUR); - av_append_packet(pb, &wc3->vpkt, 8 + 4); + av_append_packet(pb, wc3->vpkt, 8 + 4); break; case VGA__TAG: /* send out video chunk */ avio_seek(pb, -8, SEEK_CUR); - ret= av_append_packet(pb, &wc3->vpkt, 8 + size); + ret= av_append_packet(pb, wc3->vpkt, 8 + size); // ignore error if we have some data - if (wc3->vpkt.size > 0) + if (wc3->vpkt->size > 0) ret = 0; - *pkt = wc3->vpkt; - wc3->vpkt.data = NULL; wc3->vpkt.size = 0; + av_packet_move_ref(pkt, wc3->vpkt); pkt->stream_index = wc3->video_stream_index; pkt->pts = wc3->pts; packet_read = 1; From patchwork Thu Feb 4 19:09:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25427 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 972E944A4AF for ; Thu, 4 Feb 2021 21:15:18 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 326B368AA13; Thu, 4 Feb 2021 21:11:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EFF0768A9ED for ; Thu, 4 Feb 2021 21:11:36 +0200 (EET) Received: by mail-qk1-f182.google.com with SMTP id a7so4396713qkb.13 for ; Thu, 04 Feb 2021 11:11:36 -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=OnFqkyVh2sf1/Ru9/WSbV9WS/ezJVF1oPPfoI7TrkRA=; b=ELRaoDtLbX0jVrem30yNOXiZkj4qLOySUpTqfAjJaDX200Fkz//wWdXuzXrhRrGnIV Xu/HPPKnP3VQhNA5gLQztLYCmZaUx97W9mEFn0VjIYD/Kk7LLgvErlmSf2FSNL57sp5S aD1dHHZEI3DEzXhPh/hjcIDnTu0Hg5maeelfZT0etweqiATNW/D2k/ctPpkNJNgyzRYH gFDPcoJLB/kL24+qgnq6wc+5PkrpSoaRyt95t5MEX7y26rrlIWKCaYfPu70/hl+qhkGA Q/a3ZIgvymbBBb286nUy7NkUzy50BBnx9s77Vl5Ikw7Z7yeByWpAkUrtmTUR7/yjmgMZ autA== 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=OnFqkyVh2sf1/Ru9/WSbV9WS/ezJVF1oPPfoI7TrkRA=; b=UqfcppM/e+llQSFmSp4RcuijPSrsFef4cayzcKQ5uceJeGnNBKkfmzsBHi7o5jYGZg lJweIL/m0Gx00vMzeu/ZKNG1f5UjhRksoHzhOQIWvS/towKJq4stj6jwdqJp58bqW7pD HUlSPeFxlq56hNF/Dq13BL6L8qmH8QbsZ5zvqgND0m0nu4nI4Dm+u/SE5vrAq22faODo gkWDPIwKvtXqJ8QDGqzA7OBd+dvYO7IeK/Q4CpGlBs5YRZ+c0Uo1s61uHWJgvI/tBDU6 sT8IF/3Ag5SebyMR1xh+YtR1JFOKamYIVR3pau8zvnFg7Tq4QtIy6qGXV1t6jqVUarRq KLsw== X-Gm-Message-State: AOAM533eooxzByPrBAclYS+vQHhFxiiue1c71I1heoZdkZaf/N+3R0W8 Dk6YWkc2qXB7W9WnczhlAruXjdr6+i4= X-Google-Smtp-Source: ABdhPJyUbtswoem1OMxeMNowazn8x4h40um6+iPH9WtZ+L3+NCFK1DHKPwRGoU3VV2Spj/dKY5MsDw== X-Received: by 2002:a37:9b42:: with SMTP id d63mr657970qke.216.1612465895546; Thu, 04 Feb 2021 11:11:35 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:34 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:47 -0300 Message-Id: <20210204191005.48190-33-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 32/50] avformat/tests/fifo_muxer: 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" Signed-off-by: James Almer --- libavformat/tests/fifo_muxer.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/libavformat/tests/fifo_muxer.c b/libavformat/tests/fifo_muxer.c index 5127a8aadb..3458c3eefd 100644 --- a/libavformat/tests/fifo_muxer.c +++ b/libavformat/tests/fifo_muxer.c @@ -81,9 +81,11 @@ static int fifo_basic_test(AVFormatContext *oc, AVDictionary **opts, const FailingMuxerPacketData *pkt_data) { int ret = 0, i; - AVPacket pkt; + AVPacket *pkt; - av_init_packet(&pkt); + pkt = av_packet_alloc(); + if (!pkt) + return AVERROR(ENOMEM); ret = avformat_write_header(oc, opts); @@ -94,20 +96,22 @@ static int fifo_basic_test(AVFormatContext *oc, AVDictionary **opts, } for (i = 0; i < 15; i++ ) { - ret = prepare_packet(&pkt, pkt_data, i); + ret = prepare_packet(pkt, pkt_data, i); if (ret < 0) { fprintf(stderr, "Failed to prepare test packet: %s\n", av_err2str(ret)); goto write_trailer_and_fail; } - ret = av_write_frame(oc, &pkt); - av_packet_unref(&pkt); + ret = av_write_frame(oc, pkt); + av_packet_unref(pkt); if (ret < 0) { fprintf(stderr, "Unexpected write_frame error: %s\n", av_err2str(ret)); + av_packet_free(&pkt); goto write_trailer_and_fail; } } + av_packet_free(&pkt); ret = av_write_frame(oc, NULL); if (ret < 0) { @@ -135,9 +139,11 @@ static int fifo_overflow_drop_test(AVFormatContext *oc, AVDictionary **opts, { int ret = 0, i; int64_t write_pkt_start, write_pkt_end, duration; - AVPacket pkt; + AVPacket *pkt; - av_init_packet(&pkt); + pkt = av_packet_alloc(); + if (!pkt) + return AVERROR(ENOMEM); ret = avformat_write_header(oc, opts); if (ret) { @@ -148,18 +154,20 @@ static int fifo_overflow_drop_test(AVFormatContext *oc, AVDictionary **opts, write_pkt_start = av_gettime_relative(); for (i = 0; i < 6; i++ ) { - ret = prepare_packet(&pkt, data, i); + ret = prepare_packet(pkt, data, i); if (ret < 0) { fprintf(stderr, "Failed to prepare test packet: %s\n", av_err2str(ret)); goto fail; } - ret = av_write_frame(oc, &pkt); - av_packet_unref(&pkt); + ret = av_write_frame(oc, pkt); + av_packet_unref(pkt); if (ret < 0) { break; } } + av_packet_free(&pkt); + write_pkt_end = av_gettime_relative(); duration = write_pkt_end - write_pkt_start; if (duration > (SLEEPTIME_50_MS*6)/2) { From patchwork Thu Feb 4 19:09:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25428 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 6F8FF44A4AF for ; Thu, 4 Feb 2021 21:15:31 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA3C1689D60; Thu, 4 Feb 2021 21:11:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8904468A9A1 for ; Thu, 4 Feb 2021 21:11:38 +0200 (EET) Received: by mail-qk1-f178.google.com with SMTP id 19so4466458qkh.3 for ; Thu, 04 Feb 2021 11:11:38 -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=3Sa4oN/lUQjwFNToLZERY0aef8jbU+Rjp7d2vFNYXao=; b=FoQc5QdjVPkphYpKt5lLqx/4YaLIKfinhdP8jKKZK0ylytFZduXGq0SQAiSOBqC3B+ 9CsaRqJZ0JBZ8bFDiE5HHTxaGuDkr6ylzH1bY84c/Qt1ZLIJ8r2NJpQ6fsBXbcizROyH nvWPOjwspumapdnK9OZ6rSWdgQ8O3t6I0mytqZHqNwWrgJFAqBvy8kZJdeBJ40m+dYgV kIXgQt8he+oKBVdTrW6D9+tt5K0ym91+VUC/gXnvdUfqBrAaeJvrBaJ9rpgpwVhAet0T zwU+3cycnLds/T6S0OssUQSdM+o3rA1Df7uVM4bxuPCSkvzkEMpLrhEf0LlySvjfpWts IBbQ== 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=3Sa4oN/lUQjwFNToLZERY0aef8jbU+Rjp7d2vFNYXao=; b=EqCcDtwDnLS5SADni5y3SdAVybM0YB9taQt+MqUyIZ0mYq5hiD4aO0gPCjPDAgrfAU LPrnggg/wX2DMgtzCacc646AhCqp0iUN3VOHYuy35CuE+rsCO4O7eQ7U37nWqSEoulX3 TiPzNtb95yI1NK64WjgUE4filSLNnDR/CuqXQA8guzHjpNON6xSya1mFa6hediyEJobm 9j1XH0oKS7CHz/xiqVKmJbkSXPLRowYj2FUjLpWvUOkAJ5R1BJ38DC/vwGPJI439SkBq CTtkQcv/okT3lT9oVzZ0JiSyZAieJw6/MUPr+xXQB7AtnlriMwnBuSenCKhkKzrCDbHz aufw== X-Gm-Message-State: AOAM53230bRIRwgeDQRzCry3Y9I8ax1AIJAKxjEVl07fXSnF3jLSy67o z2JkrxaR+KbjVYBW3dLtsrnLx0sSlnc= X-Google-Smtp-Source: ABdhPJw3Av4mLTBZZKAO6n11Z9qGUnOuRktxv8nbti6KqwP++0bclqkdDsa62oAhpWofaMmGsoC6og== X-Received: by 2002:a05:620a:12dc:: with SMTP id e28mr629568qkl.151.1612465897024; Thu, 04 Feb 2021 11:11:37 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:36 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:48 -0300 Message-Id: <20210204191005.48190-34-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 33/50] avformat/tests/movenc: 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" Signed-off-by: James Almer --- libavformat/tests/movenc.c | 81 ++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c index 1d15d97ad9..04155dde76 100644 --- a/libavformat/tests/movenc.c +++ b/libavformat/tests/movenc.c @@ -56,6 +56,7 @@ int out_size; struct AVMD5* md5; uint8_t hash[HASH_SIZE]; +AVPacket *pkt; AVStream *video_st, *audio_st; int64_t audio_dts, video_dts; @@ -248,68 +249,67 @@ static void mux_frames(int n, int c) { int end_frames = frames + n; while (1) { - AVPacket pkt; uint8_t pktdata[8] = { 0 }; - av_init_packet(&pkt); + av_packet_unref(pkt); if (av_compare_ts(audio_dts, audio_st->time_base, video_dts, video_st->time_base) < 0) { - pkt.dts = pkt.pts = audio_dts; - pkt.stream_index = 1; - pkt.duration = audio_duration; + pkt->dts = pkt->pts = audio_dts; + pkt->stream_index = 1; + pkt->duration = audio_duration; audio_dts += audio_duration; } else { if (frames == end_frames) break; - pkt.dts = video_dts; - pkt.stream_index = 0; - pkt.duration = duration; + pkt->dts = video_dts; + pkt->stream_index = 0; + pkt->duration = duration; if ((frames % gop_size) == 0) { - pkt.flags |= AV_PKT_FLAG_KEY; + pkt->flags |= AV_PKT_FLAG_KEY; last_picture = AV_PICTURE_TYPE_I; - pkt.pts = pkt.dts + duration; - video_dts = pkt.pts; + pkt->pts = pkt->dts + duration; + video_dts = pkt->pts; } else { if (last_picture == AV_PICTURE_TYPE_P) { last_picture = AV_PICTURE_TYPE_B; - pkt.pts = pkt.dts; + pkt->pts = pkt->dts; video_dts = next_p_pts; } else { last_picture = AV_PICTURE_TYPE_P; if (((frames + 1) % gop_size) == 0) { - pkt.pts = pkt.dts + duration; - video_dts = pkt.pts; + pkt->pts = pkt->dts + duration; + video_dts = pkt->pts; } else { - next_p_pts = pkt.pts = pkt.dts + 2 * duration; + next_p_pts = pkt->pts = pkt->dts + 2 * duration; video_dts += duration; } } } if (!bframes) - pkt.pts = pkt.dts; + pkt->pts = pkt->dts; if (fake_pkt_duration) - pkt.duration = fake_pkt_duration; + pkt->duration = fake_pkt_duration; frames++; } if (clear_duration) - pkt.duration = 0; - AV_WB32(pktdata + 4, pkt.pts); - pkt.data = pktdata; - pkt.size = 8; + pkt->duration = 0; + AV_WB32(pktdata + 4, pkt->pts); + pkt->data = pktdata; + pkt->size = 8; if (skip_write) continue; - if (skip_write_audio && pkt.stream_index == 1) + if (skip_write_audio && pkt->stream_index == 1) continue; if (c) { - pkt.pts += (1LL<<32); - pkt.dts += (1LL<<32); + pkt->pts += (1LL<<32); + pkt->dts += (1LL<<32); } if (do_interleave) - av_interleaved_write_frame(ctx, &pkt); + av_interleaved_write_frame(ctx, pkt); else - av_write_frame(ctx, &pkt); + av_write_frame(ctx, pkt); } } @@ -327,19 +327,16 @@ static void skip_gops(int n) static void signal_init_ts(void) { - AVPacket pkt; - av_init_packet(&pkt); - pkt.size = 0; - pkt.data = NULL; - - pkt.stream_index = 0; - pkt.dts = video_dts; - pkt.pts = 0; - av_write_frame(ctx, &pkt); - - pkt.stream_index = 1; - pkt.dts = pkt.pts = audio_dts; - av_write_frame(ctx, &pkt); + av_packet_unref(pkt); + + pkt->stream_index = 0; + pkt->dts = video_dts; + pkt->pts = 0; + av_write_frame(ctx, pkt); + + pkt->stream_index = 1; + pkt->dts = pkt->pts = audio_dts; + av_write_frame(ctx, pkt); } static void finish(void) @@ -382,6 +379,11 @@ int main(int argc, char **argv) md5 = av_md5_alloc(); if (!md5) return 1; + pkt = av_packet_alloc(); + if (!pkt) { + av_free(md5); + return 1; + } // Write a fragmented file with an initial moov that actually contains some // samples. One moov+mdat with 1 second of data and one moof+mdat with 1 @@ -786,6 +788,7 @@ int main(int argc, char **argv) close_out(); av_free(md5); + av_packet_free(&pkt); return check_faults > 0 ? 1 : 0; } From patchwork Thu Feb 4 19:09:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25424 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 6F6F044A506 for ; Thu, 4 Feb 2021 21:14:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C0A66689D16; Thu, 4 Feb 2021 21:11:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E79EC68AA24 for ; Thu, 4 Feb 2021 21:11:39 +0200 (EET) Received: by mail-qt1-f179.google.com with SMTP id o18so3206433qtp.10 for ; Thu, 04 Feb 2021 11:11:39 -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=brO8vWTDfhIE7QOm0p+mvRH53yrC9+XYZYwnR/pphm4=; b=fKxFtLpubTx2+IgywxPVXO3HfkoVFv5c7u5+8MuKvNTEAoItDcitZjmJMkFICeLxr+ GEITTOI78DJ/S/jRM5Lt9sd07iYHjO/uFpd/YVDsTBXky5DQeitwLTP/3A/e9WVhJxBi ReDEPVmkLrbSrO2QkkSHdIuIR+3qubdOWmPg39Z+oLpn3PxYJBwD+0k+h7B+fFY6BCxC pKRPf4nEv4cWu+G6bXUHpgD5A3Pl6FPuvOrvBVgr1mntrQvdQUKCMmNspcfsEqGzISfg MZAg3E85QBudMnwDyS71pzByrcrgToG4S7niVRcf+QkKJg8dvjj9GJG4rcFTWC9bZXms IEkQ== 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=brO8vWTDfhIE7QOm0p+mvRH53yrC9+XYZYwnR/pphm4=; b=GWlol5kfbUIZ64F70nMg21/g02uFl6N6TwU3IOxz/xXECNQCuXutESHVGTY1YjR92v KqIb3zBVA3jEt1vift560f60z85RdIQlM8Jq1vBbJsVBFL23ISHkY6XqaCSB2dN0E9Pt 2/wMpG0gkKayEHmxS/+gHmXdh/gObhBeTvyBIwMjnFJH+lYQ9X6R3zmLstDRoIF2FLic zxc3ycJeojKCQNQL3zOsK0GfHrEU4s0LjArr0+04bxfH6TWGKJ1bJpKQrpJC3/w0zrR+ pUlxHsqpS+0pxwr5/YASHjp5rQNxrCGMEIn1V08Oj5vxmmb51rFt1IMhvrhu75qSaRU4 ZwEQ== X-Gm-Message-State: AOAM531QGCBfKY/iuSKdZitSdZHT7Bg9wf7qt+WBtqGR3CGTcXoUsreU YCiIaI6hkqL7VHbvgGVtx578CxrvUvU= X-Google-Smtp-Source: ABdhPJzd0Lm6WvGEkmmrWEPTKD8V0TkXXL3L7gD2LOhFw8hpH0sL3QsLmuJF8pWWxlQgzOfabq/9+g== X-Received: by 2002:ac8:4794:: with SMTP id k20mr1087495qtq.36.1612465898460; Thu, 04 Feb 2021 11:11:38 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:37 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:49 -0300 Message-Id: <20210204191005.48190-35-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 34/50] avdevice/decklink_dec: stop using av_init_packet() 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" Signed-off-by: James Almer --- I only removed the calls to av_init_packet() here because i can't test this code at all, so i'll leave it to the maintainer. libavdevice/decklink_dec.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 4f8103e614..23f8946d37 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -673,8 +673,7 @@ static void handle_klv(AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideo klv.insert(klv.end(), packet.data.begin(), packet.data.end()); } - AVPacket klv_packet; - av_init_packet(&klv_packet); + AVPacket klv_packet = { 0 }; klv_packet.pts = pts; klv_packet.dts = pts; klv_packet.flags |= AV_PKT_FLAG_KEY; @@ -872,8 +871,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( // Handle Video Frame if (videoFrame) { - AVPacket pkt; - av_init_packet(&pkt); + AVPacket pkt = { 0 }; if (ctx->frameCount % 25 == 0) { unsigned long long qsize = avpacket_queue_size(&ctx->queue); av_log(avctx, AV_LOG_DEBUG, @@ -975,7 +973,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( if (!no_video) { IDeckLinkVideoFrameAncillary *vanc; - AVPacket txt_pkt; + AVPacket txt_pkt = { 0 }; uint8_t txt_buf0[3531]; // 35 * 46 bytes decoded teletext lines + 1 byte data_identifier + 1920 bytes OP47 decode buffer uint8_t *txt_buf = txt_buf0; @@ -1034,7 +1032,6 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( txt_buf[1] = 0x2c; // data_unit_length txt_buf += 46; } - av_init_packet(&txt_pkt); txt_pkt.pts = pkt.pts; txt_pkt.dts = pkt.dts; txt_pkt.stream_index = ctx->teletext_st->index; @@ -1058,9 +1055,8 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( // Handle Audio Frame if (audioFrame) { - AVPacket pkt; + AVPacket pkt = { 0 }; BMDTimeValue audio_pts; - av_init_packet(&pkt); //hack among hacks pkt.size = audioFrame->GetSampleFrameCount() * ctx->audio_st->codecpar->channels * (ctx->audio_depth / 8); From patchwork Thu Feb 4 19:09:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25413 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 D104C4480C6 for ; Thu, 4 Feb 2021 21:11:44 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B44B968AA46; Thu, 4 Feb 2021 21:11:44 +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 5158168AA1F for ; Thu, 4 Feb 2021 21:11:41 +0200 (EET) Received: by mail-qt1-f175.google.com with SMTP id z32so3216201qtd.8 for ; Thu, 04 Feb 2021 11:11:41 -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=uzvl0MPyfpAZQjSRKLDhQVc+DG/3gDdlN1nZF1QOHxY=; b=cGijEUgbqSzLtZiwbKrDHftvOubmpUQE8gV3zu6nfetUIeC2G2ol29h0NO5XaJ5Ldn T1uUCcQSgmO1PEXSoPTJ9zdR8CWoGolcr7Ak3nWVzZmIL52WbQEwSjwhnuE+rNU04bhv FOQGS/bXKxq9rmxcd5hMlnY0fqerFAkCQH9Np6KA06b3lJPDi1vax/ISwO3BWhINj5pI b+QnonrIjbMjxnOGXkKZdf+AZdDJJBRwdS13KpR2l8j/8Y/RrcqQZ9yETGPTtSLsicDs 064U203TIBgu4KsVWH12sZue5JH2SrS9dgNzA6sSm9CN7EfYEMWOd81CuXdFLnXX0yxv O61g== 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=uzvl0MPyfpAZQjSRKLDhQVc+DG/3gDdlN1nZF1QOHxY=; b=pNpFcl4bSfQ3C+L3G/WjfuH+EgmFI+Ml3bMrNiMdhh1cE3yDNC8nTG4B3EYOfCkcxx b/QAjO3Xb62wb96yGuT5/PNLIXiyQoUGJ24hBxmlDgg1NYnDk7swCpXE3lVnmT7XiFZ2 YfVW8ITUhM1feGBGC0NRnAfjFyIY+tb2wMI4Z5w7PLEUusuFNCSOTa+Nex6QO69YCopD K6JXHMK6a2EQhpTxhAuCO+MhIA4zJZBsZNW/EMRSfu7UZ8UEMggBAwIbICz7J6xPNnhi EspaU3/vFfZzzhgf7iyCCmeaDJtj+NNRQu8/pQXQgnsg20U8yiOJDt1SXLkylbt+3kGi DEvQ== X-Gm-Message-State: AOAM5330Pucl7MEWANHgvZQ/oxv6zpzvHBZOxjGKJPDAQwiOMJBGOuQt 2HNufuCvp3jfF6Hx5L7rO74x+CCeG68= X-Google-Smtp-Source: ABdhPJzKxZeYcAT2KWgGe+Y06LrJvjTw3IsRJcbepU3uz3EsrONTpB03A60/zyD0nozL2LDX3diRkA== X-Received: by 2002:aed:2070:: with SMTP id 103mr1020263qta.287.1612465899922; Thu, 04 Feb 2021 11:11:39 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:39 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:50 -0300 Message-Id: <20210204191005.48190-36-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 35/50] avdevice/xcbgrab: stop using av_init_packet() 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" Signed-off-by: James Almer --- libavdevice/xcbgrab.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c index 95bdc8ab9d..908e189b35 100644 --- a/libavdevice/xcbgrab.c +++ b/libavdevice/xcbgrab.c @@ -184,8 +184,6 @@ static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt) data = xcb_get_image_data(img); length = xcb_get_image_data_length(img); - av_init_packet(pkt); - pkt->buf = av_buffer_create(data, length, xcbgrab_image_reply_free, img, 0); if (!pkt->buf) { free(img); @@ -301,8 +299,6 @@ static int xcbgrab_frame_shm(AVFormatContext *s, AVPacket *pkt) free(img); - av_init_packet(pkt); - pkt->buf = buf; pkt->data = buf->data; pkt->size = c->frame_size; From patchwork Thu Feb 4 19:09:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25425 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 791D244A506 for ; Thu, 4 Feb 2021 21:14:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D843E68AA07; Thu, 4 Feb 2021 21:11:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E5B8568A9A5 for ; Thu, 4 Feb 2021 21:11:42 +0200 (EET) Received: by mail-qv1-f45.google.com with SMTP id a1so2232330qvd.13 for ; Thu, 04 Feb 2021 11:11:42 -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=pIOo5cHrhoExhzmJCs3/PHa7t7m8yJC5s+sVBEb3bSM=; b=SdDvrLji7VnXrZ30qQkUXmiwrAV+941Y2KPmnO48I4gLEgNs/LMHcBbtZDWZCfSLWW 8I1uf3y+bjyGgP5eWRVQL5ymWMStGW4QQvOVjmqEOt5IWi++Yhw1QuQO3Xty5XhfN9i/ Y4p4Zdq1jBT6hzxB7Hx3wLs7gekaUFiQnisc5178cy7JBJ510IC3FQihTtLu9qiIV6Qs pj8DN0MmnFZarOq3QUQvMYbRKvHCjYgI+vktndmqfPlI/Tm0fkvN6gAbgyZmSbSWXq0N BJw4kvK30xmCq3tsxU14xAXpLSHogE/WidQU1wmes+RVmqMM5tbvGUq/0fNcfhnzYFbu jm/Q== 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=pIOo5cHrhoExhzmJCs3/PHa7t7m8yJC5s+sVBEb3bSM=; b=ZFrqOo3RKIQExBdQfpFbtvL+iTG5tqvolxtdYrg9cdM2r6dF4Njk9DxFvx5djaq60c sITzHMABqP64AzK1p5RVsx8JmXyz8YOLs45jBhArk7tcpCNkY34ceVqXb73NTV1g95tH 4XiGzQrXRUZs5irAiBgsvDZNLU4X0RaxOrZoL2COEwAojOEVH0pejoNftFXxKg5H+lEP BcDzesh8mwvKrb3MYuy2SUHPqzrdFqbShz3hUfVR0XDbjmlLfM7WMmepz00dfaq5MSJN 6afnRmGO/crhnJAti63cbyuRJ1TdtNLFJa13mcY0M2upuJhhnWDwkoEaS/z9ZfYdqYsc v20g== X-Gm-Message-State: AOAM532eUkM3ZKPFjLPUwUkh1pW2IY7OZzKKXVDztO9ZS9xeZUcuZZAr W01hVOmmctdQHcv14kFvh21zznt4ELQ= X-Google-Smtp-Source: ABdhPJyinwNRSCltWJZ9rGIVsgMSiHHtVCrv7/pofCvC1QR4wnKlyrBBUqfJwZSMoCbzWAbse6497g== X-Received: by 2002:a0c:a5a5:: with SMTP id z34mr888040qvz.59.1612465901361; Thu, 04 Feb 2021 11:11:41 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:40 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:51 -0300 Message-Id: <20210204191005.48190-37-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 36/50] avfilter/vf_mcdeint: 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" Signed-off-by: James Almer --- libavfilter/vf_mcdeint.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c index bc7b3230d3..26baf94adb 100644 --- a/libavfilter/vf_mcdeint.c +++ b/libavfilter/vf_mcdeint.c @@ -74,6 +74,7 @@ typedef struct MCDeintContext { int mode; ///< MCDeintMode int parity; ///< MCDeintParity int qp; + AVPacket *pkt; AVCodecContext *enc_ctx; } MCDeintContext; @@ -112,6 +113,9 @@ static int config_props(AVFilterLink *inlink) return AVERROR(EINVAL); } + mcdeint->pkt = av_packet_alloc(); + if (!mcdeint->pkt) + return AVERROR(ENOMEM); mcdeint->enc_ctx = avcodec_alloc_context3(enc); if (!mcdeint->enc_ctx) return AVERROR(ENOMEM); @@ -154,6 +158,7 @@ static av_cold void uninit(AVFilterContext *ctx) { MCDeintContext *mcdeint = ctx->priv; + av_packet_free(&mcdeint->pkt); avcodec_free_context(&mcdeint->enc_ctx); } @@ -173,7 +178,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) MCDeintContext *mcdeint = inlink->dst->priv; AVFilterLink *outlink = inlink->dst->outputs[0]; AVFrame *outpic, *frame_dec; - AVPacket pkt = {0}; + AVPacket *pkt = mcdeint->pkt; int x, y, i, ret, got_frame = 0; outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h); @@ -184,9 +189,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) av_frame_copy_props(outpic, inpic); inpic->quality = mcdeint->qp * FF_QP2LAMBDA; - av_init_packet(&pkt); + av_packet_unref(pkt); - ret = avcodec_encode_video2(mcdeint->enc_ctx, &pkt, inpic, &got_frame); + ret = avcodec_encode_video2(mcdeint->enc_ctx, pkt, inpic, &got_frame); if (ret < 0) goto end; @@ -274,7 +279,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) mcdeint->parity ^= 1; end: - av_packet_unref(&pkt); + av_packet_unref(pkt); av_frame_free(&inpic); if (ret < 0) { av_frame_free(&outpic); From patchwork Thu Feb 4 19:09:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25430 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 0E04D44A6BE for ; Thu, 4 Feb 2021 21:16:13 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E5BF768AA42; Thu, 4 Feb 2021 21:11:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3BF47689972 for ; Thu, 4 Feb 2021 21:11:44 +0200 (EET) Received: by mail-qk1-f173.google.com with SMTP id x81so4492471qkb.0 for ; Thu, 04 Feb 2021 11:11:44 -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=mh9R8tpmzAAOgr6sZo8DrM5AV75NrTVKrj7eCPgZNyk=; b=ObWdBHyzj8/xARiCRYBIzRFTHNjIfxDMXprhrTylK8ZcZ4kGFGNAa3e0D4PIQiKSW5 AAX+QZjPPQfxpge1mo52f20OC9NxkfxOo+cEurFBGfqny4Dj5Y+rNvlZh7wHrle/bcQ8 W6K+JCaRzUrYSMfQU/nqygyDzMRM1AFJWSiBhx+zG5AI/LwY7woWuuAfyhAE93NLPK8w RA8iqp58cdinGUzHiMhRWtjGsanvlbVuY/Ws0BFNservm79YXdtNwJYA8OJWlpMuYBu7 CjlYVXLowZjq5IHpMqCV/JMMO/0gDEPkGGz2nkOs3N6fxTdR99ocW2a6HI/XA1OSom6a V2aA== 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=mh9R8tpmzAAOgr6sZo8DrM5AV75NrTVKrj7eCPgZNyk=; b=J2YvL4aXHcgH1UHQx295iZz8lS+9pA/Pvfj1ed2ozcl1feTEjR/JoZvBIRVBc3dvbg dPEDIC/5IDLoMIdc7jYtZjKC2718X6MZqmrQ57dBSQaFFOQxQeffXGvzDfRNCDq5QgOu wAzTkLN5aUZdO1c8GcNAB1HCCW1LoDSjYK+/4v+DNtqCbaGRBmvJuqGfJKDjpl8t7B/0 Uo3aP0i/xmErrUALJOQ1rSmEADiQEXxoPCED7Xf5srqTp6oTNC9ZvdYnl8XSrmmPi2Qg NVxJcFJmBMcloZkJRtxpWmjmmbJQu7K8qcpWI4EpvDSG4D+k485Bcqlup0YeyFqMD7eI aZ8w== X-Gm-Message-State: AOAM530BRdXZfOpfenZKa9wStcd8UxQ/mR+7k8WTbd+Xl2ds7bzdzOiv gadMkZcHb9grsiQLxFifghb7WguMDh4= X-Google-Smtp-Source: ABdhPJwS7nmZ04LVJzD7bJQOrmTkePjapifY99oXgXr6PMTcGv06rZxOq8N0dYVM+YiC3IylP1VCGg== X-Received: by 2002:a05:620a:1090:: with SMTP id g16mr623433qkk.147.1612465902846; Thu, 04 Feb 2021 11:11:42 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:42 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:52 -0300 Message-Id: <20210204191005.48190-38-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 37/50] avfilter/vf_uspp: 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" Signed-off-by: James Almer --- libavfilter/vf_uspp.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_uspp.c b/libavfilter/vf_uspp.c index 8b39f53c3d..8c75207593 100644 --- a/libavfilter/vf_uspp.c +++ b/libavfilter/vf_uspp.c @@ -51,6 +51,7 @@ typedef struct USPPContext { int outbuf_size; uint8_t *outbuf; AVCodecContext *avctx_enc[BLOCK*BLOCK]; + AVPacket *pkt; AVFrame *frame; AVFrame *frame_dec; int8_t *non_b_qp_table; @@ -240,19 +241,19 @@ static void filter(USPPContext *p, uint8_t *dst[3], uint8_t *src[3], const int y1c = y1 >> p->vsub; const int BLOCKc = BLOCK >> p->hsub; int offset; - AVPacket pkt = {0}; + AVPacket *pkt = p->pkt; int got_pkt_ptr; - av_init_packet(&pkt); - pkt.data = p->outbuf; - pkt.size = p->outbuf_size; + av_packet_unref(pkt); + pkt->data = p->outbuf; + pkt->size = p->outbuf_size; p->frame->data[0] = p->src[0] + x1 + y1 * p->frame->linesize[0]; p->frame->data[1] = p->src[1] + x1c + y1c * p->frame->linesize[1]; p->frame->data[2] = p->src[2] + x1c + y1c * p->frame->linesize[2]; p->frame->format = p->avctx_enc[i]->pix_fmt; - ret = avcodec_encode_video2(p->avctx_enc[i], &pkt, p->frame, &got_pkt_ptr); + ret = avcodec_encode_video2(p->avctx_enc[i], pkt, p->frame, &got_pkt_ptr); if (ret < 0) { av_log(p->avctx_enc[i], AV_LOG_ERROR, "Encoding failed\n"); continue; @@ -373,6 +374,8 @@ static int config_input(AVFilterLink *inlink) uspp->outbuf_size = (width + BLOCK) * (height + BLOCK) * 10; if (!(uspp->frame = av_frame_alloc())) return AVERROR(ENOMEM); + if (!(uspp->pkt = av_packet_alloc())) + return AVERROR(ENOMEM); if (!(uspp->outbuf = av_malloc(uspp->outbuf_size))) return AVERROR(ENOMEM); @@ -465,6 +468,7 @@ static av_cold void uninit(AVFilterContext *ctx) av_freep(&uspp->non_b_qp_table); av_freep(&uspp->outbuf); + av_packet_free(&uspp->pkt); av_frame_free(&uspp->frame); } From patchwork Thu Feb 4 19:09:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25432 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 A8A5244A6BE for ; Thu, 4 Feb 2021 21:16:25 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A666468AA6E; Thu, 4 Feb 2021 21:11:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0F9CB68AA1F for ; Thu, 4 Feb 2021 21:11:45 +0200 (EET) Received: by mail-qt1-f172.google.com with SMTP id r20so3245227qtm.3 for ; Thu, 04 Feb 2021 11:11:45 -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=oN/8KkJSVaEnBIjkZzy0AgHOBNUN/KrlBqvMtygYqUA=; b=NgFkSDP1/r2PArD2XnE171dfn7JHAlzgzDat0ejeXjm3UOsMohosewZaK3OyUpBKDa amNYp32AVJJ+Cv4IpwfKDPvucRuCKZVpd1Wbj1JE/zeObVxwa16iiFnnJcBUPZs89Go+ YAn5hBlpXDbJBLo/DcHmCcWMZxRcMfPChJEImxSneI1nSO3MG0UNY6dTduho1B6VcmzT cfsMEao6rCfcvz4kYSlto7SeZTxkYOFBexKJSR5x062uHBV/cUAfok5oyElDUWIfkr+i 2DDrVHXTrM5OWYEA5oUHBl3ZvW5E40sG24k49LrikVPDDYhZ1rG100hfy5RAUE8GG9/W oPRQ== 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=oN/8KkJSVaEnBIjkZzy0AgHOBNUN/KrlBqvMtygYqUA=; b=DmxXnfn/R5ARbvARtJ6A1sbuenrSPLyf1d4i8ydAz5Cj1ZU9Dq7kwadwfhswCEnnqw Z206Nrd+k5LAwlcWeRp3TXLwlXhhqlesLYTv5kJcetze1GGnzZsWWmlHC5fCJuSk39Wb /An+9tyqVyuWYjL7ur7Ij9N6GR5xIbDxEebnt9Ae0DoWP28OmT9mf2hQrMXiWVIwDZfk BYMq8G3AjBF8Unlhu2ZP/Apj2j43BUxKEcHizXtgV7n8XdrISIIEjtkiRQ6HVs9jT9PI 5wJl8tDFTYqaCADSqHTS67VoTXXKH+VCPexaI4pSD1xG7mFpEzEujUjwVJZ8iGVUE4OW tN2A== X-Gm-Message-State: AOAM531IiYLCaFkCGN3569NWNFfpySGVrU7O8tIDk2ms6Hfo5kpk1irs 6IadkJEEeVfbezgMo6o7rNfn4RY7zio= X-Google-Smtp-Source: ABdhPJwgzx0kDOq4U8JjgS/fsrvapr/Q//JJSNHAIOu0pQwN/T36WkRdkELAG/3N5SLmp8GWZ6M4sg== X-Received: by 2002:aed:3943:: with SMTP id l61mr1021431qte.392.1612465904374; Thu, 04 Feb 2021 11:11:44 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:43 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:53 -0300 Message-Id: <20210204191005.48190-39-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 38/50] tools/pktdumper: 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" Signed-off-by: James Almer --- tools/pktdumper.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/pktdumper.c b/tools/pktdumper.c index 16a965b756..c51f5c8922 100644 --- a/tools/pktdumper.c +++ b/tools/pktdumper.c @@ -54,7 +54,7 @@ int main(int argc, char **argv) char fntemplate[FILENAME_BUF_SIZE]; char pktfilename[FILENAME_BUF_SIZE]; AVFormatContext *fctx = NULL; - AVPacket pkt; + AVPacket *pkt; int64_t pktnum = 0; int64_t maxpkts = 0; int donotquit = 0; @@ -101,30 +101,35 @@ int main(int argc, char **argv) return 1; } - av_init_packet(&pkt); + pkt = av_packet_alloc(); + if (!pkt) { + fprintf(stderr, "av_packet_alloc: error %d\n", AVERROR(ENOMEM)); + return 1; + } - while ((err = av_read_frame(fctx, &pkt)) >= 0) { + while ((err = av_read_frame(fctx, pkt)) >= 0) { int fd; snprintf(pktfilename, sizeof(pktfilename), fntemplate, pktnum, - pkt.stream_index, pkt.pts, pkt.size, - (pkt.flags & AV_PKT_FLAG_KEY) ? 'K' : '_'); - printf(PKTFILESUFF "\n", pktnum, pkt.stream_index, pkt.pts, pkt.size, - (pkt.flags & AV_PKT_FLAG_KEY) ? 'K' : '_'); + pkt->stream_index, pkt->pts, pkt->size, + (pkt->flags & AV_PKT_FLAG_KEY) ? 'K' : '_'); + printf(PKTFILESUFF "\n", pktnum, pkt->stream_index, pkt->pts, pkt->size, + (pkt->flags & AV_PKT_FLAG_KEY) ? 'K' : '_'); if (!nowrite) { fd = open(pktfilename, O_WRONLY | O_CREAT, 0644); - err = write(fd, pkt.data, pkt.size); + err = write(fd, pkt->data, pkt->size); if (err < 0) { fprintf(stderr, "write: error %d\n", err); return 1; } close(fd); } - av_packet_unref(&pkt); + av_packet_unref(pkt); pktnum++; if (maxpkts && (pktnum >= maxpkts)) break; } + av_packet_free(&pkt); avformat_close_input(&fctx); while (donotquit) From patchwork Thu Feb 4 19:09:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25414 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 86BCA4480C6 for ; Thu, 4 Feb 2021 21:11:48 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6EAF468AA1F; Thu, 4 Feb 2021 21:11:48 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7686F68AA48 for ; Thu, 4 Feb 2021 21:11:47 +0200 (EET) Received: by mail-qt1-f177.google.com with SMTP id h16so3197407qth.11 for ; Thu, 04 Feb 2021 11:11:47 -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=NygFnijP9Lh6PhJND5d5+ogwLHXbwbVH6k8SeRmx3i4=; b=BHb6K0j9eyn7UF0RNqsuQfJxPGOEPf19hLeYM7KLQGa7nZ+xcGUAgKejMlqI/NPIqt R2DTFe5L9yHyZUrepg4xXX2/oGB22kvltsEZPMMso//8hKZWUh7luo24fsHmb4aHmsqB zf8KatQq3QMlGrx118Io2rZ/AEXIWSAcMbXFrptG1uhWFaLWzX4zhzhpWXrJNY4lx/jR 3RNe3a+f6VUgNMHj5lFGFCWJX28WpLwce8MtI9NxLEIfMVNYP/Bw5HPAdRdIDUoLK52D 3jiLvytdG4xILNcmimveGL14O+TACOtzG12/aCvzeCl4l7JLB+kYneMLVpU2op6M2tAr G36w== 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=NygFnijP9Lh6PhJND5d5+ogwLHXbwbVH6k8SeRmx3i4=; b=nSenPKVMUR8IaQI3pTtkCpO4Ld9EFBR4lsWLSCf2JLPQeHo5tVp88cvXnxFR2b8yY3 CCqh8TfeHobuFbEXlJw+KGrDagktydTuV59avpkMESqRgaV7ZQVHTLnSAG42bxae9XDW hQgsIvCiC0H2pqHyta1ZWEkeDqBCYCbTiKLiUvaeQjg8XSAoivPxq298Wl7Md+tV0yL6 6n2XK3H1yPS4j44iczA4/xnegZpX3HwiS/gTC4khvivwUodmch/F6MqMX3iEmv/iNJWd 8M9+ITU/kmAO3h0EhRmOGZHcrlVBgDMEPeXaOD8lNzzMFS6F/HZDU3hXeIZUbfPo+0Dy XIXw== X-Gm-Message-State: AOAM530yK/ThKUvUvDmzZJ7B/lijx5mZbjEHqldulHvw4AkVq+3bq8Z9 V45kj5/TzaWLsU7T6POU4O5FkhfuJjo= X-Google-Smtp-Source: ABdhPJzVYJON9c+ZkmRNSH96imx0B3Cmh2kb5MIfThww66lz0Y/YEw8Wntogf3VhbMlc6vL9GNeJzw== X-Received: by 2002:ac8:46cd:: with SMTP id h13mr1042504qto.296.1612465905795; Thu, 04 Feb 2021 11:11:45 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:45 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:54 -0300 Message-Id: <20210204191005.48190-40-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 39/50] tools/target_dec_fuzzer: 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" Signed-off-by: James Almer --- tools/target_dec_fuzzer.c | 73 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/tools/target_dec_fuzzer.c b/tools/target_dec_fuzzer.c index affa6e3b51..84e59000b8 100644 --- a/tools/target_dec_fuzzer.c +++ b/tools/target_dec_fuzzer.c @@ -286,13 +286,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int got_frame; AVFrame *frame = av_frame_alloc(); - if (!frame) + AVPacket *avpkt = av_packet_alloc(); + AVPacket *parsepkt = av_packet_alloc(); + if (!frame || !avpkt || !parsepkt) error("Failed memory allocation"); // Read very simple container - AVPacket avpkt, parsepkt; - av_init_packet(&avpkt); - av_init_packet(&parsepkt); while (data < end && it < maxiteration) { // Search for the TAG while (data + sizeof(fuzz_tag) < end) { @@ -303,43 +302,42 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (data + sizeof(fuzz_tag) > end) data = end; - res = av_new_packet(&parsepkt, data - last); + res = av_new_packet(parsepkt, data - last); if (res < 0) error("Failed memory allocation"); - memcpy(parsepkt.data, last, data - last); - parsepkt.flags = (keyframes & 1) * AV_PKT_FLAG_DISCARD + (!!(keyframes & 2)) * AV_PKT_FLAG_KEY; + memcpy(parsepkt->data, last, data - last); + parsepkt->flags = (keyframes & 1) * AV_PKT_FLAG_DISCARD + (!!(keyframes & 2)) * AV_PKT_FLAG_KEY; keyframes = (keyframes >> 2) + (keyframes<<62); data += sizeof(fuzz_tag); last = data; - while (parsepkt.size > 0) { + while (parsepkt->size > 0) { int decode_more; if (parser) { - av_init_packet(&avpkt); - int ret = av_parser_parse2(parser, parser_avctx, &avpkt.data, &avpkt.size, - parsepkt.data, parsepkt.size, - parsepkt.pts, parsepkt.dts, parsepkt.pos); - if (avpkt.data == parsepkt.data) { - avpkt.buf = av_buffer_ref(parsepkt.buf); - if (!avpkt.buf) + int ret = av_parser_parse2(parser, parser_avctx, &avpkt->data, &avpkt->size, + parsepkt->data, parsepkt->size, + parsepkt->pts, parsepkt->dts, parsepkt->pos); + if (avpkt->data == parsepkt->data) { + avpkt->buf = av_buffer_ref(parsepkt->buf); + if (!avpkt->buf) error("Failed memory allocation"); } else { - if (av_packet_make_refcounted(&avpkt) < 0) + if (av_packet_make_refcounted(avpkt) < 0) error("Failed memory allocation"); } - parsepkt.data += ret; - parsepkt.size -= ret; - parsepkt.pos += ret; - avpkt.pts = parser->pts; - avpkt.dts = parser->dts; - avpkt.pos = parser->pos; + parsepkt->data += ret; + parsepkt->size -= ret; + parsepkt->pos += ret; + avpkt->pts = parser->pts; + avpkt->dts = parser->dts; + avpkt->pos = parser->pos; if ( parser->key_frame == 1 || (parser->key_frame == -1 && parser->pict_type == AV_PICTURE_TYPE_I)) - avpkt.flags |= AV_PKT_FLAG_KEY; - avpkt.flags |= parsepkt.flags & AV_PKT_FLAG_DISCARD; + avpkt->flags |= AV_PKT_FLAG_KEY; + avpkt->flags |= parsepkt->flags & AV_PKT_FLAG_DISCARD; } else { - av_packet_move_ref(&avpkt, &parsepkt); + av_packet_move_ref(avpkt, parsepkt); } if (!(flushpattern & 7)) @@ -347,7 +345,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { flushpattern = (flushpattern >> 3) + (flushpattern << 61); if (ctx->codec_type != AVMEDIA_TYPE_SUBTITLE) { - int ret = avcodec_send_packet(ctx, &avpkt); + int ret = avcodec_send_packet(ctx, avpkt); decode_more = ret >= 0; } else decode_more = 1; @@ -355,7 +353,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { // Iterate through all data while (decode_more && it++ < maxiteration) { av_frame_unref(frame); - int ret = decode_handler(ctx, frame, &got_frame, &avpkt); + int ret = decode_handler(ctx, frame, &got_frame, avpkt); ec_pixels += (ctx->width + 32LL) * (ctx->height + 32LL); if (it > 20 || ec_pixels > 4 * ctx->max_pixels) @@ -365,30 +363,30 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (ctx->codec_type == AVMEDIA_TYPE_AUDIO && frame->nb_samples == 0 && !got_frame && - (avpkt.flags & AV_PKT_FLAG_DISCARD)) + (avpkt->flags & AV_PKT_FLAG_DISCARD)) nb_samples += ctx->max_samples; nb_samples += frame->nb_samples; if (nb_samples > maxsamples) goto maximums_reached; - if (ret <= 0 || ret > avpkt.size) + if (ret <= 0 || ret > avpkt->size) break; if (ctx->codec_type == AVMEDIA_TYPE_SUBTITLE) { - avpkt.data += ret; - avpkt.size -= ret; - decode_more = avpkt.size > 0; + avpkt->data += ret; + avpkt->size -= ret; + decode_more = avpkt->size > 0; } else decode_more = ret >= 0; } - av_packet_unref(&avpkt); + av_packet_unref(avpkt); } - av_packet_unref(&parsepkt); + av_packet_unref(parsepkt); } maximums_reached: - av_packet_unref(&avpkt); + av_packet_unref(avpkt); if (ctx->codec_type != AVMEDIA_TYPE_SUBTITLE) avcodec_send_packet(ctx, NULL); @@ -396,7 +394,7 @@ maximums_reached: do { got_frame = 0; av_frame_unref(frame); - decode_handler(ctx, frame, &got_frame, &avpkt); + decode_handler(ctx, frame, &got_frame, avpkt); } while (got_frame == 1 && it++ < maxiteration); fprintf(stderr, "pixels decoded: %"PRId64", samples decoded: %"PRId64", iterations: %d\n", ec_pixels, nb_samples, it); @@ -405,7 +403,8 @@ maximums_reached: avcodec_free_context(&ctx); avcodec_free_context(&parser_avctx); av_parser_close(parser); - av_packet_unref(&parsepkt); + av_packet_free(&avpkt); + av_packet_free(&parsepkt); av_dict_free(&opts); return 0; } From patchwork Thu Feb 4 19:09:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25415 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 615584480C6 for ; Thu, 4 Feb 2021 21:11:50 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4A3C268AA89; Thu, 4 Feb 2021 21:11:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C452968AA85 for ; Thu, 4 Feb 2021 21:11:48 +0200 (EET) Received: by mail-qk1-f175.google.com with SMTP id t126so1900404qke.11 for ; Thu, 04 Feb 2021 11:11:48 -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=/rS1oiccLKZBxyhq8yft8mnPApNxToxDIFHzp9m8zsg=; b=kKagrYEANs7/fAOgQ3SLfaXakCjhv8WMH2VJ937+eq4FAwaoiIm4PqT95zPlvD98pa w+n3g1qczYXcKTQSPwbShKki1j4VcVOzds88JSUpQigS7XbbPp5IdB0j8Ln+tCHXZ/Vu 4JS0nmTb5KU1mVYvAtCXBJHPtLSeoSrYQmF7N1QBXhG8fixvwtfGifn6JWfwpuw/L8mS qrb+cQPwz15Vf6TvOkR34OsZirmCxWiynrmoJ2WAhs4YtLvbtGD+5Wbcz3+deE4eQNe2 2yB5vmPb7h9V4EyLBdZ0who0t8gCMXcfOIuSuB0kTPKOhXDCWmoIW+KfsAsdUAV2BiJ1 3lVg== 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=/rS1oiccLKZBxyhq8yft8mnPApNxToxDIFHzp9m8zsg=; b=hqIvcNlHelKieuP7ek2PWFVfm07qZi13D5ajR+GAAt5GqJZrTn/QlVfW5+YlXCscQc KsShBh26ptr8PciYn0MKtJVyDVbsrY8JxXq4BklVpjfJeXqyvWHzwbu1CzXVLP8oSOGr /01rKE1fnoDauPCkcIfOsj0AxpFHb0VMShEAmgtTmtJxp8Ob4/LwyfwHJepvqQ+psULa dx7NWFT3g2tDAAvE0oNSpAZF+2TDQb9l8FQy4voQCSdbAAllXKdzrhBlT5uhGD846Td6 Sqx2FZbScXOow1SnRC0owIgpZO53XYvqXWJBJvgKLCIzK6pMuxwEfWK3+i1p5Q9rby/I qCXw== X-Gm-Message-State: AOAM530lG38fQW6+EvPVQYZBiTtIBFR52qvcSbEpv20oqSPxA+RpcluU l+hFJKDQAOzvqVhv7VSIcltkYN7qGCY= X-Google-Smtp-Source: ABdhPJyfzXQWJE08CTmsPYX+ABhX5i8YWCFJXCK5MQZhr0VhffnG5vIBynDe/Mw0fXa5403m+aVKcQ== X-Received: by 2002:a37:b204:: with SMTP id b4mr676955qkf.72.1612465907173; Thu, 04 Feb 2021 11:11:47 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:46 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:55 -0300 Message-Id: <20210204191005.48190-41-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 40/50] tools/target_dem_fuzzer: 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" Signed-off-by: James Almer --- tools/target_dem_fuzzer.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/target_dem_fuzzer.c b/tools/target_dem_fuzzer.c index 8ff98af945..af1840b359 100644 --- a/tools/target_dem_fuzzer.c +++ b/tools/target_dem_fuzzer.c @@ -96,7 +96,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { const uint64_t fuzz_tag = FUZZ_TAG; uint32_t it = 0; AVFormatContext *avfmt = avformat_alloc_context(); - AVPacket pkt; + AVPacket *pkt; char filename[1025] = {0}; AVIOContext *fuzzed_pb = NULL; uint8_t *io_buffer; @@ -165,6 +165,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (!io_buffer_size || size / io_buffer_size > maxblocks) io_buffer_size = size; + pkt = av_packet_alloc(); + if (!pkt) + error("Failed to allocate pkt"); + io_buffer = av_malloc(io_buffer_size); if (!io_buffer) error("Failed to allocate io_buffer"); @@ -190,17 +194,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { ret = avformat_find_stream_info(avfmt, NULL); - av_init_packet(&pkt); - //TODO, test seeking for(it = 0; it < maxiteration; it++) { - ret = av_read_frame(avfmt, &pkt); + ret = av_read_frame(avfmt, pkt); if (ret < 0) break; - av_packet_unref(&pkt); + av_packet_unref(pkt); } + av_packet_free(&pkt); av_freep(&fuzzed_pb->buffer); avio_context_free(&fuzzed_pb); avformat_close_input(&avfmt); From patchwork Thu Feb 4 19:09:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25416 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 5CA464480C6 for ; Thu, 4 Feb 2021 21:11:52 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 49995680571; Thu, 4 Feb 2021 21:11:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 187E768AA7B for ; Thu, 4 Feb 2021 21:11:49 +0200 (EET) Received: by mail-qt1-f172.google.com with SMTP id r20so3245396qtm.3 for ; Thu, 04 Feb 2021 11:11:49 -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=dA6jbKYnRDSkRZoimCdGzPbj5L1td8zxE0if6N7uoKY=; b=mVRPI3XyZZBR4eYMSKf1fCoX5UWp554zkai54RzIkS6xDpf7DpebGEvhrS9tUMyXGF 2wJHxIwbmLQvopc96XqVO6YDweRHy8VkG0RHEcfqQLLkuKkZb/3x35gYdU5hcO6oP+Nn Xv/b+HxbtCJfwA9r42Kxn5P7tCG3OrIN4uZigBeS9WcjH1M3MWEpYeGSsE2F/aB0LukD bONhA+naATqgCTb9E34biiLsh6V15RmX6N0HKJYEFVJSjj47hEdBO+94UvuHJammNNM5 WYGzStH/S94PXIxT35IvYEOC6NDqww88CpGkfuR5nYJDX0lQDeqvUQf36Dp6MGlDBzpd mF0Q== 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=dA6jbKYnRDSkRZoimCdGzPbj5L1td8zxE0if6N7uoKY=; b=exchmiXuDnJaM3cWRFFY092URmiw9xaNjcZQhPFWb0xFoPbSCZGphBINCkhL35wa6j N6u80LRMcT1oQKSLnEB2xcSmZU+tBDw6SNZ+XGWm2x2K2bQOn6Ri86VgMXoW/aSifbqm T3jZKIdfGXC+XQPXymSwAUZagriaKwLRPqPTF7SOXcgSIcYbTjKCotoCCLzrftGjdNjm DQvcTmmAR71Bz7eeRGAcertoKc8hNY6axGg0vplA9SCLGF+R61d6AHSjlIzvkRHQmPfA WKszUyMQ0p371dIzeJKgsbTHQIC5tSXDMiYWjAvSGeRpYH+KZND9J507Y+kk9PF2p0Uo wH/g== X-Gm-Message-State: AOAM531aCeOUaKtWWyFZYXe0cLNc5W0Nbxy1yt+/p6jVIBxezs8sJr7J 6jvG/ZRWP4UHx7c9VM7wkB2dpStVkc4= X-Google-Smtp-Source: ABdhPJw2QUfgWoyJq6xnE3OJwDsKiGU3RxWkmJRQoxP91JYcFdzbLMU4SrEa2QJvAY8HXTrx0/RJGA== X-Received: by 2002:ac8:768c:: with SMTP id g12mr1088773qtr.24.1612465908572; Thu, 04 Feb 2021 11:11:48 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:47 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:56 -0300 Message-Id: <20210204191005.48190-42-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 41/50] tools/target_bsf_fuzzer: 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" Signed-off-by: James Almer --- tools/target_bsf_fuzzer.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/tools/target_bsf_fuzzer.c b/tools/target_bsf_fuzzer.c index 8781a93ac3..bab809162a 100644 --- a/tools/target_bsf_fuzzer.c +++ b/tools/target_bsf_fuzzer.c @@ -42,7 +42,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { const uint8_t *last = data; const uint8_t *end = data + size; AVBSFContext *bsf = NULL; - AVPacket in, out; + AVPacket *in, *out; uint64_t keyframes = 0; uint64_t flushpattern = -1; int res; @@ -119,10 +119,11 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { return 0; // Failure of av_bsf_init() does not imply that a issue was found } - av_init_packet(&in); - av_init_packet(&out); - out.data = NULL; - out.size = 0; + in = av_packet_alloc(); + out = av_packet_alloc(); + if (!in || !out) + error("Failed memory allocation"); + while (data < end) { // Search for the TAG while (data + sizeof(fuzz_tag) < end) { @@ -133,11 +134,11 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (data + sizeof(fuzz_tag) > end) data = end; - res = av_new_packet(&in, data - last); + res = av_new_packet(in, data - last); if (res < 0) error("Failed memory allocation"); - memcpy(in.data, last, data - last); - in.flags = (keyframes & 1) * AV_PKT_FLAG_DISCARD + (!!(keyframes & 2)) * AV_PKT_FLAG_KEY; + memcpy(in->data, last, data - last); + in->flags = (keyframes & 1) * AV_PKT_FLAG_DISCARD + (!!(keyframes & 2)) * AV_PKT_FLAG_KEY; keyframes = (keyframes >> 2) + (keyframes<<62); data += sizeof(fuzz_tag); last = data; @@ -146,26 +147,28 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { av_bsf_flush(bsf); flushpattern = (flushpattern >> 3) + (flushpattern << 61); - while (in.size) { - res = av_bsf_send_packet(bsf, &in); + while (in->size) { + res = av_bsf_send_packet(bsf, in); if (res < 0 && res != AVERROR(EAGAIN)) break; - res = av_bsf_receive_packet(bsf, &out); + res = av_bsf_receive_packet(bsf, out); if (res < 0) break; - av_packet_unref(&out); + av_packet_unref(out); } - av_packet_unref(&in); + av_packet_unref(in); } res = av_bsf_send_packet(bsf, NULL); while (!res) { - res = av_bsf_receive_packet(bsf, &out); + res = av_bsf_receive_packet(bsf, out); if (res < 0) break; - av_packet_unref(&out); + av_packet_unref(out); } + av_packet_free(&in); + av_packet_free(&out); av_bsf_free(&bsf); return 0; } From patchwork Thu Feb 4 19:09:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25433 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 D90B444A960 for ; Thu, 4 Feb 2021 21:17:10 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0FF6B68AA0D; Thu, 4 Feb 2021 21:11:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8A0CB68A9F0 for ; Thu, 4 Feb 2021 21:11:51 +0200 (EET) Received: by mail-qt1-f178.google.com with SMTP id x3so1325464qti.5 for ; Thu, 04 Feb 2021 11:11:51 -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=FugIgpisWWsFQKvL7hllFdazFwnGGyNzeyNhq1BRXiI=; b=hDxeVljaknpnkah8i+5BILPYwXXTua7V5nGisG1Cs2h+mwZKAPdoG2f8K727XOB+ME vzbqVS3Sp8otCjIDkKoG0s/gGvo81EvUzk+XHdZI+aVUga2va3W4uh/iKvxuFbhc3tgr IJH8LOWYeQxddAq48pD6k04DdBZ8lH5Q/AcwhT0OwbcTrBXpM2fGawCxICMafmxNbEEg 4ToDh6HW83ljQf9W10SyWfVWK2NgJ9DIS5PvM7eHgrAHx8iczqaoIQkCa+47opZpZoJ2 biDfEQbqBrGtgPM15UClzH1hp1uJ3CPRH3zdpyf9tpTX7I+1A6IUWxpP4mPW8FVMbxzS vyNg== 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=FugIgpisWWsFQKvL7hllFdazFwnGGyNzeyNhq1BRXiI=; b=iylCiKCJZ5F7pB3ggJXFB+K42sIkOrVlRpR7GApIWkJ1dk0YtPwJpMohn+/K1CMkLD F7v6pypCYxyHwDSuDEeCgE7GyL739cAJUAmn4ZXQVvadn4X/SKF6fdM8Lpjrz+GEs+ou OKnhpB7ygL3TQDTtz8lRpDqsra2AnlICYli/f7a+qZ2uAvL/wAxsVWXzc23sdEKWRouB 9l4AzV600Fg+Td5und+VaXHhZdTbwQdjyFqpT4QjZX1U2Mrgwax8r1Yz6FB20pnnDqZo p15mC/Iq8+Oi2eQxFskeWX6evjXelTUJwE03ZnOhTYdDcPV6mlwO7Jvwxv8DBUCcP5Eo F33A== X-Gm-Message-State: AOAM530Yzqiu9h13ysrKqkVluBJMLbkGTzIKqf1tS+CC3XWGw0RJo70w gd2zSdhDxTBVwxCd+uHSZIFPBYtghzQ= X-Google-Smtp-Source: ABdhPJz6+OsTtD22Vy8312Gkmu89oKCxpRWf5JkIowFaFI7eA7U7eRkba50FiOw9AkMPC9zcuajoQQ== X-Received: by 2002:aed:2802:: with SMTP id r2mr1112309qtd.76.1612465910067; Thu, 04 Feb 2021 11:11:50 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:49 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:57 -0300 Message-Id: <20210204191005.48190-43-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 42/50] tests/api/api-flac-test: 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" Signed-off-by: James Almer --- tests/api/api-flac-test.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tests/api/api-flac-test.c b/tests/api/api-flac-test.c index 3fea3258f3..4ce62ed8ba 100644 --- a/tests/api/api-flac-test.c +++ b/tests/api/api-flac-test.c @@ -108,7 +108,7 @@ static int init_decoder(AVCodec *dec, AVCodecContext **dec_ctx, static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, AVCodecContext *dec_ctx) { - AVPacket enc_pkt; + AVPacket *enc_pkt; AVFrame *in_frame, *out_frame; uint8_t *raw_in = NULL, *raw_out = NULL; int in_offset = 0, out_offset = 0; @@ -117,6 +117,12 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, int i = 0; int in_frame_bytes, out_frame_bytes; + enc_pkt = av_packet_alloc(); + if (!enc_pkt) { + av_log(NULL, AV_LOG_ERROR, "Can't allocate output packet\n"); + return AVERROR(ENOMEM); + } + in_frame = av_frame_alloc(); if (!in_frame) { av_log(NULL, AV_LOG_ERROR, "Can't allocate input frame\n"); @@ -150,10 +156,6 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, } for (i = 0; i < NUMBER_OF_AUDIO_FRAMES; i++) { - av_init_packet(&enc_pkt); - enc_pkt.data = NULL; - enc_pkt.size = 0; - generate_raw_frame((uint16_t*)(in_frame->data[0]), i, enc_ctx->sample_rate, enc_ctx->channels, enc_ctx->frame_size); in_frame_bytes = in_frame->nb_samples * in_frame->channels * sizeof(uint16_t); @@ -163,7 +165,7 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, } memcpy(raw_in + in_offset, in_frame->data[0], in_frame_bytes); in_offset += in_frame_bytes; - result = avcodec_encode_audio2(enc_ctx, &enc_pkt, in_frame, &got_output); + result = avcodec_encode_audio2(enc_ctx, enc_pkt, in_frame, &got_output); if (result < 0) { av_log(NULL, AV_LOG_ERROR, "Error encoding audio frame\n"); return result; @@ -171,14 +173,14 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, /* if we get an encoded packet, feed it straight to the decoder */ if (got_output) { - result = avcodec_decode_audio4(dec_ctx, out_frame, &got_output, &enc_pkt); + result = avcodec_decode_audio4(dec_ctx, out_frame, &got_output, enc_pkt); if (result < 0) { av_log(NULL, AV_LOG_ERROR, "Error decoding audio packet\n"); return result; } if (got_output) { - if (result != enc_pkt.size) { + if (result != enc_pkt->size) { av_log(NULL, AV_LOG_INFO, "Decoder consumed only part of a packet, it is allowed to do so -- need to update this test\n"); return AVERROR_UNKNOWN; } @@ -206,7 +208,7 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, out_offset += out_frame_bytes; } } - av_packet_unref(&enc_pkt); + av_packet_unref(enc_pkt); } if (memcmp(raw_in, raw_out, out_frame_bytes * NUMBER_OF_AUDIO_FRAMES) != 0) { @@ -218,6 +220,7 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, av_freep(&raw_in); av_freep(&raw_out); + av_packet_free(&enc_pkt); av_frame_free(&in_frame); av_frame_free(&out_frame); return 0; From patchwork Thu Feb 4 19:09:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25435 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 981E044A960 for ; Thu, 4 Feb 2021 21:17:21 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0C57968AABC; Thu, 4 Feb 2021 21:11:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA5F168AA95 for ; Thu, 4 Feb 2021 21:11:52 +0200 (EET) Received: by mail-qk1-f175.google.com with SMTP id a19so4489649qka.2 for ; Thu, 04 Feb 2021 11:11:52 -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=QYq+7aUrBF0jBI52dITVhapBFeajgNqAvogUm+vXv2k=; b=M8c3LZnC2LkKUvI/Hb55uqc/2Av0tXRsWznaeQRrMqn8NqI0LCI+/S2FFeEgKww8AH 94GEsAEcJDMDLuwkEy+txvm6FHo6ubLWs4Z7HlZrm7rXiXzLtEukgdWEayrp9xmuW9ff VRgalzjcU7z88CPxUxB2BXmojfcCgsb1Gg3Bkxh2gOPMAcrYhGM5Hwlbr3NYss/e2CdS RMkl6mtabUJmNWFOUrLs6i3rNhxdFFdIwTvGrVm3uYvimLYPNqeLx/oIcbkfnJsXgu9t FHOkzCk5JEA12ysOSvNfxmncM8qDRKRi58+cG9pzYpVtfDR4Iq85RL43o7S6g07+0RTy aHfA== 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=QYq+7aUrBF0jBI52dITVhapBFeajgNqAvogUm+vXv2k=; b=ENOlcbGoi2w4a8JRIaYC9nu55KnDvZM7X/Ti5MJ2RDL12sJuUeG4/7lwKnhizf9FNT qJAXFYOmV31j8NP2hPle5RqbT/wZ9c97XpmMWbJNddoXXTvyeQI82ykJYgtT5ikXaqe2 1Owzgsqx6z+D6cPn3+nFa7KzxvYR4ax4jkVYFN9kYeM4E8dk7U2Y3Z3ONTZ+zyWrr2L4 xe2fZUaY3MbaCEPy3JWWIboU4rkmqwbwiYsjG2sTmaCgA1wggtpRH/vxHMe7tSeHwKyP WmwdqrrmV097FXgP1lGEBwp87XiKtHCd3MVJ+FNSyDhtyBPSE2uKQ+tI+DLs3SDPCJya M1XQ== X-Gm-Message-State: AOAM532qT8m8rJPkPm9OdFBbAgrxk3IfJJreb+jfavJmuz0LKPRuR/TW GjREyUFvcwXY1ZeYH7rgqXdBhj4ZyaU= X-Google-Smtp-Source: ABdhPJzUE63qxlN7WMeo36Ukf5hCAd8ilIp8UeWnq7WdhCD/vFOP71trY3YVgMz5a/zihyxCZGuUCQ== X-Received: by 2002:a37:63d4:: with SMTP id x203mr642110qkb.105.1612465911528; Thu, 04 Feb 2021 11:11:51 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:50 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:58 -0300 Message-Id: <20210204191005.48190-44-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 43/50] doc/examples/demuxing_decoding: 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" Signed-off-by: James Almer --- doc/examples/demuxing_decoding.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/doc/examples/demuxing_decoding.c b/doc/examples/demuxing_decoding.c index 803e35d25c..db5e0cb951 100644 --- a/doc/examples/demuxing_decoding.c +++ b/doc/examples/demuxing_decoding.c @@ -51,7 +51,7 @@ static int video_dst_bufsize; static int video_stream_idx = -1, audio_stream_idx = -1; static AVFrame *frame = NULL; -static AVPacket pkt; +static AVPacket *pkt = NULL; static int video_frame_count = 0; static int audio_frame_count = 0; @@ -303,10 +303,12 @@ int main (int argc, char **argv) goto end; } - /* initialize packet, set data to NULL, let the demuxer fill it */ - av_init_packet(&pkt); - pkt.data = NULL; - pkt.size = 0; + pkt = av_packet_alloc(); + if (!pkt) { + fprintf(stderr, "Could not allocate packet\n"); + ret = AVERROR(ENOMEM); + goto end; + } if (video_stream) printf("Demuxing video from file '%s' into '%s'\n", src_filename, video_dst_filename); @@ -314,14 +316,14 @@ int main (int argc, char **argv) printf("Demuxing audio from file '%s' into '%s'\n", src_filename, audio_dst_filename); /* read frames from the file */ - while (av_read_frame(fmt_ctx, &pkt) >= 0) { + while (av_read_frame(fmt_ctx, pkt) >= 0) { // check if the packet belongs to a stream we are interested in, otherwise // skip it - if (pkt.stream_index == video_stream_idx) - ret = decode_packet(video_dec_ctx, &pkt); - else if (pkt.stream_index == audio_stream_idx) - ret = decode_packet(audio_dec_ctx, &pkt); - av_packet_unref(&pkt); + if (pkt->stream_index == video_stream_idx) + ret = decode_packet(video_dec_ctx, pkt); + else if (pkt->stream_index == audio_stream_idx) + ret = decode_packet(audio_dec_ctx, pkt); + av_packet_unref(pkt); if (ret < 0) break; } @@ -372,6 +374,7 @@ end: fclose(video_dst_file); if (audio_dst_file) fclose(audio_dst_file); + av_packet_free(&pkt); av_frame_free(&frame); av_free(video_dst_data[0]); From patchwork Thu Feb 4 19:09:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25417 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 235C94480C6 for ; Thu, 4 Feb 2021 21:11:56 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 08ABA68AAAE; Thu, 4 Feb 2021 21:11:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f176.google.com (mail-qk1-f176.google.com [209.85.222.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CB52568AA95 for ; Thu, 4 Feb 2021 21:11:54 +0200 (EET) Received: by mail-qk1-f176.google.com with SMTP id k193so4439452qke.6 for ; Thu, 04 Feb 2021 11:11:54 -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=HKqjN7udDOvYrvw/gaJz7t3eFIoKZMPvBICYq36AWvM=; b=HL7BSQuGxlBvGQNYiF3bDbMGsTDLvP2vAL94xMo+arRjcT2lrlKcWWAKbPdRCWUCGG D3iurrRGw5etrAnoNBsOHbEWiLcYd5812Ed1cvAMqt16vpK4Wz9AytxdVRi07UU3Jv/N GdicYuqkrg4XoJMb+ppYvmxK5wM3DQaJ94/T2pxQNGbCx2ta+j8v7WpYJHgaafz75B1A NK/Jg9LZ6jxckf0H7VXuHSeVatF91i1/w9/PIZSHJGFvtXYc7NFS7LyqAFcTlM8n7Mm7 BBUgquW8UYcekGXbG/Pra1CVqelgrBzkGD/jXTnTaxyv6TuFQ+EMDbF44ZuduDG5eWzi i+DQ== 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=HKqjN7udDOvYrvw/gaJz7t3eFIoKZMPvBICYq36AWvM=; b=lN9g7ZCbh3UamPP+TcTbFpXVfxGSx6iFM7TXAVmjTUn1iu6Xm/V7eyLrZoIhDBRRSh FakXXVM3Q8MdFE0OSvBsJzL2zCgOZVtohYs+tsaLoKISe/d7P85EP2wh4o3jNCcdeFls Ed0InTn8ML2eppOtzVUvMo918s7891PnPGcRkn+zr/+wPN6la1U023EVkdJs3dVqY4b3 oYXtfOcHDsajRLEBcZP8WIM6iw2JAO4c/NaWFdNH30Rim3u2FQ0pFYowGkcF3N7+bB6W fmR33NzoaBe9fVu3tBRcGXD3uMqTmm7FJ1c4Vt6cpgI9SWLd4HN6UxRP76NJDRUSjL6Q hhTQ== X-Gm-Message-State: AOAM532BZ5hKTr7u/ILvUHQdZRAb69Iyi5/r5euemuNNWUE+SVV6b4Cc 4lUxSFK+SPEHfBPOapSNvh2EojPvB+A= X-Google-Smtp-Source: ABdhPJyiqwMJJrLEG7B8eCYK5CMCrEI7gkMimmIOZktYkyc3wAoRWK2yRsiuksKMUZOJAcAtGEGguw== X-Received: by 2002:a05:620a:15ab:: with SMTP id f11mr642323qkk.498.1612465912937; Thu, 04 Feb 2021 11:11:52 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:52 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:09:59 -0300 Message-Id: <20210204191005.48190-45-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 44/50] doc/examples/transcode_aac: 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" Signed-off-by: James Almer --- doc/examples/transcode_aac.c | 46 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/doc/examples/transcode_aac.c b/doc/examples/transcode_aac.c index e0c76f5b35..73786ab59b 100644 --- a/doc/examples/transcode_aac.c +++ b/doc/examples/transcode_aac.c @@ -245,14 +245,16 @@ cleanup: /** * Initialize one data packet for reading or writing. - * @param packet Packet to be initialized + * @param[out] packet Packet to be initialized + * @return Error code (0 if successful) */ -static void init_packet(AVPacket *packet) +static int init_packet(AVPacket **packet) { - av_init_packet(packet); - /* Set the packet data and size so that it is recognized as being empty. */ - packet->data = NULL; - packet->size = 0; + if (!(*packet = av_packet_alloc())) { + fprintf(stderr, "Could not allocate packet\n"); + return AVERROR(ENOMEM); + } + return 0; } /** @@ -371,28 +373,31 @@ static int decode_audio_frame(AVFrame *frame, int *data_present, int *finished) { /* Packet used for temporary storage. */ - AVPacket input_packet; + AVPacket *input_packet; int error; - init_packet(&input_packet); + + error = init_packet(&input_packet); + if (error < 0) + return error; /* Read one audio frame from the input file into a temporary packet. */ - if ((error = av_read_frame(input_format_context, &input_packet)) < 0) { + if ((error = av_read_frame(input_format_context, input_packet)) < 0) { /* If we are at the end of the file, flush the decoder below. */ if (error == AVERROR_EOF) *finished = 1; else { fprintf(stderr, "Could not read frame (error '%s')\n", av_err2str(error)); - return error; + goto cleanup; } } /* Send the audio frame stored in the temporary packet to the decoder. * The input audio stream decoder is used to do this. */ - if ((error = avcodec_send_packet(input_codec_context, &input_packet)) < 0) { + if ((error = avcodec_send_packet(input_codec_context, input_packet)) < 0) { fprintf(stderr, "Could not send packet for decoding (error '%s')\n", av_err2str(error)); - return error; + goto cleanup; } /* Receive one frame from the decoder. */ @@ -418,7 +423,7 @@ static int decode_audio_frame(AVFrame *frame, } cleanup: - av_packet_unref(&input_packet); + av_packet_free(&input_packet); return error; } @@ -661,9 +666,12 @@ static int encode_audio_frame(AVFrame *frame, int *data_present) { /* Packet used for temporary storage. */ - AVPacket output_packet; + AVPacket *output_packet; int error; - init_packet(&output_packet); + + error = init_packet(&output_packet); + if (error < 0) + return error; /* Set a timestamp based on the sample rate for the container. */ if (frame) { @@ -681,11 +689,11 @@ static int encode_audio_frame(AVFrame *frame, } else if (error < 0) { fprintf(stderr, "Could not send packet for encoding (error '%s')\n", av_err2str(error)); - return error; + goto cleanup; } /* Receive one encoded frame from the encoder. */ - error = avcodec_receive_packet(output_codec_context, &output_packet); + error = avcodec_receive_packet(output_codec_context, output_packet); /* If the encoder asks for more data to be able to provide an * encoded frame, return indicating that no data is present. */ if (error == AVERROR(EAGAIN)) { @@ -706,14 +714,14 @@ static int encode_audio_frame(AVFrame *frame, /* Write one audio frame from the temporary packet to the output file. */ if (*data_present && - (error = av_write_frame(output_format_context, &output_packet)) < 0) { + (error = av_write_frame(output_format_context, output_packet)) < 0) { fprintf(stderr, "Could not write frame (error '%s')\n", av_err2str(error)); goto cleanup; } cleanup: - av_packet_unref(&output_packet); + av_packet_free(&output_packet); return error; } From patchwork Thu Feb 4 19:10:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25418 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 21DC24480C6 for ; Thu, 4 Feb 2021 21:11:59 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 00AF268AA95; Thu, 4 Feb 2021 21:11:58 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 32BA768A062 for ; Thu, 4 Feb 2021 21:11:56 +0200 (EET) Received: by mail-qt1-f180.google.com with SMTP id e15so3218164qte.9 for ; Thu, 04 Feb 2021 11:11:55 -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=9aljdYkb+Y3yTM3ooLhRosreB0W3nf0TBwCQ0LbT4kE=; b=GkTTNTjAvLSkjxylK+uQ4FDXrwYxRBRjiQ+Zx+pS3zhcqMv8F5QnkZO0T9ILgUFsKw 1fD1VmVASmJy+2I6DyJY9U8ynXGmCSQiFTpg8kwS/3/XxRzu5hPzYuzXqozZUZU0Pqq9 13CxnSU1dl2wKzNiEQ2MGOTaEUfDnpyIjeh4npVLquQBiOFEm0h7MFOfqa4vtFs6MiHD 9nswQB2iBGJURXAiQQTBf2Gb5km+u8rcu6Q/HeQsb02iM+/4vyVmBuNPUYR1XAPcnfMF W02L+QfDKVrdqNStsNcVos+weuKBDJqfMyGh3rnQcxr5Xnk64mqcbDq991abK71V/JOS RM4Q== 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=9aljdYkb+Y3yTM3ooLhRosreB0W3nf0TBwCQ0LbT4kE=; b=D/Lh8G91cGPFjPKLOnZZ8pp9IssR6C/bA1iitT42veKDcS6+1s3Ff280ntJwsHLgCx yhb2OUS1caeEuuyO3MANddiaih/mDkLyhK64SZQbwv80ppFAqKS/bYLXQzmQe8Y56FXg zkFTCNxKFOwxEKf9R+UrTLTR/y8OgrAk1uQy8hk6BsZHwUZRIlC+veHa9JJ4AtHlqCyU v0aZgXk2+Du/8PrBtpPMdzS40jJqRoZ0deNCQmwqqMFTLCTet6fKiaof0vli7kV/SzgD nn6qWnqELd8EpFN9joxGpzQTbkBUBZcjRGLKh+bNZUipNGiaglFjZ8x8iBxLaLDAhOqF 6BBw== X-Gm-Message-State: AOAM533luXBmmW86Pj7xcJ6MOq+iJwG+IejwS1yBmIMr+hHJXGzbxFK8 MS+xQn8SDpYW9Mm4sLR6TmAGk+AtZ+8= X-Google-Smtp-Source: ABdhPJzA3I6icRoQN5LEq1frMsFZ/dKIQei4U3ZiajRO8zBriT5saL78lA7s8nSfRA8d+ikmAlfs0g== X-Received: by 2002:ac8:1009:: with SMTP id z9mr1031956qti.347.1612465914514; Thu, 04 Feb 2021 11:11:54 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:53 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:10:00 -0300 Message-Id: <20210204191005.48190-46-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 45/50] doc/examples/transcoding: 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" Signed-off-by: James Almer --- doc/examples/transcoding.c | 48 ++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/doc/examples/transcoding.c b/doc/examples/transcoding.c index 5aff08c135..6ca3089330 100644 --- a/doc/examples/transcoding.c +++ b/doc/examples/transcoding.c @@ -42,6 +42,7 @@ typedef struct FilteringContext { AVFilterContext *buffersrc_ctx; AVFilterGraph *filter_graph; + AVPacket *enc_pkt; AVFrame *filtered_frame; } FilteringContext; static FilteringContext *filter_ctx; @@ -407,6 +408,10 @@ static int init_filters(void) if (ret) return ret; + filter_ctx[i].enc_pkt = av_packet_alloc(); + if (!filter_ctx[i].enc_pkt) + return AVERROR(ENOMEM); + filter_ctx[i].filtered_frame = av_frame_alloc(); if (!filter_ctx[i].filtered_frame) return AVERROR(ENOMEM); @@ -414,17 +419,17 @@ static int init_filters(void) return 0; } -static int encode_write_frame(AVFrame *filt_frame, unsigned int stream_index) +static int encode_write_frame(unsigned int stream_index, int flush) { StreamContext *stream = &stream_ctx[stream_index]; + FilteringContext *filter = &filter_ctx[stream_index]; + AVFrame *filt_frame = flush ? NULL : filter->filtered_frame; + AVPacket *enc_pkt = filter->enc_pkt; int ret; - AVPacket enc_pkt; av_log(NULL, AV_LOG_INFO, "Encoding frame\n"); /* encode filtered frame */ - enc_pkt.data = NULL; - enc_pkt.size = 0; - av_init_packet(&enc_pkt); + av_packet_unref(enc_pkt); ret = avcodec_send_frame(stream->enc_ctx, filt_frame); @@ -432,20 +437,20 @@ static int encode_write_frame(AVFrame *filt_frame, unsigned int stream_index) return ret; while (ret >= 0) { - ret = avcodec_receive_packet(stream->enc_ctx, &enc_pkt); + ret = avcodec_receive_packet(stream->enc_ctx, enc_pkt); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) return 0; /* prepare packet for muxing */ - enc_pkt.stream_index = stream_index; - av_packet_rescale_ts(&enc_pkt, + enc_pkt->stream_index = stream_index; + av_packet_rescale_ts(enc_pkt, stream->enc_ctx->time_base, ofmt_ctx->streams[stream_index]->time_base); av_log(NULL, AV_LOG_DEBUG, "Muxing frame\n"); /* mux encoded frame */ - ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt); + ret = av_interleaved_write_frame(ofmt_ctx, enc_pkt); } return ret; @@ -481,7 +486,7 @@ static int filter_encode_write_frame(AVFrame *frame, unsigned int stream_index) } filter->filtered_frame->pict_type = AV_PICTURE_TYPE_NONE; - ret = encode_write_frame(filter->filtered_frame, stream_index); + ret = encode_write_frame(stream_index, 0); av_frame_unref(filter->filtered_frame); if (ret < 0) break; @@ -497,13 +502,13 @@ static int flush_encoder(unsigned int stream_index) return 0; av_log(NULL, AV_LOG_INFO, "Flushing stream #%u encoder\n", stream_index); - return encode_write_frame(NULL, stream_index); + return encode_write_frame(stream_index, 1); } int main(int argc, char **argv) { int ret; - AVPacket packet = { .data = NULL, .size = 0 }; + AVPacket *packet = NULL; unsigned int stream_index; unsigned int i; @@ -518,12 +523,14 @@ int main(int argc, char **argv) goto end; if ((ret = init_filters()) < 0) goto end; + if (!(packet = av_packet_alloc())) + goto end; /* read all packets */ while (1) { - if ((ret = av_read_frame(ifmt_ctx, &packet)) < 0) + if ((ret = av_read_frame(ifmt_ctx, packet)) < 0) break; - stream_index = packet.stream_index; + stream_index = packet->stream_index; av_log(NULL, AV_LOG_DEBUG, "Demuxer gave frame of stream_index %u\n", stream_index); @@ -532,10 +539,10 @@ int main(int argc, char **argv) av_log(NULL, AV_LOG_DEBUG, "Going to reencode&filter the frame\n"); - av_packet_rescale_ts(&packet, + av_packet_rescale_ts(packet, ifmt_ctx->streams[stream_index]->time_base, stream->dec_ctx->time_base); - ret = avcodec_send_packet(stream->dec_ctx, &packet); + ret = avcodec_send_packet(stream->dec_ctx, packet); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Decoding failed\n"); break; @@ -555,15 +562,15 @@ int main(int argc, char **argv) } } else { /* remux this frame without reencoding */ - av_packet_rescale_ts(&packet, + av_packet_rescale_ts(packet, ifmt_ctx->streams[stream_index]->time_base, ofmt_ctx->streams[stream_index]->time_base); - ret = av_interleaved_write_frame(ofmt_ctx, &packet); + ret = av_interleaved_write_frame(ofmt_ctx, packet); if (ret < 0) goto end; } - av_packet_unref(&packet); + av_packet_unref(packet); } /* flush filters and encoders */ @@ -587,13 +594,14 @@ int main(int argc, char **argv) av_write_trailer(ofmt_ctx); end: - av_packet_unref(&packet); + av_packet_free(&packet); for (i = 0; i < ifmt_ctx->nb_streams; i++) { avcodec_free_context(&stream_ctx[i].dec_ctx); if (ofmt_ctx && ofmt_ctx->nb_streams > i && ofmt_ctx->streams[i] && stream_ctx[i].enc_ctx) avcodec_free_context(&stream_ctx[i].enc_ctx); if (filter_ctx && filter_ctx[i].filter_graph) { avfilter_graph_free(&filter_ctx[i].filter_graph); + av_packet_free(&filter_ctx[i].enc_pkt); av_frame_free(&filter_ctx[i].filtered_frame); } From patchwork Thu Feb 4 19:10:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25437 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 66E9F44A960 for ; Thu, 4 Feb 2021 21:17:55 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D1F2468AAE9; Thu, 4 Feb 2021 21:11:59 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5D6F568A857 for ; Thu, 4 Feb 2021 21:11:57 +0200 (EET) Received: by mail-qt1-f170.google.com with SMTP id e15so3218217qte.9 for ; Thu, 04 Feb 2021 11:11:57 -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=wHpv3/h1VeI356WeF/qLt4IHszBnCLQw243no36dYeI=; b=OGZpmRfT2PyDPsV7zHi/fXg18DOI5RELvoUjCWbVJ0qLven1AbThRqws3Rh+pkWnQ7 7nW7nYKu0Fvk5Ow/9o8duwcqQNL60wnsWWz7WRFXmm8Te9KfB5Hhc4Z8SQaYR3beJ9CJ K8k2ub1m1kWYHBHQjO9Z2CwQizoZUVT8c2FbS50VPVk8DYKE8JY9dVPfHwOzviobWQt4 XTpeIrE+ppLoWeHgUfKKcuE1WaOYgsr1wYjzz9awnpYw6OR6GVEYJxD0NeBQhvJGLJoY E8GKVA15mmPZuf/Q78StTOaXB1HO6Yid3cltaoVrl0n+AoltfhuvrHvods1E9kMqzciY PEOQ== 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=wHpv3/h1VeI356WeF/qLt4IHszBnCLQw243no36dYeI=; b=sv6Fo6ZELOmmuRxTHLhgM4QJ8wIYH9cv+qQ/OSqWpcnpj1XOE2QOUKRJzzD/jrqmst PLk8aoD7xSYPotUy8T2BcSJKwR24oSjay+NBJT/rICP7C1NM93pXNFvYvciaOIwRbL3+ fygjfMrKNtLir1NJ9Ve9XLupQ+Z7NW45zIshfnDikGTdN6QczPN0Z7JRzU5N0bmIPUXE h59pLA91T773C+adfoPqzKvprEkxQZCMHqGcwk5EX/Cj4Anmq6JooOBfLdtGtXDHs28b fdYv68Yek7hQOBEM+6gYzfGWyXyabjU51wHaWm0EdornJ/SD7G3sfW7aT2BeYDOWla+I SrLA== X-Gm-Message-State: AOAM531yuKgnOqdw/TPA40gnbiy4rTaSbNhluSLM360M4dDynH7DusEI hFMTyzCKQy7IxwPcTJdY2tcXiRvoATs= X-Google-Smtp-Source: ABdhPJwPBI7l7+kqi/3u42BFFLS8IQzGsdAMWtPN21N31EJefnRL2ZzqE/lFUn6UYlDaNZyqC+JCuQ== X-Received: by 2002:ac8:785:: with SMTP id l5mr1031674qth.325.1612465915916; Thu, 04 Feb 2021 11:11:55 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:55 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:10:01 -0300 Message-Id: <20210204191005.48190-47-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 46/50] doc/examples/vaapi_encode: 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" Signed-off-by: James Almer --- doc/examples/vaapi_encode.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/examples/vaapi_encode.c b/doc/examples/vaapi_encode.c index 707939db37..66cb949cdc 100644 --- a/doc/examples/vaapi_encode.c +++ b/doc/examples/vaapi_encode.c @@ -74,27 +74,27 @@ static int set_hwframe_ctx(AVCodecContext *ctx, AVBufferRef *hw_device_ctx) static int encode_write(AVCodecContext *avctx, AVFrame *frame, FILE *fout) { int ret = 0; - AVPacket enc_pkt; + AVPacket *enc_pkt; - av_init_packet(&enc_pkt); - enc_pkt.data = NULL; - enc_pkt.size = 0; + if (!(enc_pkt = av_packet_alloc())) + return AVERROR(ENOMEM); if ((ret = avcodec_send_frame(avctx, frame)) < 0) { fprintf(stderr, "Error code: %s\n", av_err2str(ret)); goto end; } while (1) { - ret = avcodec_receive_packet(avctx, &enc_pkt); + ret = avcodec_receive_packet(avctx, enc_pkt); if (ret) break; - enc_pkt.stream_index = 0; - ret = fwrite(enc_pkt.data, enc_pkt.size, 1, fout); - av_packet_unref(&enc_pkt); + enc_pkt->stream_index = 0; + ret = fwrite(enc_pkt.data, enc_pkt->size, 1, fout); + av_packet_unref(enc_pkt); } end: + av_packet_free(&enc_pkt); ret = ((ret == AVERROR(EAGAIN)) ? 0 : -1); return ret; } From patchwork Thu Feb 4 19:10:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25419 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 D1E9A4480C6 for ; Thu, 4 Feb 2021 21:12:01 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B68FC68AAD5; Thu, 4 Feb 2021 21:12:01 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA53468A403 for ; Thu, 4 Feb 2021 21:11:58 +0200 (EET) Received: by mail-qk1-f178.google.com with SMTP id a7so4397868qkb.13 for ; Thu, 04 Feb 2021 11:11:58 -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=uRat71KTZ0LsVdTCE3iDcikQorqunlvgGoMPWy2fYB8=; b=Dy22sgAJi4hHvB3tBFQkHLqeQoYZsphwycZ2/mAYoJNunOD6ItEHJBjouQayBhq/Kb Jqbk4yNR28zq/dZ95zzZc5bxEpPERAc1woBa+v0Hl1VOGXQPnhHvc3Y4tqhH1VRaiSP+ aVMaJw5ilCalbtxFbkz+eg75hvIGUylVSNh4ZN2JoxKEt57NSQvgw7i9jRUu9kd4A+la hgVntM7jz21tXzoTIYnIA+4t5i7NvABeCX5M1m+kzVbKBEdCmOi8ZyzcLxolfoVkudzo sc4fRTb1rZbnicTbFVPkt0tMJT2YxlRY1dCyOQQDb6UXsbb5+TSssdYG5l5GWLHWs7Ez k7jw== 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=uRat71KTZ0LsVdTCE3iDcikQorqunlvgGoMPWy2fYB8=; b=G7SU85gKTlVf8YMii89zWK2+9b+soSUIOTSlbf2TO4nj5IXeaToiSrS8UUIi9ZVGpG +jcznI460I/JGosQn2KC1RiNVG6TU+TLEsrpW1jZIIOJBW7ggpRHG9OC1xHNNMLMSUkk v2rDhpZ2UR/qfKRKBQWWnPm6j7evggsBc3xH4sJWGTywkxclqvjGATCq8AWXHWCFWV2B HV26HKC5s+Csx8HTymMen+uF4g4NHf2HZqgGKnTtnJ9q5aDkgKyEc54gC0KuCtha2qtY f4UZKayZs7mP4WZDrUedLQ4zViGbGc4Kr+IUSqQy0E8I3zAmtTfE14y8K1KTo+DkvHmb XJKw== X-Gm-Message-State: AOAM531ULlztWyDI5h1KhzyX82EDaCTuJd29NeKDyT5wIAdvdkjTv347 +gtU2BbjO6rMRdWmnO9QGn67FXF+S1k= X-Google-Smtp-Source: ABdhPJyEP/lRgOKSYrJKqHevZ5zEJtjvj/RT7H5oSXoLopd1b47vj13tLpvaG0QpYPJHbJXWtEv2pQ== X-Received: by 2002:a37:78c4:: with SMTP id t187mr630867qkc.139.1612465917418; Thu, 04 Feb 2021 11:11:57 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:56 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:10:02 -0300 Message-Id: <20210204191005.48190-48-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 47/50] doc/examples/vaapi_transcode: 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" Signed-off-by: James Almer --- doc/examples/vaapi_transcode.c | 45 ++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/doc/examples/vaapi_transcode.c b/doc/examples/vaapi_transcode.c index 279d20f636..5fc09dd1d3 100644 --- a/doc/examples/vaapi_transcode.c +++ b/doc/examples/vaapi_transcode.c @@ -109,28 +109,23 @@ static int open_input_file(const char *filename) return ret; } -static int encode_write(AVFrame *frame) +static int encode_write(AVPacket *enc_pkt, AVFrame *frame) { int ret = 0; - AVPacket enc_pkt; - - av_init_packet(&enc_pkt); - enc_pkt.data = NULL; - enc_pkt.size = 0; if ((ret = avcodec_send_frame(encoder_ctx, frame)) < 0) { fprintf(stderr, "Error during encoding. Error code: %s\n", av_err2str(ret)); goto end; } while (1) { - ret = avcodec_receive_packet(encoder_ctx, &enc_pkt); + ret = avcodec_receive_packet(encoder_ctx, enc_pkt); if (ret) break; - enc_pkt.stream_index = 0; - av_packet_rescale_ts(&enc_pkt, ifmt_ctx->streams[video_stream]->time_base, + enc_pkt->stream_index = 0; + av_packet_rescale_ts(enc_pkt, ifmt_ctx->streams[video_stream]->time_base, ofmt_ctx->streams[0]->time_base); - ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt); + ret = av_interleaved_write_frame(ofmt_ctx, enc_pkt); if (ret < 0) { fprintf(stderr, "Error during writing data to output file. " "Error code: %s\n", av_err2str(ret)); @@ -148,6 +143,7 @@ end: static int dec_enc(AVPacket *pkt, AVCodec *enc_codec) { AVFrame *frame; + AVPacket *enc_pkt; int ret = 0; ret = avcodec_send_packet(decoder_ctx, pkt); @@ -159,10 +155,15 @@ static int dec_enc(AVPacket *pkt, AVCodec *enc_codec) while (ret >= 0) { if (!(frame = av_frame_alloc())) return AVERROR(ENOMEM); + if (!(enc_pkt = av_packet_alloc())) { + av_frame_free(&frame); + return AVERROR(ENOMEM); + } ret = avcodec_receive_frame(decoder_ctx, frame); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { av_frame_free(&frame); + av_packet_free(&enc_pkt); return 0; } else if (ret < 0) { fprintf(stderr, "Error while decoding. Error code: %s\n", av_err2str(ret)); @@ -216,11 +217,12 @@ static int dec_enc(AVPacket *pkt, AVCodec *enc_codec) initialized = 1; } - if ((ret = encode_write(frame)) < 0) + if ((ret = encode_write(enc_pkt, frame)) < 0) fprintf(stderr, "Error during encoding and writing.\n"); fail: av_frame_free(&frame); + av_packet_free(&enc_pkt); if (ret < 0) return ret; } @@ -230,7 +232,7 @@ fail: int main(int argc, char **argv) { int ret = 0; - AVPacket dec_pkt; + AVPacket *dec_pkt; AVCodec *enc_codec; if (argc != 4) { @@ -246,6 +248,12 @@ int main(int argc, char **argv) return -1; } + dec_pkt = av_packet_alloc(); + if (!dec_pkt) { + fprintf(stderr, "Failed to allocate decode packet\n"); + goto end; + } + if ((ret = open_input_file(argv[1])) < 0) goto end; @@ -275,20 +283,18 @@ int main(int argc, char **argv) /* read all packets and only transcoding video */ while (ret >= 0) { - if ((ret = av_read_frame(ifmt_ctx, &dec_pkt)) < 0) + if ((ret = av_read_frame(ifmt_ctx, dec_pkt)) < 0) break; - if (video_stream == dec_pkt.stream_index) - ret = dec_enc(&dec_pkt, enc_codec); + if (video_stream == dec_pkt->stream_index) + ret = dec_enc(dec_pkt, enc_codec); - av_packet_unref(&dec_pkt); + av_packet_unref(dec_pkt); } /* flush decoder */ - dec_pkt.data = NULL; - dec_pkt.size = 0; - ret = dec_enc(&dec_pkt, enc_codec); av_packet_unref(&dec_pkt); + ret = dec_enc(dec_pkt, enc_codec); /* flush encoder */ ret = encode_write(NULL); @@ -302,5 +308,6 @@ end: avcodec_free_context(&decoder_ctx); avcodec_free_context(&encoder_ctx); av_buffer_unref(&hw_device_ctx); + av_packet_free(&dec_pkt); return ret; } From patchwork Thu Feb 4 19:10:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25439 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 A917844AD4B for ; Thu, 4 Feb 2021 21:18:15 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CADCC68AB04; Thu, 4 Feb 2021 21:12:02 +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 40FBC68AAC7 for ; Thu, 4 Feb 2021 21:12:00 +0200 (EET) Received: by mail-qt1-f175.google.com with SMTP id v3so3250793qtw.4 for ; Thu, 04 Feb 2021 11:12:00 -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=xH0bWBeFCt3b9DeWvbU+1Q3FuUMluDQhDe8ndxho89w=; b=ij4dDJwMswA/4e8muiiBYd/BufdADRNO7X/UX/VxcfRW4ntcC1utk7xWLHLOAL78Fn L6boY+uqB6H3zHopXZE8VENJKrCUstyFRKIHW2GbIc/FV+kP7H7Z23bYxP1/n9KTQVg1 SSnkhjGt3w9xYHDh/PMo+O+5HIZOSatP+fz2rh9CkDuIk0u00VrbZO0ZpBkTHhEwNc6z +wGQU9u1JtemkTfy7aLfvDaWhGij79voVeIFwNCRT5wGYbX9JTnFGaIuh0Vl0rjG5Tes YtpDUbtOmNcxGNLvxPSgjUtdm6fN6PmBFrvHnZJxXaN8aUMIIggzzrJZAND2Kw+6pJCU XphA== 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=xH0bWBeFCt3b9DeWvbU+1Q3FuUMluDQhDe8ndxho89w=; b=MceY5u5YX94F/obqFF6/HDvDg+aXySMBr8Nq7s94XHFxhZhrZq+eUan6nRFqZQDf+E hUvU8QDf5e1aUCTVt1No0/tmbBbBMC6GSlEbnUtGngj20icJ8M+eATYTwJOmcjqu27Y8 aejxkkLOwlhWCpvZZih+d/U7qZxrkm+MrYiUSlpszJcuZOVhlodGAOZasDJfG2F9Cw2W WSdK/2jh4oQ1NCfIc0/AzwzFTRgMLa/uYP/U1kdSfqsN3DOyarteRw+s5uFoj7YGJNQh FxKDMlRA5lgAUgp+my+1X/p1UjnaMMZGnxCJCn9RpUv5GBJjjfkUDJDgSwwrql1OIjmX 9BMw== X-Gm-Message-State: AOAM533hRoOKXy5m/4lTP3+3JwemZrt5jMbn1TJ4BSg8Chhp5U6tI6up 7im6fxE3qAFpbSsGzE6EOPC7ZHE5GU8= X-Google-Smtp-Source: ABdhPJzKLaILMXvP/AomZZTbtmPhNd6UXx8VHwr6bb/aTFGqQpMBzpTDVbsZevTkRTV1QgGqdnvUrw== X-Received: by 2002:ac8:7b86:: with SMTP id p6mr1023626qtu.23.1612465918811; Thu, 04 Feb 2021 11:11:58 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:58 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:10:03 -0300 Message-Id: <20210204191005.48190-49-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 48/50] fftools/ffprobe: 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" Signed-off-by: James Almer --- fftools/ffprobe.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index 3453aa09ff..68fecd61e5 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2465,14 +2465,12 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile, const ReadInterval *interval, int64_t *cur_ts) { AVFormatContext *fmt_ctx = ifile->fmt_ctx; - AVPacket pkt; + AVPacket *pkt = NULL; AVFrame *frame = NULL; int ret = 0, i = 0, frame_count = 0; int64_t start = -INT64_MAX, end = interval->end; int has_start = 0, has_end = interval->has_end && !interval->end_is_offset; - av_init_packet(&pkt); - av_log(NULL, AV_LOG_VERBOSE, "Processing read interval "); log_read_interval(interval, NULL, AV_LOG_VERBOSE); @@ -2505,18 +2503,23 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile, ret = AVERROR(ENOMEM); goto end; } - while (!av_read_frame(fmt_ctx, &pkt)) { + pkt = av_packet_alloc(); + if (!pkt) { + ret = AVERROR(ENOMEM); + goto end; + } + while (!av_read_frame(fmt_ctx, pkt)) { if (fmt_ctx->nb_streams > nb_streams) { REALLOCZ_ARRAY_STREAM(nb_streams_frames, nb_streams, fmt_ctx->nb_streams); REALLOCZ_ARRAY_STREAM(nb_streams_packets, nb_streams, fmt_ctx->nb_streams); REALLOCZ_ARRAY_STREAM(selected_streams, nb_streams, fmt_ctx->nb_streams); nb_streams = fmt_ctx->nb_streams; } - if (selected_streams[pkt.stream_index]) { - AVRational tb = ifile->streams[pkt.stream_index].st->time_base; + if (selected_streams[pkt->stream_index]) { + AVRational tb = ifile->streams[pkt->stream_index].st->time_base; - if (pkt.pts != AV_NOPTS_VALUE) - *cur_ts = av_rescale_q(pkt.pts, tb, AV_TIME_BASE_Q); + if (pkt->pts != AV_NOPTS_VALUE) + *cur_ts = av_rescale_q(pkt->pts, tb, AV_TIME_BASE_Q); if (!has_start && *cur_ts != AV_NOPTS_VALUE) { start = *cur_ts; @@ -2538,26 +2541,27 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile, frame_count++; if (do_read_packets) { if (do_show_packets) - show_packet(w, ifile, &pkt, i++); - nb_streams_packets[pkt.stream_index]++; + show_packet(w, ifile, pkt, i++); + nb_streams_packets[pkt->stream_index]++; } if (do_read_frames) { int packet_new = 1; - while (process_frame(w, ifile, frame, &pkt, &packet_new) > 0); + while (process_frame(w, ifile, frame, pkt, &packet_new) > 0); } } - av_packet_unref(&pkt); + av_packet_unref(pkt); } - av_packet_unref(&pkt); + av_packet_unref(pkt); //Flush remaining frames that are cached in the decoder for (i = 0; i < fmt_ctx->nb_streams; i++) { - pkt.stream_index = i; + pkt->stream_index = i; if (do_read_frames) - while (process_frame(w, ifile, frame, &pkt, &(int){1}) > 0); + while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0); } end: av_frame_free(&frame); + av_packet_free(&pkt); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Could not read packets in interval "); log_read_interval(interval, NULL, AV_LOG_ERROR); From patchwork Thu Feb 4 19:10:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25449 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a5b:101:0:0:0:0:0 with SMTP id 1csp1380098ybx; Thu, 4 Feb 2021 11:18:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJzCyj1/s7+mmSvjuamL88Yn14qOW7PDlDJmORLEraO9rvrzTIPjS6vR+vXT6+6nrAVkId0T X-Received: by 2002:a17:906:c824:: with SMTP id dd4mr570082ejb.253.1612466307538; Thu, 04 Feb 2021 11:18:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612466307; cv=none; d=google.com; s=arc-20160816; b=PXvyj6CcS/H0E5ZgnZUKDNrpfaBY1Ypsry2gEnTRWt/iYRyS5rDeuydgW0/jxNK2DC 1PhepcC00TKaZOiMjHMkgx95tE3hwiXwGKxE5qKuUWARY3X87fEuF5zmyYbhb5wkhCri SHJ9KfpR5lHtO8BHa2ww7Hkdh/FIYEqZ08R7suNEEvznWMIh7C5iKA8x7iT70qfsr9u2 Q/zruID9NZqgghqbRv7o/lBAeftOgdFCg84tGCg4f2bxx1ZbeRfMbDimD8S++mU06myR Vs6UJtrP1U75GlJfgHPfnbXkPohmPTgkGWaI3EKrgM3zsQaudmdQOqxzwNgtpEKYZTEW Dpig== 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=iL2NY0AGlv1Kjm+V/zumeXu7m968/aD9TJbWAtxx1Jc=; b=D/2DwJM3dHMUvTe53b550X6x3i9c2gZFdwAqrcAIup3Sdc7RvuS8LXLW7ov6mzN9UG k4WMnBWp/ED7R0jBF2UR4hiOKgHsPhcdAnvW4Fgv6B4uUuzfQQqzrP73kiuex8DHpGEg FP48k1zPYWWiBSvYrPLN8uD9NfVLiaeTg/gRIwAfmCxWcydt3On57Q4lE/txU3a7zM2c o+IQZLl8+TZzhlc/6IM+E72NI8/XQtJokbLA9FS0Hu22GDp6lr/XYJBUBBljOzu2NJGb nUykVmE4+YClTimI9cncBJW9Na9dtxDRGqeVLHmnY5brZVdf02fsj0q0PxcMZwVfXDng cddg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=SuWMuXA0; 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 l23si3452059ejx.701.2021.02.04.11.18.27; Thu, 04 Feb 2021 11:18:27 -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=SuWMuXA0; 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 96F1A68AAC7; Thu, 4 Feb 2021 21:12:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A8EEB68AAC3 for ; Thu, 4 Feb 2021 21:12:02 +0200 (EET) Received: by mail-qv1-f44.google.com with SMTP id 2so2279430qvd.0 for ; Thu, 04 Feb 2021 11:12:02 -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=Sa8e4dOSBMJXuPMSPpdLQ3dtiUCME2ypmzttEFsjwA4=; b=SuWMuXA0ifiAOeRJdi8FwABYw6H0kV3djIip+nOYaQ4lYHk+VIq7uozDqWBU4HbH/w RTJWJ3EFqSRtv09AyVIqFXAfqOBnardiUEykHr3kXKedArK+ETDLwD8/J7q7GLH+Ymsw dYNZV+7Gqwsa3+O5XfpYvpepyuJv5OOH5sNUXlMd4YkZvhbLKZdic2lB2oGEoZCXNrOs SI7bMPK5bFS4o1csMFBHwHLUNEBPGIhjeLLR/TZjZx0RWnlfGbvG+WhAbKaH9I2vBb1T 3uKmAQow088AxEJF8VOcQqe77hpK45yjCuGX5MV6pRbfcZhAotZXTaHqCCXBE0zeKJsV rEyQ== 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=Sa8e4dOSBMJXuPMSPpdLQ3dtiUCME2ypmzttEFsjwA4=; b=r3QgI+fpgHvcivyNXs5q+lYJF9+H4jamY+JZIHr9+lVxrajKWXVJPQc9mX7k/5cGxW YKfheY+dGiUMQUXDsyeklxwuFvRtrvoE/lEZ29rqG9qxvgQzCxFdAU3FZbpCvCrn2XoB fyfqibhG4jeYe2nJ7ULruRUHx6COnH228JFwKBfaA3P8oPV+2EJ//QI9I9uKygJZJYQ6 fQGcO+O8jl/Eew8GSueHtrcuNXfd1c4KZhx7PMKLLcOC9qOVk6BsyYWgleKJOQK/QyB3 hRvr2Hnb1+BFahBqTY06qMeu31dgkuFBCzc0FUw95vtQ/7qkNmiV/fIBOB2PYse4fISL NnyA== X-Gm-Message-State: AOAM530O/50NrDdq+0Kzv7LXcWqtba2xCoY5LrXk6D1cSw1qfFPlDIup DMOImc2eYWt1vF+52oKjAEjfRTyA7ME= X-Received: by 2002:a0c:e4cf:: with SMTP id g15mr693178qvm.23.1612465920552; Thu, 04 Feb 2021 11:12:00 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.11.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:11:59 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:10:04 -0300 Message-Id: <20210204191005.48190-50-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 49/50] fftools/ffmpeg: 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: kmm79j4p4MaK Content-Length: 49580 Signed-off-by: James Almer --- fftools/ffmpeg.c | 318 +++++++++++++++++++++++-------------------- fftools/ffmpeg.h | 4 + fftools/ffmpeg_opt.c | 5 +- 3 files changed, 177 insertions(+), 150 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index d7c833be63..2667f226b4 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -592,6 +592,7 @@ static void ffmpeg_cleanup(int ret) av_frame_free(&ost->filtered_frame); av_frame_free(&ost->last_frame); + av_packet_free(&ost->pkt); av_dict_free(&ost->encoder_opts); av_freep(&ost->forced_keyframes); @@ -610,9 +611,9 @@ static void ffmpeg_cleanup(int ret) if (ost->muxing_queue) { while (av_fifo_size(ost->muxing_queue)) { - AVPacket pkt; + AVPacket *pkt; av_fifo_generic_read(ost->muxing_queue, &pkt, sizeof(pkt), NULL); - av_packet_unref(&pkt); + av_packet_free(&pkt); } av_fifo_freep(&ost->muxing_queue); } @@ -624,6 +625,7 @@ static void ffmpeg_cleanup(int ret) #endif for (i = 0; i < nb_input_files; i++) { avformat_close_input(&input_files[i]->ctx); + av_packet_free(&input_files[i]->pkt); av_freep(&input_files[i]); } for (i = 0; i < nb_input_streams; i++) { @@ -631,6 +633,7 @@ static void ffmpeg_cleanup(int ret) av_frame_free(&ist->decoded_frame); av_frame_free(&ist->filter_frame); + av_packet_free(&ist->pkt); av_dict_free(&ist->decoder_opts); avsubtitle_free(&ist->prev_sub.subtitle); av_frame_free(&ist->sub2video.frame); @@ -746,7 +749,7 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int u } if (!of->header_written) { - AVPacket tmp_pkt = {0}; + AVPacket *tmp_pkt; /* the muxer is not initialized yet, buffer the packet */ if (!av_fifo_space(ost->muxing_queue)) { unsigned int are_we_over_size = @@ -769,8 +772,11 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int u ret = av_packet_make_refcounted(pkt); if (ret < 0) exit_program(1); - av_packet_move_ref(&tmp_pkt, pkt); - ost->muxing_queue_data_size += tmp_pkt.size; + tmp_pkt = av_packet_alloc(); + if (!tmp_pkt) + exit_program(1); + av_packet_move_ref(tmp_pkt, pkt); + ost->muxing_queue_data_size += tmp_pkt->size; av_fifo_generic_write(ost->muxing_queue, &tmp_pkt, sizeof(tmp_pkt), NULL); return; } @@ -999,13 +1005,9 @@ static void do_audio_out(OutputFile *of, OutputStream *ost, AVFrame *frame) { AVCodecContext *enc = ost->enc_ctx; - AVPacket pkt; + AVPacket *pkt = ost->pkt; int ret; - av_init_packet(&pkt); - pkt.data = NULL; - pkt.size = 0; - adjust_frame_pts_to_encoder_tb(of, ost, frame); if (!check_recording_time(ost)) @@ -1017,7 +1019,6 @@ static void do_audio_out(OutputFile *of, OutputStream *ost, ost->samples_encoded += frame->nb_samples; ost->frames_encoded++; - av_assert0(pkt.size || !pkt.data); update_benchmark(NULL); if (debug_ts) { av_log(NULL, AV_LOG_INFO, "encoder <- type:audio " @@ -1031,7 +1032,8 @@ static void do_audio_out(OutputFile *of, OutputStream *ost, goto error; while (1) { - ret = avcodec_receive_packet(enc, &pkt); + av_packet_unref(pkt); + ret = avcodec_receive_packet(enc, pkt); if (ret == AVERROR(EAGAIN)) break; if (ret < 0) @@ -1039,16 +1041,16 @@ static void do_audio_out(OutputFile *of, OutputStream *ost, update_benchmark("encode_audio %d.%d", ost->file_index, ost->index); - av_packet_rescale_ts(&pkt, enc->time_base, ost->mux_timebase); + av_packet_rescale_ts(pkt, enc->time_base, ost->mux_timebase); if (debug_ts) { av_log(NULL, AV_LOG_INFO, "encoder -> type:audio " "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n", - av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &enc->time_base), - av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &enc->time_base)); + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &enc->time_base), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &enc->time_base)); } - output_packet(of, &pkt, ost, 0); + output_packet(of, pkt, ost, 0); } return; @@ -1064,7 +1066,7 @@ static void do_subtitle_out(OutputFile *of, int subtitle_out_max_size = 1024 * 1024; int subtitle_out_size, nb, i; AVCodecContext *enc; - AVPacket pkt; + AVPacket *pkt = ost->pkt; int64_t pts; if (sub->pts == AV_NOPTS_VALUE) { @@ -1122,21 +1124,21 @@ static void do_subtitle_out(OutputFile *of, exit_program(1); } - av_init_packet(&pkt); - pkt.data = subtitle_out; - pkt.size = subtitle_out_size; - pkt.pts = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ost->mux_timebase); - pkt.duration = av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase); + av_packet_unref(pkt); + pkt->data = subtitle_out; + pkt->size = subtitle_out_size; + pkt->pts = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ost->mux_timebase); + pkt->duration = av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase); if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE) { /* XXX: the pts correction is handled here. Maybe handling it in the codec would be better */ if (i == 0) - pkt.pts += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase); + pkt->pts += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase); else - pkt.pts += av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase); + pkt->pts += av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase); } - pkt.dts = pkt.pts; - output_packet(of, &pkt, ost, 0); + pkt->dts = pkt->pts; + output_packet(of, pkt, ost, 0); } } @@ -1145,7 +1147,7 @@ static void do_video_out(OutputFile *of, AVFrame *next_picture) { int ret, format_video_sync; - AVPacket pkt; + AVPacket *pkt = ost->pkt; AVCodecContext *enc = ost->enc_ctx; AVRational frame_rate; int nb_frames, nb0_frames, i; @@ -1291,9 +1293,6 @@ static void do_video_out(OutputFile *of, AVFrame *in_picture; int forced_keyframe = 0; double pts_time; - av_init_packet(&pkt); - pkt.data = NULL; - pkt.size = 0; if (i < nb0_frames && ost->last_frame) { in_picture = ost->last_frame; @@ -1372,7 +1371,8 @@ static void do_video_out(OutputFile *of, av_frame_remove_side_data(in_picture, AV_FRAME_DATA_A53_CC); while (1) { - ret = avcodec_receive_packet(enc, &pkt); + av_packet_unref(pkt); + ret = avcodec_receive_packet(enc, pkt); update_benchmark("encode_video %d.%d", ost->file_index, ost->index); if (ret == AVERROR(EAGAIN)) break; @@ -1382,24 +1382,24 @@ static void do_video_out(OutputFile *of, if (debug_ts) { av_log(NULL, AV_LOG_INFO, "encoder -> type:video " "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n", - av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &enc->time_base), - av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &enc->time_base)); + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &enc->time_base), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &enc->time_base)); } - if (pkt.pts == AV_NOPTS_VALUE && !(enc->codec->capabilities & AV_CODEC_CAP_DELAY)) - pkt.pts = ost->sync_opts; + if (pkt->pts == AV_NOPTS_VALUE && !(enc->codec->capabilities & AV_CODEC_CAP_DELAY)) + pkt->pts = ost->sync_opts; - av_packet_rescale_ts(&pkt, enc->time_base, ost->mux_timebase); + av_packet_rescale_ts(pkt, enc->time_base, ost->mux_timebase); if (debug_ts) { av_log(NULL, AV_LOG_INFO, "encoder -> type:video " "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n", - av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &ost->mux_timebase), - av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &ost->mux_timebase)); + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ost->mux_timebase), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ost->mux_timebase)); } - frame_size = pkt.size; - output_packet(of, &pkt, ost, 0); + frame_size = pkt->size; + output_packet(of, pkt, ost, 0); /* if two pass, output log */ if (ost->logfile && enc->stats_out) { @@ -1528,6 +1528,9 @@ static int reap_filters(int flush) if (av_buffersink_get_type(filter) == AVMEDIA_TYPE_AUDIO) init_output_stream_wrapper(ost, NULL, 1); + if (!ost->pkt && !(ost->pkt = av_packet_alloc())) { + return AVERROR(ENOMEM); + } if (!ost->filtered_frame && !(ost->filtered_frame = av_frame_alloc())) { return AVERROR(ENOMEM); } @@ -1968,7 +1971,7 @@ static void flush_encoders(void) for (;;) { const char *desc = NULL; - AVPacket pkt; + AVPacket *pkt = ost->pkt; int pkt_size; switch (enc->codec_type) { @@ -1982,13 +1985,10 @@ static void flush_encoders(void) av_assert0(0); } - av_init_packet(&pkt); - pkt.data = NULL; - pkt.size = 0; - update_benchmark(NULL); - while ((ret = avcodec_receive_packet(enc, &pkt)) == AVERROR(EAGAIN)) { + av_packet_unref(pkt); + while ((ret = avcodec_receive_packet(enc, pkt)) == AVERROR(EAGAIN)) { ret = avcodec_send_frame(enc, NULL); if (ret < 0) { av_log(NULL, AV_LOG_FATAL, "%s encoding failed: %s\n", @@ -2009,16 +2009,16 @@ static void flush_encoders(void) fprintf(ost->logfile, "%s", enc->stats_out); } if (ret == AVERROR_EOF) { - output_packet(of, &pkt, ost, 1); + output_packet(of, pkt, ost, 1); break; } if (ost->finished & MUXER_FINISHED) { - av_packet_unref(&pkt); + av_packet_unref(pkt); continue; } - av_packet_rescale_ts(&pkt, enc->time_base, ost->mux_timebase); - pkt_size = pkt.size; - output_packet(of, &pkt, ost, 0); + av_packet_rescale_ts(pkt, enc->time_base, ost->mux_timebase); + pkt_size = pkt->size; + output_packet(of, pkt, ost, 0); if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO && vstats_filename) { do_video_stats(ost, pkt_size); } @@ -2052,14 +2052,12 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p InputFile *f = input_files [ist->file_index]; int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time; int64_t ost_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ost->mux_timebase); - AVPacket opkt; + AVPacket *opkt = ost->pkt; + av_packet_unref(opkt); // EOF: flush output bitstream filters. if (!pkt) { - av_init_packet(&opkt); - opkt.data = NULL; - opkt.size = 0; - output_packet(of, &opkt, ost, 1); + output_packet(of, opkt, ost, 1); return; } @@ -2097,30 +2095,30 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO) ost->sync_opts++; - if (av_packet_ref(&opkt, pkt) < 0) + if (av_packet_ref(opkt, pkt) < 0) exit_program(1); if (pkt->pts != AV_NOPTS_VALUE) - opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time; + opkt->pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time; if (pkt->dts == AV_NOPTS_VALUE) { - opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase); + opkt->dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase); } else if (ost->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { int duration = av_get_audio_frame_duration(ist->dec_ctx, pkt->size); if(!duration) duration = ist->dec_ctx->frame_size; - opkt.dts = av_rescale_delta(ist->st->time_base, pkt->dts, + opkt->dts = av_rescale_delta(ist->st->time_base, pkt->dts, (AVRational){1, ist->dec_ctx->sample_rate}, duration, &ist->filter_in_rescale_delta_last, ost->mux_timebase); /* dts will be set immediately afterwards to what pts is now */ - opkt.pts = opkt.dts - ost_tb_start_time; + opkt->pts = opkt->dts - ost_tb_start_time; } else - opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->mux_timebase); - opkt.dts -= ost_tb_start_time; + opkt->dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->mux_timebase); + opkt->dts -= ost_tb_start_time; - opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->mux_timebase); + opkt->duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->mux_timebase); - output_packet(of, &opkt, ost, 0); + output_packet(of, opkt, ost, 0); } int guess_input_channel_layout(InputStream *ist) @@ -2395,7 +2393,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_ int i, ret = 0, err = 0; int64_t best_effort_timestamp; int64_t dts = AV_NOPTS_VALUE; - AVPacket avpkt; // With fate-indeo3-2, we're getting 0-sized packets before EOF for some // reason. This seems like a semi-critical bug. Don't trigger EOF, and @@ -2411,8 +2408,7 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_ if (ist->dts != AV_NOPTS_VALUE) dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ist->st->time_base); if (pkt) { - avpkt = *pkt; - avpkt.dts = dts; // ffmpeg.c probably shouldn't do this + pkt->dts = dts; // ffmpeg.c probably shouldn't do this } // The old code used to set dts on the drain packet, which does not work @@ -2426,7 +2422,7 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_ } update_benchmark(NULL); - ret = decode(ist->dec_ctx, decoded_frame, got_output, pkt ? &avpkt : NULL); + ret = decode(ist->dec_ctx, decoded_frame, got_output, pkt); update_benchmark("decode_video %d.%d", ist->file_index, ist->st->index); if (ret < 0) *decode_failed = 1; @@ -2585,6 +2581,8 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output, for (i = 0; i < nb_output_streams; i++) { OutputStream *ost = output_streams[i]; + if (!ost->pkt && !(ost->pkt = av_packet_alloc())) + exit_program(1); if (!check_output_constraints(ist, ost) || !ost->encoding_needed || ost->enc->type != AVMEDIA_TYPE_SUBTITLE) continue; @@ -2620,7 +2618,12 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo int repeating = 0; int eof_reached = 0; - AVPacket avpkt; + AVPacket *avpkt; + + if (!ist->pkt && !(ist->pkt = av_packet_alloc())) + return AVERROR(ENOMEM); + avpkt = ist->pkt; + if (!ist->saw_first_ts) { ist->dts = ist->st->avg_frame_rate.num ? - ist->dec_ctx->has_b_frames * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; ist->pts = 0; @@ -2636,13 +2639,11 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo if (ist->next_pts == AV_NOPTS_VALUE) ist->next_pts = ist->pts; - if (!pkt) { - /* EOF handling */ - av_init_packet(&avpkt); - avpkt.data = NULL; - avpkt.size = 0; - } else { - avpkt = *pkt; + if (pkt) { + av_packet_unref(avpkt); + ret = av_packet_ref(avpkt, pkt); + if (ret < 0) + return ret; } if (pkt && pkt->dts != AV_NOPTS_VALUE) { @@ -2663,11 +2664,12 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo switch (ist->dec_ctx->codec_type) { case AVMEDIA_TYPE_AUDIO: - ret = decode_audio (ist, repeating ? NULL : &avpkt, &got_output, + ret = decode_audio (ist, repeating ? NULL : avpkt, &got_output, &decode_failed); + av_packet_unref(avpkt); break; case AVMEDIA_TYPE_VIDEO: - ret = decode_video (ist, repeating ? NULL : &avpkt, &got_output, &duration_pts, !pkt, + ret = decode_video (ist, repeating ? NULL : avpkt, &got_output, &duration_pts, !pkt, &decode_failed); if (!repeating || !pkt || got_output) { if (pkt && pkt->duration) { @@ -2692,13 +2694,15 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo ist->next_pts += duration_dts; } } + av_packet_unref(avpkt); break; case AVMEDIA_TYPE_SUBTITLE: if (repeating) break; - ret = transcode_subtitles(ist, &avpkt, &got_output, &decode_failed); + ret = transcode_subtitles(ist, avpkt, &got_output, &decode_failed); if (!pkt && ret >= 0) ret = AVERROR_EOF; + av_packet_unref(avpkt); break; default: return -1; @@ -2787,6 +2791,8 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo for (i = 0; i < nb_output_streams; i++) { OutputStream *ost = output_streams[i]; + if (!ost->pkt && !(ost->pkt = av_packet_alloc())) + exit_program(1); if (!check_output_constraints(ist, ost) || ost->encoding_needed) continue; @@ -3055,10 +3061,11 @@ static int check_init_output_file(OutputFile *of, int file_index) ost->mux_timebase = ost->st->time_base; while (av_fifo_size(ost->muxing_queue)) { - AVPacket pkt; + AVPacket *pkt; av_fifo_generic_read(ost->muxing_queue, &pkt, sizeof(pkt), NULL); - ost->muxing_queue_data_size -= pkt.size; - write_packet(of, &pkt, ost, 1); + ost->muxing_queue_data_size -= pkt->size; + write_packet(of, pkt, ost, 1); + av_packet_free(&pkt); } } @@ -4078,12 +4085,12 @@ static int check_keyboard_interaction(int64_t cur_time) static void *input_thread(void *arg) { InputFile *f = arg; + AVPacket *pkt = f->pkt, *queue_pkt; unsigned flags = f->non_blocking ? AV_THREAD_MESSAGE_NONBLOCK : 0; int ret = 0; while (1) { - AVPacket pkt; - ret = av_read_frame(f->ctx, &pkt); + ret = av_read_frame(f->ctx, pkt); if (ret == AVERROR(EAGAIN)) { av_usleep(10000); @@ -4093,10 +4100,17 @@ static void *input_thread(void *arg) av_thread_message_queue_set_err_recv(f->in_thread_queue, ret); break; } - ret = av_thread_message_queue_send(f->in_thread_queue, &pkt, flags); + queue_pkt = av_packet_alloc(); + if (!queue_pkt) { + av_packet_unref(pkt); + av_thread_message_queue_set_err_recv(f->in_thread_queue, AVERROR(ENOMEM)); + break; + } + av_packet_move_ref(queue_pkt, pkt); + ret = av_thread_message_queue_send(f->in_thread_queue, &queue_pkt, flags); if (flags && ret == AVERROR(EAGAIN)) { flags = 0; - ret = av_thread_message_queue_send(f->in_thread_queue, &pkt, flags); + ret = av_thread_message_queue_send(f->in_thread_queue, &queue_pkt, flags); av_log(f->ctx, AV_LOG_WARNING, "Thread message queue blocking; consider raising the " "thread_queue_size option (current value: %d)\n", @@ -4107,7 +4121,7 @@ static void *input_thread(void *arg) av_log(f->ctx, AV_LOG_ERROR, "Unable to send packet to main thread: %s\n", av_err2str(ret)); - av_packet_unref(&pkt); + av_packet_free(&queue_pkt); av_thread_message_queue_set_err_recv(f->in_thread_queue, ret); break; } @@ -4119,13 +4133,13 @@ static void *input_thread(void *arg) static void free_input_thread(int i) { InputFile *f = input_files[i]; - AVPacket pkt; + AVPacket *pkt; if (!f || !f->in_thread_queue) return; av_thread_message_queue_set_err_send(f->in_thread_queue, AVERROR_EOF); while (av_thread_message_queue_recv(f->in_thread_queue, &pkt, 0) >= 0) - av_packet_unref(&pkt); + av_packet_free(&pkt); pthread_join(f->thread, NULL); f->joined = 1; @@ -4154,7 +4168,7 @@ static int init_input_thread(int i) strcmp(f->ctx->iformat->name, "lavfi")) f->non_blocking = 1; ret = av_thread_message_queue_alloc(&f->in_thread_queue, - f->thread_queue_size, sizeof(AVPacket)); + f->thread_queue_size, sizeof(f->pkt)); if (ret < 0) return ret; @@ -4179,7 +4193,7 @@ static int init_input_threads(void) return 0; } -static int get_input_packet_mt(InputFile *f, AVPacket *pkt) +static int get_input_packet_mt(InputFile *f, AVPacket **pkt) { return av_thread_message_queue_recv(f->in_thread_queue, pkt, f->non_blocking ? @@ -4187,7 +4201,7 @@ static int get_input_packet_mt(InputFile *f, AVPacket *pkt) } #endif -static int get_input_packet(InputFile *f, AVPacket *pkt) +static int get_input_packet(InputFile *f, AVPacket **pkt) { if (f->rate_emu) { int i; @@ -4204,7 +4218,8 @@ static int get_input_packet(InputFile *f, AVPacket *pkt) if (f->thread_queue_size) return get_input_packet_mt(f, pkt); #endif - return av_read_frame(f->ctx, pkt); + *pkt = f->pkt; + return av_read_frame(f->ctx, *pkt); } static int got_eagain(void) @@ -4316,7 +4331,7 @@ static int process_input(int file_index) InputFile *ifile = input_files[file_index]; AVFormatContext *is; InputStream *ist; - AVPacket pkt; + AVPacket *pkt; int ret, thread_ret, i, j; int64_t duration; int64_t pkt_dts; @@ -4391,27 +4406,27 @@ static int process_input(int file_index) reset_eagain(); if (do_pkt_dump) { - av_pkt_dump_log2(NULL, AV_LOG_INFO, &pkt, do_hex_dump, - is->streams[pkt.stream_index]); + av_pkt_dump_log2(NULL, AV_LOG_INFO, pkt, do_hex_dump, + is->streams[pkt->stream_index]); } /* the following test is needed in case new streams appear dynamically in stream : we ignore them */ - if (pkt.stream_index >= ifile->nb_streams) { - report_new_stream(file_index, &pkt); + if (pkt->stream_index >= ifile->nb_streams) { + report_new_stream(file_index, pkt); goto discard_packet; } - ist = input_streams[ifile->ist_index + pkt.stream_index]; + ist = input_streams[ifile->ist_index + pkt->stream_index]; - ist->data_size += pkt.size; + ist->data_size += pkt->size; ist->nb_packets++; if (ist->discard) goto discard_packet; - if (pkt.flags & AV_PKT_FLAG_CORRUPT) { + if (pkt->flags & AV_PKT_FLAG_CORRUPT) { av_log(NULL, exit_on_error ? AV_LOG_FATAL : AV_LOG_WARNING, - "%s: corrupt input packet in stream %d\n", is->url, pkt.stream_index); + "%s: corrupt input packet in stream %d\n", is->url, pkt->stream_index); if (exit_on_error) exit_program(1); } @@ -4419,11 +4434,11 @@ static int process_input(int file_index) if (debug_ts) { av_log(NULL, AV_LOG_INFO, "demuxer -> ist_index:%d type:%s " "next_dts:%s next_dts_time:%s next_pts:%s next_pts_time:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s off:%s off_time:%s\n", - ifile->ist_index + pkt.stream_index, av_get_media_type_string(ist->dec_ctx->codec_type), + ifile->ist_index + pkt->stream_index, av_get_media_type_string(ist->dec_ctx->codec_type), av_ts2str(ist->next_dts), av_ts2timestr(ist->next_dts, &AV_TIME_BASE_Q), av_ts2str(ist->next_pts), av_ts2timestr(ist->next_pts, &AV_TIME_BASE_Q), - av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &ist->st->time_base), - av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &ist->st->time_base), + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ist->st->time_base), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ist->st->time_base), av_ts2str(input_files[ist->file_index]->ts_offset), av_ts2timestr(input_files[ist->file_index]->ts_offset, &AV_TIME_BASE_Q)); } @@ -4453,12 +4468,12 @@ static int process_input(int file_index) stime2= stime + (1ULL<st->pts_wrap_bits); ist->wrap_correction_done = 1; - if(stime2 > stime && pkt.dts != AV_NOPTS_VALUE && pkt.dts > stime + (1LL<<(ist->st->pts_wrap_bits-1))) { - pkt.dts -= 1ULL<st->pts_wrap_bits; + if(stime2 > stime && pkt->dts != AV_NOPTS_VALUE && pkt->dts > stime + (1LL<<(ist->st->pts_wrap_bits-1))) { + pkt->dts -= 1ULL<st->pts_wrap_bits; ist->wrap_correction_done = 0; } - if(stime2 > stime && pkt.pts != AV_NOPTS_VALUE && pkt.pts > stime + (1LL<<(ist->st->pts_wrap_bits-1))) { - pkt.pts -= 1ULL<st->pts_wrap_bits; + if(stime2 > stime && pkt->pts != AV_NOPTS_VALUE && pkt->pts > stime + (1LL<<(ist->st->pts_wrap_bits-1))) { + pkt->pts -= 1ULL<st->pts_wrap_bits; ist->wrap_correction_done = 0; } } @@ -4472,10 +4487,10 @@ static int process_input(int file_index) if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX) continue; - if (av_packet_get_side_data(&pkt, src_sd->type, NULL)) + if (av_packet_get_side_data(pkt, src_sd->type, NULL)) continue; - dst_data = av_packet_new_side_data(&pkt, src_sd->type, src_sd->size); + dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size); if (!dst_data) exit_program(1); @@ -4483,17 +4498,17 @@ static int process_input(int file_index) } } - if (pkt.dts != AV_NOPTS_VALUE) - pkt.dts += av_rescale_q(ifile->ts_offset, AV_TIME_BASE_Q, ist->st->time_base); - if (pkt.pts != AV_NOPTS_VALUE) - pkt.pts += av_rescale_q(ifile->ts_offset, AV_TIME_BASE_Q, ist->st->time_base); + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts += av_rescale_q(ifile->ts_offset, AV_TIME_BASE_Q, ist->st->time_base); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts += av_rescale_q(ifile->ts_offset, AV_TIME_BASE_Q, ist->st->time_base); - if (pkt.pts != AV_NOPTS_VALUE) - pkt.pts *= ist->ts_scale; - if (pkt.dts != AV_NOPTS_VALUE) - pkt.dts *= ist->ts_scale; + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts *= ist->ts_scale; + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts *= ist->ts_scale; - pkt_dts = av_rescale_q_rnd(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); + pkt_dts = av_rescale_q_rnd(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); if ((ist->dec_ctx->codec_type == AVMEDIA_TYPE_VIDEO || ist->dec_ctx->codec_type == AVMEDIA_TYPE_AUDIO) && pkt_dts != AV_NOPTS_VALUE && ist->next_dts == AV_NOPTS_VALUE && !copy_ts @@ -4505,27 +4520,27 @@ static int process_input(int file_index) av_log(NULL, AV_LOG_DEBUG, "Inter stream timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", delta, ifile->ts_offset); - pkt.dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); - if (pkt.pts != AV_NOPTS_VALUE) - pkt.pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); + pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); } } duration = av_rescale_q(ifile->duration, ifile->time_base, ist->st->time_base); - if (pkt.pts != AV_NOPTS_VALUE) { - pkt.pts += duration; - ist->max_pts = FFMAX(pkt.pts, ist->max_pts); - ist->min_pts = FFMIN(pkt.pts, ist->min_pts); + if (pkt->pts != AV_NOPTS_VALUE) { + pkt->pts += duration; + ist->max_pts = FFMAX(pkt->pts, ist->max_pts); + ist->min_pts = FFMIN(pkt->pts, ist->min_pts); } - if (pkt.dts != AV_NOPTS_VALUE) - pkt.dts += duration; + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts += duration; - pkt_dts = av_rescale_q_rnd(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); + pkt_dts = av_rescale_q_rnd(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); if (copy_ts && pkt_dts != AV_NOPTS_VALUE && ist->next_dts != AV_NOPTS_VALUE && (is->iformat->flags & AVFMT_TS_DISCONT) && ist->st->pts_wrap_bits < 60) { - int64_t wrap_dts = av_rescale_q_rnd(pkt.dts + (1LL<st->pts_wrap_bits), + int64_t wrap_dts = av_rescale_q_rnd(pkt->dts + (1LL<st->pts_wrap_bits), ist->st->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); if (FFABS(wrap_dts - ist->next_dts) < FFABS(pkt_dts - ist->next_dts)/10) @@ -4548,46 +4563,51 @@ static int process_input(int file_index) ist->file_index, ist->st->index, ist->st->id, av_get_media_type_string(ist->dec_ctx->codec_type), delta, ifile->ts_offset); - pkt.dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); - if (pkt.pts != AV_NOPTS_VALUE) - pkt.pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); + pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); } } else { if ( delta < -1LL*dts_error_threshold*AV_TIME_BASE || delta > 1LL*dts_error_threshold*AV_TIME_BASE) { - av_log(NULL, AV_LOG_WARNING, "DTS %"PRId64", next:%"PRId64" st:%d invalid dropping\n", pkt.dts, ist->next_dts, pkt.stream_index); - pkt.dts = AV_NOPTS_VALUE; + av_log(NULL, AV_LOG_WARNING, "DTS %"PRId64", next:%"PRId64" st:%d invalid dropping\n", pkt->dts, ist->next_dts, pkt->stream_index); + pkt->dts = AV_NOPTS_VALUE; } - if (pkt.pts != AV_NOPTS_VALUE){ - int64_t pkt_pts = av_rescale_q(pkt.pts, ist->st->time_base, AV_TIME_BASE_Q); + if (pkt->pts != AV_NOPTS_VALUE){ + int64_t pkt_pts = av_rescale_q(pkt->pts, ist->st->time_base, AV_TIME_BASE_Q); delta = pkt_pts - ist->next_dts; if ( delta < -1LL*dts_error_threshold*AV_TIME_BASE || delta > 1LL*dts_error_threshold*AV_TIME_BASE) { - av_log(NULL, AV_LOG_WARNING, "PTS %"PRId64", next:%"PRId64" invalid dropping st:%d\n", pkt.pts, ist->next_dts, pkt.stream_index); - pkt.pts = AV_NOPTS_VALUE; + av_log(NULL, AV_LOG_WARNING, "PTS %"PRId64", next:%"PRId64" invalid dropping st:%d\n", pkt->pts, ist->next_dts, pkt->stream_index); + pkt->pts = AV_NOPTS_VALUE; } } } } - if (pkt.dts != AV_NOPTS_VALUE) - ifile->last_ts = av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q); + if (pkt->dts != AV_NOPTS_VALUE) + ifile->last_ts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); if (debug_ts) { av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s off:%s off_time:%s\n", - ifile->ist_index + pkt.stream_index, av_get_media_type_string(ist->dec_ctx->codec_type), - av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &ist->st->time_base), - av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &ist->st->time_base), + ifile->ist_index + pkt->stream_index, av_get_media_type_string(ist->dec_ctx->codec_type), + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ist->st->time_base), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ist->st->time_base), av_ts2str(input_files[ist->file_index]->ts_offset), av_ts2timestr(input_files[ist->file_index]->ts_offset, &AV_TIME_BASE_Q)); } - sub2video_heartbeat(ist, pkt.pts); + sub2video_heartbeat(ist, pkt->pts); - process_input_packet(ist, &pkt, 0); + process_input_packet(ist, pkt, 0); discard_packet: - av_packet_unref(&pkt); +#if HAVE_THREADS + if (ifile->thread_queue_size) + av_packet_free(&pkt); + else +#endif + av_packet_unref(pkt); return 0; } diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 5aeceae6b7..cbb6e1f8da 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -308,6 +308,7 @@ typedef struct InputStream { AVCodec *dec; AVFrame *decoded_frame; AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */ + AVPacket *pkt; int64_t start; /* time when read started */ /* predicted dts of the next packet read for this stream or (when there are @@ -416,6 +417,8 @@ typedef struct InputFile { int rate_emu; int accurate_seek; + AVPacket *pkt; + #if HAVE_THREADS AVThreadMessageQueue *in_thread_queue; pthread_t thread; /* thread reading from this file */ @@ -472,6 +475,7 @@ typedef struct OutputStream { int64_t max_frames; AVFrame *filtered_frame; AVFrame *last_frame; + AVPacket *pkt; int last_dropped; int last_nb0_frames[3]; diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index bf2eb26246..cedd0b36d6 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1279,6 +1279,9 @@ static int open_input_file(OptionsContext *o, const char *filename) f->loop = o->loop; f->duration = 0; f->time_base = (AVRational){ 1, 1 }; + f->pkt = av_packet_alloc(); + if (!f->pkt) + exit_program(1); #if HAVE_THREADS f->thread_queue_size = o->thread_queue_size; #endif @@ -1570,7 +1573,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e ost->max_muxing_queue_size = 128; MATCH_PER_STREAM_OPT(max_muxing_queue_size, i, ost->max_muxing_queue_size, oc, st); - ost->max_muxing_queue_size *= sizeof(AVPacket); + ost->max_muxing_queue_size *= sizeof(ost->pkt); ost->muxing_queue_data_size = 0; From patchwork Thu Feb 4 19:10:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 25440 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 76CBB44AD4B for ; Thu, 4 Feb 2021 21:18:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 44C8C689F4D; Thu, 4 Feb 2021 21:12:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1252F68AA90 for ; Thu, 4 Feb 2021 21:12:03 +0200 (EET) Received: by mail-qk1-f180.google.com with SMTP id r77so4405223qka.12 for ; Thu, 04 Feb 2021 11:12:03 -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=EkeynGQ6qB1hRyyflBQMzpHz2idXrkYDVK8jE7dab9o=; b=iA1+mZPlOoVtTF7FT8uinolHt4YGhIN4qFzPhPqCy+HaMHm/bga/X9HHw4m/0kyflA Bj1L9dCgM+YH4NWg9emFNk34FoYjPSQ4DKPbpqemGGOrZWvpm2lHr9Mv8YvyDP3mHFNm w1kBe3LW5ogxDAc+FT0wb95FKPY/f0atdVb++wkUUy/ICCb5zZnHSyJCjpZ9S/NIJ74D VZh7HmNHQhiIPmNcupaliVqktuBRoezbKaQNNG8n00CNgjwziz4iJ//VQtLD3ti22Y9W ifiqyP3UrX7aDUGnKYAmtqG/xXr6yaXEcQ3u2vhvgqgpf0kxruyWMi7R4nw9EJ64YLvZ 9H5g== 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=EkeynGQ6qB1hRyyflBQMzpHz2idXrkYDVK8jE7dab9o=; b=Bn3pkqvyqyoZTkrSJxg6PI7irzENAxLuegCSJqeIwPOqg7xwbhljemTnZuwUuF8Lw+ OgVlbaDVx+dxQjPyXxC+q5kG+mtnbxS+edG7dzkgu6Mfw/MqptzL2aoUllOUXZC+hNKh qEh350jdTxgyI+QXNM2mcf6kApnSDyl+ANkHlFxY2JEqKLARYo+vWrbx1HowYJ8OrvcP pL+1Yq9AdIXB9dzTbR/fpyyTdo7F0/QKrPVZJlQxlVGyvw6flqUbo7PGu/vET2+kOgaP apccSct4F+03NP+Z+eK5LZOihOjQFqmmsu7u/rGOAfuhvN2vsHcR4bcYsRf6VVoTl3+t lZ6g== X-Gm-Message-State: AOAM5316+cmVogZBeo4XDSLbmxsC+AMBvRMUPC3hRZyrDnGkSANAH/fq pgX72AF3IaZZA3yVrqHg3kEij/+Myts= X-Google-Smtp-Source: ABdhPJxyaxV3xAmvIFrqxgm/BrFyop1nl+S+IL193K9Ovz5MhlOmM8a9PqrUh6drDmzpP33zRUZPVg== X-Received: by 2002:a37:bd84:: with SMTP id n126mr691765qkf.54.1612465922168; Thu, 04 Feb 2021 11:12:02 -0800 (PST) Received: from localhost.localdomain ([181.23.64.183]) by smtp.gmail.com with ESMTPSA id t14sm5889291qkt.50.2021.02.04.11.12.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 11:12:01 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Feb 2021 16:10:05 -0300 Message-Id: <20210204191005.48190-51-jamrial@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210204191005.48190-1-jamrial@gmail.com> References: <20210204191005.48190-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 50/50] fftools/ffplay: 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" Signed-off-by: James Almer --- fftools/ffplay.c | 204 +++++++++++++++++++++++++++++------------------ 1 file changed, 127 insertions(+), 77 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 9ff0425163..d48edc0797 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -36,6 +36,7 @@ #include "libavutil/pixdesc.h" #include "libavutil/imgutils.h" #include "libavutil/dict.h" +#include "libavutil/fifo.h" #include "libavutil/parseutils.h" #include "libavutil/samplefmt.h" #include "libavutil/avassert.h" @@ -111,13 +112,12 @@ const int program_birth_year = 2003; static unsigned sws_flags = SWS_BICUBIC; typedef struct MyAVPacketList { - AVPacket pkt; - struct MyAVPacketList *next; + AVPacket *pkt; int serial; } MyAVPacketList; typedef struct PacketQueue { - MyAVPacketList *first_pkt, *last_pkt; + AVFifoBuffer *pkt_list; int nb_packets; int size; int64_t duration; @@ -187,7 +187,8 @@ enum { }; typedef struct Decoder { - AVPacket pkt; + AVPacket *pkt; + AVPacket *tmp_pkt; PacketQueue *queue; AVCodecContext *avctx; int pkt_serial; @@ -361,7 +362,7 @@ static int filter_nbthreads = 0; static int is_full_screen; static int64_t audio_callback_time; -static AVPacket flush_pkt; +static uint8_t flush_pkt; #define FF_QUIT_EVENT (SDL_USEREVENT + 2) @@ -427,28 +428,25 @@ int64_t get_valid_channel_layout(int64_t channel_layout, int channels) static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt) { - MyAVPacketList *pkt1; + MyAVPacketList pkt1; if (q->abort_request) return -1; - pkt1 = av_malloc(sizeof(MyAVPacketList)); - if (!pkt1) - return -1; - pkt1->pkt = *pkt; - pkt1->next = NULL; - if (pkt == &flush_pkt) + if (av_fifo_space(q->pkt_list) < sizeof(pkt1)) { + if (av_fifo_grow(q->pkt_list, sizeof(pkt1)) < 0) + return -1; + } + + if (pkt->data == &flush_pkt) q->serial++; - pkt1->serial = q->serial; + pkt1.pkt = pkt; + pkt1.serial = q->serial; - if (!q->last_pkt) - q->first_pkt = pkt1; - else - q->last_pkt->next = pkt1; - q->last_pkt = pkt1; + av_fifo_generic_write(q->pkt_list, &pkt1, sizeof(pkt1), NULL); q->nb_packets++; - q->size += pkt1->pkt.size + sizeof(*pkt1); - q->duration += pkt1->pkt.duration; + q->size += pkt1.pkt->size + sizeof(pkt1); + q->duration += pkt1.pkt->duration; /* XXX: should duplicate packet data in DV case */ SDL_CondSignal(q->cond); return 0; @@ -456,32 +454,66 @@ static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt) static int packet_queue_put(PacketQueue *q, AVPacket *pkt) { + AVPacket *pkt1; int ret; + pkt1 = av_packet_clone(pkt); + if (!pkt1) + return -1; SDL_LockMutex(q->mutex); - ret = packet_queue_put_private(q, pkt); + ret = packet_queue_put_private(q, pkt1); SDL_UnlockMutex(q->mutex); - - if (pkt != &flush_pkt && ret < 0) + if (ret < 0) { + av_packet_free(&pkt1); av_packet_unref(pkt); + } + + return ret; +} + +static int packet_queue_put_flushpacket(PacketQueue *q) +{ + AVPacket *pkt; + int ret; + + pkt = av_packet_alloc(); + if (!pkt) + return -1; + pkt->data = &flush_pkt; + SDL_LockMutex(q->mutex); + ret = packet_queue_put_private(q, pkt); + SDL_UnlockMutex(q->mutex); + if (ret < 0) + av_packet_free(&pkt); return ret; } static int packet_queue_put_nullpacket(PacketQueue *q, int stream_index) { - AVPacket pkt1, *pkt = &pkt1; - av_init_packet(pkt); - pkt->data = NULL; - pkt->size = 0; + AVPacket *pkt; + int ret; + + pkt = av_packet_alloc(); + if (!pkt) + return -1; pkt->stream_index = stream_index; - return packet_queue_put(q, pkt); + SDL_LockMutex(q->mutex); + ret = packet_queue_put_private(q, pkt); + SDL_UnlockMutex(q->mutex); + if (ret < 0) + av_packet_free(&pkt); + + return ret; } /* packet queue handling */ static int packet_queue_init(PacketQueue *q) { memset(q, 0, sizeof(PacketQueue)); + q->pkt_list = av_fifo_alloc(sizeof(MyAVPacketList)); + if (!q->pkt_list) + return AVERROR(ENOMEM); q->mutex = SDL_CreateMutex(); if (!q->mutex) { av_log(NULL, AV_LOG_FATAL, "SDL_CreateMutex(): %s\n", SDL_GetError()); @@ -498,16 +530,13 @@ static int packet_queue_init(PacketQueue *q) static void packet_queue_flush(PacketQueue *q) { - MyAVPacketList *pkt, *pkt1; + MyAVPacketList pkt1; SDL_LockMutex(q->mutex); - for (pkt = q->first_pkt; pkt; pkt = pkt1) { - pkt1 = pkt->next; - av_packet_unref(&pkt->pkt); - av_freep(&pkt); + while (av_fifo_size(q->pkt_list) >= sizeof(pkt1)) { + av_fifo_generic_read(q->pkt_list, &pkt1, sizeof(pkt1), NULL); + av_packet_free(&pkt1.pkt); } - q->last_pkt = NULL; - q->first_pkt = NULL; q->nb_packets = 0; q->size = 0; q->duration = 0; @@ -517,6 +546,7 @@ static void packet_queue_flush(PacketQueue *q) static void packet_queue_destroy(PacketQueue *q) { packet_queue_flush(q); + av_fifo_freep(&q->pkt_list); SDL_DestroyMutex(q->mutex); SDL_DestroyCond(q->cond); } @@ -532,18 +562,29 @@ static void packet_queue_abort(PacketQueue *q) SDL_UnlockMutex(q->mutex); } -static void packet_queue_start(PacketQueue *q) +static int packet_queue_start(PacketQueue *q) { + AVPacket *pkt; + int ret; + + pkt = av_packet_alloc(); + if (!pkt) + return -1; + pkt->data = &flush_pkt; SDL_LockMutex(q->mutex); q->abort_request = 0; - packet_queue_put_private(q, &flush_pkt); + ret = packet_queue_put_private(q, pkt); SDL_UnlockMutex(q->mutex); + if (ret < 0) + av_packet_free(&pkt); + + return ret; } /* return < 0 if aborted, 0 if no packet and > 0 if packet. */ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *serial) { - MyAVPacketList *pkt1; + MyAVPacketList pkt1; int ret; SDL_LockMutex(q->mutex); @@ -554,18 +595,15 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *seria break; } - pkt1 = q->first_pkt; - if (pkt1) { - q->first_pkt = pkt1->next; - if (!q->first_pkt) - q->last_pkt = NULL; + if (av_fifo_size(q->pkt_list) >= sizeof(pkt1)) { + av_fifo_generic_read(q->pkt_list, &pkt1, sizeof(pkt1), NULL); q->nb_packets--; - q->size -= pkt1->pkt.size + sizeof(*pkt1); - q->duration -= pkt1->pkt.duration; - *pkt = pkt1->pkt; + q->size -= pkt1.pkt->size + sizeof(pkt1); + q->duration -= pkt1.pkt->duration; + av_packet_move_ref(pkt, pkt1.pkt); if (serial) - *serial = pkt1->serial; - av_free(pkt1); + *serial = pkt1.serial; + av_packet_free(&pkt1.pkt); ret = 1; break; } else if (!block) { @@ -579,21 +617,28 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *seria return ret; } -static void decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, SDL_cond *empty_queue_cond) { +static int decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, SDL_cond *empty_queue_cond) { memset(d, 0, sizeof(Decoder)); + d->pkt = av_packet_alloc(); + d->tmp_pkt = av_packet_alloc(); + if (!d->pkt || !d->tmp_pkt) { + av_packet_free(&d->pkt); + av_packet_free(&d->tmp_pkt); + return AVERROR(ENOMEM); + } d->avctx = avctx; d->queue = queue; d->empty_queue_cond = empty_queue_cond; d->start_pts = AV_NOPTS_VALUE; d->pkt_serial = -1; + return 0; } static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { + AVPacket *pkt = d->tmp_pkt; int ret = AVERROR(EAGAIN); for (;;) { - AVPacket pkt; - if (d->queue->serial == d->pkt_serial) { do { if (d->queue->abort_request) @@ -639,18 +684,18 @@ static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { if (d->queue->nb_packets == 0) SDL_CondSignal(d->empty_queue_cond); if (d->packet_pending) { - av_packet_move_ref(&pkt, &d->pkt); + av_packet_move_ref(pkt, d->pkt); d->packet_pending = 0; } else { - if (packet_queue_get(d->queue, &pkt, 1, &d->pkt_serial) < 0) + if (packet_queue_get(d->queue, pkt, 1, &d->pkt_serial) < 0) return -1; } if (d->queue->serial == d->pkt_serial) break; - av_packet_unref(&pkt); + av_packet_unref(pkt); } while (1); - if (pkt.data == flush_pkt.data) { + if (pkt->data == &flush_pkt) { avcodec_flush_buffers(d->avctx); d->finished = 0; d->next_pts = d->start_pts; @@ -658,30 +703,31 @@ static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { } else { if (d->avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) { int got_frame = 0; - ret = avcodec_decode_subtitle2(d->avctx, sub, &got_frame, &pkt); + ret = avcodec_decode_subtitle2(d->avctx, sub, &got_frame, pkt); if (ret < 0) { ret = AVERROR(EAGAIN); } else { - if (got_frame && !pkt.data) { + if (got_frame && !pkt->data) { d->packet_pending = 1; - av_packet_move_ref(&d->pkt, &pkt); + av_packet_move_ref(d->pkt, pkt); } - ret = got_frame ? 0 : (pkt.data ? AVERROR(EAGAIN) : AVERROR_EOF); + ret = got_frame ? 0 : (pkt->data ? AVERROR(EAGAIN) : AVERROR_EOF); } } else { - if (avcodec_send_packet(d->avctx, &pkt) == AVERROR(EAGAIN)) { + if (avcodec_send_packet(d->avctx, pkt) == AVERROR(EAGAIN)) { av_log(d->avctx, AV_LOG_ERROR, "Receive_frame and send_packet both returned EAGAIN, which is an API violation.\n"); d->packet_pending = 1; - av_packet_move_ref(&d->pkt, &pkt); + av_packet_move_ref(d->pkt, pkt); } } - av_packet_unref(&pkt); + av_packet_unref(pkt); } } } static void decoder_destroy(Decoder *d) { - av_packet_unref(&d->pkt); + av_packet_free(&d->pkt); + av_packet_free(&d->tmp_pkt); avcodec_free_context(&d->avctx); } @@ -2685,7 +2731,8 @@ static int stream_component_open(VideoState *is, int stream_index) is->audio_stream = stream_index; is->audio_st = ic->streams[stream_index]; - decoder_init(&is->auddec, avctx, &is->audioq, is->continue_read_thread); + if ((ret = decoder_init(&is->auddec, avctx, &is->audioq, is->continue_read_thread)) < 0) + goto fail; if ((is->ic->iformat->flags & (AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK)) && !is->ic->iformat->read_seek) { is->auddec.start_pts = is->audio_st->start_time; is->auddec.start_pts_tb = is->audio_st->time_base; @@ -2698,7 +2745,8 @@ static int stream_component_open(VideoState *is, int stream_index) is->video_stream = stream_index; is->video_st = ic->streams[stream_index]; - decoder_init(&is->viddec, avctx, &is->videoq, is->continue_read_thread); + if ((ret = decoder_init(&is->viddec, avctx, &is->videoq, is->continue_read_thread)) < 0) + goto fail; if ((ret = decoder_start(&is->viddec, video_thread, "video_decoder", is)) < 0) goto out; is->queue_attachments_req = 1; @@ -2707,7 +2755,8 @@ static int stream_component_open(VideoState *is, int stream_index) is->subtitle_stream = stream_index; is->subtitle_st = ic->streams[stream_index]; - decoder_init(&is->subdec, avctx, &is->subtitleq, is->continue_read_thread); + if ((ret = decoder_init(&is->subdec, avctx, &is->subtitleq, is->continue_read_thread)) < 0) + goto fail; if ((ret = decoder_start(&is->subdec, subtitle_thread, "subtitle_decoder", is)) < 0) goto out; break; @@ -2760,7 +2809,7 @@ static int read_thread(void *arg) AVFormatContext *ic = NULL; int err, i, ret; int st_index[AVMEDIA_TYPE_NB]; - AVPacket pkt1, *pkt = &pkt1; + AVPacket *pkt = NULL; int64_t stream_start_time; int pkt_in_play_range = 0; AVDictionaryEntry *t; @@ -2777,6 +2826,12 @@ static int read_thread(void *arg) memset(st_index, -1, sizeof(st_index)); is->eof = 0; + pkt = av_packet_alloc(); + if (!pkt) { + av_log(NULL, AV_LOG_FATAL, "Could not allocate packet.\n"); + ret = AVERROR(ENOMEM); + goto fail; + } ic = avformat_alloc_context(); if (!ic) { av_log(NULL, AV_LOG_FATAL, "Could not allocate context.\n"); @@ -2962,15 +3017,15 @@ static int read_thread(void *arg) } else { if (is->audio_stream >= 0) { packet_queue_flush(&is->audioq); - packet_queue_put(&is->audioq, &flush_pkt); + packet_queue_put_flushpacket(&is->audioq); } if (is->subtitle_stream >= 0) { packet_queue_flush(&is->subtitleq); - packet_queue_put(&is->subtitleq, &flush_pkt); + packet_queue_put_flushpacket(&is->subtitleq); } if (is->video_stream >= 0) { packet_queue_flush(&is->videoq); - packet_queue_put(&is->videoq, &flush_pkt); + packet_queue_put_flushpacket(&is->videoq); } if (is->seek_flags & AVSEEK_FLAG_BYTE) { set_clock(&is->extclk, NAN, 0); @@ -2986,10 +3041,7 @@ static int read_thread(void *arg) } if (is->queue_attachments_req) { if (is->video_st && is->video_st->disposition & AV_DISPOSITION_ATTACHED_PIC) { - AVPacket copy; - if ((ret = av_packet_ref(©, &is->video_st->attached_pic)) < 0) - goto fail; - packet_queue_put(&is->videoq, ©); + packet_queue_put(&is->videoq, &is->video_st->attached_pic); packet_queue_put_nullpacket(&is->videoq, is->video_stream); } is->queue_attachments_req = 0; @@ -3066,6 +3118,7 @@ static int read_thread(void *arg) if (ic && !is->ic) avformat_close_input(&ic); + av_packet_free(&pkt); if (ret != 0) { SDL_Event event; @@ -3738,9 +3791,6 @@ int main(int argc, char **argv) SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE); SDL_EventState(SDL_USEREVENT, SDL_IGNORE); - av_init_packet(&flush_pkt); - flush_pkt.data = (uint8_t *)&flush_pkt; - if (!display_disable) { int flags = SDL_WINDOW_HIDDEN; if (alwaysontop)