Hi Robert, It works, indeed.
However, I have some new corrections to this code. With recent ffmpeg versions it causes a memory leak because of a change in ffmpeg API from 1.x to 2.x. osgmovie also needs to be fixed to correctly support the audio. I'll send you the changes as soon as I have some time to finish testing it and clean up the code. Regards, On Wed, Feb 25, 2015 at 8:36 PM, Robert Osfield <[email protected]> wrote: > Hi Javier, > > Does ffmpeg in svn/trunk work OK for you now? > > As for the audio tracks, I haven't personal done much work in this > direction. Ideally we'd have a plugin an ability to render audio streams to > an audio channel as the means that the osgmovie example utilizes SDL is way > too crude for serious usage. > > Robert. > > On 8 January 2015 at 10:24, Javier Taibo <[email protected]> wrote: >> >> Hi Robert, >> >> My fault! This line should be >> >> # define swr_free avresample_free >> >> instead of >> >> # define swr_free(ctx) avresample_free >> >> Actually, I don't know why this code compiled in my box :) I probably >> missed something when packing the code. >> >> Anyway, nice to hear it is working now. I use this plug-in a lot, so I >> will probably send you further improvements. >> >> One feature that I want to add is the selection of audio tracks. The OSG >> API seems to be ready for that, but it is not implemented in the plug-in, it >> always take the default audio track, with no option to select other one, >> select several tracks or none at all. >> >> >> Regards, >> >> >> On Wed, Jan 7, 2015 at 3:17 PM, Robert Osfield <[email protected]> >> wrote: >>> >>> Hi Javier, >>> >>> With these changes everything compiles fine on my system and audio now >>> works great on all the videos I have :-) >>> >>> The only small tweak I had to make was FFmpegHeaders.hpp where my >>> compiler picked up a missing parameter in the swr_free(ctx) macro. I've >>> added this and it compiled cleanly. >>> >>> Many thanks ;-) >>> Robert. >>> >>> On 7 January 2015 at 11:07, Javier Taibo <[email protected]> wrote: >>>> >>>> Hi Robert, >>>> >>>> Try this one... I have tested it with my custom ffmpeg compilation >>>> (using libswresample) and the libav included in Ubuntu 10.04 (using >>>> libavresample). CMake scripts detect which library is installed in your >>>> system and some definitions in FFmpegHeaders.hpp do the trick to bridge >>>> between libavresample and libswresample. >>>> >>>> I am sending you the whole pack of modified files, but the only files >>>> that are different from my previous commit are >>>> CMakeModules/FindFFmpeg.cmake, CMakeLists.txt and FFmpegHeaders.hpp. >>>> >>>> Hope that works! >>>> >>>> >>>> Regards, >>>> >>>> >>>> On Tue, Jan 6, 2015 at 7:52 PM, Robert Osfield >>>> <[email protected]> wrote: >>>>> >>>>> Hi Javier, >>>>> >>>>> I have just had a bash at using avresample headers in place of the >>>>> swresample ones in FFmpegHeaders.hpp : >>>>> >>>>> #if 1 >>>>> #include <libavresample/avresample.h> >>>>> #else >>>>> #include <libswresample/swresample.h> >>>>> #endif >>>>> >>>>> But now I get the error: >>>>> >>>>> >>>>> [ 93%] Building CXX object >>>>> src/osgPlugins/ffmpeg/CMakeFiles/osgdb_ffmpeg.dir/FFmpegDecoderAudio.o >>>>> In file included from >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:1:0: >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp:86:5: >>>>> error: ‘SwrContext’ does not name a type >>>>> SwrContext * m_swr_context; // Sw >>>>> resampling context >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:30:26: >>>>> error: ‘SwrContext’ has not been declared >>>>> SwrContext *swr_context, >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp: >>>>> In >>>>> function ‘int osgFFmpeg::decode_audio(AVCodecContext*, int16_t*, int*, >>>>> const >>>>> uint8_t*, int, int*, int, int, AVSampleFormat)’: >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:80:82: >>>>> error: ‘swr_convert’ was not declared in this scope >>>>> (const uint8_t **)frame->extended_data, >>>>> frame->nb_samples); >>>>> >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp: >>>>> In >>>>> constructor >>>>> ‘osgFFmpeg::FFmpegDecoderAudio::FFmpegDecoderAudio(osgFFmpeg::FFmpegDecoderAudio::PacketQueue&, >>>>> osgFFmpeg::FFmpegClocks&)’: >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:128:5: >>>>> error: class ‘osgFFmpeg::FFmpegDecoderAudio’ does not have any field named >>>>> ‘m_swr_context’ >>>>> m_swr_context(NULL) >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp: >>>>> In >>>>> member function ‘void osgFFmpeg::FFmpegDecoderAudio::open(AVStream*, >>>>> osgFFmpeg::FFmpegParameters*)’: >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:188:13: >>>>> error: ‘m_swr_context’ was not declared in this scope >>>>> m_swr_context = swr_alloc_set_opts(NULL, >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:195:29: >>>>> error: ‘swr_alloc_set_opts’ was not declared in this scope >>>>> 0, NULL ); >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:197:45: >>>>> error: ‘swr_init’ was not declared in this scope >>>>> int err = swr_init(m_swr_context); >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:203:40: >>>>> error: ‘swr_free’ was not declared in this scope >>>>> swr_free(&m_swr_context); >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp: >>>>> In >>>>> member function ‘void osgFFmpeg::FFmpegDecoderAudio::close(bool)’: >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:259:15: >>>>> error: ‘m_swr_context’ was not declared in this scope >>>>> swr_free(&m_swr_context); >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:259:28: >>>>> error: ‘swr_free’ was not declared in this scope >>>>> swr_free(&m_swr_context); >>>>> ^ >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp: >>>>> In >>>>> member function ‘size_t osgFFmpeg::FFmpegDecoderAudio::decodeFrame(void*, >>>>> size_t)’: >>>>> >>>>> /home/robert/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp:443:145: >>>>> error: ‘m_swr_context’ was not declared in this scope >>>>> const int bytes_decoded = decode_audio(m_context, >>>>> reinterpret_cast<int16_t*>(buffer), &data_size, m_packet_data, >>>>> m_bytes_remaining, m_swr_context, m_out_sample_rate, m_out_nb_channels, >>>>> m_out_sample_format); >>>>> >>>>> ^ >>>>> src/osgPlugins/ffmpeg/CMakeFiles/osgdb_ffmpeg.dir/build.make:80: recipe >>>>> for target >>>>> 'src/osgPlugins/ffmpeg/CMakeFiles/osgdb_ffmpeg.dir/FFmpegDecoderAudio.o' >>>>> failed >>>>> make[2]: *** >>>>> [src/osgPlugins/ffmpeg/CMakeFiles/osgdb_ffmpeg.dir/FFmpegDecoderAudio.o] >>>>> Error 1 >>>>> CMakeFiles/Makefile2:7070: recipe for target >>>>> 'src/osgPlugins/ffmpeg/CMakeFiles/osgdb_ffmpeg.dir/all' failed >>>>> make[1]: *** [src/osgPlugins/ffmpeg/CMakeFiles/osgdb_ffmpeg.dir/all] >>>>> Error 2 >>>>> Makefile:106: recipe for target 'all' failed >>>>> make: *** [all] Error 2 >>>>> >>>>> >>>>> It's end of day here in Scotland so I'm going to revert back to >>>>> svn/trunk without any of your submitted changes and wait for feedback from >>>>> yourself. FYI, I'm using Kubuntu 14.10. >>>>> >>>>> Robert. >>>>> >>>>> _______________________________________________ >>>>> osg-submissions mailing list >>>>> [email protected] >>>>> >>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org >>>>> >>>> >>>> >>>> >>>> -- >>>> Javier Taibo >>>> >>>> >>>> _______________________________________________ >>>> osg-submissions mailing list >>>> [email protected] >>>> >>>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org >>>> >>> >>> >>> _______________________________________________ >>> osg-submissions mailing list >>> [email protected] >>> >>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org >>> >> >> >> >> -- >> Javier Taibo >> >> >> _______________________________________________ >> osg-submissions mailing list >> [email protected] >> >> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org >> > > > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > -- Javier Taibo _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
