<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=46&amp;t=20276&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-02-26T23:09:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=20276&amp;mode</id>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2018-02-26T23:09:39+01:00</updated>
<published>2018-02-26T23:09:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204632#p204632</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204632#p204632"/>
<title type="html"><![CDATA[Re: Programowa kompresja JPEG na STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204632#p204632"><![CDATA[
Witam, po małej przerwie powracam z tematem, trochę doczytałem i już w miarę ogarniam kodowanie Huffmana, CubeMx musiałem z aktualizować miałem jakąś starszą wersje w nowej faktycznie jest lib dla Jpega, choć do końca nie rozwiązuje to mojego problemu ponieważ chcę przesyłać obraz tylko dla luminancji, fdct i kwantyzacje już mam dla bloku 8*8 pikseli wiec do szczęścia tylko lub aż kodowanie, nie potrafię rozgryźć funkcji dla zakodowania wartości huffmanem, poniżej jedna z takich funkcji gdzieś wyszukanych z netu, może ktoś będzie w stanie mi trochę to wytłumaczyć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> [syntax=c]#define PUTBITS    <br />{    \<br />    bits_in_next_word = (INT16) (bitindex + numbits - 32);    \<br />    if (bits_in_next_word &lt; 0)    \<br />    {    \<br />        lcode = (lcode &lt;&lt; numbits) | data;    \<br />        bitindex += numbits;    \<br />    }    \<br />    else    \<br />    {    \<br />        lcode = (lcode &lt;&lt; (32 - bitindex)) | (data &gt;&gt; bits_in_next_word);    \<br />        if ((*output_ptr++ = (UINT8)(lcode &gt;&gt; 24)) == 0xff)    \<br />            *output_ptr++ = 0;    \<br />        if ((*output_ptr++ = (UINT8)(lcode &gt;&gt; 16)) == 0xff)    \<br />            *output_ptr++ = 0;    \<br />        if ((*output_ptr++ = (UINT8)(lcode &gt;&gt; 8)) == 0xff)    \<br />            *output_ptr++ = 0;    \<br />        if ((*output_ptr++ = (UINT8) lcode) == 0xff)    \<br />            *output_ptr++ = 0;    \<br />        lcode = data;    \<br />        bitindex = bits_in_next_word;    \<br />    }    \<br />}<br /><br />UINT8* huffman (JPEG_ENCODER_STRUCTURE *jpeg_encoder_structure, UINT16 component, UINT8 *output_ptr)<br />{<br />    UINT16 i;<br />    UINT16 *DcCodeTable, *DcSizeTable, *AcCodeTable, *AcSizeTable;<br /><br />    INT16 *Temp_Ptr, Coeff, LastDc;<br />    UINT16 AbsCoeff, HuffCode, HuffSize, RunLength=0, DataSize=0, index;<br /><br />    INT16 bits_in_next_word;<br />    UINT16 numbits;<br />    UINT32 data;<br /><br />    Temp_Ptr = Temp;<br />    Coeff = *Temp_Ptr++;<br /><br />    if (component == 1)<br />    {<br />        DcCodeTable = luminance_dc_code_table;<br />        DcSizeTable = luminance_dc_size_table;<br />        AcCodeTable = luminance_ac_code_table;<br />        AcSizeTable = luminance_ac_size_table;<br /><br />        LastDc = jpeg_encoder_structure-&gt;ldc1;<br />        jpeg_encoder_structure-&gt;ldc1 = Coeff;<br />    }<br />    else<br />    {<br />        DcCodeTable = chrominance_dc_code_table;<br />        DcSizeTable = chrominance_dc_size_table;<br />        AcCodeTable = chrominance_ac_code_table;<br />        AcSizeTable = chrominance_ac_size_table;<br /><br />        if (component == 2)<br />        {<br />            LastDc = jpeg_encoder_structure-&gt;ldc2;<br />            jpeg_encoder_structure-&gt;ldc2 = Coeff;<br />        }<br />        else<br />        {<br />            LastDc = jpeg_encoder_structure-&gt;ldc3;<br />            jpeg_encoder_structure-&gt;ldc3 = Coeff;<br />        }<br />    }<br /><br />    Coeff -= LastDc;<br /><br />    AbsCoeff = (Coeff &lt; 0) ? -Coeff-- : Coeff;<br /><br />    while (AbsCoeff != 0)<br />    {<br />        AbsCoeff &gt;&gt;= 1;<br />        DataSize++;<br />    }<br /><br />    HuffCode = DcCodeTable &#91;DataSize&#93;;<br />    HuffSize = DcSizeTable &#91;DataSize&#93;;<br /><br /><br />    Coeff &amp;= (1 &lt;&lt; DataSize) - 1;<br />    data = (HuffCode &lt;&lt; DataSize) | Coeff;<br />    numbits = HuffSize + DataSize;<br /><br />    PUTBITS<br />// putbits_asm ((int)numbits, (int)data, &amp;output_ptr, &amp;lcode, &amp;bitindex);<br /><br />    for (i=63; i&gt;0; i--)<br />    {<br />        if ((Coeff = *Temp_Ptr++) != 0)<br />        {<br />            while (RunLength &gt; 15)<br />            {<br />                RunLength -= 16;<br />                data = AcCodeTable &#91;161&#93;;<br />                numbits = AcSizeTable &#91;161&#93;;<br />                PUTBITS<br />// putbits_asm ((int)numbits, (int)data, &amp;output_ptr, &amp;lcode, &amp;bitindex);<br />            }<br /><br />            AbsCoeff = (Coeff &lt; 0) ? -Coeff-- : Coeff;<br /><br />            if (AbsCoeff &gt;&gt; 8 == 0)<br />                DataSize = bitsize &#91;AbsCoeff&#93;;<br />            else<br />                DataSize = bitsize &#91;AbsCoeff &gt;&gt; 8&#93; + 8;<br /><br />            index = RunLength * 10 + DataSize;<br />            HuffCode = AcCodeTable &#91;index&#93;;<br />            HuffSize = AcSizeTable &#91;index&#93;;<br /><br />            Coeff &amp;= (1 &lt;&lt; DataSize) - 1;<br />            data = (HuffCode &lt;&lt; DataSize) | Coeff;<br />            numbits = HuffSize + DataSize;<br /><br />            PUTBITS<br />// putbits_asm ((int)numbits, (int)data, &amp;output_ptr, &amp;lcode, &amp;bitindex);<br />            RunLength = 0;<br />        }<br />        else<br />            RunLength++;<br />    }<br /><br />    if (RunLength != 0)<br />    {<br />        data = AcCodeTable &#91;0&#93;;<br />        numbits = AcSizeTable &#91;0&#93;;<br />        PUTBITS<br />// putbits_asm ((int)numbits, (int)data, &amp;output_ptr, &amp;lcode, &amp;bitindex);<br />    }<br />    return output_ptr;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 26 lut 2018, o 23:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2018-02-22T21:23:25+01:00</updated>
<published>2018-02-22T21:23:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204390#p204390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204390#p204390"/>
<title type="html"><![CDATA[Re: Programowa kompresja JPEG na STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204390#p204390"><![CDATA[
Z tym CubeMx  to mnie trochę zaskoczyłeś, a czy możesz mi powiedzieć gdzie to ustawie żeby wygenerować kod. Kolego robertomic dziękuje za artykuły poczytam może coś z tego zrozumiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 22 lut 2018, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robertomic]]></name></author>
<updated>2018-02-22T17:49:03+01:00</updated>
<published>2018-02-22T17:49:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204366#p204366</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204366#p204366"/>
<title type="html"><![CDATA[Re: Programowa kompresja JPEG na STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204366#p204366"><![CDATA[
<a href="https://pl.wikipedia.org/wiki/Kodowanie_Huffmana"  class="postlink">Kodowanie Huffmana</a><br /><a href="http://eduinf.waw.pl/inf/alg/001_search/0121a.php#P4"  class="postlink">Kodowanie Huffmana eduinf.waw.pl</a><br /><a href="http://www.algorytm.org/algorytmy-kompresji/kody-huffmanuffmana"  class="postlink">Kody Huffmana algorytm.org</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13232">robertomic</a> — 22 lut 2018, o 17:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2018-02-21T23:38:53+01:00</updated>
<published>2018-02-21T23:38:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204351#p204351</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204351#p204351"/>
<title type="html"><![CDATA[Programowa kompresja JPEG na STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20276&amp;p=204351#p204351"><![CDATA[
Witam, ja z takim pytaniem czy ktoś z szanownych kolegów miał już do czynienia z  kompresją  JPEG jestem na etapie pisania <br />biblioteki dla stm32f4, lecz nie mogę załapać kodowania Huffmana może ktoś będzie mi to wstanie jakoś trywialnie wytłumaczyć. <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 21 lut 2018, o 23:38</p><hr />
]]></content>
</entry>
</feed>