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