<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Android系统攻城狮]]></title><description><![CDATA[CSDN博客专家，专注Android/Linux系统、多媒体技术分享！]]></description><link>https://blog.csdn.net/u010164190</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; u010164190]]></copyright><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_decoder_set_output_format调用流程与实战(三十五)]]></title><link>https://blog.csdn.net/u010164190/article/details/165589897</link><guid>https://blog.csdn.net/u010164190/article/details/165589897</guid><author>u010164190</author><pubDate>Tue, 22 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何把解码器得到的PCM格式写入输出上下文，并通过协商流程让下游获得固定的音频Caps。音频解码器通常先接收压缩数据，解码器子类从文件头、码流头或底层解码库中得到采样率、声道数和采样格式。这些信息还不能直接成为下游可用的输出Caps。解码器需要把转换成固定Caps，检查它是否符合src pad模板，再等待输出协商。负责设置解码器内部的输出音频信息。它不负责解码PCM，不直接分配输出Buffer，也不保证下游已经完成协商。fill:#333;important;important;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_options_set_quality调用流程与实战(三十四)]]></title><link>https://blog.csdn.net/u010164190/article/details/165589084</link><guid>https://blog.csdn.net/u010164190/article/details/165589084</guid><author>u010164190</author><pubDate>Tue, 22 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何把质量等级转换成滤波器配置，并通过创建重采样器验证不同质量参数对抽头数量和延迟的影响。GStreamer没有把质量等级直接保存成一个整数。调用者需要先准备，再由把质量等级展开成n_taps、cutoff、停止带衰减、过渡带宽和滤波器过采样等配置字段。这个函数只修改传入的，不创建，不执行音频转换，也不会自动更新已经存在的重采样器。后续需要把生成的配置交给或。fill:#333;important;important;fill:none;color:#333;color:#333;]]></description><category></category></item><item><title><![CDATA[Android17车载音频进阶之AudioReach播放Graph(一百七十)]]></title><link>https://blog.csdn.net/u010164190/article/details/164591661</link><guid>https://blog.csdn.net/u010164190/article/details/164591661</guid><author>u010164190</author><pubDate>Mon, 21 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[目的：理解AudioReach播放Graph如何连接数据输入、流处理、设备处理和硬件输出，以及播放链如何从拓扑配置进入运行状态。车载音乐播放需要把应用提交的音频数据送到扬声器。以PCM播放为例，整个过程可以表示为：fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;客户端PCM软件Endpoint流处理设备处理硬件Endpoint扬声器。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_get_max_latency调用流程与实战(三十三)]]></title><link>https://blog.csdn.net/u010164190/article/details/165434840</link><guid>https://blog.csdn.net/u010164190/article/details/165434840</guid><author>u010164190</author><pubDate>Mon, 21 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何根据滤波器抽头数量计算最大输入延迟，并通过实战把延迟Frame数转换为字节数和时间。在处理音频时会保存滤波历史。滤波器抽头越多，需要等待的输入Frame越多，输出就越晚。在流不连续、EOS或GAP处理场景中，上层需要知道这部分最大延迟，才能决定是否先Drain历史数据、如何计算滤波窗口，以及如何向上层报告延迟。只读取当前重采样器的n_taps，返回n_taps / 2。它不执行重采样，不Drain数据，不清理历史，也不发送事件。fill:#333;important;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_get_out_frames调用流程与实战(三十二)]]></title><link>https://blog.csdn.net/u010164190/article/details/165285491</link><guid>https://blog.csdn.net/u010164190/article/details/165285491</guid><author>u010164190</author><pubDate>Sun, 20 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何根据输入Frame数和重采样器内部状态计算当前可用的输出Frame数，并通过最小程序验证计算结果与实际重采样的关系。重采样器会保存滤波历史。输入Frame进入后，输出Frame数量不仅取决于输入输出采样率，还取决于滤波器抽头、历史样本、采样索引和相位。如果调用者直接按照采样率比例估算输出空间，可能得到错误的Buffer大小。只负责计算输出Frame数，不读取PCM数据，不写入输出Buffer，也不会推进重采样器状态。调用者可以先调用它，再按照输出BPF分配内存，最后调用。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_get_in_frames调用流程与实战(三十一)]]></title><link>https://blog.csdn.net/u010164190/article/details/165285243</link><guid>https://blog.csdn.net/u010164190/article/details/165285243</guid><author>u010164190</author><pubDate>Sun, 20 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何根据目标输出Frame数、当前采样率比例和相位，估算所需输入Frame，并通过最小程序验证输入Buffer规划与实际重采样的关系。在输出Buffer大小已经确定的场景中，调用者需要反向计算应该准备多少输入Frame。输入采样率和输出采样率存在比例关系，当前采样相位还会影响整数除法结果。直接使用采样率比例进行计算，可能出现少分配或多分配。只负责数量估算，不读取PCM数据，不分配Buffer，也不推进重采样器状态。返回值可以转换成输入字节数，再传给。fill:#333;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_resample调用流程与实战(三十一)]]></title><link>https://blog.csdn.net/u010164190/article/details/165243328</link><guid>https://blog.csdn.net/u010164190/article/details/165243328</guid><author>u010164190</author><pubDate>Sat, 19 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何接收输入Frame、生成输出Frame、维护滤波历史，并通过一个可运行的C程序验证重采样结果。需要同时处理输入指针、输入Frame数、输出指针和输出Frame数。它不会自动分配调用者的输出Buffer，也不会根据输入长度自动推导输出容量。负责执行真正的重采样。它会把输入数据复制到内部历史缓冲区，调用当前滤波器写入输出Buffer，然后更新已消费Frame、剩余历史和采样相位。这个函数是同步接口，不创建线程、不触发回调、不发送消息。输出Buffer必须由调用者提前分配，]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_update调用流程与实战(三十)]]></title><link>https://blog.csdn.net/u010164190/article/details/165243186</link><guid>https://blog.csdn.net/u010164190/article/details/165243186</guid><author>u010164190</author><pubDate>Sat, 19 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何更新重采样器的采样率和滤波配置，分析它为什么会保留运行状态，并通过最小程序验证更新前后的输出Frame数变化。创建后会保存输入输出采样率、滤波器参数、采样相位和历史Frame。实时音频场景中，采样率可能动态变化，滤波质量也可能需要调整。如果每次变化都销毁并重新创建对象，会丢失现有配置和处理上下文。负责在保留重采样器对象的前提下更新采样参数。它会重新计算有效采样率、相位增量和滤波器配置，但不会直接产生PCM输出，也不会自动清空样本历史。fill:#333;important;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_reset调用流程与实战(三十)]]></title><link>https://blog.csdn.net/u010164190/article/details/165072587</link><guid>https://blog.csdn.net/u010164190/article/details/165072587</guid><author>u010164190</author><pubDate>Fri, 18 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何清理重采样器中的历史Frame，分析它与的职责边界，并通过最小程序验证复位前后的状态变化。重采样器不是无状态函数。每次处理输入时，它都会保存部分样本，用于下一次滤波计算。当输入流发生Seek、Flush、时间戳不连续或EOS后重新开始时，旧流留下的样本不能继续参与新流处理，否则新旧数据可能跨越流边界混合。负责清理样本历史，让后续输入从新的滤波窗口开始处理。这个函数只重置样本处理状态，不重新选择重采样方法，不修改采样率，不重建滤波器，也不产生输出Frame。fill:#333;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_resampler_new调用流程与实战(二十九)]]></title><link>https://blog.csdn.net/u010164190/article/details/165072302</link><guid>https://blog.csdn.net/u010164190/article/details/165072302</guid><author>u010164190</author><pubDate>Fri, 18 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何根据采样方法、音频格式、声道数、输入输出采样率和配置选项创建，并通过一个可运行的C程序验证对象初始化、输出Frame计算和资源释放。PCM数据需要从一个采样率转换到另一个采样率时，调用者不能直接使用采样率比例完成全部准备工作。重采样还需要滤波器、采样相位、历史Frame和输入输出布局等状态。负责建立这些状态。它返回一个已经配置好的对象，后续由查询输出Frame数，再由处理实际PCM数据。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_supports_inplace调用流程与实战(二十八)]]></title><link>https://blog.csdn.net/u010164190/article/details/164970109</link><guid>https://blog.csdn.net/u010164190/article/details/164970109</guid><author>u010164190</author><pubDate>Thu, 17 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何读取的直通标志，分析这个标志的生成条件，以及它如何影响和音频聚合器的处理路径。在GStreamer的元素和音频聚合器中，转换器创建完成后还需要判断当前是否真的需要处理PCM数据。这个判断会影响是否启用直通模式，也会影响聚合器是否继续保留转换器。如果只看到输入和输出Caps相同，就直接认为可以直通，可能忽略声道映射、采样率、数据布局和端序转换。也不能替代这个判断，因为允许原地处理不等于完全不需要转换。只读取转换器内部的直通标志。它不检查输入Buffer内容，不执行PCM转换，不设置。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_supports_inplace调用流程与实战(二十七)]]></title><link>https://blog.csdn.net/u010164190/article/details/164969694</link><guid>https://blog.csdn.net/u010164190/article/details/164969694</guid><author>u010164190</author><pubDate>Thu, 17 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何判断是否支持原地转换，并分析它如何影响的Buffer处理方式。在元素完成Caps协商后，输入输出音频格式已经确定，也已经创建。此时还需要决定输入Buffer和输出Buffer能否使用同一块音频存储。原地转换表示输入和输出指向同一块音频数据，转换过程直接在这块存储上完成。它不等于不转换，端序交换就是一种需要修改数据、但可以原地完成的转换。返回转换器是否具备这种能力。它只读取转换器内部的in_place标志，不检查当前GstBuffer是否可写，不创建Buffer，也不执行PCM转换。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_get_out_frames调用流程与实战(二十六)]]></title><link>https://blog.csdn.net/u010164190/article/details/164813402</link><guid>https://blog.csdn.net/u010164190/article/details/164813402</guid><author>u010164190</author><pubDate>Wed, 16 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何从进入，分析输出Frame数的计算过程，并通过一个可运行的C程序验证查询结果与实际转换的关系。本文按GStreamer1.24.2源码说明。不同版本或重采样配置可能改变滤波器参数，但函数的分派边界保持不变。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;否是输入Frame数GstAudioConverter当前配置。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_get_in_frames调用流程与实战(二十五)]]></title><link>https://blog.csdn.net/u010164190/article/details/164811758</link><guid>https://blog.csdn.net/u010164190/article/details/164811758</guid><author>u010164190</author><pubDate>Wed, 16 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何根据目标输出Frame数量计算所需输入Frame数量，以及它为什么只是容量规划接口，而不是音频转换接口。可以同时处理音频格式、采样率、声道和布局转换。其中，格式转换和声道转换通常不会改变Frame数量，但采样率转换会改变输入与输出之间的Frame比例。48000Hz输入↓44100Hz输出如果下游需要441个输出Frame，调用者不能直接准备441个输入Frame。输入端实际需要的Frame数量由采样率比例和重采样器当前相位共同决定。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_update_config调用流程与实战(二十四)]]></title><link>https://blog.csdn.net/u010164190/article/details/164731472</link><guid>https://blog.csdn.net/u010164190/article/details/164731472</guid><author>u010164190</author><pubDate>Tue, 15 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何更新已经创建的，以及它为什么只能调整采样率和额外配置，不能替代重新创建转换器。创建后，会根据输入和输出的建立一条音频转换链。转换链可能包含格式解包、声道混合、重采样、量化和重新打包等步骤。运行过程中，输入或输出采样率可能发生变化。音频Element如果每次都销毁并重新创建，就无法继续复用当前转换器和其中的重采样器。输入采样率输出采样率额外配置参数它不会改变转换器的输入格式、输出格式、声道数量或内存布局。fill:#333;important;important;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_get_config调用流程与实战(二十三)]]></title><link>https://blog.csdn.net/u010164190/article/details/164730794</link><guid>https://blog.csdn.net/u010164190/article/details/164730794</guid><author>u010164190</author><pubDate>Tue, 15 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何读取当前保存的配置和采样率，以及为什么它返回的是借用的配置对象，而不是新的配置副本。GStreamer使用完成采样格式、采样率、声道布局和量化方式等音频转换。创建Converter时，调用者需要提供输入音频信息、输出音频信息以及可选的额外配置。Converter创建完成后，是一个不透明对象，应用不能直接访问它内部的配置字段。当采样率或转换选项发生变化时，应用需要一种正式接口确认Converter当前使用的配置。但它不会执行音频转换，也不会创建新的Converter。]]></description><category></category></item><item><title><![CDATA[Android17车载音频进阶之AudioReach Graph配置GKV/CKV/TKV(一百六十九)]]></title><link>https://blog.csdn.net/u010164190/article/details/164586674</link><guid>https://blog.csdn.net/u010164190/article/details/164586674</guid><author>u010164190</author><pubDate>Mon, 14 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解AudioReach中GKV、CKV、TKV分别解决什么问题，以及它们如何关联Graph、Calibration和Module配置。AudioReach使用Key Vector描述音频业务及其配置条件。一个Key Vector由一个或多个Key-Value组成。使用哪条播放Graph↓加载哪组Calibration↓给目标Module配置什么参数GKV：Graph Key Vector，选择完整Use Case对应的Graph。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_samples调用流程与实战(二十二)]]></title><link>https://blog.csdn.net/u010164190/article/details/164588637</link><guid>https://blog.csdn.net/u010164190/article/details/164588637</guid><author>u010164190</author><pubDate>Mon, 14 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何驱动完成一批音频Frame转换，以及它为什么只是执行既定转换链，而不是创建转换器或自动决定转换参数。采样格式不同采样率不同声道数不同声道布局不同交错方式不同这些差异通常由两份in_info ：输入音频格式out_info ：输出音频格式调用后，GStreamer会根据两份和可选配置创建一个不透明的对象。但转换器创建完成后，音频数据还没有真正被处理。转换器才会接收输入Frame，将结果写入输出内存。fill:#333;important;important;]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_reset调用流程与实战(二十一)]]></title><link>https://blog.csdn.net/u010164190/article/details/164454311</link><guid>https://blog.csdn.net/u010164190/article/details/164454311</guid><author>u010164190</author><pubDate>Sun, 13 Sep 2026 05:15:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何清除内部的转换历史，以及它为什么不会重新配置音频格式或重建转换器。用于连接输入音频格式和输出音频格式。创建转换器时，GStreamer会根据输入输出的解包↓格式转换↓声道混音↓重采样↓量化↓布局转换↓打包其中，重采样和量化可能跨越多次重采样器：滤波器历史、采样位置、可用Sample数量量化器：误差反馈历史当发生Seek、Flush、流重新开始或时间戳不连续时，下一段音频不应该继续继承上一段音频的历史。保留转换配置清除跨Buffer历史。]]></description><category></category></item><item><title><![CDATA[Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)]]></title><link>https://blog.csdn.net/u010164190/article/details/164454172</link><guid>https://blog.csdn.net/u010164190/article/details/164454172</guid><author>u010164190</author><pubDate>Sun, 13 Sep 2026 05:00:00 +0800</pubDate><description><![CDATA[本篇目的：理解如何根据输入、输出音频信息创建可复用的，以及它为什么只是建立转换方案，而不是立即处理音频数据。输入：S16、48000Hz、2声道、交错布局输出：F32、48000Hz、2声道、交错布局也可能同时发生采样率、声道数量或内存布局变化。如果每次处理Buffer时都重新判断这些差异，转换逻辑会分散在数据处理路径中，难以管理和优化。接收两个，分别描述输入和输出音频格式，然后创建一个不透明的对象。它会在创建阶段检查参数、保存配置，并预先组织后续需要使用的转换链。≠立即转换一块音频数据。]]></description><category></category></item></channel></rss>