<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi,</p>
    <p>I'm by no means an expert, but just a remark - 8kHz is somewhat
      low quality, so maybe that's why the audio sounds awful?</p>
    <p>Does it sound better when you try resampling it manually via
      something like `ffmpeg -i input.wav -ar 8000 output.wav`?</p>
    <p>Best,<br>
      Paul<br>
    </p>
    <div class="moz-cite-prefix"> Le 26/08/2021 à 20:55, Baumgarten,
      Julien a écrit :<br>
    </div>
    <blockquote type="cite"
cite="mid:CAKtQBKkQYDpr3mKOW-bnHHE8YoT4AFoctWdydMfvW-j0=RzepA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div>Hi guys,</div>
        <div><br>
          I made a previous post in order to get some help in
          converting + resampling 16bit PCM (16k HZ) samples to A-law
          PCM (8k HZ) samples.</div>
        <div>I succeeded in converting with another library than ffmpeg
          but it works.<br>
          I am focusing now on the resampling.</div>
        <div><br>
        </div>
        <div>I tried the following source code:</div>
        <div><br>
        </div>
        <div>
          <pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"JetBrains Mono",monospace"><span style="color:rgb(185,188,209)">int64_t </span>src_ch_layout = <span style="color:rgb(144,139,37)">AV_CH_LAYOUT_MONO</span><span style="color:rgb(204,120,50)">, </span>dst_ch_layout = <span style="color:rgb(144,139,37)">AV_CH_LAYOUT_MONO</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               int </span>src_rate = <span style="color:rgb(104,151,187)">16000</span><span style="color:rgb(204,120,50)">, </span>dst_rate = <span style="color:rgb(104,151,187)">8000</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(185,188,209)">uint8_t </span>**src_data = <span style="color:rgb(144,139,37)">NULL</span><span style="color:rgb(204,120,50)">, </span>**dst_data = <span style="color:rgb(144,139,37)">NULL</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               int </span>src_nb_channels = <span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">, </span>dst_nb_channels = <span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               int </span>src_linesize = <span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">, </span>dst_linesize = <span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               int </span>src_nb_samples = <span style="color:rgb(204,120,50)">this</span>-><span style="color:rgb(147,115,165)">_nbSamplesReceived</span><span style="color:rgb(204,120,50)">, </span>dst_nb_samples<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               enum </span><span style="color:rgb(181,182,227)">AVSampleFormat </span>src_sample_fmt = <span style="color:rgb(152,118,170);font-style:italic">AV_SAMPLE_FMT_U8</span><span style="color:rgb(204,120,50)">, </span>dst_sample_fmt = <span style="color:rgb(152,118,170);font-style:italic">AV_SAMPLE_FMT_U8</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               const char </span>*dst_filename = <span style="color:rgb(106,135,89)">"/tmp/resample.raw"</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(185,188,209)">FILE </span>*dst_file<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               int </span>dst_bufsize<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               const char </span>*fmt<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               struct </span><span style="color:rgb(181,182,227)">SwrContext </span>*swr_ctx<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               int </span>ret<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">
</span><span style="color:rgb(204,120,50)">               </span>dst_file = fopen(dst_filename<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"wb"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(!dst_file) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Could not open destination file %s</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span><span style="color:rgb(204,120,50)">, </span>dst_filename)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">                  </span>exit(<span style="color:rgb(104,151,187)">1</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>}

               swr_ctx = swr_alloc()<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(!swr_ctx) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Could not allocate resampler context</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">                  </span>ret = <span style="color:rgb(144,139,37)">AVERROR</span>(ENOMEM)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(128,128,128)">//                goto end;
</span><span style="color:rgb(128,128,128)">               </span>}

               <span style="color:rgb(128,128,128)">/* set in options */
