[MPlayer-cygwin] Fast CoreAVC DShow H264 decoder - Need help
Stefan Gürtler
helfmir at surfeu.de
Tue Jan 17 01:28:33 CET 2006
John Brown schrieb:
>> Is there a way to check the path, under which path mplayer looks for
>> the binary codecs?
>
>
> You configured --with-codecsdir=codecs. This would the codecs directory
> in the directory that contains mplayer.exe. I do not know whether it
> also looks in %windir%\System32 or %PATH%, but I doubt it. I would try
> copying CoreAVCDecoder.ax to the codecs folder, and also registering the
> file form that folder, i.e.:
>
> C:\MPlayer\codecs> regsvr32 CoreAVCDecoder.ax
>
>
>> ; guid 0x6931C7e7, 0x75b7, 0x4729, 0xa1, 0x53, 0xa8, 0xad, 0x99,
>
>
> Note that you have commented out the GUID. You need to supply a valid
> GUID. Look in the MPlayer manual under "DirectShow codecs" to see how to
> find out the GUID.
>
>> Warning: DS_Filter() no such class object. (DLL=CoreAVCDecoder.ax,
>> r=0x80040111)
>> Failed to create DirectShow filter
>
>
>> From winerror.h:
>
> #define CLASS_E_CLASSNOTAVAILABLE ((HRESULT)0x80040111L)
> You would naturally get this because you have not supplied the GUID,
> which identifies the class.
>
> Having said all of the above, I was advised that MPlayer cannot use
> DirectShow filters. I assume that a Directshow filter is not the same
> thing as the DirectShow codecs described in the manual. I was trying to
> use the RealMediaSplitter filter, which lets you play RealMedia files in
> Windows Media Player.
>
> I supplied various possible GUIDs, but I received messages such as
> "Could not create input pin" (or maybe output pin). Maybe you will have
> better luck.
>
To rule out the problem of not knowing where the codecs-directory is
after spezifying an relativ path, I build mplayer once more with an
absolut path to the codecs directory
./configure --with-codecsdir=/opt/codecs
and placed the ax dshow decoder there. It is not an muxer, and there are
other .ax libraries in codecs.conf.
I took away the ';' at the beginnig of the guid-line.
So when I try playback with the new setup, i get a differnt error.
==========================================================================
Forced video codec: coreavc
Opening video decoder: [dshow] DirectShow video codecs
ERROR: Could not open required DirectShow codec CoreAVCDecoder.ax.
Warning: DS_Filter() could not open DirectShow DLL.
(DLL=CoreAVCDecoder.ax, r=0x51a3e10)
Failed to create DirectShow filter
You need to upgrade/install the binary codecs package.
Go to http://mplayerhq.hu/homepage/dload.html
VDecoder init failed :(
Cannot find codec matching selected -vo and video format 0x31637661.
Read DOCS/HTML/en/codecs.html!
I did not find this code in /mingw/include/winerror.
Looking at loader/dshwo/DS_Filter.c I can not guess what the meaning of
the result is:
HRESULT result;
...
for(;;) {
...
This->m_iHandle = LoadLibraryA(dllname);
if (!This->m_iHandle)
{
em = "could not open DirectShow DLL";
break;
}
func = (GETCLASS)GetProcAddress((unsigned)This->m_iHandle,
"DllGetClassObject");
if (!func)
{
em = "illegal or corrupt DirectShow DLL";
break;
}
result = func(id, &IID_IClassFactory, (void**)&factory);
...
}// Ende for
if (!init)
{
DS_Filter_Destroy(This);
printf("Warning: DS_Filter() %s. (DLL=%.200s, r=0x%x)\n", em, dllname,
result);
This = 0;
}
So the func-Pointer func gets initialised only if This->m_iHanlde is not
null, or else break would case the program to leave the for-loop. Then
result will be initialised with the return of a call of the function
which func points to.
But without This->m_iHanlde being null, em never becomes the string
"could not open DirectShow DLL" that is printed at the end of the for-loop?
Stefan
More information about the MPlayer-cygwin
mailing list