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