</span><span style="color:rgb(128,128,128)">               </span>av_opt_set_int(swr_ctx<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"in_channel_layout"</span><span style="color:rgb(204,120,50)">,    </span>src_ch_layout<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>av_opt_set_int(swr_ctx<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"in_sample_rate"</span><span style="color:rgb(204,120,50)">,       </span>src_rate<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>av_opt_set_sample_fmt(swr_ctx<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"in_sample_fmt"</span><span style="color:rgb(204,120,50)">, </span>src_sample_fmt<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(128,128,128)">/* set out options */
</span><span style="color:rgb(128,128,128)">               </span>av_opt_set_int(swr_ctx<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"out_channel_layout"</span><span style="color:rgb(204,120,50)">,    </span>dst_ch_layout<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>av_opt_set_int(swr_ctx<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"out_sample_rate"</span><span style="color:rgb(204,120,50)">,       </span>dst_rate<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>av_opt_set_sample_fmt(swr_ctx<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"out_sample_fmt"</span><span style="color:rgb(204,120,50)">, </span>dst_sample_fmt<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(128,128,128)">/* initialize the resampling context */
</span><span style="color:rgb(128,128,128)">               </span><span style="color:rgb(204,120,50)">if </span>((ret = swr_init(swr_ctx)) < <span style="color:rgb(104,151,187)">0</span>) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Failed to initialize the resampling context</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(128,128,128)">//                goto end;
</span><span style="color:rgb(128,128,128)">               </span>}

               <span style="color:rgb(128,128,128)">/* Define nb channels */
</span><span style="color:rgb(128,128,128)">               </span>src_nb_channels = av_get_channel_layout_nb_channels(src_ch_layout)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>dst_nb_channels = av_get_channel_layout_nb_channels(dst_ch_layout)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(128,128,128)">// Define ouput nb samples
</span><span style="color:rgb(128,128,128)">               </span>dst_nb_samples = av_rescale_rnd(src_nb_samples<span style="color:rgb(204,120,50)">, </span>dst_rate<span style="color:rgb(204,120,50)">, </span>src_rate<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(152,118,170);font-style:italic">AV_ROUND_UP</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>ret = av_samples_alloc_array_and_samples(&src_data<span style="color:rgb(204,120,50)">, </span>&src_linesize<span style="color:rgb(204,120,50)">, </span>src_nb_channels<span style="color:rgb(204,120,50)">, </span>src_nb_samples<span style="color:rgb(204,120,50)">, </span>src_sample_fmt<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(ret < <span style="color:rgb(104,151,187)">0</span>) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Could not allocate source samples</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(128,128,128)">//                goto end;
</span><span style="color:rgb(128,128,128)">               </span>}
               ret = av_samples_alloc_array_and_samples(&dst_data<span style="color:rgb(204,120,50)">, </span>&dst_linesize<span style="color:rgb(204,120,50)">, </span>dst_nb_channels<span style="color:rgb(204,120,50)">, </span>dst_nb_samples<span style="color:rgb(204,120,50)">, </span>dst_sample_fmt<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(ret < <span style="color:rgb(104,151,187)">0</span>) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Could not allocate destination samples</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(128,128,128)">//                goto end;
</span><span style="color:rgb(128,128,128)">               </span>}

               <span style="color:rgb(128,128,128)">// Fill source samples buffer with A-law samples
</span><span style="color:rgb(128,128,128)">               </span><span style="color:rgb(204,120,50)">unsigned int </span>i = <span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(181,182,227)">std</span>::for_each(<span style="color:rgb(204,120,50)">this</span>-><span style="color:rgb(147,115,165)">_test1</span>.begin()<span style="color:rgb(204,120,50)">, this</span>-><span style="color:rgb(147,115,165)">_test1</span>.end()<span style="color:rgb(204,120,50)">, </span>[<span style="color:rgb(204,120,50)">this, </span>&src_data<span style="color:rgb(204,120,50)">, </span>&i](<span style="color:rgb(204,120,50)">const </span><span style="color:rgb(185,188,209)">uint8_t </span>&data) {
                  src_data[<span style="color:rgb(104,151,187)">0</span>][i++] = data<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>})<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(128,128,128)">
</span><span style="color:rgb(128,128,128)">               /* convert to destination format */
</span><span style="color:rgb(128,128,128)">               </span>ret = swr_convert(swr_ctx<span style="color:rgb(204,120,50)">, </span>dst_data<span style="color:rgb(204,120,50)">, </span>dst_nb_samples<span style="color:rgb(204,120,50)">, </span>(<span style="color:rgb(204,120,50)">const </span><span style="color:rgb(185,188,209)">uint8_t </span>**)src_data<span style="color:rgb(204,120,50)">, </span>src_nb_samples)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(ret < <span style="color:rgb(104,151,187)">0</span>) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Error while converting</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">                  </span><span style="color:rgb(128,128,128)">// </span><span style="color:rgb(168,192,35);font-style:italic">TODO: handle error
</span><span style="color:rgb(168,192,35);font-style:italic">               </span>}
               dst_bufsize = av_samples_get_buffer_size(&dst_linesize<span style="color:rgb(204,120,50)">, </span>dst_nb_channels<span style="color:rgb(204,120,50)">, </span>ret<span style="color:rgb(204,120,50)">, </span>dst_sample_fmt<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(dst_bufsize < <span style="color:rgb(104,151,187)">0</span>) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Could not get sample buffer size</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">                  </span><span style="color:rgb(128,128,128)">// </span><span style="color:rgb(168,192,35);font-style:italic">TODO: handle error
</span><span style="color:rgb(168,192,35);font-style:italic">               </span>}
               <span style="color:rgb(128,128,128)">// Write resampled data into file
</span><span style="color:rgb(128,128,128)">               </span>fwrite(dst_data[<span style="color:rgb(104,151,187)">0</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span>dst_bufsize<span style="color:rgb(204,120,50)">, </span>dst_file)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>((ret = get_format_from_sample_fmt(&fmt<span style="color:rgb(204,120,50)">, </span>dst_sample_fmt)) < <span style="color:rgb(104,151,187)">0</span>) {
                  fprintf(<span style="color:rgb(144,139,37)">stderr</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(106,135,89)">"Resampling failed.</span><span style="color:rgb(204,120,50)">\n</span><span style="color:rgb(106,135,89)">"</span>)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">                  </span><span style="color:rgb(128,128,128)">// </span><span style="color:rgb(168,192,35);font-style:italic">TODO: handle error
</span><span style="color:rgb(168,192,35);font-style:italic">               </span>}
               <span style="color:rgb(128,128,128)">// Close out file
</span><span style="color:rgb(128,128,128)">               </span>fclose(dst_file)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">
</span><span style="color:rgb(204,120,50)">               </span><span style="color:rgb(128,128,128)">// Release memory
</span><span style="color:rgb(128,128,128)">               </span><span style="color:rgb(204,120,50)">if </span>(src_data) av_freep(&src_data[<span style="color:rgb(104,151,187)">0</span>])<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>av_freep(&src_data)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               if </span>(dst_data) av_freep(&dst_data[<span style="color:rgb(104,151,187)">0</span>])<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>av_freep(&dst_data)<span style="color:rgb(204,120,50)">;
</span><span style="color:rgb(204,120,50)">               </span>swr_free(&swr_ctx)<span style="color:rgb(204,120,50)">;</span></pre>
        </div>
        <div>When dst_rate is equal to src_rate, the output is OK
          without any noise.</div>
        <div>However, when dst_rate is lower than src_rate, the audio is
          awful with too much noise.</div>
        <div><br>
        </div>
        <div>Did I miss something or am I doing something wrong?<br>
          <br>
          Yours sincerely,</div>
        <div>Julien BAUMGARTEN</div>
        <div><br>
        </div>
        <br clear="all">
        <div>
          <div dir="ltr" class="gmail_signature"
            data-smartmail="gmail_signature">
            <div dir="ltr">
              <div>
                <table
style="vertical-align:-webkit-baseline-middle;font-size:medium;font-family:Arial"
                  cellspacing="0" cellpadding="0">
                  <tbody>
                    <tr>
                      <td>
                        <table
                          style="vertical-align:-webkit-baseline-middle;font-family:Arial"
                          cellspacing="0" cellpadding="0">
                          <tbody>
                            <tr>
                              <td style="vertical-align:middle"
                                width="150"><img alt="avatar"
src="https://viadialog-signature-assets.s3-eu-west-1.amazonaws.com/avatars/avatar-julien-baumgarten.jfif"
style="max-width:130px;border-color:#5e86c3;border-radius:50% 50% 50%
                                  50%;border-style:solid;border-width:4px"
                                  moz-do-not-send="true" width="130"> <a
                                  rel="noopener noreferrer"
href="https://www.viadialog.com/?utm_source=signature&utm_medium=email&utm_campaign=email_signature_logo"
                                  color="#000000"
                                  style="color:rgb(102,102,102);font-size:12px"
                                  target="_blank" moz-do-not-send="true"><img
                                    alt="viadialog"
src="https://viadialog-signature-assets.s3-eu-west-1.amazonaws.com/shared/viadialog-logo-color.png"
style="margin-top:5px;max-width:130px" moz-do-not-send="true"
                                    width="130"></a></td>
                              <td width="30"><br>
                              </td>
                              <td color="#5e86c3"
style="width:3px;background-color:#5e86c3;border-bottom:none;border-radius:1.5px"
                                width="3"><br>
                              </td>
                              <td width="30"><br>
                              </td>
                              <td style="vertical-align:bottom">
                                <h3 color="#000000"
                                  style="margin:0;font-size:18px;color:#000">Julien BAUMGARTEN</h3>
                                <p color="#000000"
style="margin:0;color:#eb651d;font-size:15px;line-height:22px;margin-bottom:15px">Chef
                                  de Projet Développement</p>
                                <a href="tel:0177453094" color="#000000"
style="color:rgb(102,102,102);font-size:12px" target="_blank"
                                  moz-do-not-send="true">
                                  <p color="#000000"
                                    style="margin:0px;font-size:14px;line-height:22px">01
                                    77 45 30 94</p>
                                </a><a
                                  href="mailto:julien.baumgarten@viadialog.com"
                                  color="#000000"
                                  style="color:rgb(102,102,102);font-size:12px"
                                  target="_blank" moz-do-not-send="true">
                                  <p color="#000000"
                                    style="margin:0px;font-size:14px;line-height:22px">julien.baumgarten@viadialog.com</p>
                                </a><a rel="noopener noreferrer"
href="https://www.viadialog.com/?utm_source=signature&utm_medium=email&utm_campaign=email_signature_link"
                                  color="#000000"
                                  style="color:rgb(102,102,102);font-size:12px"
                                  target="_blank" moz-do-not-send="true">
                                  <p color="#000000"
                                    style="margin:0px;font-size:14px;line-height:22px">www.viadialog.com</p>
                                </a>
                                <p color="#000000"
style="margin:0px;color:rgb(102,102,102);font-size:14px;line-height:22px">152
                                  Boulevard Pereire, 75017 Paris</p>
                                <table
style="vertical-align:-webkit-baseline-middle;font-family:Arial;width:100%"
                                  cellspacing="0" cellpadding="0">
                                  <tbody>
                                    <tr>
                                      <td style="vertical-align:top">
                                        <table
style="vertical-align:-webkit-baseline-middle;font-family:Arial;display:inline-block"
                                          cellspacing="0"
                                          cellpadding="0">
                                          <tbody>
                                            <tr style="text-align:right">
                                              <td><a rel="noopener
                                                  noreferrer"
                                                  href="https://www.facebook.com/viadialog"
style="display:inline-block;padding:0" target="_blank"
                                                  moz-do-not-send="true"><img
src="https://viadialog-signature-assets.s3-eu-west-1.amazonaws.com/shared/facebook.png"
                                                    alt="facebook"
                                                    style="max-width:135px;display:block"
moz-do-not-send="true" height="24"></a></td>
                                              <td width="5"><br>
                                              </td>
                                              <td><a rel="noopener
                                                  noreferrer"
                                                  href="https://twitter.com/viadialog"
style="display:inline-block;padding:0" target="_blank"
                                                  moz-do-not-send="true"><img
src="https://viadialog-signature-assets.s3-eu-west-1.amazonaws.com/shared/twitter.png"
                                                    alt="twitter"
                                                    style="max-width:135px;display:block"
moz-do-not-send="true" height="24"></a></td>
                                              <td width="5"><br>
                                              </td>
                                              <td><a rel="noopener
                                                  noreferrer"
                                                  href="https://www.linkedin.com/company/viatelecom"
style="display:inline-block;padding:0" target="_blank"
                                                  moz-do-not-send="true"><img
src="https://viadialog-signature-assets.s3-eu-west-1.amazonaws.com/shared/linkedin.png"
                                                    alt="linkedin"
                                                    style="max-width:135px;display:block"
moz-do-not-send="true" height="24"></a></td>
                                              <td width="5"><br>
                                              </td>
                                            </tr>
                                          </tbody>
                                        </table>
                                      </td>
                                    </tr>
                                  </tbody>
                                </table>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </td>
                    </tr>
                    <tr>
                      <td height="20"><br>
                      </td>
                    </tr>
                    <tr>
                      <td><span style="display:block"><a rel="noopener
                            noreferrer"
href="https://www.viadialog.com/?utm_source=signature&utm_medium=email&utm_campaign=email_signature_banner"
style="border-width:initial;border-style:none;border-color:initial;display:inline-block;background-color:transparent;color:rgb(255,255,255);font-weight:700;text-align:center;line-height:1;font-size:12px;border-radius:3px"
                            target="_blank" moz-do-not-send="true"><img
src="https://viadialog-signature-assets.s3-eu-west-1.amazonaws.com/shared/banner-viadialog.png"
                              style="max-width:728px"
                              moz-do-not-send="true"></a></span></td>
                    </tr>
                    <tr>
                      <td height="20"><br>
                      </td>
                    </tr>
                    <tr>
                      <td><span
style="display:block;font-size:8px;color:rgb(136,136,136);padding-top:5px">This
                          email message (including its attachments) is
                          confidential and may contain privileged
                          information and is intended solely for the use
                          of the individual and/or entity to whom it is
                          addressed. If you are not the intended
                          recipient of this e-mail you may not share,
                          distribute or copy this e-mail (including its
                          attachments), or any part thereof. If this
                          e-mail is received in error, please notify the
                          sender immediately by return e-mail and make
                          sure that this e-mail (including its
                          attachments), and all copies thereof, are
                          immediately deleted from your system. Please
                          further note that when you communicate with us
                          via email or visit our website we process your
                          personal data. See our privacy policy for more
                          information about how we process it: <a
                            href="https://www.viadialog.com/mentions-legales"
                            target="_blank" moz-do-not-send="true">https://www.viadialog.com/mentions-legales</a></span></td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
Libav-user mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a>
<a class="moz-txt-link-freetext" href="https://ffmpeg.org/mailman/listinfo/libav-user">https://ffmpeg.org/mailman/listinfo/libav-user</a>

To unsubscribe, visit link above, or email
<a class="moz-txt-link-abbreviated" href="mailto:libav-user-request@ffmpeg.org">libav-user-request@ffmpeg.org</a> with subject "unsubscribe".
</pre>
    </blockquote>
  </body>
</html>