From: Torge Matthies tmatthies@codeweavers.com
--- dlls/mfreadwrite/writer.c | 2 ++ dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/main.c | 3 +++ dlls/winegstreamer/media_sink.c | 23 ++++++++++++++++++++ dlls/winegstreamer/winegstreamer_classes.idl | 7 ++++++ 5 files changed, 36 insertions(+)
diff --git a/dlls/mfreadwrite/writer.c b/dlls/mfreadwrite/writer.c index c708664d2fc..f4ef3bc12d4 100644 --- a/dlls/mfreadwrite/writer.c +++ b/dlls/mfreadwrite/writer.c @@ -1018,6 +1018,7 @@ static HRESULT sink_writer_get_sink_factory_class(const WCHAR *url, IMFAttribute { L".mp3", &MFTranscodeContainerType_MP3 }, { L".wav", &MFTranscodeContainerType_WAVE }, { L".avi", &MFTranscodeContainerType_AVI }, + { L".aac", &MFTranscodeContainerType_ADTS }, }; static const struct { @@ -1029,6 +1030,7 @@ static HRESULT sink_writer_get_sink_factory_class(const WCHAR *url, IMFAttribute { &MFTranscodeContainerType_MP3, &CLSID_MFMP3SinkClassFactory }, { &MFTranscodeContainerType_WAVE, &CLSID_MFWAVESinkClassFactory }, { &MFTranscodeContainerType_AVI, &CLSID_MFAVISinkClassFactory }, + { &MFTranscodeContainerType_ADTS, &CLSID_MFADTSSinkClassFactory }, }; const WCHAR *extension; GUID container; diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 2374fb6fddd..17cef4b150e 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -115,6 +115,7 @@ HRESULT resampler_create(IUnknown *outer, IUnknown **out); HRESULT color_convert_create(IUnknown *outer, IUnknown **out); HRESULT mp3_sink_class_factory_create(IUnknown *outer, IUnknown **out); HRESULT mpeg4_sink_class_factory_create(IUnknown *outer, IUnknown **out); +HRESULT adts_sink_class_factory_create(IUnknown *outer, IUnknown **out);
bool amt_from_wg_format(AM_MEDIA_TYPE *mt, const struct wg_format *format, bool wm); bool amt_to_wg_format(const AM_MEDIA_TYPE *mt, struct wg_format *format); diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 74a6eee5b1d..d6ce9349fed 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -759,6 +759,7 @@ static struct class_factory resampler_cf = {{&class_factory_vtbl}, resampler_cre static struct class_factory color_convert_cf = {{&class_factory_vtbl}, color_convert_create}; static struct class_factory mp3_sink_class_factory_cf = {{&class_factory_vtbl}, mp3_sink_class_factory_create}; static struct class_factory mpeg4_sink_class_factory_cf = {{&class_factory_vtbl}, mpeg4_sink_class_factory_create}; +static struct class_factory adts_sink_class_factory_cf = {{&class_factory_vtbl}, adts_sink_class_factory_create};
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) { @@ -799,6 +800,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) factory = &mp3_sink_class_factory_cf; else if (IsEqualGUID(clsid, &CLSID_MFMPEG4SinkClassFactory)) factory = &mpeg4_sink_class_factory_cf; + else if (IsEqualGUID(clsid, &CLSID_MFADTSSinkClassFactory)) + factory = &adts_sink_class_factory_cf; else { FIXME("%s not implemented, returning CLASS_E_CLASSNOTAVAILABLE.\n", debugstr_guid(clsid)); diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 6e9727aa5a9..78f8249692d 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -1421,6 +1421,14 @@ static HRESULT WINAPI mpeg4_sink_class_factory_CreateMediaSink(IMFSinkClassFacto return sink_class_factory_create_media_sink(iface, bytestream, format, video_type, audio_type, out); }
+static HRESULT WINAPI adts_sink_class_factory_CreateMediaSink(IMFSinkClassFactory *iface, IMFByteStream *bytestream, + IMFMediaType *video_type, IMFMediaType *audio_type, IMFMediaSink **out) +{ + const char *format = "application/x-gst-av-adts"; + + return sink_class_factory_create_media_sink(iface, bytestream, format, video_type, audio_type, out); +} + static const IMFSinkClassFactoryVtbl mp3_sink_class_factory_vtbl = { sink_class_factory_QueryInterface, @@ -1437,8 +1445,17 @@ static const IMFSinkClassFactoryVtbl mpeg4_sink_class_factory_vtbl = mpeg4_sink_class_factory_CreateMediaSink, };
+static const IMFSinkClassFactoryVtbl aac_sink_class_factory_vtbl = +{ + sink_class_factory_QueryInterface, + sink_class_factory_AddRef, + sink_class_factory_Release, + adts_sink_class_factory_CreateMediaSink, +}; + static IMFSinkClassFactory mp3_sink_class_factory = { &mp3_sink_class_factory_vtbl }; static IMFSinkClassFactory mpeg4_sink_class_factory = { &mpeg4_sink_class_factory_vtbl }; +static IMFSinkClassFactory aac_sink_class_factory = { &aac_sink_class_factory_vtbl };
HRESULT mp3_sink_class_factory_create(IUnknown *outer, IUnknown **out) { @@ -1451,3 +1468,9 @@ HRESULT mpeg4_sink_class_factory_create(IUnknown *outer, IUnknown **out) *out = (IUnknown *)&mpeg4_sink_class_factory; return S_OK; } + +HRESULT adts_sink_class_factory_create(IUnknown *outer, IUnknown **out) +{ + *out = (IUnknown *)&aac_sink_class_factory; + return S_OK; +} diff --git a/dlls/winegstreamer/winegstreamer_classes.idl b/dlls/winegstreamer/winegstreamer_classes.idl index bb727ca8645..ec2103c5f26 100644 --- a/dlls/winegstreamer/winegstreamer_classes.idl +++ b/dlls/winegstreamer/winegstreamer_classes.idl @@ -131,3 +131,10 @@ coclass MFMP3SinkClassFactory {} uuid(a22c4fc7-6e91-4e1d-89e9-53b2667b72ba) ] coclass MFMPEG4SinkClassFactory {} + +[ + helpstring("MF ADTS Sink Class Factory"), + threading(both), + uuid(d7ca55ab-5022-4db3-a599-abafa358e6f3) +] +coclass MFADTSSinkClassFactory {}