[FFmpeg-devel] [PATCH] doc/examples/muxing: make compatible with C++

Anshul anshul.ffmpeg at gmail.com
Sun Apr 13 08:21:43 CEST 2014


Michael Niedermayer <michaelni at gmx.at> wrote:
>On Wed, Mar 19, 2014 at 11:45:08AM +0530, anshul wrote:
>> On 03/19/2014 03:44 AM, Michael Niedermayer wrote:
>> >On Tue, Mar 18, 2014 at 09:37:01PM +0530, anshul wrote:
>> >>On 03/18/2014 04:57 PM, Clément Boesch wrote:
>> >>>On Tue, Mar 18, 2014 at 04:12:49PM +0530, anshul wrote:
>> >>>>On 03/18/2014 12:28 AM, Stefano Sabatini wrote:
>> >>>>>On date Friday 2014-03-14 17:15:23 +0100, Michael Niedermayer
>encoded:
>> >>>>>>On Fri, Mar 14, 2014 at 10:17:16AM +0100, Stefano Sabatini
>wrote:
>> >>>>>>>On date Thursday 2014-03-13 23:10:40 +0100, Clément Boesch
>encoded:
>> >>>>>>>>On Thu, Mar 13, 2014 at 06:03:49PM +0100, Michael Niedermayer
>wrote:
>> >>>>>>>[...]
>> >>>>>>>>I don't think supporting examples compilation with g++ is
>worth the
>> >>>>>>>>effort. Actually, I believe it's harmful because people doing
>C will start
>> >>>>>>>>copying naive/broken/c++ patterns (are you going to cast
>malloc() return
>> >>>>>>>>values too?).
>> >>>>>>>+1, we decided FFmpeg was C and we shouldn't try to make
>half-baked
>> >>>>>>>attempts at pretending it is C++ or the next
>looks-almost-like-c
>> >>>>>>>thing.
>> >>>>>>this patch doesnt change ffmpeg, it changes the examples.
>> >>>>>>
>> >>>>>>People who want to use ffmpeg from C++ need examples which work
>in
>> >>>>>>C++.
>> >>>>>>ive written that patch in response to a question of how to do
>what
>> >>>>>>muxing.c does from C++ as it didnt build even with extern C and
>the
>> >>>>>>error messages truly where not helpfull in figuring out what
>was
>> >>>>>>the cause.
>> >>>>>We have this page:
>>
>>>>>>http://trac.ffmpeg.org/wiki/Including%20FFmpeg%20headers%20in%20a%20C%2B%2B%20application
>> >>>>>
>> >>>>>We could extend the page, probably rename it, add more comments
>about
>> >>>>>using FFmpeg from C++ and link it from the README (which we
>should
>> >>>>>rename DONTREADME so people would actually read it).
>> >>>>>
>> >>>>>As it is the patch is half baked, because:
>> >>>>>
>> >>>>>1. it is not written anywhere that examples can be directly
>converted
>> >>>>>to C++ code
>> >>>>>2. the preprocessor hack is only adopted in muxing.c, ignoring
>all the
>> >>>>>other C examples.
>> >>>>Hi
>> >>>>
>> >>>>Here is patch attached for cpp examples files.
>> >>>>
>> >>>>Please report if they fail to compile or do there intended job.
>> >>>>
>> >>>>
>> >>>>Thanks
>> >>>>Anshul
>> >>>> From 6adc8aaf4da5bb829505f398c0c7d2be8e22081d Mon Sep 17
>00:00:00 2001
>> >>>>From: Anshul Maheshwari <er.anshul.maheshwari at gmail.com>
>> >>>>Date: Tue, 18 Mar 2014 16:07:20 +0530
>> >>>>Subject: [PATCH] added examples in cpp
>> >>>>
>> >>>>---
>> >>>>  doc/examples_cpp/Makefile              |  44 ++
>> >>>>  doc/examples_cpp/avcodec.cpp           | 659
>++++++++++++++++++++++++++++
>> >>>>  doc/examples_cpp/avio_reading.cpp      | 134 ++++++
>> >>>>  doc/examples_cpp/demuxing_decoding.cpp | 387 +++++++++++++++++
>> >>>>  doc/examples_cpp/filter_audio.cpp      | 364 ++++++++++++++++
>> >>>>  doc/examples_cpp/filtering_audio.cpp   | 283 +++++++++++++
>> >>>>  doc/examples_cpp/filtering_video.cpp   | 263 ++++++++++++
>> >>>>  doc/examples_cpp/metadata.cpp          |  58 +++
>> >>>>  doc/examples_cpp/muxing.cpp            | 614
>+++++++++++++++++++++++++++
>> >>>>  doc/examples_cpp/remuxing.cpp          | 173 ++++++++
>> >>>>  doc/examples_cpp/resampling_audio.cpp  | 218 ++++++++++
>> >>>>  doc/examples_cpp/scaling_video.cpp     | 143 +++++++
>> >>>>  doc/examples_cpp/transcode_aac.cpp     | 754
>+++++++++++++++++++++++++++++++++
>> >>>>  doc/examples_cpp/transcoding.cpp       | 602
>++++++++++++++++++++++++++
>> >>>>  14 files changed, 4696 insertions(+)
>> >>>>  create mode 100644 doc/examples_cpp/Makefile
>> >>>>  create mode 100644 doc/examples_cpp/avcodec.cpp
>> >>>>  create mode 100644 doc/examples_cpp/avio_reading.cpp
>> >>>>  create mode 100644 doc/examples_cpp/demuxing_decoding.cpp
>> >>>>  create mode 100644 doc/examples_cpp/filter_audio.cpp
>> >>>>  create mode 100644 doc/examples_cpp/filtering_audio.cpp
>> >>>>  create mode 100644 doc/examples_cpp/filtering_video.cpp
>> >>>>  create mode 100644 doc/examples_cpp/metadata.cpp
>> >>>>  create mode 100644 doc/examples_cpp/muxing.cpp
>> >>>>  create mode 100644 doc/examples_cpp/remuxing.cpp
>> >>>>  create mode 100644 doc/examples_cpp/resampling_audio.cpp
>> >>>>  create mode 100644 doc/examples_cpp/scaling_video.cpp
>> >>>>  create mode 100644 doc/examples_cpp/transcode_aac.cpp
>> >>>>  create mode 100644 doc/examples_cpp/transcoding.cpp
>> >>>>
>> >>>This lacks the integration with our build system. It sounds like
>this is
>> >>>going to be a hell to maintain...
>> >>>
>> >>>[...]
>> >>>
>> >>>
>> >>>
>> >>>_______________________________________________
>> >>>ffmpeg-devel mailing list
>> >>>ffmpeg-devel at ffmpeg.org
>> >>>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> >>I have added integration with build system.
>> >>
>> >>Thanks
>> >>Anshul Maheshwari
>> >>  Makefile                               |    7
>> >>  doc/Makefile                           |   10
>> >>  doc/examples_cpp/Makefile              |   44 +
>> >>  doc/examples_cpp/README                |   23 +
>> >>  doc/examples_cpp/avcodec.cpp           |  659
>++++++++++++++++++++++++++++
>> >>  doc/examples_cpp/avio_reading.cpp      |  134 +++++
>> >>  doc/examples_cpp/demuxing_decoding.cpp |  387 ++++++++++++++++
>> >>  doc/examples_cpp/filter_audio.cpp      |  365 +++++++++++++++
>> >>  doc/examples_cpp/filtering_audio.cpp   |  283 ++++++++++++
>> >>  doc/examples_cpp/filtering_video.cpp   |  263 +++++++++++
>> >>  doc/examples_cpp/metadata.cpp          |   58 ++
>> >>  doc/examples_cpp/muxing.cpp            |  614
>++++++++++++++++++++++++++
>> >>  doc/examples_cpp/remuxing.cpp          |  173 +++++++
>> >>  doc/examples_cpp/resampling_audio.cpp  |  218 +++++++++
>> >>  doc/examples_cpp/scaling_video.cpp     |  143 ++++++
>> >>  doc/examples_cpp/transcode_aac.cpp     |  754
>+++++++++++++++++++++++++++++++++
>> >>  doc/examples_cpp/transcoding.cpp       |  602
>++++++++++++++++++++++++++
>> >>  17 files changed, 4734 insertions(+), 3 deletions(-)
>> >>7c6a83b9b007df59913920f5c0084f5af16cf1d0 
>0001-added-CPlusPlus-examples.patch
>> >> From a98dc136a7f66ef29be0b1bca6bf9eaa9a01e9cd Mon Sep 17 00:00:00
>2001
>> >>From: Anshul Maheshwari <er.anshul.maheshwari at gmail.com>
>> >>Date: Tue, 18 Mar 2014 21:32:08 +0530
>> >>Subject: [PATCH] added CPlusPlus examples
>> >>
>> >>---
>> >>  Makefile                               |   7 +-
>> >>  doc/Makefile                           |  10 +-
>> >>  doc/examples_cpp/Makefile              |  44 ++
>> >>  doc/examples_cpp/README                |  23 +
>> >>  doc/examples_cpp/avcodec.cpp           | 659
>++++++++++++++++++++++++++++
>> >>  doc/examples_cpp/avio_reading.cpp      | 134 ++++++
>> >>  doc/examples_cpp/demuxing_decoding.cpp | 387 +++++++++++++++++
>> >>  doc/examples_cpp/filter_audio.cpp      | 365 ++++++++++++++++
>> >>  doc/examples_cpp/filtering_audio.cpp   | 283 +++++++++++++
>> >>  doc/examples_cpp/filtering_video.cpp   | 263 ++++++++++++
>> >>  doc/examples_cpp/metadata.cpp          |  58 +++
>> >>  doc/examples_cpp/muxing.cpp            | 614
>+++++++++++++++++++++++++++
>> >>  doc/examples_cpp/remuxing.cpp          | 173 ++++++++
>> >>  doc/examples_cpp/resampling_audio.cpp  | 218 ++++++++++
>> >>  doc/examples_cpp/scaling_video.cpp     | 143 +++++++
>> >>  doc/examples_cpp/transcode_aac.cpp     | 754
>+++++++++++++++++++++++++++++++++
>> >>  doc/examples_cpp/transcoding.cpp       | 602
>++++++++++++++++++++++++++
>> >>  17 files changed, 4734 insertions(+), 3 deletions(-)
>> >>  create mode 100644 doc/examples_cpp/Makefile
>> >>  create mode 100644 doc/examples_cpp/README
>> >>  create mode 100644 doc/examples_cpp/avcodec.cpp
>> >>  create mode 100644 doc/examples_cpp/avio_reading.cpp
>> >>  create mode 100644 doc/examples_cpp/demuxing_decoding.cpp
>> >>  create mode 100644 doc/examples_cpp/filter_audio.cpp
>> >>  create mode 100644 doc/examples_cpp/filtering_audio.cpp
>> >>  create mode 100644 doc/examples_cpp/filtering_video.cpp
>> >>  create mode 100644 doc/examples_cpp/metadata.cpp
>> >>  create mode 100644 doc/examples_cpp/muxing.cpp
>> >>  create mode 100644 doc/examples_cpp/remuxing.cpp
>> >>  create mode 100644 doc/examples_cpp/resampling_audio.cpp
>> >>  create mode 100644 doc/examples_cpp/scaling_video.cpp
>> >>  create mode 100644 doc/examples_cpp/transcode_aac.cpp
>> >>  create mode 100644 doc/examples_cpp/transcoding.cpp
>> >>
>> >>diff --git a/Makefile b/Makefile
>> >>index f497f57..ca68bb5 100644
>> >>--- a/Makefile
>> >>+++ b/Makefile
>> >>@@ -47,6 +47,7 @@ FFLIBS := avutil
>> >>  DATA_FILES := $(wildcard $(SRC_PATH)/presets/*.ffpreset)
>$(SRC_PATH)/doc/ffprobe.xsd
>> >>  EXAMPLES_FILES := $(wildcard $(SRC_PATH)/doc/examples/*.c)
>$(SRC_PATH)/doc/examples/Makefile $(SRC_PATH)/doc/examples/README
>> >>+CPP_EXAMPLES_FILES := $(wildcard
>$(SRC_PATH)/doc/examples_cpp/*.cpp)
>$(SRC_PATH)/doc/examples_cpp/Makefile
>$(SRC_PATH)/doc/examples_cpp/README
>> >>  SKIPHEADERS = cmdutils_common_opts.h compat/w32pthreads.h
>> >>@@ -146,10 +147,12 @@ install-progs: install-progs-yes $(AVPROGS)
>> >>  	$(Q)mkdir -p "$(BINDIR)"
>> >>  	$(INSTALL) -c -m 755 $(INSTPROGS) "$(BINDIR)"
>> >>-install-data: $(DATA_FILES) $(EXAMPLES_FILES)
>> >>+install-data: $(DATA_FILES) $(EXAMPLES_FILES)
>$(CPP_EXAMPLES_FILES)
>> >>  	$(Q)mkdir -p "$(DATADIR)/examples"
>> >>+	$(Q)mkdir -p "$(DATADIR)/examples_cpp"
>> >>  	$(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)"
>> >>  	$(INSTALL) -m 644 $(EXAMPLES_FILES) "$(DATADIR)/examples"
>> >>+	$(INSTALL) -m 644 $(CPP_EXAMPLES_FILES) "$(DATADIR)/examples_cpp"
>> >>  uninstall: uninstall-libs uninstall-headers uninstall-progs
>uninstall-data
>> >>@@ -173,7 +176,7 @@ distclean::
>> >>  config:
>> >>  	$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)
>> >>-check: all alltools examples testprogs fate
>> >>+check: all alltools examples examples_cpp testprogs fate
>> >>  include $(SRC_PATH)/tests/Makefile
>> >>diff --git a/doc/Makefile b/doc/Makefile
>> >>index 10f03cc..eddd6b4 100644
>> >>--- a/doc/Makefile
>> >>+++ b/doc/Makefile
>> >>@@ -56,6 +56,8 @@ ALL_DOC_EXAMPLES   :=
>$(ALL_DOC_EXAMPLES_LIST:%=doc/examples/%$(PROGSSUF)$(EXESU
>> >>  ALL_DOC_EXAMPLES_G :=
>$(ALL_DOC_EXAMPLES_LIST:%=doc/examples/%$(PROGSSUF)_g$(EXESUF))
>> >>  PROGS              += $(DOC_EXAMPLES)
>> >>+DOC_EXAMPLES_CPP_DIR := doc/examples_cpp/
>> >>+
>> >>  all-$(CONFIG_DOC): doc
>> >>  doc: documentation
>> >>@@ -65,6 +67,9 @@ documentation: $(DOCS)
>> >>  examples: $(DOC_EXAMPLES)
>> >>+examples_cpp:
>> >>+	make -C $(DOC_EXAMPLES_CPP_DIR)
>> >this will not work on BSD as its called gmake there
>> >
>> >
>> >
>> >>+
>> >>  TEXIDEP = perl $(SRC_PATH)/doc/texidep.pl $(SRC_PATH) $< $@
>>$(@:%=%.d)
>> >>  doc/%.txt: TAG = TXT
>> >>@@ -158,7 +163,10 @@ examplesclean:
>> >>  	$(RM) $(ALL_DOC_EXAMPLES) $(ALL_DOC_EXAMPLES_G)
>> >>  	$(RM) $(CLEANSUFFIXES:%=doc/examples/%)
>> >>-docclean: examplesclean
>> >>+examples_cpp_clean:
>> >>+	make -C $(DOC_EXAMPLES_CPP_DIR) clean
>> >>+
>> >>+docclean: examplesclean examples_cpp_clean
>> >>  	$(RM) $(CLEANSUFFIXES:%=doc/%)
>> >>  	$(RM) $(TXTPAGES) doc/*.html doc/*.pod doc/*.1 doc/*.3
>doc/avoptions_*.texi
>> >>  	$(RM) -r doc/doxy/html
>> >>diff --git a/doc/examples_cpp/Makefile b/doc/examples_cpp/Makefile
>> >>new file mode 100644
>> >>index 0000000..fc5ce9f
>> >>--- /dev/null
>> >>+++ b/doc/examples_cpp/Makefile
>> >>@@ -0,0 +1,44 @@
>> >>+
>> >>+CC=g++
>> >its not guranteed the c++ compiler is called g++ nor is it guranteed
>> >that one is there at all
>> >
>> >
>> >also if you want to maintain this code, please add yourself to
>> >the MAINTAINERs file
>> >
>> >[...]
>> >
>> >
>> >
>> >_______________________________________________
>> >ffmpeg-devel mailing list
>> >ffmpeg-devel at ffmpeg.org
>> >http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> Done the suggested changes
>
>running a make distclean with this patch applied
>produces:
>Package libavdevice was not found in the pkg-config search path.
>Perhaps you should add the directory containing `libavdevice.pc'
>to the PKG_CONFIG_PATH environment variable
>No package 'libavdevice' found
>Package libswresample was not found in the pkg-config search path.
>Perhaps you should add the directory containing `libswresample.pc'
>to the PKG_CONFIG_PATH environment variable
>No package 'libswresample' found
>Package libavdevice was not found in the pkg-config search path.
>Perhaps you should add the directory containing `libavdevice.pc'
>to the PKG_CONFIG_PATH environment variable
>No package 'libavdevice' found
>Package libswresample was not found in the pkg-config search path.
>Perhaps you should add the directory containing `libswresample.pc'
>to the PKG_CONFIG_PATH environment variable
>No package 'libswresample' found
>

I am looking at it.


>>  
>> diff --git a/doc/Makefile b/doc/Makefile
>> index 44049c4..5c1371a 100644
>> --- a/doc/Makefile
>> +++ b/doc/Makefile
>> @@ -36,6 +36,13 @@ DOCS-$(CONFIG_MANPAGES)  += $(MANPAGES)
>>  DOCS-$(CONFIG_TXTPAGES)  += $(TXTPAGES)
>>  DOCS = $(DOCS-yes)
>>  
>> +EXAMPLE_CPP_MAKE=make
>> +EXAMPLE_CPP_MAKE_VERSION := $(shell $(EXAMPLE_CPP_MAKE) --version 2>
>/dev/null )
>> +ifndef EXAMPLE_CPP_MAKE_VERSION
>> +EXAMPLE_CPP_MAKE=gmake
>> +EXAMPLE_CPP_MAKE_VERSION := $(shell $(EXAMPLE_CPP_MAKE) --version 2>
>/dev/null )
>> +endif
>
>that looks really wrong
>a Makefile should not need to test for how the make application is
>called
>
>
>[...]

This was done since you said make is not available on openBSD.
I choose to call makefile, since I cant compile the code with existing makefile the default behavior of checking compiler for cpp has been changed in existing makefile.

I am open for suggestions what should be done else.

Thanks
Anshul


-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.


More information about the ffmpeg-devel mailing list