get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1726712/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 1726712,
    "url": "http://patchwork.ozlabs.org/api/patches/1726712/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20230115131224.30751-13-volker.ruemelin@t-online.de/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20230115131224.30751-13-volker.ruemelin@t-online.de>",
    "list_archive_url": null,
    "date": "2023-01-15T13:12:20",
    "name": "[13/17] audio/mixeng: calculate number of output frames",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "97f524cadfb2c49ace53b6779cf7b139da402cee",
    "submitter": {
        "id": 83211,
        "url": "http://patchwork.ozlabs.org/api/people/83211/?format=api",
        "name": "Volker Rümelin",
        "email": "volker.ruemelin@t-online.de"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20230115131224.30751-13-volker.ruemelin@t-online.de/mbox/",
    "series": [
        {
            "id": 336714,
            "url": "http://patchwork.ozlabs.org/api/series/336714/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=336714",
            "date": "2023-01-15T13:08:29",
            "name": "[01/17] audio: change type of mix_buf and conv_buf",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/336714/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1726712/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1726712/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=<UNKNOWN>)",
        "Received": [
            "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4NvwZh48z7z23g1\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Jan 2023 00:13:32 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1pH2os-0004Uy-Km; Sun, 15 Jan 2023 08:13:06 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <volker.ruemelin@t-online.de>)\n id 1pH2oo-0004Jj-KY\n for qemu-devel@nongnu.org; Sun, 15 Jan 2023 08:13:02 -0500",
            "from mailout12.t-online.de ([194.25.134.22])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <volker.ruemelin@t-online.de>)\n id 1pH2om-0005Cn-PB\n for qemu-devel@nongnu.org; Sun, 15 Jan 2023 08:13:02 -0500",
            "from fwd84.dcpf.telekom.de (fwd84.aul.t-online.de [10.223.144.110])\n by mailout12.t-online.de (Postfix) with SMTP id 5C12A7E50;\n Sun, 15 Jan 2023 14:12:57 +0100 (CET)",
            "from linpower.localnet ([79.208.25.151]) by fwd84.t-online.de\n with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted)\n esmtp id 1pH2oe-3l2fmz0; Sun, 15 Jan 2023 14:12:52 +0100",
            "by linpower.localnet (Postfix, from userid 1000)\n id 7168A2006C5; Sun, 15 Jan 2023 14:12:24 +0100 (CET)"
        ],
        "From": "=?utf-8?q?Volker_R=C3=BCmelin?= <volker.ruemelin@t-online.de>",
        "To": "Gerd Hoffmann <kraxel@redhat.com>",
        "Cc": "qemu-devel@nongnu.org",
        "Subject": "[PATCH 13/17] audio/mixeng: calculate number of output frames",
        "Date": "Sun, 15 Jan 2023 14:12:20 +0100",
        "Message-Id": "<20230115131224.30751-13-volker.ruemelin@t-online.de>",
        "X-Mailer": "git-send-email 2.35.3",
        "In-Reply-To": "<61bd351f-0683-7f58-b746-66c9578a7cdc@t-online.de>",
        "References": "<61bd351f-0683-7f58-b746-66c9578a7cdc@t-online.de>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-TOI-MSGID": "1c13819f-08e0-4db1-80bf-5d980f602ba3",
        "Received-SPF": "none client-ip=194.25.134.22;\n envelope-from=volker.ruemelin@t-online.de; helo=mailout12.t-online.de",
        "X-Spam_score_int": "-25",
        "X-Spam_score": "-2.6",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.6 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01,\n SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "From: Volker Rümelin <vr_qemu@t-online.de>\n\nCalculate the exact number of audio output frames the resampling\ncode can generate from a given number of audio input frames.\nWhen upsampling, this function returns the maximum number of\noutput frames.\n\nThis function will later replace the audio_frontend_frames_in()\nfunction, which calculates the average number of output frames\nrounded down to the nearest integer.\n\nSigned-off-by: Volker Rümelin <vr_qemu@t-online.de>\n---\n audio/mixeng.c | 37 +++++++++++++++++++++++++++++++++++++\n audio/mixeng.h |  1 +\n 2 files changed, 38 insertions(+)",
    "diff": "diff --git a/audio/mixeng.c b/audio/mixeng.c\nindex 6bb3d54f77..92a3a1ac58 100644\n--- a/audio/mixeng.c\n+++ b/audio/mixeng.c\n@@ -440,6 +440,43 @@ void st_rate_stop (void *opaque)\n     g_free (opaque);\n }\n \n+/**\n+ * st_rate_frames_out() - returns the number of frames the resampling code\n+ * generates from frames_in frames\n+ *\n+ * @opaque: pointer to struct rate\n+ * @frames_in: number of frames\n+ */\n+uint32_t st_rate_frames_out(void *opaque, uint32_t frames_in)\n+{\n+    struct rate *rate = opaque;\n+    uint64_t opos_end, opos_delta;\n+    uint32_t ipos_end;\n+    uint32_t frames_out;\n+\n+    if (rate->opos_inc == 1ULL << 32) {\n+        return frames_in;\n+    }\n+\n+    /* no output frame without at least one input frame */\n+    if (!frames_in) {\n+        return 0;\n+    }\n+\n+    /* last frame read was at rate->ipos - 1 */\n+    ipos_end = rate->ipos - 1 + frames_in;\n+    opos_end = (uint64_t)ipos_end << 32;\n+\n+    /* last frame written was at rate->opos - rate->opos_inc */\n+    if (opos_end + rate->opos_inc <= rate->opos) {\n+        return 0;\n+    }\n+    opos_delta = opos_end - rate->opos + rate->opos_inc;\n+    frames_out = opos_delta / rate->opos_inc;\n+\n+    return opos_delta % rate->opos_inc ? frames_out : frames_out - 1;\n+}\n+\n /**\n  * st_rate_frames_in() - returns the number of frames needed to\n  * get frames_out frames after resampling\ndiff --git a/audio/mixeng.h b/audio/mixeng.h\nindex 64c1e231cc..f9de7cffeb 100644\n--- a/audio/mixeng.h\n+++ b/audio/mixeng.h\n@@ -52,6 +52,7 @@ void st_rate_flow(void *opaque, st_sample *ibuf, st_sample *obuf,\n void st_rate_flow_mix(void *opaque, st_sample *ibuf, st_sample *obuf,\n                       size_t *isamp, size_t *osamp);\n void st_rate_stop (void *opaque);\n+uint32_t st_rate_frames_out(void *opaque, uint32_t frames_in);\n uint32_t st_rate_frames_in(void *opaque, uint32_t frames_out);\n void mixeng_clear (struct st_sample *buf, int len);\n void mixeng_volume (struct st_sample *buf, int len, struct mixeng_volume *vol);\n",
    "prefixes": [
        "13/17"
    ]
}