[osg-users] [osgPlugins] Multiple video textures using ffmpeg plugin

Sebastian Messerschmidt sebastian.messerschmidt at gmx.de
Fri Oct 6 06:15:23 PDT 2017


Hi Guys,

Maybe this [1] might help to increase performance.
I'm not sure which ffmpeg is supported now, but maybe that's a good 
argument to upgrade.

Cheers
Sebastian

[1] https://developer.nvidia.com/ffmpeg

> Hi Michael,
> we use a modified version of the ffmpeg plugin with changes in
> OpenSceneGraph\src\osgPlugins\ffmpeg\FFmpegDecoderVideo.cpp
> to move the threads to different processors. (full modified file 
> attached) It's a crude bit of code,
> but it allows us to decode and show 2  1920x1080 movies at 30 fps.
> I've pulled out just the code for cpu affinity, this should work with 
> osg 3.4.2 as well as git master.
> Regards, Laurens.
> 
> 
> + #define RESERVERD_CORES 2
> + static int next_cpu = RESERVERD_CORES;
> 
> void FFmpegDecoderVideo::decodeLoop()
> {
>      FFmpegPacket packet;
>      double pts;
> +     {
> +         int num_cpus = OpenThreads::GetNumberOfProcessors();
> +         if (num_cpus > RESERVERD_CORES + 1) {
> +             int cpu = next_cpu;
> +             ++next_cpu;
> +             if (next_cpu >= num_cpus) next_cpu -= num_cpus - 
> RESERVERD_CORES;
> +             if (cpu >= num_cpus) cpu -= num_cpus - RESERVERD_CORES;
> +             OpenThreads::SetProcessorAffinityOfCurrentThread(cpu);
> +             OSG_WARN << "FFmpegDecoderVideo::run : 
> OpenThreads::SetProcessorAffinityOfCurrentThread" << cpu << std::endl;
> +         }
> +     }
> 
> On Thu, Oct 5, 2017 at 4:54 PM, Robert Osfield <robert.osfield at gmail.com 
> <mailto:robert.osfield at gmail.com>> wrote:
> 
>     Hi Michael,
> 
>     On 5 October 2017 at 15:41, Michael Maurus <michael.maurus at web.de
>     <mailto:michael.maurus at web.de>> wrote:
> 
>         This was actually a nice hint.
>         Only one of my CPUs was working at full capacity.
> 
> 
>     I haven't looked at the code recently so I'm a bit cold on the
>     ffmpeg implementation side.  I don't recall any external way to
>     control the threads that the ffmpeg creates.
> 
>      From what it sounds like is the threads that the ffmpeg plugin is
>     creating is inheriting the affinity of the thread that created
>     them.  In OSG master there is finer grained control over the
>     affinity setting behaviour, in your case it might be appropriate to
>     disable the default setting of affinity.
> 
>     In an ideal world you want to decided which threads you want to run
>     on what threads, but this reques knowledge of all the threads, their
>     needs, and the hardware you are working on.
> 
>     FYI, the OSG by default tries to make a best guess based on your the
>     number of CPU cores the OS says the machine has and the
>     configuration of your viewer, this scheme doesn't know about any
>     extra threads that plugins might create though.  This scheme is more
>     hardwired in OSG-3.4 and prior releases, so master might be the
>     thing to use if you do end up needing more control.
> 
>     Robert.
> 
> 
>     _______________________________________________
>     osg-users mailing list
>     osg-users at lists.openscenegraph.org
>     <mailto:osg-users at lists.openscenegraph.org>
>     http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>     <http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org>
> 
> 
> 
> 
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> 


More information about the osg-users mailing list