那里有神龙卡的低层原程序(100分)

  • 主题发起人 主题发起人 63187668
  • 开始时间 开始时间
6

63187668

Unregistered / Unconfirmed
GUEST, unregistred user!
那位可以提供一下神龙卡的低层原程序啊,,,,如果买是什么价格找哪个可以买的到的啊
 
我有,lg59@163.net
 
我用Delphi封装了神龙卡的SDK的控件,一些基本的功能实现了,比如音量大小,声道控制,转换电视与显示器等等,还有些没有实现,谁能帮助我?
谢谢
 
我也想要,kvn518@hotmail.com
 
我也想要!!!
关注!

tooyoung1@163.com
 
神龙卡的底层我有,是REALMAGIC公司原版提供,可惜我不会VC,谁能把播放部分编译成DLL?我可以免费提供!
 
我有整个系统出售价格¥500
QQ:21406168
 
关注!严重关注!关注!严重关注!关注!严重关注!关注!严重关注!
 
wind520:
你是怎样封装的? 大哥可以发一份给我学习吗?谢谢!!!
EMAIL:szfgf@126.com
 
大哥, 我也想要;
能不能发一份给我;

wuhaihao11@163.com
 
to:wind520,
用Delphi封装了神龙卡的SDK的控件,你能给我一份这个近控件吗,谢谢
lbb_qingmu@163.com
或QQ: 86278566
 
神龙卡的底层我也有,动态连接库我也有,有一点我不懂,就是怎么控制OSD功能?哪位高手能指点一下,(关于Win API 函数 CoCreateInstance() 用法?)
这段代码是控制OSD功能的,
#include "stdafx.h"

#include "..//..//Inc//mpegcmn.h"
#include "..//..//Inc//irminc.h"
typedef struct
{
RMMULTIPLE_ITEM multi;
RMSTREAM_HEADER header;
}HEADER;

int main(int argc, _TCHAR* argv[])
{
HRESULT hr;
FILE *f;
int i;

IRmStream * pOSD;
IRmControlNode * pDevice;
IRmMapMem * pMemAlloc;

IRmObjectFinder *pIRmObjectFinder;
size_t count, size = 0;
BYTE buff_8[8];
MPEG_OVERLAY_RECT rc_dest = {100,10,100,100};
PUCHAR pshared = NULL;

if (argv[1] == NULL)
{
printf("USAGE: osd_test <filename>.osd/n");
return 1;
}

CoInitialize(NULL);


hr = CoCreateInstance(CLSID_RMBASE,NULL,CLSCTX_INPROC_SERVER,IID_IRmObjectFinder,(void**)&amp;pIRmObjectFinder);
if (FAILED(hr)) goto exit_1;

// GET OSD
//
hr = pIRmObjectFinder->FindObject(
NULL,
FIRST_AVALIABLE_INSTANCE,
CATEGORY_PIN_OSD,
IID_IRmStream,
(void**)&amp;pOSD);

pIRmObjectFinder->Release();
if (FAILED(hr)) goto exit_1;


/////////////////////////////////////////////////////////////////////////////////////
//do
something useful

pOSD->Reset();

long dwTvOutKeep;

pDevice = NULL;

hr = pOSD->QueryInterface(IID_IRmControlNode,(void**)&amp;pDevice);
if (FAILED(hr)) goto exit_1;
hr = pOSD->QueryInterface(IID_IRmMapMem,(void**)&amp;pMemAlloc);

if (FAILED(hr)) goto exit_1;

long HwLibVersion = 0, dwTvOut;

// switch to TV
//
pDevice->GetAttributes(MpegAttrCodeVersion,&amp;HwLibVersion);
pDevice->GetAttributes(MpegAttrVideoTv,&amp;dwTvOutKeep);
dwTvOut = dwTvOutKeep &amp;~OUTPUT_OFF;

if (HwLibVersion < 9)
{
dwTvOut |= SET_TV;
}
else

{
dwTvOut |= SET_TV | 0x80000000;
dwTvOut &amp;= ~SET_HDTV;
}
pDevice->SetAttributes(MpegAttrVideoTv,dwTvOut);


f = fopen(argv[1],"rb");
if (NULL == f) goto exit_10;

// Read header
//
count = fread(buff_8,sizeof(char),8,f);
if (count != 8) goto exit_20;

// extract some bitmap information from header
//
size = buff_8[1]<<8*2 | buff_8[2]<<8 | buff_8[3];
rc_dest.cX = buff_8[4] << 8 | buff_8[5];
rc_dest.cY = buff_8[6] << 8 | buff_8[7];

// rewind to begin
ning
//
if (0 == size) goto exit_20;

long pos = 0;
// if(fsetpos(f,&amp;pos)) goto exit_20;

// if data will be sent using physically continious memory buffer
// it will be transferred by one DMA operation. OSD only: anything
// more then
~63K will be devided by separate transfers ~63K each,
// up to 8 transfers can be programmed by one VSYNC.
//
PVOID phys;
hr = pMemAlloc->GetDMABuffer(size,(void**)&amp;pshared,&amp;phys);
if (pshared == NULL)
{
goto exit_20;
}

fread(pshared,sizeof(char),size,f);

pOSD->Play();
// for(i=0;i<20;i++)
for(i=0;i<1;i++)
{
ULONG ret;
HEADER hdr;
ZeroMemory(&amp;hdr,sizeof(hdr));

RMOVERLAPIO ovr = {0,0,0,0,CreateEvent(NULL,TRUE,FALSE,NULL)};

hdr.multi.Count = 1;
hdr.multi.Size = sizeof(HEADER);
hdr.header.Size = sizeof(RMSTREAM_HEADER);
hdr.header.pData = pshared;
hdr.header.FrameExtent = size;

// Send whole bitmapdo
wn
//
pOSD->Write(&amp;hdr.multi,&amp;ovr);

// Wait for completion
//
ret = WaitForSingleObject(ovr.hEvent,10000);
if (ret == WAIT_TIMEOUT)
{
printf(" !!! TIMEOUT/n");
}

// Attributes can be set only if bitmap was completely loaded in DRAM
// or after last packet with bitmap data has been released by the driver.
//
printf("Set OSD Destination: x - %X, y - %X, w - %X, h - %X/n",
rc_dest.X, rc_dest.Y, rc_dest.cX, rc_dest.cY);
pDevice->SetAttributes(MpegAttrOsdDest,(long)&amp;rc_dest);

// rc_dest.X += 10;
// rc_dest.Y += 10;

pDevice->SetAttributes(MpegAttrOsdON,1);

CloseHandle(ovr.hEvent);
}

pOSD->Stop();

printf("Press any key/n");
_kbhit();
_getch();

if (NULL != pDevice)
{
// pDevice->SetAttributes(MpegAttrVideoTv,dwTvOutKeep);
}
pDevice->SetAttributes(MpegAttrOsdOFF,1);
// pDevice->SetAttributes(MpegAttrOsdFLUSH,0);


/////////////////////////////////////////////////////////////////////////////////////
// end

exit_20:
fclose(f);

if (NULL != pDevice)
{
pDevice->Release();
}
exit_10:
if (NULL != pMemAlloc)
{
if (NULL != pshared)
pMemAlloc->FreeDMABuffer(pshared);
pMemAlloc->Release();
}

pOSD->Release();

exit_1:
CoUninitialize();
exit(0);
return 0;
}

 
后退
顶部