electricsheep
electricsheep copied to clipboard
ContentDecoder.cpp uses deprecated ffmpeg function calls
The file ContentDecoder/ContentDecoder.cpp in svn r130 does not compile with
recent GNU/Linux distributions (I used Debian testing "wheezy", but see also
http://electricsheep.org/node/51#comment-5107
for Fedora).
The error messages are:
../ContentDecoder/ContentDecoder.cpp: In member function ‘void
ContentDecoder::CContentDecoder::Destroy()’:
../ContentDecoder/ContentDecoder.cpp:115:9: warning: ‘void
av_close_input_file(AVFormatContext*)’ is deprecated (declared at
/usr/include/libavformat/avformat.h:1622) [-Wdeprecated-declarations]
../ContentDecoder/ContentDecoder.cpp:115:47: warning: ‘void
av_close_input_file(AVFormatContext*)’ is deprecated (declared at
/usr/include/libavformat/avformat.h:1622) [-Wdeprecated-declarations]
../ContentDecoder/ContentDecoder.cpp: In member function ‘bool
ContentDecoder::CContentDecoder::Open(const string&)’:
../ContentDecoder/ContentDecoder.cpp:159:89: error: ‘av_open_input_file’
was not declared in this scope
../ContentDecoder/ContentDecoder.cpp:169:17: warning: ‘int
av_find_stream_info(AVFormatContext*)’ is deprecated (declared at
/usr/include/libavformat/avformat.h:1446) [-Wdeprecated-declarations]
../ContentDecoder/ContentDecoder.cpp:169:55: warning: ‘int
av_find_stream_info(AVFormatContext*)’ is deprecated (declared at
/usr/include/libavformat/avformat.h:1446) [-Wdeprecated-declarations]
../ContentDecoder/ContentDecoder.cpp:222:20: warning: ‘int
avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at
/usr/include/libavcodec/avcodec.h:3569) [-Wdeprecated-declarations]
../ContentDecoder/ContentDecoder.cpp:222:70: warning: ‘int
avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at
/usr/include/libavcodec/avcodec.h:3569) [-Wdeprecated-declarations]
make[1]: *** [ContentDecoder.o] Fehler 1
Apparently, a deprecated ffmpeg interface is used.
The problem disappears if lines 32-34:
#ifdef MAC
#define USE_NEW_FFMPEG_API
#endif
are replaced by
#define USE_NEW_FFMPEG_API
Instead of checking for macs, it would be preferable to introduce a feature
check via an autoconf macro to determine the correct interface.
Adding
AC_CHECK_LIB([avformat], [av_open_input_file],
AC_DEFINE([USE_OLD_FFMPEG_API]),
AC_DEFINE([USE_NEW_FFMPEG_API]))
to configure.ac, for instance after line 155 (and removing lines 32-34 from
ContentDecoder.cpp) solves the problem.
Additionally, the call to the function av_close_input_file in the current line
116 is deprecated and should be replaced by the appropriate call
(avformat_close_input?) when USE_NEW_FFMPEG_API is defined.
Original issue reported on code.google.com by [email protected]
on 3 Dec 2012 at 9:33
[deleted comment]
[deleted comment]
[deleted comment]
Thank you. I altered per recommendations above, then got a bit further, and
failed again... I assume this is in relation to using Debian's wxWidgets rather
than building fresh.
In file included from /usr/include/wx-2.8/wx/debug.h:22:0,
from /usr/include/wx-2.8/wx/defs.h:521,
from /usr/include/wx-2.8/wx/string.h:25,
from /usr/include/wx-2.8/wx/bitmap.h:19,
from config.h:11,
from config.cpp:8:
/usr/include/wx-2.8/wx/wxchar.h:1286:40: error: ‘time_t’ does not name a
type
/usr/include/wx-2.8/wx/wxchar.h:1286:48: warning: ISO C++ forbids declaration
of ‘timep’ with no type [-fpermissive]
In file included from /usr/include/wx-2.8/wx/variant.h:26:0,
from /usr/include/wx-2.8/wx/colour.h:48,
from /usr/include/wx-2.8/wx/bitmap.h:21,
from config.h:11,
from config.cpp:8:
/usr/include/wx-2.8/wx/datetime.h:585:30: error: expected ‘)’ before
‘timet’
/usr/include/wx-2.8/wx/datetime.h:624:28: error: ‘Set’ declared as an
‘inline’ field
/usr/include/wx-2.8/wx/datetime.h:624:24: error: expected ‘;’ at end of
member declaration
/usr/include/wx-2.8/wx/datetime.h:624:35: error: expected ‘)’ before
‘timet’
/usr/include/wx-2.8/wx/datetime.h:628:40: error: ‘wxDateTime&
wxDateTime::Set(const tm&)’ conflicts with a previous declaration
/usr/include/wx-2.8/wx/datetime.h:624:28: note: previous declaration
‘wxDateTime& wxDateTime::Set’
/usr/include/wx-2.8/wx/datetime.h:631:40: error: ‘wxDateTime::Set’
conflicts with a previous declaration
/usr/include/wx-2.8/wx/datetime.h:624:28: note: previous declaration
‘wxDateTime& wxDateTime::Set’
/usr/include/wx-2.8/wx/datetime.h:634:31: error: ‘wxDateTime::Set’
conflicts with a previous declaration
/usr/include/wx-2.8/wx/datetime.h:624:28: note: previous declaration
‘wxDateTime& wxDateTime::Set’
/usr/include/wx-2.8/wx/datetime.h:640:46: error: ‘wxDateTime::Set’
conflicts with a previous declaration
/usr/include/wx-2.8/wx/datetime.h:624:28: note: previous declaration
‘wxDateTime& wxDateTime::Set’
/usr/include/wx-2.8/wx/datetime.h:650:46: error: ‘wxDateTime::Set’
conflicts with a previous declaration
/usr/include/wx-2.8/wx/datetime.h:624:28: note: previous declaration
‘wxDateTime& wxDateTime::Set’
/usr/include/wx-2.8/wx/datetime.h:680:27: error: declaration of ‘operator=’
as non-function
/usr/include/wx-2.8/wx/datetime.h:680:25: error: expected ‘;’ at end of
member declaration
/usr/include/wx-2.8/wx/datetime.h:680:34: error: expected ‘)’ before
‘timet’
/usr/include/wx-2.8/wx/datetime.h:862:12: error: ‘time_t’ does not name a
type
/usr/include/wx-2.8/wx/datetime.h:1098:12: error: ‘time_t’ does not name a
type
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime()’:
/usr/include/wx-2.8/wx/datetime.h:580:5: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime(const wxLongLong&)’:
/usr/include/wx-2.8/wx/datetime.h:1092:5: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: In static member function ‘static tm*
wxDateTime::GetTmNow()’:
/usr/include/wx-2.8/wx/datetime.h:1103:26: error: aggregate ‘tm
l_CurrentTime’ has incomplete type and cannot be defined
/usr/include/wx-2.8/wx/datetime.h: In static member function ‘static
wxDateTime wxDateTime::Now()’:
/usr/include/wx-2.8/wx/datetime.h:1596:15: error: aggregate ‘tm tmstruct’
has incomplete type and cannot be defined
/usr/include/wx-2.8/wx/datetime.h: At global scope:
/usr/include/wx-2.8/wx/datetime.h:1610:36: error: ‘wxDateTime::Set’
declared as an ‘inline’ variable
/usr/include/wx-2.8/wx/datetime.h:1610:36: error: ‘wxDateTime&
wxDateTime::Set’ is not a static member of ‘class wxDateTime’
/usr/include/wx-2.8/wx/datetime.h:1610:36: error: ‘time_t’ was not declared
in this scope
/usr/include/wx-2.8/wx/datetime.h:1611:1: error: expected ‘,’ or ‘;’
before ‘{’ token
/usr/include/wx-2.8/wx/datetime.h: In member function ‘wxDateTime&
wxDateTime::operator=(const wxDateTime&)’:
/usr/include/wx-2.8/wx/datetime.h:140:24: error: non-static reference member
‘wxDateTime& wxDateTime::Set’, can’t use default assignment operator
/usr/include/wx-2.8/wx/datetime.h: In member function ‘wxDateTime&
wxDateTime::SetToCurrent()’:
/usr/include/wx-2.8/wx/datetime.h:1622:17: note: synthesized method
‘wxDateTime& wxDateTime::operator=(const wxDateTime&)’ first required here
/usr/include/wx-2.8/wx/datetime.h: At global scope:
/usr/include/wx-2.8/wx/datetime.h:1627:31: warning: ISO C++ forbids declaration
of ‘wxDateTime’ with no type [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h:1627:31: error: ‘wxDateTime::wxDateTime’
declared as an ‘inline’ variable
/usr/include/wx-2.8/wx/datetime.h:1627:31: error: ‘int
wxDateTime::wxDateTime’ is not a static member of ‘class wxDateTime’
/usr/include/wx-2.8/wx/datetime.h:1627:31: error: ‘time_t’ was not declared
in this scope
/usr/include/wx-2.8/wx/datetime.h:1628:1: error: expected ‘,’ or ‘;’
before ‘{’ token
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime(const tm&)’:
/usr/include/wx-2.8/wx/datetime.h:1633:8: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime(const wxDateTime::Tm&)’:
/usr/include/wx-2.8/wx/datetime.h:1638:8: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime(double)’:
/usr/include/wx-2.8/wx/datetime.h:1643:8: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime(wxDateTime::wxDateTime_t, wxDateTime::wxDateTime_t,
wxDateTime::wxDateTime_t, wxDateTime::wxDateTime_t)’:
/usr/include/wx-2.8/wx/datetime.h:1656:8: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: In constructor
‘wxDateTime::wxDateTime(wxDateTime::wxDateTime_t, wxDateTime::Month, int,
wxDateTime::wxDateTime_t, wxDateTime::wxDateTime_t, wxDateTime::wxDateTime_t,
wxDateTime::wxDateTime_t)’:
/usr/include/wx-2.8/wx/datetime.h:1664:8: warning: uninitialized reference
member ‘wxDateTime::Set’ [-fpermissive]
/usr/include/wx-2.8/wx/datetime.h: At global scope:
/usr/include/wx-2.8/wx/datetime.h:1686:8: error: ‘time_t’ does not name a
type
In file included from /usr/include/x86_64-linux-gnu/sys/stat.h:107:0,
from /usr/include/wx-2.8/wx/filefn.h:29,
from /usr/include/wx-2.8/wx/stream.h:22,
from /usr/include/wx-2.8/wx/image.h:23,
from config.h:12,
from config.cpp:8:
/usr/include/x86_64-linux-gnu/bits/stat.h:91:21: error: field ‘st_atim’ has
incomplete type
/usr/include/x86_64-linux-gnu/bits/stat.h:92:21: error: field ‘st_mtim’ has
incomplete type
/usr/include/x86_64-linux-gnu/bits/stat.h:93:21: error: field ‘st_ctim’ has
incomplete type
/usr/include/x86_64-linux-gnu/bits/stat.h:152:21: error: field ‘st_atim’
has incomplete type
/usr/include/x86_64-linux-gnu/bits/stat.h:153:21: error: field ‘st_mtim’
has incomplete type
/usr/include/x86_64-linux-gnu/bits/stat.h:154:21: error: field ‘st_ctim’
has incomplete type
In file included from /usr/include/wx-2.8/wx/stream.h:22:0,
from /usr/include/wx-2.8/wx/image.h:23,
from config.h:12,
from config.cpp:8:
/usr/include/wx-2.8/wx/filefn.h:689:18: error: ‘time_t’ does not name a type
make[1]: *** [config.o] Error 1
make[1]: Leaving directory
`/home/setx/electricsheep-read-only/client_generic/MSVC/SettingsGUI'
make: *** [all-recursive] Error 1
Original comment by [email protected]
on 16 Feb 2013 at 10:50
- Added labels: ****
- Removed labels: ****
This looks like a missing line
#include <ctime>
somewhere in the code.
If you commit the first modifications to svn, one could work on from that.
Original comment by [email protected]
on 18 Feb 2013 at 10:20
- Added labels: ****
- Removed labels: ****
Confirmed working on fedora 18 with commenting out
#ifdef MAC
#define USE_NEW_FFMPEG_API
#endif
and adding
#define USE_NEW_FFMPEG_API
on line 35
and adding
#include <ctime>
of line 31
in ContentDecoder/ContentDecoder.cpp
adding the following to configure.ac after 155:
AC_CHECK_LIB([avformat], [av_open_input_file],
AC_DEFINE([USE_OLD_FFMPEG_API]),
AC_DEFINE([USE_NEW_FFMPEG_API]))
build completed, thanks for the info on how to solve the error, couldnt find
out how to fix it elsewhere.
Original comment by [email protected]
on 19 Jul 2013 at 8:07
- Added labels: ****
- Removed labels: ****
Electric it seems does not work 100% in fedora with the above, it compiles but
you only see the "downloading stuff" screen, will investigate further
Original comment by [email protected]
on 20 Jul 2013 at 3:44
- Added labels: ****
- Removed labels: ****
Thanks for the input, guys! I have been battling with building electricsheep on
my Arch Linux installation with GCC 4.8.1 for some time now. The tips regarding
the changes in ContentDecoder.cpp have certainly helped but the build process
still fails on me.
The resulting log is just too long to be posted here but it's a mixed bag of
undeclared symbols, like:
In file included from /usr/include/sys/stat.h:105:0,
from ../../TupleStorage/diriterator.cpp:1:
/usr/include/bits/stat.h:91:21: error: field ‘st_atim’ has incomplete type
struct timespec st_atim; /* Time of last access. */
^
/usr/include/bits/stat.h:92:21: error: field ‘st_mtim’ has incomplete type
struct timespec st_mtim; /* Time of last modification. */
^
/usr/include/bits/stat.h:93:21: error: field ‘st_ctim’ has incomplete type
struct timespec st_ctim; /* Time of last status change. */
BTW prepending "#include <ctime>" does not do much good here as the build the
fails with:
/usr/include/c++/4.8.1/ctime:60:11: error: ‘::clock_t’ has not been declared
using ::clock_t;
^
/usr/include/c++/4.8.1/ctime:61:11: error: ‘::time_t’ has not been declared
using ::time_t;
^
/usr/include/c++/4.8.1/ctime:62:11: error: ‘::tm’ has not been declared
using ::tm;
etc.
There are also some wxWidgets errors in there:
electricsheepguiMyDialog2.cpp: In member function ‘virtual void
electricsheepguiMyDialog2::OnProxyUserNameEnter(wxCommandEvent&)’:
electricsheepguiMyDialog2.cpp:914:95: error: no matching function for call to
‘std::basic_string<char>::basic_string(wxString)’
I have no idea where to look for the culprits unfortunately but I'll try to
keep at it. If anyone can chime in with some ideas, I will gladly be of service.
Original comment by [email protected]
on 29 Sep 2013 at 10:57
- Added labels: ****
- Removed labels: ****
@znovo:
What version of wxWidgets are you using? (wxGTK / etc.)
I found I got the same error with electricsheepguiMyDialog2.cpp when using
wxWidgets 2.8, no issue when upgrading to 2.9:
http://codelite.org/LiteEditor/WxWidgets29Binaries
Original comment by [email protected]
on 2 Oct 2013 at 2:54
- Added labels: ****
- Removed labels: ****
[deleted comment]
Bug has been open since 2012, doesnt look like its going to be fixed anytime
soon. IMO the priority should be changed to High as the application doesnt even
run on RHEL/Fedora machines
Original comment by [email protected]
on 14 Oct 2013 at 2:02
- Added labels: ****
- Removed labels: ****
We need a Linux maintainer. Priority isn't the issue.
Original comment by [email protected]
on 14 Oct 2013 at 2:54
- Added labels: ****
- Removed labels: ****
Thanks for getting back, guys!
@theallis good point about wxgtk, I was actually using version 2.8 (blindly
believing my Arch Linux installation always uses the latest version -- wxgtk
2.9 is an optional alternative). I was able to modify configure.ac to look for
version 2.9 but even then the build process dies because of undeclared
time-related functions/structures. The amount of errors generated almost makes
me believe there is something fundamentally wrong with the include path
although for the moment, the only modified file in my local checkout of the SVN
is the configure.ac script. Or, it may be my build environment...
@scott maintaining electricsheep might be an interesting hobby for me although
I have never maintained a project based on many external libraries and toolsets
so I'm not totally sure if I'd be up to the task. I'll see what I can do to
brush up on the required knowledge.
Original comment by [email protected]
on 15 Oct 2013 at 9:03
- Added labels: ****
- Removed labels: ****
If you're still seeing the time-related compile errors, you probably tried
running that patch script for fedora 16/18 and need to remove the links it adds
in /usr/include:
cd /usr/include
sudo rm -rf libavformat libavcodec libavutil
At least that got rid of those warnings for me, and allowed everything to
compile. (Which made me *so* happy!) Sadly, there is more to this problem
than compilation.
If I run the electricsheep binary, it downloads sheep and tries to start
playing them, but ends up just looping through all of them and not playing any
(looks like it's hung, but I think it's just endlessly looping-- regardless,
nothing is displayed and you have to ^C the process). "Failed to get frame..."
is the only WARN.
When I run the preferences they show up for a couple seconds and then die with:
Pango:ERROR:pango-layout.c:3863:pango_layout_check_lines: assertion failed:
(!layout->log_attrs)
No problem, start the prefs and click on "Run" right away (which starts the
instantly hung electricsheep process) and then switch back over to the
properties window-- it'll stay open now and you can set whatever you want.
(woohoo! =]p)
Obviously one can edit the prefs by hand, so not much gained there, but
whatever.
Anyhow, it's totes more promising to have things apparently compiling
correctly, but something is still borked in the player.
Perhaps there are some other OS switches we need to look at besides the FFMPEG
api one (since that is based on target OS, vs. a switch for the FFMPEG api
version itself as proposed in the initial comment) or some-such. Didn't see
anything that jumped out at me tho.
Of course, I suck at C++, so probably won't be much help. :)
FWIW, I'm running this on F19, and here is what the log says (endlessly loop'n,
apparently the 9th iteration below... the log just grows and grows):
...
[INFO-17:34:43]: 'Picked connection 78111 from pq (playcount 9 )'
[INFO-17:34:43]: 'Next sheep chosen: 78111 played 9 times'
[INFO-17:34:43]: 'Opening:
/home/awesomesauce/es/mpeg/00244=80212=79916=78111.avi'
[WARN-17:34:43]: 'failed to get frame...'
[INFO-17:34:43]: 'Open done()'
[INFO-17:34:43]: 'calling Next()'
[WARN-17:34:43]: 'failed to get frame...' x1
[INFO-17:34:43]: 'GraphAlgo: CurrentSheep = 78111'
[INFO-17:34:43]: 'picking edge!'
[INFO-17:34:43]: 'no loops'
[INFO-17:34:43]: 'Picked connection 80213 from pq (playcount 9 )'
[INFO-17:34:43]: 'Next sheep chosen: 80213 played 9 times'
[INFO-17:34:43]: 'Opening:
/home/awesomesauce/es/mpeg/00244=78111=78111=78111.avi'
[WARN-17:34:43]: 'failed to get frame...'
...
Original comment by [email protected]
on 15 Oct 2013 at 6:58
- Added labels: ****
- Removed labels: ****
I should also note that the only difference between the SVN sources (R146) and
my currently compiling (on FC19) code is:
-#ifdef MAC
- #define USE_NEW_FFMPEG_API
-#endif
+#define USE_NEW_FFMPEG_API
I did *not* have to add <ctime> and I skipped modding configure.ac (you'd add
that edit and totally remove this switch to do it right, as the OP stated).
Original comment by [email protected]
on 15 Oct 2013 at 7:13
- Added labels: ****
- Removed labels: ****
@valliant -- Actually I have not used any script (as I'm not running FC), all
of the directories in /usr/include that you mention are regular directories
owned by ffmpeg.
I had to mod configure.ac because wxgtk 2.9 on Arch Linux uses a different name
for the wx-config tool (called wx-config-2.9) since you can have both 2.8 and
2.9 installed simultaneously. I also used the AC_CHECK_LIB macro posted above
to test for old/new ffmpeg library API but that is all.
I think I'll have to dig down during the weekend and *really* try to figure
this out. Thanks for the help so far! :)
Original comment by [email protected]
on 16 Oct 2013 at 4:55
- Added labels: ****
- Removed labels: ****
Okay, I may be on to something -- been googling around this morning and seen a
post at StackOverflow suggesting it's a name conflict between unrelated header
files with the same name.
Now, in this case it seems that the time.h file from libavutil clashes with the
system time.h. I guess reordering the include search path might help here.
(Btw. am I the only one who thinks giving a header file the same name as some
other system file is not the best idea? :| )
Original comment by [email protected]
on 29 Oct 2013 at 8:38
- Added labels: ****
- Removed labels: ****
Okay, I finally managed to get electricsheep to compile. The culprit were the
lines in MSVC/SettingsGUI/Makefile.am that added include search paths for
libav* libraries.
It seems the header files in those respective directories are not in use (yet)
so I reckon it'd be best if those files were included with the subdirectories
added in the #include directives to prevent any similar conflict.
Now I'll try to see what happens when the download of the first flock finishes
-- as was posted earlier, the screensaver gets stuck on the "download" screen.
Original comment by [email protected]
on 4 Nov 2013 at 8:57
- Added labels: ****
- Removed labels: ****
any chance this will ever run on any RHEL at all? ever? bugs been open for a
long time so i was just wondering.
Original comment by [email protected]
on 11 Dec 2013 at 12:30
- Added labels: ****
- Removed labels: ****
Posting in the forum seems disabled, so I'll leave this here.
When attempting to compile r160 on Ubuntu 14.10 (libavcodec-dev/libavformat-dev
6:11-1) with:
autoreconf -vfi && ./autogen.sh && ./configure && make
I get this error:
../ContentDecoder/ContentDecoder.cpp: In member function ‘bool
ContentDecoder::CContentDecoder::Open(ContentDecoder::sOpenVideoInfo*)’:
../ContentDecoder/ContentDecoder.cpp:240:131: error: ‘AVStream’ has no
member named ‘r_frame_rate’
ovi->m_totalFrameCount = uint32(((((double)ovi->m_pFormatContext->duration/(double)AV_TIME_BASE)) / av_q2d(ovi->m_pVideoStream->r_frame_rate) + .5));
^
Makefile:1006: recipe for target 'ContentDecoder.o' failed
Workaround:
In ContentDecoder/ContentDecoder.cpp replace the two occurrences of
'r_frame_rate' with 'avg_frame_rate'
Original comment by [email protected]
on 28 Feb 2015 at 2:17
- Added labels: ****
- Removed labels: ****
I'm running into the same problem.
It looks like there are 2 versions of avformat.h: one from 'libavformat-dev' and one from 'libavformat-ffmpeg-dev'. r_frame_rate is only available in the one from 'libavformat-ffmpeg-dev'.
Unfortunately, ContentDecoder also uses 'swscale', and on Debian, 'libswscale-dev' depends on 'libavutil-dev', not 'libavutil-ffmpeg-dev'. Thus Debian disallows libswscale-dev and libavformat-ffmpeg-dev from being installed at the same time.
So the fix for this situation would be either:
- make electricsheep independent of ffmpeg-specific features (i.e. not using r_frame_rate - but I'm not sure avg_frame_rate is a proper alternative).
- convince Debian that libswscale-dev and libavformat-ffmpeg-dev can co-exist (not sure what the situation behind that is)
According to this, avg_frame_rate is the proper replacement for r_frame_rate:
https://wiki.libav.org/Migration/10#r_frame_rate
I changed the code to use avg_frame_rate instead of r_frame_rate.
is this still being worked on?