Add final missing bits of CineForm HD support on Linux (via the Windows

DirectShow codec).

Required changes:

 - codecs.conf entry (of course).
 - Allow opening files with “.col” in the file name, just like “vp3” and “.fpf”
   already was allowed. (CineForm expects to be able to do this, presumably
   for some color management code.)
 - In registry.c, fake a few registry keys that the codec expects the installer
   to have written. Also, change a few magic numbers (0, 2) to the appropriate
   constants (ERROR_SUCCESS, ERROR_FILE_NOT_FOUND) where appropriate, so the code
   is easier to follow.

SMP works fine, but seemingly performs suboptimally (e.g., on my dual-core
laptop, CineForm performs better if I lie to it and tell it I have four cores).
I don't know if this is inherent in the codec, or some inefficiency in the
emulated synchronization primitives.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31196 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
sesse 2010-05-23 16:01:12 +00:00
parent 90ccea6639
commit 46f30279e7
3 changed files with 36 additions and 4 deletions

View File

@ -1960,6 +1960,15 @@ videocodec LEADMW20
guid 0xe2b7dc56, 0x38c5, 0x11d5, 0x91, 0xf6, 0x00, 0x10, 0x4b, 0xdb, 0x8f, 0xf9
out BGR24,BGR8 flip
videocodec cineformhd
info "CineForm HD"
status working
fourcc CFHD
driver dshow
dll "CFDecode2.ax"
guid 0xAD83011E, 0x01d1, 0x4623, 0x91, 0xfd, 0x6b, 0x75, 0xf1, 0x83, 0xc5, 0xa9
out UYVY
videocodec lagarith
info "Lagarith Lossless Video Codec"
comment "http://lags.leetcode.net/codec.html, requires an MMX2 CPU."

View File

@ -400,9 +400,32 @@ long __stdcall RegQueryValueExA(long key, const char* value, int* reserved, int*
if (!c)
return 1;
t=find_value_by_name(c);
if (t==0) {
// Hacks for CineForm.
if (strcmp(c, "HKCU\\SOFTWARE\\CineForm\\DecoderProperties\\Resolution") == 0) {
if (data)
*data = 1000;
if (type)
*type = REG_DWORD;
if (count)
*count = sizeof(DWORD);
free(c);
return ERROR_SUCCESS;
}
if (strcmp(c, "HKCU\\SOFTWARE\\CineForm\\DecoderProperties\\PixelFormats") == 0) {
if (data)
*data = 0xffff;
if (type)
*type = REG_DWORD;
if (count)
*count = sizeof(DWORD);
free(c);
return ERROR_SUCCESS;
}
free(c);
return ERROR_FILE_NOT_FOUND;
}
free(c);
if (t==0)
return 2;
if (type)
*type=t->type;
if (data)
@ -419,7 +442,7 @@ long __stdcall RegQueryValueExA(long key, const char* value, int* reserved, int*
{
*count=t->len;
}
return 0;
return ERROR_SUCCESS;
}
long __stdcall RegCreateKeyExA(long key, const char* name, long reserved,
void* classs, long options, long security,

View File

@ -3764,7 +3764,7 @@ static HANDLE WINAPI expCreateFileA(LPCSTR cs1,DWORD i1,DWORD i2,
free(tmp);
return result;
}
if (strstr(cs1, "vp3") || strstr(cs1, ".fpf"))
if (strstr(cs1, "vp3") || strstr(cs1, ".fpf") || strstr(cs1, ".col"))
{
int r;
int flg = 0;