From patchwork Mon Sep 23 15:01:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51757 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d154:0:b0:48e:c0f8:d0de with SMTP id bt20csp2517513vqb; Mon, 23 Sep 2024 08:03:01 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXULjGUZ2rIjzoGuLwPlXQbNWtByo89HhYxD2Qwf3UUBcdWwAgl1JceMWIZSEyDcKp1YkpwXDRE6e4W5hwnC5Ob@gmail.com X-Google-Smtp-Source: AGHT+IGH6k1w8PhmkPZ5rVmA7GFgArvq8M+3izsra+1jHA7iSWL/MQlXt7pAD7UossCS8OJoZZ0h X-Received: by 2002:a05:6512:39d4:b0:535:3dae:a14b with SMTP id 2adb3069b0e04-536ac2d6610mr5169856e87.2.1727103781334; Mon, 23 Sep 2024 08:03:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727103781; cv=none; d=google.com; s=arc-20240605; b=cMh9DGfP343Q83J508D/LpZ1P3NzkP7zVmUJ/jhGLSqF/gftDaNKksqxh6slQmkREq +8LkqRCo4bvMnm/MBQxHLpxOMYrOaRdYYeGbgZJz0tf2eK8sHKFR8R6g4buLjaJfedGz nymJSvExQxgXV2sY7G34rD4263Xr5Vnnw0UTdI2dDXQctyqyNDMB/jfkfgStSRQqwGMg mUDTwdhlMRssNmPRBD82NK3BAepxOYJShzrWVTnwMAs3ooxHYlVTS6+n4Cf9cdAZtkaE PgCMm3TmgtPj1V0fH4XeK3iHzqdjvQli1VBXW0sINJsUwbvvlQnyi5rVUjcMaFgr+lOW xUFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=PoKjYo/gmXLGgW8phU2Ek3yfJC/0TzDdvfDfWgBi8IM=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=gw3jQcGZGNliDmJx3lZJ/Ar0rNGGBw8e5ZrEHyE+MccFYw1edAqmei3G3kKZ9aOFMD gvBZSwWffP+aq7RZqbP+Db6wbU8dmQw+GOnHXDfHugJdz1tZsA9aj/bfAg8zn0nLbbCI 1NcTXeHZKJDI+Di7IZore0Glm0Iu/WDTNNaW5inxDg/Z5Vp+1HEb09WGGuw17PjZO8D6 Y5wagI1G6TXmCXl0MWF4RfTTEOoC39i1IzY1st8t4pmHbu9Oys5bK43cqKK8ARMq67BQ lngDk9MoaDoOoxoUdOOo9E6mcYWoRCIl2YiY7gO79i4Dm75ZDtbzdKAb1Kk6Ute078V8 44tw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=PPZfFcVq; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 2adb3069b0e04-536870bc334si6914155e87.588.2024.09.23.08.02.57; Mon, 23 Sep 2024 08:03:01 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=PPZfFcVq; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6C54A68DC65; Mon, 23 Sep 2024 18:02:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D7C6F68DB6A for ; Mon, 23 Sep 2024 18:02:06 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=PPZfFcVq; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 7D50E4E0C for ; Mon, 23 Sep 2024 17:02:06 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id jdRJvRRXpD3y for ; Mon, 23 Sep 2024 17:02:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727103724; bh=1l8xfLVeZfqsxnE/QdN7JrwNlXDljzVd6VAYjNbg+D8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=PPZfFcVqnaxO0G+xLUheiYQZUBMApIKroTcrl2bwStrjD+/2nkDa2xjl+TcWSZsFH tlx3f/g+HE6MwgabZqO1RSDNdlZ2cBYU7B98VfGparfI8Jp0CDYjsKrifufaBGgsxl cYztrlMvgQ+oF4yNQwHQkSC9Em/1XtbdL6yIQTqT9TC8XjoH5cQo4ktEbGTsjK+DES SpKIJLrsuyrXIAfX7RmZ2SbIE/jbrATzaletd5vweZcWTYaBv542V1FvMlBadDFIgt 3rpyZoEfHoEBH9c5BiJ2dtls1NRuU8fU9RyfLK4N6abPkfKxwK0Dl7FyoQWWrjcH5V eWaGupyoSbobg== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id 7C9524DF6 for ; Mon, 23 Sep 2024 17:02:04 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 69BA63A0F6F for ; Mon, 23 Sep 2024 17:02:04 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Sep 2024 17:01:44 +0200 Message-ID: <20240923150146.31693-6-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240923150146.31693-1-anton@khirnov.net> References: <20240923150146.31693-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] tools/uncoded_frame: use AV_BUFFERSINK_FLAG_PARAMS X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: o+YGqa/8IKQx --- tools/uncoded_frame.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/tools/uncoded_frame.c b/tools/uncoded_frame.c index a17d406417..39818963d0 100644 --- a/tools/uncoded_frame.c +++ b/tools/uncoded_frame.c @@ -153,6 +153,13 @@ int main(int argc, char **argv) for (; i < nb_streams; i++) streams[i].mux = streams[0].mux; + frame = av_frame_alloc(); + if (!frame) { + ret = AVERROR(ENOMEM); + av_log(NULL, AV_LOG_ERROR, "Could not allocate frame\n"); + goto fail; + } + /* Create output device streams */ for (i = 0; i < nb_streams; i++) { st = &streams[i]; @@ -161,29 +168,34 @@ int main(int argc, char **argv) av_log(NULL, AV_LOG_ERROR, "Failed to create output stream\n"); goto fail; } + + ret = av_buffersink_get_frame_flags(st->sink, frame, AV_BUFFERSINK_FLAG_PARAMS); + if (ret < 0) + goto fail; + st->stream->codecpar->codec_type = av_buffersink_get_type(st->sink); - st->stream->time_base = av_buffersink_get_time_base(st->sink); + st->stream->time_base = frame->time_base; switch (av_buffersink_get_type(st->sink)) { case AVMEDIA_TYPE_VIDEO: st->stream->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; st->stream->avg_frame_rate = st->stream-> r_frame_rate = av_buffersink_get_frame_rate(st->sink); - st->stream->codecpar->width = av_buffersink_get_w(st->sink); - st->stream->codecpar->height = av_buffersink_get_h(st->sink); - st->stream->codecpar->sample_aspect_ratio = av_buffersink_get_sample_aspect_ratio(st->sink); - st->stream->codecpar->format = av_buffersink_get_format(st->sink); + st->stream->codecpar->width = frame->width; + st->stream->codecpar->height = frame->height; + st->stream->codecpar->sample_aspect_ratio = frame->sample_aspect_ratio; + st->stream->codecpar->format = frame->format; break; case AVMEDIA_TYPE_AUDIO: - ret = av_buffersink_get_ch_layout(st->sink, &st->stream->codecpar->ch_layout); - if (ret < 0) - goto fail; - st->stream->codecpar->sample_rate = av_buffersink_get_sample_rate(st->sink); - st->stream->codecpar->format = av_buffersink_get_format(st->sink); + FFSWAP(AVChannelLayout, st->stream->codecpar->ch_layout, frame->ch_layout); + st->stream->codecpar->sample_rate = frame->sample_rate; + st->stream->codecpar->format = frame->format; st->stream->codecpar->codec_id = av_get_pcm_codec(st->stream->codecpar->format, -1); break; default: av_assert0(!"reached"); } + + av_frame_unref(frame); } /* Init output devices */ @@ -222,11 +234,6 @@ int main(int argc, char **argv) for (i = 0; i < nb_streams; i++) { st = &streams[i]; while (1) { - if (!frame && !(frame = av_frame_alloc())) { - ret = AVERROR(ENOMEM); - av_log(NULL, AV_LOG_ERROR, "Could not allocate frame\n"); - goto fail; - } ret = av_buffersink_get_frame_flags(st->sink, frame, AV_BUFFERSINK_FLAG_NO_REQUEST); if (ret < 0) {