[FFmpeg-devel] Discussion around: built in profiling.
Marc Hoffman
mmhoffm
Tue Jun 26 03:36:05 CEST 2007
for some reason this idea never got posted it was sent but I never saw it in
the distribution.
On 6/25/07, Marc Hoffman <mmhoffm at gmail.com> wrote:
>
> I know there has been some thoughts around this and I'm not sure what the
> current plans are for internal profiling. But I have been using this
> mechanism to collect stats on execution times.
>
> Basically, I define a new pair of macros PROF_BEGIN, PROF_END that are
> defined to expand to START_TIMER, STOP_TIMER when GATHER_STATS is defined by
> the compilation system. This way the code can be littered with
> PROF_BEGIN/PROF_END with out the need of #ifdef code sections.
>
> Does anyone have thoughts around this type of infrastructure? Also would
> anyone mind if I changed the output of
>
> 14122033 dezicycles in sws_scale, 512 runs, 0 skips
> 154924245 dezicycles in avcodec_encode_video, 1024 runs, 0 skips
>
> to
>
> sws_scale: 14122033 dezicycles, 512 runs, 0 skips
> avcodec_encode_video: 154924245 dezicycles, 1024 runs, 0 skips
>
> Its easier to find things this way when your profiling lots of stuff.
>
> Thanks
> Marc
>
>
>
> mmh at yoda$ svn diff libavutil ffmpeg.c
> Index: libavutil/common.h
> ===================================================================
> --- libavutil/common.h (revision 9419)
> +++ libavutil/common.h (working copy)
> @@ -344,4 +344,12 @@
> #define STOP_TIMER(id) {}
> #endif
>
> +#ifdef GATHER_STATS
> +#define PROF_BEGIN() START_TIMER
> +#define PROF_END(id) STOP_TIMER(id)
> +#else
> +#define PROF_BEGIN()
> +#define PROF_END(id)
> +#endif
> +
> #endif /* COMMON_H */
> Index: ffmpeg.c
> ===================================================================
> --- ffmpeg.c (revision 9419)
> +++ ffmpeg.c (working copy)
> @@ -743,8 +743,10 @@
> if (ost->video_resample) {
> padding_src = NULL;
> final_picture = &ost->pict_tmp;
> + PROF_BEGIN();
> sws_scale(ost->img_resample_ctx, formatted_picture->data,
> formatted_picture->linesize,
> 0, ost->resample_height, resampling_dst->data,
> resampling_dst->linesize);
> + PROF_END("sws_scale");
> }
>
> if (ost->video_pad) {
> @@ -800,9 +802,11 @@
> big_picture.pts= ost->sync_opts;
> // big_picture.pts= av_rescale(ost->sync_opts,
> AV_TIME_BASE*(int64_t)enc->time_base.num, enc->time_base.den);
> //av_log(NULL, AV_LOG_DEBUG, "%"PRId64" -> encoder\n", ost->sync_opts);
> + PROF_BEGIN();
> ret = avcodec_encode_video(enc,
> bit_buffer, bit_buffer_size,
> &big_picture);
> + PROF_END("avcodec_encode_video");
> if (ret == -1) {
> fprintf(stderr, "Video encoding failed\n");
> exit(1);
>
>
More information about the ffmpeg-devel
mailing list