[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