For Programmers: Free Programming Magazines  


Home > Archive > Compression > January 2006 > JPEG decompression library









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author JPEG decompression library
Graham Banks

2006-01-12, 7:55 am

Hi,

Can anyone recommend a library for decompressing JPEGs, please? I currently
use the Independent JPEG Group's library in an application that receieves a
stream of JPEGs and displays the "video" in a window. I know it's not as
efficient as it can be, because another application for which I don't have
the source code decodes and displays the same stream using much less CPU
time.

My immediate need is to decompress more quickly in a Windows application,
but I'll need to decompress and compress within a Linux program and compress
in Windows.

TIA

Graham


Carsten Neubauer

2006-01-12, 6:55 pm

hi graham,

several years ago intel had a quite fast jpeg-dll.
seems it got integrated into a bigger library in between.
have a look at

http://www.intel.com/cd/software/pr.../eng/238653.htm
and
http://www.intel.com/cd/software/pr.../ipp/238655.htm

perhaps its something for you, they mention windows and linux.

hope it helps,

carsten neubauer
http://www.c14sw.de/

________________________________________
___
Graham Banks schrieb:
> Hi,
>
> Can anyone recommend a library for decompressing JPEGs, please? I currently
> use the Independent JPEG Group's library in an application that receieves a
> stream of JPEGs and displays the "video" in a window. I know it's not as
> efficient as it can be, because another application for which I don't have
> the source code decodes and displays the same stream using much less CPU
> time.
>
> My immediate need is to decompress more quickly in a Windows application,
> but I'll need to decompress and compress within a Linux program and compress
> in Windows.
>
> TIA
>
> Graham


Graham Banks

2006-01-12, 6:55 pm

Thanks for your reply, Carsten,

I've looked at the web-site and it looks as if the optimisations only work
on certain processors (Intel ones). Since I want to distribute applications
that can be used on any computer running Windows, I don't think this is the
solution I'm looking for. So, I'm afraid I'm still looking.

Graham

"Carsten Neubauer" <cn@c14sw.de> wrote in message
news:1137075999.539908.93930@g43g2000cwa.googlegroups.com...
> hi graham,
>
> several years ago intel had a quite fast jpeg-dll.
> seems it got integrated into a bigger library in between.
> have a look at
>
> http://www.intel.com/cd/software/pr.../eng/238653.htm
> and
> http://www.intel.com/cd/software/pr.../ipp/238655.htm
>
> perhaps its something for you, they mention windows and linux.
>
> hope it helps,
>
> carsten neubauer
> http://www.c14sw.de/
>
> ________________________________________
___
> Graham Banks schrieb:
>



Martin Brown

2006-01-12, 6:56 pm

Graham Banks wrote:

> Can anyone recommend a library for decompressing JPEGs, please? I currently
> use the Independent JPEG Group's library in an application that receieves a
> stream of JPEGs and displays the "video" in a window. I know it's not as
> efficient as it can be, because another application for which I don't have
> the source code decodes and displays the same stream using much less CPU
> time.


Have you tried profiling it to see where it spends most of its time?
ISTR the original IJG sample code spends a fair amount of time
allocating and deallocating buffers. This could be needlessly time
consuming if your datastream consists of a series of same size images.

Regards,
Martin Brown
Thomas Richter

2006-01-13, 3:55 am

Hi Graham,

> Can anyone recommend a library for decompressing JPEGs, please? I currently
> use the Independent JPEG Group's library in an application that receieves a
> stream of JPEGs and displays the "video" in a window. I know it's not as
> efficient as it can be, because another application for which I don't have
> the source code decodes and displays the same stream using much less CPU
> time.


> My immediate need is to decompress more quickly in a Windows application,
> but I'll need to decompress and compress within a Linux program and compress
> in Windows.


Another suggestion from my side: You might want to have a look at the
Pegasus JPEG library (www.jpg.com) if commercial libraries are an issue
for you. Runs on win32, Linux, AMD and intel, and is really pretty fast.

So long,
Thomas



Graham Banks

2006-01-13, 6:56 pm

Thanks Martin,

I've done a profile and the memory management functions come way down the
list of clock-cycle chompers (profiling output appended)

Graham

