<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.elphel.com/index.php?action=history&amp;feed=atom&amp;title=User%3ADimitrios</id>
	<title>User:Dimitrios - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.elphel.com/index.php?action=history&amp;feed=atom&amp;title=User%3ADimitrios"/>
	<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=User:Dimitrios&amp;action=history"/>
	<updated>2026-08-01T10:40:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=User:Dimitrios&amp;diff=10196&amp;oldid=prev</id>
		<title>Dimitrios: Added link to tclepeg in github</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=User:Dimitrios&amp;diff=10196&amp;oldid=prev"/>
		<updated>2012-01-05T14:51:13Z</updated>

		<summary type="html">&lt;p&gt;Added link to tclepeg in github&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:51, 5 January 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l87&quot;&gt;Line 87:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 87:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    return 0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    return 0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;There is also a &#039;&#039;&#039;tclepeg&#039;&#039;&#039; package allowing the use of the epeg library from TCL, for the Linux i386 platform [http://github.com/dzach/tclepeg]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dimitrios</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=User:Dimitrios&amp;diff=10195&amp;oldid=prev</id>
		<title>Dimitrios: Created page with &quot;Some notes that could be useful:  =Recording and live preview=  Is there a way to record and, at the same time, watch a reduced resolution version in a cheap tablet or portable P...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=User:Dimitrios&amp;diff=10195&amp;oldid=prev"/>
		<updated>2011-12-18T02:25:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Some notes that could be useful:  =Recording and live preview=  Is there a way to record and, at the same time, watch a reduced resolution version in a cheap tablet or portable P...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Some notes that could be useful:&lt;br /&gt;
&lt;br /&gt;
=Recording and live preview=&lt;br /&gt;
&lt;br /&gt;
Is there a way to record and, at the same time, watch a reduced resolution version in a cheap tablet or portable PC / notebook?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;epeg&amp;#039;&amp;#039;&amp;#039; is a super-fast library for resizing jpegs. It offers an improvement of at least an order of magnitude over other known libraries like ImageMagick. I just compiled a command line version and these are the results:&lt;br /&gt;
&lt;br /&gt;
 $ time ./resize test.jpeg test.jpg&lt;br /&gt;
 &lt;br /&gt;
 real    0m0.063s&lt;br /&gt;
 user    0m0.060s&lt;br /&gt;
 sys     0m0.000s&lt;br /&gt;
 &lt;br /&gt;
 $ time convert -resize 426x640 test.jpeg test.jpg&lt;br /&gt;
 &lt;br /&gt;
 real    0m1.158s&lt;br /&gt;
 user    0m1.048s&lt;br /&gt;
 sys     0m0.052s&lt;br /&gt;
&lt;br /&gt;
The improvement in the above case 18 times faster.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;resize&amp;#039;&amp;#039;&amp;#039; is a little C program crafted for resizing a 2592x3888 image to a 426x640 one using the epeg library. Convert is ImageMagick&amp;#039;s convert utility. It took resize &amp;#039;&amp;#039;&amp;#039;63 msec&amp;#039;&amp;#039;&amp;#039; against &amp;#039;&amp;#039;&amp;#039;1158 msec&amp;#039;&amp;#039;&amp;#039; for ImageMagick.&lt;br /&gt;
&lt;br /&gt;
If this functionality is included in the camera it could do jpeg resize in-memory on-the-fly and spare even more by avoiding the read/write to disk that is involved in the above test.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;epeg&amp;#039;&amp;#039;&amp;#039; was a stand-alone utility that is now included in Enlightenment. The [http://maemo.gitorious.org/maemo-af/epeg Maemo] sources for epeg compile without a change in Kubuntu. There is also a [http://github.com/rsky/php-epeg PHP extension] for epeg.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;epeg&amp;#039;&amp;#039;&amp;#039; does not decode the JPEG, it only decodes the DCT coefficients needed to reconstruct an image of the size desired.&lt;br /&gt;
&lt;br /&gt;
From the README:&lt;br /&gt;
&lt;br /&gt;
 What is Epeg?&lt;br /&gt;
 &lt;br /&gt;
 An IMMENSELY FAST JPEG thumbnailer library API.&lt;br /&gt;
 &lt;br /&gt;
 Why write this? It&amp;#039;s a convenience library API to using libjpeg to load JPEG&lt;br /&gt;
 images destined to be turned into thumbnails of the original, saving&lt;br /&gt;
 information with these thumbnails, retrieving it and managing to load the image&lt;br /&gt;
 ready for scaling with the minimum of fuss and CPU overhead. &lt;br /&gt;
 &lt;br /&gt;
 This means it&amp;#039;s insanely fast at loading large JPEG images and scaling them&lt;br /&gt;
 down to tiny thumbnails. It&amp;#039;s speedup will be proportional to the size&lt;br /&gt;
 difference between the source image and the output thumbnail size as a&lt;br /&gt;
 count of their pixels.&lt;br /&gt;
 &lt;br /&gt;
 It makes use of libjpeg features of being able to load an image by only&lt;br /&gt;
 decoding the DCT coefficients needed to reconstruct an image of the size&lt;br /&gt;
 desired. This gives a massive speedup. If you do not try and access the pixels&lt;br /&gt;
 in a format other than YUV (or GRAY8 if the source is grascale) then it also&lt;br /&gt;
 avoids colorspace conversions as well.&lt;br /&gt;
 &lt;br /&gt;
In the &amp;#039;&amp;#039;&amp;#039;libepeg&amp;#039;&amp;#039;&amp;#039; library, there is a function epeg_memory_open() that reads a JPEG image from memory instead of a file. Then the resize can be applied and the result can be sent out instead of the original JPEG.&lt;br /&gt;
&lt;br /&gt;
The C program that does the resize is this:&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stddef.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;Epeg.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int&lt;br /&gt;
 main(int argc, char **argv)&lt;br /&gt;
 {&lt;br /&gt;
   Epeg_Image *im;&lt;br /&gt;
    &lt;br /&gt;
   if (argc != 3)&lt;br /&gt;
   {&lt;br /&gt;
      printf(&amp;quot;Usage: %s input.jpg thumb.jpg\n&amp;quot;, argv[0]);&lt;br /&gt;
      exit(0);&lt;br /&gt;
   }&lt;br /&gt;
   im = epeg_file_open(argv[1]);&lt;br /&gt;
   if (!im)&lt;br /&gt;
   {&lt;br /&gt;
      printf(&amp;quot;Cannot open %s\n&amp;quot;, argv[1]);&lt;br /&gt;
      exit(-1);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   epeg_decode_size_set           (im, 426, 640);&lt;br /&gt;
   epeg_quality_set               (im, 75);&lt;br /&gt;
   epeg_thumbnail_comments_enable (im, 1);&lt;br /&gt;
   epeg_file_output_set           (im, argv[2]);&lt;br /&gt;
   epeg_encode                    (im);&lt;br /&gt;
   epeg_close                     (im);&lt;br /&gt;
   &lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Dimitrios</name></author>
	</entry>
</feed>