亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? allocator.c

?? linux下實現視頻播放的播放器
?? C
字號:
/* * Modified for use with MPlayer, detailed changelog at * http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */#include "config.h"#if (C_HAS_DIRECTSHOW)#include "allocator.h"#include "com.h"#include "wine/winerror.h"static int AllocatorKeeper = 0;struct _avm_list_t{    struct _avm_list_t* next;    struct _avm_list_t* prev;    void* member;};static inline int avm_list_size(avm_list_t* head){    avm_list_t* it = head;    int i = 0;    if (it)    {	for (;;)	{            i++;	    it = it->next;	    if (it == head)                break;	}    }    return i;}static inline int avm_list_print(avm_list_t* head){    avm_list_t* it = head;    int i = 0;    LOG_MSG("Head: %p", head);    if (it)    {	for (;;)	{	    i++;	    LOG_MSG("%d:  member: %p    next: %p  prev: %p",		   i, it->member, it->next, it->prev);	    it = it->next;	    if (it == head)                break;	}    }    return i;}static inline avm_list_t* avm_list_add_head(avm_list_t* head, void* member){    avm_list_t* n = (avm_list_t*) malloc(sizeof(avm_list_t));    n->member = member;    if (!head)    {	head = n;        head->prev = head;    }    n->prev = head->prev;    head->prev = n;    n->next = head;    return n;}static inline avm_list_t* avm_list_add_tail(avm_list_t* head, void* member){    avm_list_t* n = avm_list_add_head(head, member);    return (!head) ? n : head;}static inline avm_list_t* avm_list_del_head(avm_list_t* head){    avm_list_t* n = 0;    if (head)    {	if (head->next != head)	{	    n = head->next;	    head->prev->next = head->next;	    head->next->prev = head->prev;	}	free(head);    }    return n;}static inline avm_list_t* avm_list_find(avm_list_t* head, void* member){    avm_list_t* it = head;    if (it)    {	for (;;)	{	    if (it->member == member)		return it;	    it = it->next;	    if (it == head)                break;	}    }    return NULL;}static long MemAllocator_CreateAllocator(GUID* clsid, const GUID* iid, void** ppv){    IMemAllocator* p;    int result;    if (!ppv)	return -1;    *ppv = 0;    if (memcmp(clsid, &CLSID_MemoryAllocator, sizeof(GUID)))	return -1;    p = (IMemAllocator*) MemAllocatorCreate();    result = p->vt->QueryInterface((IUnknown*)p, iid, ppv);    p->vt->Release((IUnknown*)p);    return result;}static HRESULT STDCALL MemAllocator_SetProperties(IMemAllocator * This,						  /* [in] */ ALLOCATOR_PROPERTIES *pRequest,						  /* [out] */ ALLOCATOR_PROPERTIES *pActual){    MemAllocator* me = (MemAllocator*)This;    LOG_MSG("MemAllocator_SetProperties(%p) called", This);    if (!pRequest || !pActual)	return E_INVALIDARG;    if (pRequest->cBuffers<=0 || pRequest->cbBuffer<=0)	return E_FAIL;    if (me->used_list != 0 || me->free_list != 0)	return E_FAIL;    *pActual = *pRequest;    /*       DirectShow DOCS ("Negotiating Allocators" chapter) says that allocator might not       honor the requested properties. Thus, since WMSP audio codecs requests bufer with two       bytes length for unknown reason, we should correct requested value. Otherwise above       codec don't want to load.    */    if (pActual->cbBuffer == 2)        pActual->cbBuffer = 10240; //Enough for WMSP codec    me->props = *pActual;    return 0;}static HRESULT STDCALL MemAllocator_GetProperties(IMemAllocator * This,						  /* [out] */ ALLOCATOR_PROPERTIES *pProps){    LOG_MSG("MemAllocator_GetProperties(%p) called", This);    if (!pProps)	return E_INVALIDARG;    if (((MemAllocator*)This)->props.cbBuffer<0)	return E_FAIL;    *pProps=((MemAllocator*)This)->props;    return 0;}static HRESULT STDCALL MemAllocator_Commit(IMemAllocator * This){    MemAllocator* me = (MemAllocator*)This;    int i;    LOG_MSG("MemAllocator_Commit(%p) called", This);    if (((MemAllocator*)This)->props.cbBuffer < 0)	return E_FAIL;    if (me->used_list || me->free_list)	return E_INVALIDARG;    for (i = 0; i < me->props.cBuffers; i++)    {	CMediaSample* sample = CMediaSampleCreate((IMemAllocator*)me,						  me->props.cbBuffer);	if (!sample)            return E_OUTOFMEMORY;	//LOG_MSG("FREEEEEEEEEEEE ADDED %p", sample);	me->free_list = avm_list_add_tail(me->free_list, sample);	//avm_list_print(me->free_list);    }    //LOG_MSG("Added mem %p: lsz: %d  %d  size: %d", me, avm_list_size(me->free_list), me->props.cBuffers, me->props.cbBuffer);    return 0;}static HRESULT STDCALL MemAllocator_Decommit(IMemAllocator * This){    MemAllocator* me=(MemAllocator*)This;    LOG_MSG("MemAllocator_Decommit(%p) called", This);    //LOG_MSG("Deleted mem %p: %d  %d", me, me->free_list.size(), me->used_list.size());    while (me->used_list)    {	me->free_list = avm_list_add_tail(me->free_list,					  (CMediaSample*) me->used_list->member);	me->used_list = avm_list_del_head(me->used_list);    }    while (me->free_list)    {        CMediaSample* sample = (CMediaSample*) me->free_list->member;	//LOG_MSG("****************** Decommiting FREE %p", sample);	//sample->vt->Release((IUnknown*)sample);	CMediaSample_Destroy((CMediaSample*)sample);	me->free_list = avm_list_del_head(me->free_list);    }    return 0;}static HRESULT STDCALL MemAllocator_GetBuffer(IMemAllocator * This,					      /* [out] */ IMediaSample **ppBuffer,					      /* [in] */ REFERENCE_TIME *pStartTime,					      /* [in] */ REFERENCE_TIME *pEndTime,					      /* [in] */ DWORD dwFlags){    MemAllocator* me = (MemAllocator*)This;    CMediaSample* sample;    LOG_MSG("MemAllocator_GetBuffer(%p) called   %d  %d", This,		 avm_list_size(me->used_list), avm_list_size(me->free_list));    if (!me->free_list)    {	LOG_MSG("No samples available");	return E_FAIL;//should block here if no samples are available    }    sample = (CMediaSample*) me->free_list->member;    me->free_list = avm_list_del_head(me->free_list);    me->used_list = avm_list_add_tail(me->used_list, sample);    *ppBuffer = (IMediaSample*) sample;    sample->vt->AddRef((IUnknown*) sample);    if (me->new_pointer)    {	if (me->modified_sample)	    me->modified_sample->ResetPointer(me->modified_sample);	sample->SetPointer(sample, me->new_pointer);	me->modified_sample = sample;	me->new_pointer = 0;    }    return 0;}static HRESULT STDCALL MemAllocator_ReleaseBuffer(IMemAllocator* This,						  /* [in] */ IMediaSample* pBuffer){    avm_list_t* l;    MemAllocator* me = (MemAllocator*)This;    LOG_MSG("MemAllocator_ReleaseBuffer(%p) called   %d  %d", This,		 avm_list_size(me->used_list), avm_list_size(me->free_list));    l = avm_list_find(me->used_list, pBuffer);    if (l)    {	CMediaSample* sample = (CMediaSample*) l->member;	if (me->modified_sample == sample)	{	    me->modified_sample->ResetPointer(me->modified_sample);	    me->modified_sample = 0;	}	me->used_list = avm_list_del_head(me->used_list);	me->free_list = avm_list_add_head(me->free_list, sample);	//LOG_MSG("****************** RELEASED OK %p  %p", me->used_list, me->free_list);	return 0;    }    LOG_MSG("MemAllocator_ReleaseBuffer(%p) releasing unknown buffer!!!! %p", This, pBuffer);    return E_FAIL;}static void MemAllocator_SetPointer(MemAllocator* This, char* pointer){    This->new_pointer = pointer;}static void MemAllocator_ResetPointer(MemAllocator* This){    if (This->modified_sample)    {	This->modified_sample->ResetPointer(This->modified_sample);	This->modified_sample = 0;    }}static void MemAllocator_Destroy(MemAllocator* This){    LOG_MSG("MemAllocator_Destroy(%p) called  (%d, %d)", This, This->refcount, AllocatorKeeper);#ifdef WIN32_LOADER    if (--AllocatorKeeper == 0)	UnregisterComClass(&CLSID_MemoryAllocator, MemAllocator_CreateAllocator);#endif    free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(MemAllocator)MemAllocator* MemAllocatorCreate(){    MemAllocator* This = (MemAllocator*) malloc(sizeof(MemAllocator));    if (!This)        return NULL;    LOG_MSG("MemAllocatorCreate() called -> %p", This);    This->refcount = 1;    This->props.cBuffers = 1;    This->props.cbBuffer = 65536; /* :/ */    This->props.cbAlign = 1;    This->props.cbPrefix = 0;    This->vt = (IMemAllocator_vt*) malloc(sizeof(IMemAllocator_vt));    if (!This->vt)    {        free(This);	return NULL;    }    This->vt->QueryInterface = MemAllocator_QueryInterface;    This->vt->AddRef = MemAllocator_AddRef;    This->vt->Release = MemAllocator_Release;    This->vt->SetProperties = MemAllocator_SetProperties;    This->vt->GetProperties = MemAllocator_GetProperties;    This->vt->Commit = MemAllocator_Commit;    This->vt->Decommit = MemAllocator_Decommit;    This->vt->GetBuffer = MemAllocator_GetBuffer;    This->vt->ReleaseBuffer = MemAllocator_ReleaseBuffer;    This->SetPointer = MemAllocator_SetPointer;    This->ResetPointer = MemAllocator_ResetPointer;    This->modified_sample = 0;    This->new_pointer = 0;    This->used_list = 0;    This->free_list = 0;    This->interfaces[0]=IID_IUnknown;    This->interfaces[1]=IID_IMemAllocator;#ifdef WIN32_LOADER    if (AllocatorKeeper++ == 0)	RegisterComClass(&CLSID_MemoryAllocator, MemAllocator_CreateAllocator);#endif    return This;}#endif // (C_HAS_DIRECTSHOW)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美mv和日韩mv的网站| 欧美日韩在线播放一区| 欧美一级在线免费| 亚洲成人综合网站| 欧美军同video69gay| 亚洲综合一二区| 欧美日韩视频专区在线播放| 一区二区三区在线高清| 99久久久精品免费观看国产蜜| 久久久久久久久一| youjizz久久| 亚洲影院在线观看| 久久综合九色综合97婷婷女人| 日韩激情在线观看| 精品欧美一区二区久久| 高清不卡一二三区| 亚洲精品国产第一综合99久久| 色久综合一二码| 天天综合色天天综合| 久久蜜桃一区二区| 色诱亚洲精品久久久久久| 亚洲日本成人在线观看| 欧美伦理影视网| 成人做爰69片免费看网站| 亚洲成人激情av| 国产亚洲精品中文字幕| 久久久久久久国产精品影院| 国产美女精品人人做人人爽| 亚洲美女视频在线| 日韩免费观看高清完整版| 成人av资源下载| 久久超碰97中文字幕| 亚洲视频免费观看| 久久综合久久综合久久| 欧美高清www午色夜在线视频| 国产福利精品一区二区| 青娱乐精品视频在线| 一区二区日韩av| 欧美激情在线免费观看| 日韩精品一区二区三区老鸭窝| 色综合天天综合在线视频| 粉嫩蜜臀av国产精品网站| 午夜精品久久久久久久久| 一区二区不卡在线视频 午夜欧美不卡在| 欧美一级欧美三级在线观看| 6080国产精品一区二区| 成人黄色一级视频| 国产精品白丝av| 韩国精品一区二区| 精品系列免费在线观看| 日本欧美久久久久免费播放网| 亚洲欧美经典视频| 最近中文字幕一区二区三区| 中文字幕成人网| 中文字幕一区在线观看视频| 中文字幕免费一区| 亚洲欧美日韩人成在线播放| 一区二区三区精品视频在线| 夜色激情一区二区| 午夜成人免费视频| 久久电影网站中文字幕 | 北岛玲一区二区三区四区| 岛国一区二区三区| 一本一本大道香蕉久在线精品| 色悠悠亚洲一区二区| 欧洲一区在线电影| 欧美一区二区二区| 国产亚洲精品超碰| 亚洲免费视频中文字幕| 日本在线观看不卡视频| 国产一区二区三区免费| 91视频国产观看| 91麻豆精品国产91久久久久久| 久久网这里都是精品| 亚洲日本成人在线观看| 久久精品国产网站| 91国偷自产一区二区使用方法| 日韩欧美视频在线| 亚洲欧美国产高清| 国产成+人+日韩+欧美+亚洲| 欧美日韩一区国产| 国产精品女同互慰在线看| 天天色天天操综合| 成人黄色小视频| 精品入口麻豆88视频| 亚洲一区二区三区四区在线免费观看| 另类综合日韩欧美亚洲| 日韩欧美第一区| 丝袜美腿亚洲色图| 色偷偷久久人人79超碰人人澡| 福利一区福利二区| 欧美综合色免费| 欧美日本韩国一区二区三区视频| 波多野结衣中文字幕一区二区三区 | 伊人开心综合网| 在线播放91灌醉迷j高跟美女| 97se狠狠狠综合亚洲狠狠| 国产老妇另类xxxxx| 久久精品国产999大香线蕉| 免费在线观看一区| 国产精品日韩成人| 欧美日韩一区二区不卡| 中文字幕成人网| 一区二区三区在线观看欧美| 丝袜诱惑亚洲看片| 亚洲电影视频在线| 日韩影视精彩在线| 在线看日韩精品电影| 国产精品丝袜黑色高跟| 亚洲欧美激情一区二区| 亚洲精品在线三区| 亚洲一区二区在线观看视频| 日本欧美一区二区三区乱码| 99精品国产视频| 国产精品美女久久久久久久久久久 | 日韩视频免费观看高清完整版| 欧美激情在线免费观看| 视频一区免费在线观看| 欧美一区二区美女| 亚洲少妇最新在线视频| 99国产精品一区| 日韩免费在线观看| 婷婷中文字幕一区三区| 日韩欧美国产综合在线一区二区三区| 亚洲亚洲精品在线观看| 久久久久国产精品麻豆| 丰满少妇久久久久久久| 亚洲激情欧美激情| 欧美一级精品大片| 国产美女一区二区三区| 婷婷久久综合九色综合绿巨人| 欧美性生活久久| 久久99久久久久| 一区二区三区精品视频| 欧美va日韩va| 欧美亚洲高清一区二区三区不卡| 亚洲女性喷水在线观看一区| 国产欧美一区二区三区鸳鸯浴| 91久久奴性调教| 日韩av网站在线观看| 亚洲午夜精品网| 日本不卡123| 韩国欧美国产1区| 国内精品久久久久影院一蜜桃| 国产主播一区二区三区| 国产精品一区一区三区| 狠狠色狠狠色综合系列| 日韩欧美电影在线| 暴力调教一区二区三区| 懂色av中文一区二区三区| 日韩精品成人一区二区三区| 亚洲三级在线免费| 国产精品美女久久久久久久| 国产欧美日韩另类一区| 亚洲精品在线三区| 精品入口麻豆88视频| 欧美性极品少妇| 欧美电影免费观看高清完整版在线观看| 97精品国产露脸对白| 成人a免费在线看| 99精品久久只有精品| 欧美午夜不卡视频| 欧美一区二区三区免费观看视频| 欧美无乱码久久久免费午夜一区| 色综合久久88色综合天天免费| 色88888久久久久久影院野外| 91在线无精精品入口| 在线中文字幕一区二区| 欧美一区二区三区色| 久久久久久久久一| 综合网在线视频| 亚洲成av人片在线观看| 热久久免费视频| 极品少妇xxxx偷拍精品少妇| 麻豆精品在线播放| 成人国产一区二区三区精品| 在线观看视频一区二区| 欧美一区二区性放荡片| 国产午夜精品福利| 亚洲免费成人av| 精一区二区三区| 欧美日韩高清一区二区| 久久蜜桃av一区精品变态类天堂| 成人欧美一区二区三区在线播放| 丝袜美腿亚洲综合| 久久99国产精品成人| 欧美激情在线一区二区| 水野朝阳av一区二区三区| 国产成人自拍网| 欧美日韩精品一区二区三区四区 | 在线观看不卡视频| 久久久高清一区二区三区| 亚洲国产精品人人做人人爽| 国产99一区视频免费| 精品国产91乱码一区二区三区| 亚洲香肠在线观看| 91在线观看一区二区| 欧美三片在线视频观看| 一区二区三区四区不卡视频| 国产超碰在线一区|