[FFmpeg-devel] [PATCH 2/2] dshow: Make dshow device buildable on Cygwin

Moriyoshi Koizumi mozo at mozo.jp
Fri May 6 10:56:15 CEST 2016


From: Moriyoshi koizumi <mozo at mozo.jp>

wchar_t is not always the same thing as WCHAR.

Signed-off-by: Moriyoshi koizumi <mozo at mozo.jp>
---
 libavdevice/dshow.c         |  6 +++---
 libavdevice/dshow_capture.h | 10 +++++-----
 libavdevice/dshow_filter.c  | 16 ++++++++--------
 libavdevice/dshow_pin.c     | 10 +++++-----
 4 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c
index 678861d..432b643 100644
--- a/libavdevice/dshow.c
+++ b/libavdevice/dshow.c
@@ -129,7 +129,7 @@ dshow_read_close(AVFormatContext *s)
     return 0;
 }
 
-static char *dup_wchar_to_utf8(wchar_t *w)
+static char *dup_wchar_to_utf8(WCHAR *w)
 {
     char *s = NULL;
     int l = WideCharToMultiByte(CP_UTF8, 0, w, -1, 0, 0, 0, 0);
@@ -599,7 +599,7 @@ dshow_cycle_pins(AVFormatContext *avctx, enum dshowDeviceType devtype,
         GUID category;
         DWORD r2;
         char *name_buf = NULL;
-        wchar_t *pin_id = NULL;
+        WCHAR *pin_id = NULL;
         char *pin_buf = NULL;
         char *desired_pin_name = devtype == VideoDevice ? ctx->video_pin_name : ctx->audio_pin_name;
 
@@ -734,7 +734,7 @@ dshow_open_device(AVFormatContext *avctx, ICreateDevEnum *devenum,
     IStream *ofile_stream = NULL;
     IPersistStream *pers_stream = NULL;
 
-    const wchar_t *filter_name[2] = { L"Audio capture filter", L"Video capture filter" };
+    const WCHAR *filter_name[2] = { L"Audio capture filter", L"Video capture filter" };
 
 
     if ( ((ctx->audio_filter_load_file) && (strlen(ctx->audio_filter_load_file)>0) && (sourcetype == AudioSourceDevice)) ||
diff --git a/libavdevice/dshow_capture.h b/libavdevice/dshow_capture.h
index f26eaf9..860b782 100644
--- a/libavdevice/dshow_capture.h
+++ b/libavdevice/dshow_capture.h
@@ -176,7 +176,7 @@ long          WINAPI libAVPin_ConnectedTo             (libAVPin *, IPin **);
 long          WINAPI libAVPin_ConnectionMediaType     (libAVPin *, AM_MEDIA_TYPE *);
 long          WINAPI libAVPin_QueryPinInfo            (libAVPin *, PIN_INFO *);
 long          WINAPI libAVPin_QueryDirection          (libAVPin *, PIN_DIRECTION *);
-long          WINAPI libAVPin_QueryId                 (libAVPin *, wchar_t **);
+long          WINAPI libAVPin_QueryId                 (libAVPin *, WCHAR **);
 long          WINAPI libAVPin_QueryAccept             (libAVPin *, const AM_MEDIA_TYPE *);
 long          WINAPI libAVPin_EnumMediaTypes          (libAVPin *, IEnumMediaTypes **);
 long          WINAPI libAVPin_QueryInternalConnections(libAVPin *, IPin **, unsigned long *);
@@ -249,7 +249,7 @@ libAVEnumMediaTypes *libAVEnumMediaTypes_Create(const AM_MEDIA_TYPE *type);
 struct libAVFilter {
     IBaseFilterVtbl *vtbl;
     long ref;
-    const wchar_t *name;
+    const WCHAR *name;
     libAVPin *pin;
     FILTER_INFO info;
     FILTER_STATE state;
@@ -272,10 +272,10 @@ long          WINAPI libAVFilter_GetState       (libAVFilter *, DWORD, FILTER_ST
 long          WINAPI libAVFilter_SetSyncSource  (libAVFilter *, IReferenceClock *);
 long          WINAPI libAVFilter_GetSyncSource  (libAVFilter *, IReferenceClock **);
 long          WINAPI libAVFilter_EnumPins       (libAVFilter *, IEnumPins **);
-long          WINAPI libAVFilter_FindPin        (libAVFilter *, const wchar_t *, IPin **);
+long          WINAPI libAVFilter_FindPin        (libAVFilter *, const WCHAR *, IPin **);
 long          WINAPI libAVFilter_QueryFilterInfo(libAVFilter *, FILTER_INFO *);
-long          WINAPI libAVFilter_JoinFilterGraph(libAVFilter *, IFilterGraph *, const wchar_t *);
-long          WINAPI libAVFilter_QueryVendorInfo(libAVFilter *, wchar_t **);
+long          WINAPI libAVFilter_JoinFilterGraph(libAVFilter *, IFilterGraph *, const WCHAR *);
+long          WINAPI libAVFilter_QueryVendorInfo(libAVFilter *, WCHAR **);
 
 void                 libAVFilter_Destroy(libAVFilter *);
 libAVFilter         *libAVFilter_Create (void *, void *, enum dshowDeviceType);
diff --git a/libavdevice/dshow_filter.c b/libavdevice/dshow_filter.c
index 7360adc..3ba3871 100644
--- a/libavdevice/dshow_filter.c
+++ b/libavdevice/dshow_filter.c
@@ -20,6 +20,8 @@
  */
 
 #include "dshow_capture.h"
+#include <shlwapi.h>
+#include <strsafe.h>
 
 DECLARE_QUERYINTERFACE(libAVFilter,
     { {&IID_IUnknown,0}, {&IID_IBaseFilter,0} })
@@ -108,14 +110,14 @@ libAVFilter_EnumPins(libAVFilter *this, IEnumPins **enumpin)
     return S_OK;
 }
 long WINAPI
-libAVFilter_FindPin(libAVFilter *this, const wchar_t *id, IPin **pin)
+libAVFilter_FindPin(libAVFilter *this, const WCHAR *id, IPin **pin)
 {
     libAVPin *found = NULL;
     dshowdebug("libAVFilter_FindPin(%p)\n", this);
 
     if (!id || !pin)
         return E_POINTER;
-    if (!wcscmp(id, L"In")) {
+    if (!StrCmpW(id, L"In")) {
         found = this->pin;
         libAVPin_AddRef(found);
     }
@@ -140,26 +142,24 @@ libAVFilter_QueryFilterInfo(libAVFilter *this, FILTER_INFO *info)
 }
 long WINAPI
 libAVFilter_JoinFilterGraph(libAVFilter *this, IFilterGraph *graph,
-                            const wchar_t *name)
+                            const WCHAR *name)
 {
     dshowdebug("libAVFilter_JoinFilterGraph(%p)\n", this);
 
     this->info.pGraph = graph;
     if (name)
-        wcscpy(this->info.achName, name);
+        StringCchCopyW(this->info.achName, MAX_FILTER_NAME, name);
 
     return S_OK;
 }
 long WINAPI
-libAVFilter_QueryVendorInfo(libAVFilter *this, wchar_t **info)
+libAVFilter_QueryVendorInfo(libAVFilter *this, WCHAR **info)
 {
     dshowdebug("libAVFilter_QueryVendorInfo(%p)\n", this);
 
     if (!info)
         return E_POINTER;
-    *info = wcsdup(L"libAV");
-
-    return S_OK;
+    return SHStrDupW(L"libAV", info);
 }
 
 static int
diff --git a/libavdevice/dshow_pin.c b/libavdevice/dshow_pin.c
index 664246d..73e3887 100644
--- a/libavdevice/dshow_pin.c
+++ b/libavdevice/dshow_pin.c
@@ -21,6 +21,8 @@
 
 #include "dshow_capture.h"
 
+#include <shlwapi.h>
+#include <strsafe.h>
 #include <stddef.h>
 #define imemoffset offsetof(libAVPin, imemvtbl)
 
@@ -117,7 +119,7 @@ libAVPin_QueryPinInfo(libAVPin *this, PIN_INFO *info)
 
     info->pFilter = (IBaseFilter *) this->filter;
     info->dir     = PINDIR_INPUT;
-    wcscpy(info->achName, L"Capture");
+    StringCchCopyW(info->achName, MAX_FILTER_NAME, L"Capture");
 
     return S_OK;
 }
@@ -131,16 +133,14 @@ libAVPin_QueryDirection(libAVPin *this, PIN_DIRECTION *dir)
     return S_OK;
 }
 long WINAPI
-libAVPin_QueryId(libAVPin *this, wchar_t **id)
+libAVPin_QueryId(libAVPin *this, WCHAR **id)
 {
     dshowdebug("libAVPin_QueryId(%p)\n", this);
 
     if (!id)
         return E_POINTER;
 
-    *id = wcsdup(L"libAV Pin");
-
-    return S_OK;
+    return SHStrDupW(L"libAV Pin", id);
 }
 long WINAPI
 libAVPin_QueryAccept(libAVPin *this, const AM_MEDIA_TYPE *type)
-- 
2.8.0



More information about the ffmpeg-devel mailing list