Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1726714/?format=api
{ "id": 1726714, "url": "http://patchwork.ozlabs.org/api/patches/1726714/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20230115131224.30751-10-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-10-volker.ruemelin@t-online.de>", "list_archive_url": null, "date": "2023-01-15T13:12:17", "name": "[10/17] audio: wire up st_rate_frames_in()", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "ae8eb067d88e577b32f22932abd7aab1e460d308", "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-10-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/1726714/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1726714/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 4NvwZm26Sgz23gX\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Jan 2023 00:13:36 +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 1pH2ob-000450-Gf; Sun, 15 Jan 2023 08:12:49 -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 1pH2oa-00044m-JJ\n for qemu-devel@nongnu.org; Sun, 15 Jan 2023 08:12:48 -0500", "from mailout04.t-online.de ([194.25.134.18])\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 1pH2oY-0005Az-TJ\n for qemu-devel@nongnu.org; Sun, 15 Jan 2023 08:12:48 -0500", "from fwd76.dcpf.telekom.de (fwd76.aul.t-online.de [10.223.144.102])\n by mailout04.t-online.de (Postfix) with SMTP id 8639EFD46;\n Sun, 15 Jan 2023 14:12:45 +0100 (CET)", "from linpower.localnet ([79.208.25.151]) by fwd76.t-online.de\n with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted)\n esmtp id 1pH2oX-0pLTCT0; Sun, 15 Jan 2023 14:12:45 +0100", "by linpower.localnet (Postfix, from userid 1000)\n id 69A0020063D; 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 10/17] audio: wire up st_rate_frames_in()", "Date": "Sun, 15 Jan 2023 14:12:17 +0100", "Message-Id": "<20230115131224.30751-10-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": "c3004046-2014-4013-8ddd-4673521944f3", "Received-SPF": "none client-ip=194.25.134.18;\n envelope-from=volker.ruemelin@t-online.de; helo=mailout04.t-online.de", "X-Spam_score_int": "-18", "X-Spam_score": "-1.9", "X-Spam_bar": "-", "X-Spam_report": "(-1.9 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, 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\nWire up the st_rate_frames_in() function and replace\naudio_frontend_frames_out() to make audio packet length\ncalculation exact. When upsampling, it's still possible that\nthe audio frontends can't write the last audio frame. This will\nbe fixed later.\n\nSigned-off-by: Volker Rümelin <vr_qemu@t-online.de>\n---\n audio/audio.c | 43 ++++++++++++++++++-------------------------\n 1 file changed, 18 insertions(+), 25 deletions(-)", "diff": "diff --git a/audio/audio.c b/audio/audio.c\nindex 9c0855fb13..3d3b5e5b91 100644\n--- a/audio/audio.c\n+++ b/audio/audio.c\n@@ -699,8 +699,8 @@ static void audio_pcm_sw_resample_out(SWVoiceOut *sw,\n static size_t audio_pcm_sw_write(SWVoiceOut *sw, void *buf, size_t buf_len)\n {\n HWVoiceOut *hw = sw->hw;\n- size_t live, dead, hw_free;\n- size_t frames_in_max, total_in, total_out;\n+ size_t live, dead, hw_free, sw_max, fe_max;\n+ size_t frames_in_max, frames_out_max, total_in, total_out;\n \n live = sw->total_hw_samples_mixed;\n if (audio_bug(__func__, live > hw->mix_buf.size)) {\n@@ -718,17 +718,21 @@ static size_t audio_pcm_sw_write(SWVoiceOut *sw, void *buf, size_t buf_len)\n dead = hw->mix_buf.size - live;\n hw_free = audio_pcm_hw_get_free(hw);\n hw_free = hw_free > live ? hw_free - live : 0;\n- frames_in_max = ((int64_t)MIN(dead, hw_free) << 32) / sw->ratio;\n- frames_in_max = MIN(frames_in_max, buf_len / sw->info.bytes_per_frame);\n- if (frames_in_max) {\n- sw->conv(sw->resample_buf.buffer, buf, frames_in_max);\n+ frames_out_max = MIN(dead, hw_free);\n+ sw_max = st_rate_frames_in(sw->rate, frames_out_max);\n+ fe_max = MIN(buf_len / sw->info.bytes_per_frame, sw->resample_buf.size);\n+ frames_in_max = MIN(sw_max, fe_max);\n \n- if (!sw->hw->pcm_ops->volume_out) {\n- mixeng_volume(sw->resample_buf.buffer, frames_in_max, &sw->vol);\n- }\n+ if (!frames_in_max) {\n+ return 0;\n }\n \n- audio_pcm_sw_resample_out(sw, frames_in_max, MIN(dead, hw_free),\n+ sw->conv(sw->resample_buf.buffer, buf, frames_in_max);\n+ if (!sw->hw->pcm_ops->volume_out) {\n+ mixeng_volume(sw->resample_buf.buffer, frames_in_max, &sw->vol);\n+ }\n+\n+ audio_pcm_sw_resample_out(sw, frames_in_max, frames_out_max,\n &total_in, &total_out);\n \n sw->total_hw_samples_mixed += total_out;\n@@ -998,18 +1002,6 @@ static size_t audio_get_avail (SWVoiceIn *sw)\n return live;\n }\n \n-/**\n- * audio_frontend_frames_out() - returns the number of frames needed to\n- * get frames_out frames after resampling\n- *\n- * @sw: audio playback frontend\n- * @frames_out: number of frames\n- */\n-static size_t audio_frontend_frames_out(SWVoiceOut *sw, size_t frames_out)\n-{\n- return ((int64_t)frames_out << 32) / sw->ratio;\n-}\n-\n static size_t audio_get_free(SWVoiceOut *sw)\n {\n size_t live, dead;\n@@ -1029,8 +1021,8 @@ static size_t audio_get_free(SWVoiceOut *sw)\n dead = sw->hw->mix_buf.size - live;\n \n #ifdef DEBUG_OUT\n- dolog(\"%s: get_free live %zu dead %zu frontend frames %zu\\n\",\n- SW_NAME(sw), live, dead, audio_frontend_frames_out(sw, dead));\n+ dolog(\"%s: get_free live %zu dead %zu frontend frames %u\\n\",\n+ SW_NAME(sw), live, dead, st_rate_frames_in(sw->rate, dead));\n #endif\n \n return dead;\n@@ -1159,12 +1151,13 @@ static void audio_run_out (AudioState *s)\n size_t free;\n \n if (hw_free > sw->total_hw_samples_mixed) {\n- free = audio_frontend_frames_out(sw,\n+ free = st_rate_frames_in(sw->rate,\n MIN(sw_free, hw_free - sw->total_hw_samples_mixed));\n } else {\n free = 0;\n }\n if (free > 0) {\n+ free = MIN(free, sw->resample_buf.size);\n sw->callback.fn(sw->callback.opaque,\n free * sw->info.bytes_per_frame);\n }\n", "prefixes": [ "10/17" ] }