<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>