[Ffmpeg-devel] [PATCH] Swscaler multithreading

Haruhiko Yamagata h.yamagata
Thu Aug 17 15:15:48 CEST 2006


Hello. Thank you for your great product swscaler. I implemented multithreading of swscaler for ffdshow port and posted patch on 
April 2006. Since then I debuged and now I would like to port back. I didn't have Linux running PC, so I thought it should be very 
hard to port back, but Cygwin allowed me to do it easier. Some OS dependent functions are not implemented. Please help me to 
compleate.

[Tested environment]
 Mingw32+mplayer, Cygwin+mplayer are tested.
 Native posix systems are not tested.
 I think it's probably OK on posix, because pthread.c works on Cygwin.
 OS2 and BeOS are not tested at all, though os2thread.c
 and beosthread.c are included.

[How to compile multithreaded version]
 On posix system(including Cygwin), default configuration is multithreaded.
  Please implement GetCPUCount - pthread.c.

 Mingw32 : There is no option for configure as far as I know.
   Add "#define HAVE_THREADS" to config.h.
   Add "HAVE_W32THREADS = yes" to config.mak.

 OS2 :
   Add "#define HAVE_THREADS" to config.h.
   Add "HAVE_OS2THREADS = yes" to config.mak.
   Please implement GetCPUCount - os2thread.c.
   Please degug.

 BeOS :
   Add "#define HAVE_THREADS" to config.h.
   Add "HAVE_BEOSTHREADS = yes" to config.mak.
   Please implement GetCPUCount - beosthread.c.
   Please degug.

[How to use]
 To specify the number of threads, use sws_getContextEx.
 sws_getContextEx has parameter for threadCount.

/**
 * @param threadCount : number of threads. Set threadCount=0 to GetCPUCount automatically.
 */
    SwsContext *sws_getContextEx(int srcW,
                int srcH,
                int origSrcFormat,
                int dstW,
                int dstH,
                int origDstFormat,
                int flags,
                SwsFilter *srcFilter,
                SwsFilter *dstFilter,
                double *param,
                int threadCount
                );

 sws_getContextEx calls GetCPUCount to get threadCount, if threadCount==0.

 Multithreading should be avoided if the output buffer
 is the video RAM(It's much slower).

[GetCPUCount]
 GetCPUCount is expected to return number of system processors.
 If the processor is Pentium4-HT it is counted 1,
 because multithreading on P4HT is not faster at all.
 It depends on OS and I couldn't implement except for Mingw32.
 Please help me.

[Overview of implementation]
 SwsContext is copied for each thread.
 Picture is simply divided by the number of threads.
 Asymmetric division is long term TODO.

[About MPlayer]
 I don't know why and where it is called from, but MPlayer divids
 picture to pieces(16lines/call). In this setting, swscaler
 multithreading cannot take effect at all. Whole picture should
 be given at once to see effect of multithreading.

[How to contact me in the mailing list]
 I can't catch up the high traffic of this mailing list because of
 my poor English. Please be sure to include "swscale" in the title.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libswscale_multithread20060817.patch
Type: application/octet-stream
Size: 40093 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20060817/e76c197b/attachment.obj>



More information about the ffmpeg-devel mailing list