[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