[FFmpeg-devel] Stack usage in FFmpeg

Alex Converse alex.converse
Mon Nov 2 02:27:36 CET 2009


2009/11/1 M?ns Rullg?rd <mans at mansr.com>:
> Back in January, I posted a list of functions using 4k stack space or
> more [1], and one truly terrible and a few lesser cases were promptly
> fixed.
>
> Here's a list of worst stack users today:
>
> ?495616 search_for_quantizers_anmr ? ? aaccoder.c:472
> ?262144 ljpeg_decode_rgb_scan ? ? ? ? ?mjpegdec.c:617
> ?100352 AC3_encode_frame ? ? ? ? ? ? ? ac3enc.c:1182
> ?61440 mxf_get_d10_aes3_packet ? ? ? ?mxfdec.c:216
> ?49920 put_main_header ? ? ? ? ? ? ? ?vorbis_enc.c:523
> ?43264 ff_lpc_calc_coefs ? ? ? ? ? ? ?lpc.c:170
> ?41984 encode_thread ? ? ? ? ? ? ? ? ?mpegvideo_enc.c:2000
> ?26624 rtsp_read_packet ? ? ? ? ? ? ? rtsp.c:1469
> ?20736 rtsp_read_header ? ? ? ? ? ? ? rtsp.c:1176
> ?18176 encode_window_bands_info ? ? ? aaccoder.c:359
> ?16640 sdp_parse ? ? ? ? ? ? ? ? ? ? ?rtsp.c:515
> ?16640 sdp_parse_fmtp ? ? ? ? ? ? ? ? rtsp.c:268
> ?14464 dv_encode_video_segment ? ? ? ?dv.c:990
> ?13376 mp_decode_layer3 ? ? ? ? ? ? ? mpegaudiodec.c:1912
> ?11840 encode_q_branch ? ? ? ? ? ? ? ?snow.c:3059
> ?10944 ff_update_duplicate_context ? ?mpegvideo.c:395
> ?10304 calc_rice_params ? ? ? ? ? ? ? flacenc.c:490
> ?10304 generate_joint_tables ? ? ? ? ?huffyuv.c:270
> ? 9472 dvvideo_init ? ? ? ? ? ? ? ? ? dv.c:270
> ? 8640 rtmp_open ? ? ? ? ? ? ? ? ? ? ?rtmpproto.c:569
> ? 6720 dv_decode_video_segment ? ? ? ?dv.c:516
> ? 6464 parse_h264_sdp_line ? ? ? ? ? ?rtp_h264.c:356
> ? 6208 http_open_cnx ? ? ? ? ? ? ? ? ?http.c:55
> ? 6144 rtsp_read_play ? ? ? ? ? ? ? ? rtsp.c:1601
> ? 6144 rtsp_read_close ? ? ? ? ? ? ? ?rtsp.c:1678
> ? 6144 rtsp_read_pause ? ? ? ? ? ? ? ?rtsp.c:1631
> ? 6144 rtsp_read_reply ? ? ? ? ? ? ? ?rtsp.c:763
> ? 5888 ls_store_lse ? ? ? ? ? ? ? ? ? jpeglsenc.c:210
> ? 5888 read_huffman_tables ? ? ? ? ? ?4xm.c:517
> ? 5376 mpegts_read_header ? ? ? ? ? ? mpegts.c:1352
> ? 5312 dca_subsubframe ? ? ? ? ? ? ? ?dca.c:913
> ? 5248 iterative_me ? ? ? ? ? ? ? ? ? snow.c:3838
> ? 5248 mc_block ? ? ? ? ? ? ? ? ? ? ? snow.c:1595
> ? 5120 gopher_open ? ? ? ? ? ? ? ? ? ?gopher.c:78
> ? 5120 rtsp_send_cmd_async ? ? ? ? ? ?rtsp.c:850
> ? 4672 encode_frame ? ? ? ? ? ? ? ? ? snow.c:4402
> ? 4608 qdm2_synthesis_filter ? ? ? ? ?qdm2.c:1668
> ? 4608 mpc_synth ? ? ? ? ? ? ? ? ? ? ?mpc.c:45
> ? 4608 decode_frame_mp3on4 ? ? ? ? ? ?mpegaudiodec.c:2435
> ? 4480 estimate_best_b_count ? ? ? ? ?mpegvideo_enc.c:913
> ? 4416 encode_residual ? ? ? ? ? ? ? ?flacenc.c:716
> ? 4288 svq1_encode_plane ? ? ? ? ? ? ?svq1enc.c:272
> ? 4288 bidir_refine ? ? ? ? ? ? ? ? ? motion_est.c:1395
> ? 4224 calc_predictor_params ? ? ? ? ?alacenc.c:130
>
> I'd like to see at least the first one fixed.
>

The search_for_quantizers_anmr function has such a large stack size
because its trellis lives on the stack. Currently the aacencoder is
set at compile time to use search_for_quantizers_faac instead of
search_for_quantizers_anmr. The version of search_for_quantizers_anmr
in my tree has the trellis size decreased by 88%.



More information about the ffmpeg-devel mailing list