On 10/8/2013 7:00 PM, Michael Chisholm wrote:
On 10/8/2013 6:19 PM, Carl Eugen Hoyos wrote:
Michael Chisholm <chisholm@...> writes:
demuxing.c: In function 'int main(int, char**)':
demuxing.c:261:66: error: invalid conversion from 'void*' to 'uint8_t**
{aka unsigned char**}' [-fpermissive]
audio_dst_data = av_mallocz(sizeof(uint8_t *) * nb_planes);
^
demuxing.c is a C program, if you want to compile it
with C++ (why?) you will have to convert it to C++,
just as with any other C program.
(Nothing about this is FFmpeg specific.)
Of course I wouldn't normally compile a C application with other than a
C compiler. There is overlap between C and C++, and the above was just
an experiment which basically shows that ffmpeg strays outside the
overlapping region. And I know as a C project, you have no obligation
to make the code "C++-friendly".
Is that the kind of error you are seeing (this is from ffmpeg 2.0.1)?
I am admittedly using an older version of libav (0.8.6)
Just to make sure: This is known to broken (and said to
be exploitable) so please understand that we cannot
support it here.
Yeah, I wouldn't ask for support for that here. But if James is willing
to use it, perhaps that will better fit his need. Or maybe there is an
earlier version of ffmpeg which is more C++-friendly. And of course he
can always use his API-indirection idea to wrap C++-unfriendly APIs with
C++-friendly ones.
Having a fresher head today, I realize this still wasn't a good test;
you really need a C++ app which uses libav APIs to test this, not a C
app. Or, you could try to see if you can get the C app working by
changing only the .c file, not any headers. That's easier, it means I
don't have to start a new app from scratch. So that's what I did, and I
was able to get demuxing.c to compile with a C++ compiler, without
modifying headers.
I just did the following:
- added casts to "frame->format" in a few places
- removed use of the "av_ts2timestr" macro, since it expanded to code
that produced a compile error [1]
- Compiled with -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
- Added extern "C" {...} around the includes
- Added cast to the return value of av_mallocz().
So my point to all this is, the ffmpeg-2.0.1 headers aren't completely
C++-friendly, but it's not as bad as I thought. I was able to work
around the problems easily, with this simple test app.
fyi,
Andy
1.
c:/.../ffmpeg-2.0.1/include/libavutil/timestamp.h:72:94: error:
taking address of temporary array
#define av_ts2timestr(ts, tb)
av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb)
^
demuxing.c:87:20: note: in expansion of macro 'av_ts2timestr'
av_ts2timestr(frame->pts, &video_dec_ctx->time_base));
^
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user