Func Func+Child Hit
Time % Time % Count Function
---------------------------------------------------------
10442.943 19.9 20252.594 38.6 563904 _decode_mcu (jdhuff.obj)
9750.138 18.6 9750.138 18.6 1551191 _jpeg_fill_bit_buffer
(jdhuff.obj)
9718.087 18.5 39403.881 75.0 12816 _decompress_onepass
(jdcoefct.obj)
9057.468 17.2 9057.468 17.2 2255616 _jpeg_idct_islow
(jidctint.obj)
6108.755 11.6 52524.136 100.0 1
CGizzyWatchApp::InitInstance(void) (gizzywatch.obj)
3389.008 6.5 3389.008 6.5 102528 _ycc_rgb_convert
(jdcolor.obj)
1413.135 2.7 1413.135 2.7 205056 _h2v1_fancy_upsample
(jdsample.obj)
1246.339 2.4 45623.013 86.9 178 _CompleteDecode (jpgif.obj)
421.270 0.8 421.270 0.8 39 StretchBitmap(struct HDC__
*,int,int) (gizzywatch.obj)
373.792 0.7 373.792 0.7 563904 _jzero_far (jutils.obj)
167.768 0.3 45971.924 87.5 93
ReadAndProcessNetworkInput(void) (gizzywatch.obj)
89.594 0.2 45790.670 87.2 178 DisplayImage(void)
(gizzywatch.obj)
77.316 0.1 4897.799 9.3 102528 _sep_upsample (jdsample.obj)
59.512 0.1 65.152 0.1 162468 _jpeg_huff_decode
(jdhuff.obj)
35.180 0.1 44371.415 84.5 102528 _jpeg_read_scanlines
(jdapistd.obj)
34.554 0.1 44336.234 84.4 102528 _process_data_simple_main
(jdmainct.obj)
18.339 0.0 18.339 0.0 102528 _fullsize_upsample
(jdsample.obj)
13.486 0.0 45804.156 87.2 12822 ProcessProcessingBuffer(void)
(gizzywatch.obj)
12.023 0.0 12.023 0.0 178 _jpeg_mem_init (jmemnobs.obj)
11.695 0.0 11.852 0.0 1068 _jpeg_make_d_derived_tbl
(jdhuff.obj)
10.426 0.0 23.140 0.0 178 _jinit_memory_mgr
(jmemmgr.obj)
10.271 0.0 46403.785 88.3 159 WndProcPiccy(struct HWND__
*,unsigned int,unsigned int,long) (gizzywatch.obj)
4.437 0.0 4.438 0.0 1 ConnectAlarmsSocket(void)
(gizzywatch.obj)
4.365 0.0 4.513 0.0 178 _build_ycc_rgb_table
(jdcolor.obj)
4.092 0.0 5.861 0.0 712 _get_dht (jdmarker.obj)
2.921 0.0 4.722 0.0 6586 _alloc_small (jmemmgr.obj)
2.712 0.0 2.712 0.0 1068 _jpeg_free_large
(jmemnobs.obj)
2.492 0.0 2.492 0.0 534 _jpeg_get_small
(jmemnobs.obj)
2.444 0.0 6.882 0.0 1
CGizzyWatchDlg::OnInitDialog(void) (gizzywatchdlg.obj)
2.171 0.0 2.171 0.0 1068 _jpeg_get_large
(jmemnobs.obj)
2.068 0.0 2.349 0.0 356 _get_dqt (jdmarker.obj)
1.913 0.0 1.913 0.0 12816 _start_iMCU_row
(jdcoefct.obj)
1.886 0.0 1.886 0.0 1 CGizzyWatchDlg::OnClose(void)
(gizzywatchdlg.obj)
1.586 0.0 4.263 0.0 890 _alloc_sarray (jmemmgr.obj)
1.567 0.0 14.529 0.0 356 _read_markers (jdmarker.obj)
1.357 0.0 1.945 0.0 2
CGizzyWatchDlg::OnRadiocamera1(void) (gizzywatchdlg.obj)
1.357 0.0 1.945 0.0 2
CGizzyWatchDlg::OnRadiocamera2(void) (gizzywatchdlg.obj)
1.357 0.0 1.945 0.0 2
CGizzyWatchDlg::OnRadiocamera3(void) (gizzywatchdlg.obj)
1.357 0.0 1.945 0.0 2
CGizzyWatchDlg::OnRadiocamera4(void) (gizzywatchdlg.obj)
1.278 0.0 1.760 0.0 178 _jpeg_calc_output_dimensions
(jdmaster.obj)
1.264 0.0 1.279 0.0 1 _$E211 (gizzywatch.obj)
1.260 0.0 1.260 0.0 3738 _jdiv_round_up (jutils.obj)
1.173 0.0 1.173 0.0 4628 _emit_message (jerror.obj)
1.079 0.0 1.348 0.0 178 _prepare_range_limit_table
(jdmaster.obj)
1.023 0.0 1.023 0.0 1615 _next_marker (jdmarker.obj)
0.984 0.0 31.212 0.1 178 _master_selection
(jdmaster.obj)
0.950 0.0 0.950 0.0 178 _start_pass (jddctmgr.obj)
0.937 0.0 1.191 0.0 178 _jinit_inverse_dct
(jddctmgr.obj)
0.867 0.0 1.273 0.0 712 _jpeg_alloc_huff_table
(jcomapi.obj)
0.776 0.0 1.560 0.0 178 _initial_setup (jdinput.obj)
0.760 0.0 78.064 0.1 178 _StartDecode (jpgif.obj)
0.741 0.0 0.940 0.0 178 _get_sos (jdmarker.obj)
0.730 0.0 2.025 0.0 178 _get_sof (jdmarker.obj)
0.723 0.0 2.278 0.0 178 _prepare_for_output_pass
(jdmaster.obj)
0.715 0.0 12.567 0.0 178 _start_pass_huff_decoder
(jdhuff.obj)
0.692 0.0 25.790 0.0 178 _jpeg_CreateDecompress
(jdapimin.obj)
0.648 0.0 2.620 0.0 178 _jinit_upsampler
(jdsample.obj)
0.619 0.0 0.619 0.0 1
CGizzyWatchDlg::CGizzyWatchDlg(class CWnd *) (gizzywatchdlg.obj)
0.587 0.0 0.587 0.0 1 Disconnect(void)
(gizzywatch.obj)
0.554 0.0 2.725 0.0 1068 _alloc_large (jmemmgr.obj)
0.548 0.0 3.620 0.0 534 _free_pool (jmemmgr.obj)
0.541 0.0 0.603 0.0 178 _latch_quant_tables
(jdinput.obj)
0.528 0.0 0.528 0.0 534 _jpeg_free_small
(jmemnobs.obj)
0.483 0.0 16.954 0.0 178 _jpeg_consume_input
(jdapimin.obj)
0.483 0.0 16.571 0.0 356 _consume_markers
(jdinput.obj)
0.479 0.0 2.756 0.0 178 _output_pass_setup
(jdapistd.obj)
0.409 0.0 1.663 0.0 178 _jinit_marker_reader
(jdmarker.obj)
0.386 0.0 0.462 0.0 178 _per_scan_setup (jdinput.obj)
0.337 0.0 4.605 0.0 178 _jpeg_finish_decompress
(jdapimin.obj)
0.325 0.0 0.889 0.0 178 _jinit_d_coef_controller
(jdcoefct.obj)
0.323 0.0 4.872 0.0 178 _jinit_color_deconverter
(jdcolor.obj)
0.321 0.0 0.321 0.0 356 _use_merged_upsample
(jdmaster.obj)
0.293 0.0 0.293 0.0 178 _default_decompress_parms
(jdapimin.obj)
0.265 0.0 2.988 0.0 178 _jinit_d_main_controller
(jdmainct.obj)
0.242 0.0 0.296 0.0 178 _jinit_input_controller
(jdinput.obj)
0.207 0.0 0.207 0.0 178 _start_output_pass
(jdcoefct.obj)
0.205 0.0 13.918 0.0 178 _start_input_pass
(jdinput.obj)
0.193 0.0 0.193 0.0 178 _first_marker (jdmarker.obj)
0.192 0.0 34.305 0.1 178 _jpeg_start_decompress
(jdapistd.obj)
0.185 0.0 0.185 0.0 500
CGizzyWatchDlg::GetMessageMap(void) (gizzywatchdlg.obj)
0.179 0.0 0.179 0.0 178 _realize_virt_arrays
(jmemmgr.obj)
0.173 0.0 0.203 0.0 2 SendThePatrolRequest(void)
(gizzywatch.obj)
0.164 0.0 0.164 0.0 178 _start_pass_dpost
(jdpostct.obj)
0.159 0.0 0.215 0.0 178 _get_soi (jdmarker.obj)
0.149 0.0 0.218 0.0 178 _skip_variable (jdmarker.obj)
0.135 0.0 0.239 0.0 178 _reset_input_controller
(jdinput.obj)
0.135 0.0 0.135 0.0 178 _jpeg_std_error (jerror.obj)
0.132 0.0 0.212 0.0 356 _jpeg_alloc_quant_table
(jcomapi.obj)
0.122 0.0 0.122 0.0 178 _start_pass_main
(jdmainct.obj)
0.120 0.0 17.074 0.0 178 _jpeg_read_header
(jdapimin.obj)
0.112 0.0 3.437 0.0 178 _jpeg_abort (jcomapi.obj)
0.101 0.0 0.101 0.0 356 _reset_marker_reader
(jdmarker.obj)
0.100 0.0 31.356 0.1 178 _jinit_master_decompress
(jdmaster.obj)
0.097 0.0 0.097 0.0 1 SendTheAlarmsRequest(void)
(gizzywatch.obj)
0.089 0.0 0.089 0.0 356 _jround_up (jutils.obj)
0.081 0.0 0.113 0.0 178 _jinit_huff_decoder
(jdhuff.obj)
0.079 0.0 0.111 0.0 178 _jinit_d_post_controller
(jdpostct.obj)
0.077 0.0 0.077 0.0 178 _reset_error_mgr (jerror.obj)
0.077 0.0 0.077 0.0 178 _finish_input_pass
(jdinput.obj)
0.073 0.0 0.073 0.0 178 _start_pass_dcolor
(jdcolor.obj)
0.070 0.0 0.070 0.0 178 _finish_output_pass
(jdmaster.obj)
0.070 0.0 0.654 0.0 178 _jpeg_destroy_decompress
(jdapimin.obj)
0.070 0.0 0.070 0.0 178 _term_source (jpgif.obj)
0.059 0.0 0.059 0.0 178 _init_source (jpgif.obj)
0.055 0.0 0.584 0.0 178 _jpeg_destroy (jcomapi.obj)
0.047 0.0 1.934 0.0 1
CGizzyWatchDlg::OnSysCommand(unsigned int,long) (gizzywatchdlg.obj)
0.045 0.0 0.529 0.0 178 _self_destruct (jmemmgr.obj)
0.041 0.0 0.041 0.0 178 _skip_input_data (jpgif.obj)
0.038 0.0 0.038 0.0 178 _start_pass_upsample
(jdsample.obj)
0.035 0.0 0.035 0.0 1 _$E213 (gizzywatch.obj)
0.032 0.0 0.081 0.0 178 _start_input_pass
(jdcoefct.obj)
0.029 0.0 0.029 0.0 1 _$E218 (gizzywatch.obj)
0.029 0.0 0.029 0.0 2 CameraSelected(void)
(gizzywatch.obj)
0.028 0.0 0.028 0.0 1 CGizzyWatchDlg::OnPaint(void)
(gizzywatchdlg.obj)
0.022 0.0 0.022 0.0 42 IsConnected(void)
(gizzywatch.obj)
0.021 0.0 0.021 0.0 178 _jpeg_mem_term (jmemnobs.obj)
0.015 0.0 0.015 0.0 1 _$E208 (gizzywatch.obj)
0.009 0.0 0.038 0.0 1 _$E221 (gizzywatch.obj)
0.006 0.0 0.006 0.0 1 _$E219 (gizzywatch.obj)
0.003 0.0 0.003 0.0 5
CGizzyWatchApp::GetMessageMap(void) (gizzywatch.obj)
0.003 0.0 0.003 0.0 1 _$E214 (gizzywatch.obj)
0.001 0.0 0.037 0.0 1 _$E216 (gizzywatch.obj)
0.001 0.0 0.001 0.0 1 _$E209 (gizzywatch.obj)
0.001 0.0 0.001 0.0 1 AlarmsSocketIsConnected(void)
(gizzywatch.obj)
0.001 0.0 0.001 0.0 2
InitialiseProcessingBuffer(void) (gizzywatch.obj)
0.000 0.0 0.000 0.0 1
CAboutDlg::DoDataExchange(class CDataExchange *) (gizzywatchdlg.obj)
0.000 0.0 0.000 0.0 1
CGizzyWatchApp::CGizzyWatchApp(void) (gizzywatch.obj)
0.000 0.0 0.000 0.0 1
CGizzyWatchApp::~CGizzyWatchApp(void) (gizzywatch.obj)
0.000 0.0 0.000 0.0 1
CGizzyWatchDlg::DoDataExchange(class CDataExchange *) (gizzywatchdlg.obj)
0.000 0.0 0.000 0.0 2
CGizzyWatchDlg::OnCmdconnect(void) (gizzywatchdlg.obj)
0.000 0.0 0.000 0.0 1 _$E210 (gizzywatch.obj)
0.000 0.0 0.000 0.0 1 _$E215 (gizzywatch.obj)
0.000 0.0 0.000 0.0 1 _$E220 (gizzywatch.obj)

"Martin Brown" <|||newspam|||@nezumi.demon.co.uk> wrote in message
news:dq6133$cnl$1@news7.svr.pol.co.uk...
> Graham Banks wrote:
>
>
> Have you tried profiling it to see where it spends most of its time? ISTR
> the original IJG sample code spends a fair amount of time allocating and
> deallocating buffers. This could be needlessly time consuming if your
> datastream consists of a series of same size images.
>
> Regards,
> Martin Brown



Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com