Friday, August 17, 2012

Beagleboard or Raspberry Pi will need hardware JPEG decoding

I've optimized the software JPEG decoding on the Beagleboard as much as I possibly can (using the libjpeg-turbo library) and also profiled Dexter. With no JPEG decoding running but everything else active, it was using about 9-10% cpu which is acceptable. Here is what the profile shows as using all of the resources on the Beagleboard:

(with no JPEG decoding running the two methods taking up all the time are listener::Think and update_soundbuffer)


CPU: ARM Cortex-A8, speed 0 MHz (estimated)
Counted CPU_CYCLES events (Number of CPU cycles) with a unit mask of 0x00 (No unit mask) count 100000
samples  %        image name               symbol name
968187   32.7438  dexter.bin               h2v2_fancy_upsample
745262   25.2046  dexter.bin               null_convert
614287   20.7750  dexter.bin               decode_mcu
365378   12.3570  dexter.bin               jsimd_idct_ifast_neon
95491     3.2295  dexter.bin               decompress_onepass
22163     0.7495  dexter.bin               jsimd_idct_ifast
16686     0.5643  dexter.bin               jpeg_make_d_derived_tbl
14974     0.5064  dexter.bin               __jsimd_idct_ifast_neon_from_thumb
13994     0.4733  dexter.bin               sep_upsample
8031      0.2716  dexter.bin               process_data_context_main
6007      0.2032  dexter.bin               jpeg_fill_bit_buffer
5789      0.1958  dexter.bin               jpeg_read_scanlines
4332      0.1465  dexter.bin               listener::Think(unsigned int)
3232      0.1093  dexter.bin               read_markers
3147      0.1064  dexter.bin               start_pass
2507      0.0848  dexter.bin               LDImageJPEG::DecompressAbbreviated(void*, unsigned char const*, unsigned int, bool)
2256      0.0763  dexter.bin               jinit_master_decompress
2078      0.0703  dexter.bin               ldp_img::OnVBlankStopped()
1904      0.0644  dexter.bin               jpeg_huff_decode
1899      0.0642  dexter.bin               LoopCommon::Think()
1799      0.0608  dexter.bin               alloc_small
1678      0.0567  dexter.bin               VideoObjectGLES2::LoadYUV444Field(void const*, unsigned int)
1563      0.0529  dexter.bin               audio_write_buf(void const*, unsigned int, void* (*)(void*, void const*, unsigned int), unsigned int)
1377      0.0466  dexter.bin               get_sof
1372      0.0464  dexter.bin               serial_rx_char_waiting()
1255      0.0424  dexter.bin               mpom::read_lile64(void*)
1192      0.0403  dexter.bin               start_pass_main
1164      0.0394  dexter.bin               SerialStream::Read(void*, unsigned int, unsigned int)
1157      0.0391  dexter.bin               serial_rx()
1149      0.0389  dexter.bin               consume_markers
1074      0.0363  dexter.bin               MpoContainer::JumpToBlob(unsigned long long)
1062      0.0359  dexter.bin               jinit_upsampler
1053      0.0356  dexter.bin               mpo_read(void*, unsigned int, unsigned int*, mpo_io*)
1041      0.0352  dexter.bin               jzero_far
982       0.0332  dexter.bin               numstr::my_strlen(char const*)
974       0.0329  dexter.bin               LDImageJPEGThreadStart(void*)
963       0.0326  dexter.bin               fullsize_upsample
909       0.0307  dexter.bin               LDImage::LoadVideoFieldStart()
854       0.0289  dexter.bin               jpeg_read_header
814       0.0275  dexter.bin               MpoContainer::StartReadBlob(unsigned int&)
763       0.0258  dexter.bin               jinit_color_deconverter
762       0.0258  dexter.bin               jpeg_calc_output_dimensions
729       0.0247  dexter.bin               jinit_d_coef_controller
727       0.0246  dexter.bin               examine_app0
721       0.0244  dexter.bin               update_soundbuffer(unsigned int)
699       0.0236  dexter.bin               MpoPipe::BlockingWrite(void const*, unsigned int, unsigned int*)
697       0.0236  dexter.bin               main
691       0.0234  dexter.bin               prepare_for_output_pass
673       0.0228  dexter.bin               listener::ProcessPacket()


No comments:

Post a Comment