[FFmpeg-devel] [PATCH v3 1/1] avcodec: implemented Media Foundation encoder wrapper

Paweł Wegner pawel.wegner95 at gmail.com
Tue Nov 13 13:23:42 EET 2018


On Tue, Nov 13, 2018 at 11:40 AM Michael Niedermayer <michael at niedermayer.cc>
wrote:

> On Tue, Nov 13, 2018 at 09:50:17AM +0100, Paweł Wegner wrote:
> > On Tue, Nov 13, 2018 at 12:39 AM Michael Niedermayer
> <michael at niedermayer.cc>
> > wrote:
> >
> > > On Mon, Nov 12, 2018 at 02:42:36PM +0100, Paweł Wegner wrote:
> > > > Implemented the following encoders:
> > > > * ff_h264_mf_encoder
> > > > * ff_hevc_mf_encoder
> > > > * ff_aac_mf_encoder
> > > > * ff_ac3_mf_encoder
> > > > * ff_mp3_mf_encoder
> > > >
> > > > The code is based on the PLEX's FFmpeg fork which can be found here:
> > > > https://files.plexapp.com/elan/ffmpeg/plex-ffmpeg-2017-12-17.txz
> > > >
> > > > Signed-off-by: Paweł Wegner <pawel.wegner95 at gmail.com>
> > > > ---
> > > >  configure              |   11 +
> > > >  libavcodec/Makefile    |    1 +
> > > >  libavcodec/allcodecs.c |    5 +
> > > >  libavcodec/mf_utils.c  |  734 ++++++++++++++++++++++++
> > > >  libavcodec/mf_utils.h  |  207 +++++++
> > > >  libavcodec/mfenc.c     | 1242
> ++++++++++++++++++++++++++++++++++++++++
> > > >  6 files changed, 2200 insertions(+)
> > > >  create mode 100644 libavcodec/mf_utils.c
> > > >  create mode 100644 libavcodec/mf_utils.h
> > > >  create mode 100644 libavcodec/mfenc.c
> > >
> > > breaks build for mingw64
> >
> >
> > > CC      libavcodec/mf_utils.o
> > > In file included from /usr/share/mingw-w64/include/wmcodecdsp.h:613:0,
> > >                  from src/libavcodec/mf_utils.h:26,
> > >                  from src/libavcodec/mf_utils.c:24:
> > > /usr/share/mingw-w64/include/strmif.h:15380:2: warning: #warning COM
> > > interfaces layout in this header has not been verified. [-Wcpp]
> > >  #warning COM interfaces layout in this header has not been verified.
> > >   ^
> > > /usr/share/mingw-w64/include/strmif.h:15381:2: warning: #warning COM
> > > interfaces with incorrect layout may not work at all. [-Wcpp]
> > >  #warning COM interfaces with incorrect layout may not work at all.
> > >   ^
> > > /usr/share/mingw-w64/include/strmif.h:15410:2: warning: #warning COM
> > > interfaces layout in this header has not been verified. [-Wcpp]
> > >  #warning COM interfaces layout in this header has not been verified.
> > >   ^
> > > /usr/share/mingw-w64/include/strmif.h:15411:2: warning: #warning COM
> > > interfaces with incorrect layout may not work at all. [-Wcpp]
> > >  #warning COM interfaces with incorrect layout may not work at all.
> > >   ^
> > >
> > I can silence these warnings by doing #undef __GNU_C__ before the MF
> > inclusion; but would that really be better?
> > This is where this comes from:
> >
> https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/mfplay.h#L59
> >
> >
> > > In file included from /usr/share/mingw-w64/include/wmcodecdsp.h:613:0,
> > >                  from src/libavcodec/mf_utils.h:26,
> > >                  from src/libavcodec/mf_utils.c:24:
> > > /usr/share/mingw-w64/include/strmif.h:15382:9: note: #pragma message:
> > > Interface IAMAsyncReaderTimestampScaling has unverified layout.
> > >  __MINGW_BROKEN_INTERFACE(INTERFACE)
> > > ...
> > >
> > This one comes from mingw as well; and can be worked around the same way.
>
> sorry i have cut the compiler output incorrectly
> heres the full output, there are multiple real errors, not just warnings:
>
>
>
> In file included from /usr/share/mingw-w64/include/wmcodecdsp.h:613:0,
>                  from src/libavcodec/mf_utils.h:26,
>                  from src/libavcodec/mf_utils.c:24:
> /usr/share/mingw-w64/include/strmif.h:15380:2: warning: #warning COM
> interfaces layout in this header has not been verified. [-Wcpp]
>  #warning COM interfaces layout in this header has not been verified.
>   ^
> /usr/share/mingw-w64/include/strmif.h:15381:2: warning: #warning COM
> interfaces with incorrect layout may not work at all. [-Wcpp]
>  #warning COM interfaces with incorrect layout may not work at all.
>   ^
> /usr/share/mingw-w64/include/strmif.h:15410:2: warning: #warning COM
> interfaces layout in this header has not been verified. [-Wcpp]
>  #warning COM interfaces layout in this header has not been verified.
>   ^
> /usr/share/mingw-w64/include/strmif.h:15411:2: warning: #warning COM
> interfaces with incorrect layout may not work at all. [-Wcpp]
>  #warning COM interfaces with incorrect layout may not work at all.
>   ^
> In file included from /usr/share/mingw-w64/include/wmcodecdsp.h:613:0,
>                  from src/libavcodec/mf_utils.h:26,
>                  from src/libavcodec/mf_utils.c:24:
> /usr/share/mingw-w64/include/strmif.h:15382:9: note: #pragma message:
> Interface IAMAsyncReaderTimestampScaling has unverified layout.
>  __MINGW_BROKEN_INTERFACE(INTERFACE)
>          ^
> In file included from /usr/share/mingw-w64/include/wmcodecdsp.h:613:0,
>                  from src/libavcodec/mf_utils.h:26,
>                  from src/libavcodec/mf_utils.c:24:
> /usr/share/mingw-w64/include/strmif.h:15412:9: note: #pragma message:
> Interface IAMPluginControl has unverified layout.
>  __MINGW_BROKEN_INTERFACE(INTERFACE)
>          ^
> src/libavcodec/mf_utils.c: In function ‘ff_hr_str_buf’:
> src/libavcodec/mf_utils.c:96:10: error:
> ‘MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING’ undeclared (first
> use in this function)
>      HR(MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING)
>           ^
> src/libavcodec/mf_utils.c:96:10: note: each undeclared identifier is
> reported only once for each function it appears in
> src/libavcodec/mf_utils.c:98:10: error: ‘MF_E_UNSUPPORTED_D3D_TYPE’
> undeclared (first use in this function)
>      HR(MF_E_UNSUPPORTED_D3D_TYPE)
>           ^
> src/libavcodec/mf_utils.c:99:10: error: ‘MF_E_TRANSFORM_NEED_MORE_INPUT’
> undeclared (first use in this function)
>      HR(MF_E_TRANSFORM_NEED_MORE_INPUT)
>           ^
> src/libavcodec/mf_utils.c:100:10: error: ‘MF_E_TRANSFORM_STREAM_CHANGE’
> undeclared (first use in this function)
>      HR(MF_E_TRANSFORM_STREAM_CHANGE)
>           ^
> src/libavcodec/mf_utils.c: In function ‘ff_create_memory_sample’:
> src/libavcodec/mf_utils.c:125:5: error: implicit declaration of function
> ‘MFCreateAlignedMemoryBuffer’ [-Werror=implicit-function-declaration]
>      hr = MFCreateAlignedMemoryBuffer(size, align - 1, &buffer);
>      ^
> src/libavcodec/mf_utils.c: At top level:
> src/libavcodec/mf_utils.c:280:8: error: ‘MFVideoFormat_H264_ES’ undeclared
> here (not in a function)
>      GUID_ENTRY(MFVideoFormat_H264_ES),
>         ^
> src/libavcodec/mf_utils.c:281:8: error: ‘MFVideoFormat_HEVC’ undeclared
> here (not in a function)
>      GUID_ENTRY(MFVideoFormat_HEVC),
>         ^
> src/libavcodec/mf_utils.c:282:8: error: ‘MFVideoFormat_HEVC_ES’ undeclared
> here (not in a function)
>      GUID_ENTRY(MFVideoFormat_HEVC_ES),
>         ^
> src/libavcodec/mf_utils.c:283:8: error: ‘MFVideoFormat_MPEG2’ undeclared
> here (not in a function)
>      GUID_ENTRY(MFVideoFormat_MPEG2),
>         ^
> src/libavcodec/mf_utils.c:290:8: error: ‘MFAudioFormat_Dolby_AC3’
> undeclared here (not in a function)
>      GUID_ENTRY(MFAudioFormat_Dolby_AC3),
>         ^
> src/libavcodec/mf_utils.c:291:8: error: ‘MFAudioFormat_Dolby_DDPlus’
> undeclared here (not in a function)
>      GUID_ENTRY(MFAudioFormat_Dolby_DDPlus),
>         ^
> src/libavcodec/mf_utils.c: In function ‘ff_guid_str_buf’:
> src/libavcodec/mf_utils.c:389:9: warning: ‘av_get_codec_tag_string’ is
> deprecated (declared at src/libavcodec/avcodec.h:5583)
> [-Wdeprecated-declarations]
>          av_get_codec_tag_string(tag, sizeof(tag), fourcc);
>          ^
> src/libavcodec/mf_utils.c: In function ‘ff_codec_to_mf_subtype’:
> src/libavcodec/mf_utils.c:589:28: warning: return from incompatible
> pointer type [enabled by default]
>      case AV_CODEC_ID_HEVC:              return &MFVideoFormat_HEVC;
>                             ^
> src/libavcodec/mf_utils.c:591:34: warning: return from incompatible
> pointer type [enabled by default]
>      case AV_CODEC_ID_MPEG2VIDEO:        return &MFVideoFormat_MPEG2;
>                                   ^
> src/libavcodec/mf_utils.c:600:27: warning: return from incompatible
> pointer type [enabled by default]
>      case AV_CODEC_ID_AC3:               return &MFAudioFormat_Dolby_AC3;
>                            ^
> src/libavcodec/mf_utils.c:601:28: warning: return from incompatible
> pointer type [enabled by default]
>      case AV_CODEC_ID_EAC3:              return
> &MFAudioFormat_Dolby_DDPlus;
>                             ^
> src/libavcodec/mf_utils.c: In function ‘ff_instantiate_mf’:
> src/libavcodec/mf_utils.c:658:13: error: ‘MFT_ENUM_FLAG_SORTANDFILTER’
> undeclared (first use in this function)
>      flags = MFT_ENUM_FLAG_SORTANDFILTER;
>              ^
> src/libavcodec/mf_utils.c:658:11: warning: assignment makes integer from
> pointer without a cast [enabled by default]
>      flags = MFT_ENUM_FLAG_SORTANDFILTER;
>            ^
> src/libavcodec/mf_utils.c:661:18: error: ‘MFT_ENUM_FLAG_HARDWARE’
> undeclared (first use in this function)
>          flags |= MFT_ENUM_FLAG_HARDWARE;
>                   ^
> src/libavcodec/mf_utils.c:661:15: error: invalid operands to binary |
> (have ‘UINT32’ and ‘struct GUID_Entry *’)
>          flags |= MFT_ENUM_FLAG_HARDWARE;
>                ^
> src/libavcodec/mf_utils.c:661:9: warning: statement with no effect
> [-Wunused-value]
>          flags |= MFT_ENUM_FLAG_HARDWARE;
>          ^
> src/libavcodec/mf_utils.c:663:18: error: ‘MFT_ENUM_FLAG_SYNCMFT’
> undeclared (first use in this function)
>          flags |= MFT_ENUM_FLAG_SYNCMFT;
>                   ^
> src/libavcodec/mf_utils.c:663:15: error: invalid operands to binary |
> (have ‘UINT32’ and ‘struct GUID_Entry *’)
>          flags |= MFT_ENUM_FLAG_SYNCMFT;
>                ^
> src/libavcodec/mf_utils.c:663:9: warning: statement with no effect
> [-Wunused-value]
>          flags |= MFT_ENUM_FLAG_SYNCMFT;
>          ^
> cc1: some warnings being treated as errors
> make: *** [libavcodec/mf_utils.o] Error 1
>
What is your MinGW version? I'm using x86_64-w64-mingw32-g++ (GCC)
7.3-posix 20180312
If there is some MinGW version which has to be supported I can insert
necessary compatibility checks.

>
>
>
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> I am the wisest man alive, for I know one thing, and that is that I know
> nothing. -- Socrates
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list