<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Aptos;
panose-1:2 11 0 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;
mso-fareast-language:EN-US;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="en-CH" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">I am encountering the following warning (from [Audio Toolbox][1]?) very often when opening an external microphone audio stream with libavformat on macOS (M2, Sonoma 14.5):<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">`CMIO_Unit_Converter_Audio.cpp:590:RebuildAudioConverter AudioConverterSetProperty(dbca) failed (1886547824)`<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This warning results on the codec id of the stream not being properly detected and it defaulting to the dummy AV_CODEC_ID_FIRST_AUDIO, which defaults to AV_CODEC_ID_PCM_S16LE, and results on distorted audio decoding the packet when this
is not the correct codec.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">You can observe the error with the following code (change the value of inputDevice to your device of choice), where I open and close and input audio stream 10 times in a row. Except for the internal macbook microphone, all the other ones
I tried error more times than succeed, some only succeeding on the first call. From what I can tell, all these microphones correct detected codec with this code is AV_CODEC_ID_PCM_F32LE.<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">=================<o:p></o:p></span></p>
<p class="MsoNormal">#include "libavdevice/avdevice.h"<o:p></o:p></p>
<p class="MsoNormal">#include "libavformat/avformat.h"<o:p></o:p></p>
<p class="MsoNormal">#include <stdio.h><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">const char inputDevice[] = ":0";<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">int main(int argc, char *argv[]) {<o:p></o:p></p>
<p class="MsoNormal"> const AVInputFormat *inputFormat;<o:p></o:p></p>
<p class="MsoNormal"> AVStream *inputStream = NULL;<o:p></o:p></p>
<p class="MsoNormal"> AVFormatContext *inputFormatContext = NULL;<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"> int i, j;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> // Initialize the input<o:p></o:p></p>
<p class="MsoNormal"> avdevice_register_all();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> inputFormat = av_find_input_format("avfoundation");<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> for (i = 0; i < 10; i++) {<o:p></o:p></p>
<p class="MsoNormal"> ret = avformat_open_input(&inputFormatContext, inputDevice, inputFormat,<o:p></o:p></p>
<p class="MsoNormal"> NULL);<o:p></o:p></p>
<p class="MsoNormal"> if (ret != 0) {<o:p></o:p></p>
<p class="MsoNormal"> fprintf(stderr, "Couldn't open input audio device");<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ret = avformat_find_stream_info(inputFormatContext, NULL);<o:p></o:p></p>
<p class="MsoNormal"> if (ret < 0) {<o:p></o:p></p>
<p class="MsoNormal"> fprintf(stderr, "Couldn't find stream information.");<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> for (j = 0; j < inputFormatContext->nb_streams; j++) {<o:p></o:p></p>
<p class="MsoNormal"> if (inputFormatContext->streams[j]->codecpar->codec_type ==<o:p></o:p></p>
<p class="MsoNormal"> AVMEDIA_TYPE_AUDIO) {<o:p></o:p></p>
<p class="MsoNormal"> inputStream = inputFormatContext->streams[j];<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> if (!inputStream) {<o:p></o:p></p>
<p class="MsoNormal"> fprintf(stderr, "Couldn't find a audio stream.");<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> printf("codecID: %s\n",<o:p></o:p></p>
<p class="MsoNormal"> inputStream->codecpar->codec_id == AV_CODEC_ID_FIRST_AUDIO<o:p></o:p></p>
<p class="MsoNormal"> ? "Incorrect"<o:p></o:p></p>
<p class="MsoNormal"> : "Correct");<o:p></o:p></p>
<p class="MsoNormal"> avformat_close_input(&inputFormatContext);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal">}<span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">=================<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Example output:<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal">codecID: Correct<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Correct<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Incorrect<o:p></o:p></p>
<p class="MsoNormal">codecID: Correct<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">How can avoid the warning? What am I doing wrong?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> [1]: https://developer.apple.com/documentation/audiotoolbox/audio_converter_services?language=objc<o:p></o:p></p>
</div>
</body>
</html>