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

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

?? overlay.h

?? linux下實現視頻播放的播放器
?? H
字號:
/* *  Copyright (C) 2005-2007  gulikoza * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//* $Id$ */#ifndef RENDERER_H#define RENDERER_H#define MODULE "Renderer"class Renderer : public Thread {private:    MUTEX * data;    MUTEX * display_lock;    Videoinfo info;    volatile bool sleeping;    // Output mode    Output * output;    // Frame buffers and queue    Frame frames[FRAMES];    QUEUE queue;    int current_frame;    // Internal routines for locking frame data    int LockFrame(void) {	// Wait until current frame is valid	while((current_frame = queue.GetUsed()) == 0x80000000) {	    MUTEX_LOCK(data);	    sleeping = true;	    MUTEX_UNLOCK(data);	    // Wait and exit if required	    if(!ThreadPause())		return -1;	    MUTEX_LOCK(data);	    sleeping = false;	    MUTEX_UNLOCK(data);	}	return current_frame;    }    void UnlockFrame() {	queue.AddFree(~current_frame);    }protected:    int Run();    int CreateOutput(OUTPUT);public:    Renderer(OUTPUT output_mode):sleeping(false),output(NULL) {	// Fill info structure	info.changed = false;	info.w = info.h = 0;	info.cropx = info.cropy = 0;	info.colorspace = SDL_IYUV_OVERLAY;	info.display_change = SDL_CreateSemaphore(0);	info.surface = NULL;	info.aspect = 0.0;	if(info.display_change == NULL)	    throw "Renderer: Failed to create semaphore";	data = MUTEX_CREATE();	if(data == NULL)	    throw "Renderer: Failed to create mutex";	display_lock = MUTEX_CREATE();        if(display_lock == NULL)            throw "Renderer: Failed to create mutex";	for(unsigned int i = 0; i < FRAMES; i++) {	    frames[i].data[0] = NULL;	    queue.AddFree(i);	}	// Create output class	CreateOutput(output_mode);	DEBUG_MSG("Created renderer object");    }    void FlushBuffers() {	MUTEX_LOCK(data);	LOG_MSG("Flushing buffers");	sleeping = false;	queue.Flush();	ThreadUnpause();	// Wait for the thread to go to sleep	while((!sleeping) && ThreadStatus()) {	    MUTEX_UNLOCK(data);	    SDL_Delay(10);	    LOG_MSG("Waiting for child thread to finish processing...");	    MUTEX_LOCK(data);	}	for(int i = 0; i < FRAMES; i++) {	    if(frames[i].data[0])		_aligned_free(frames[i].data[0]);	    frames[i].data[0] = NULL;	    frames[i].w = frames[i].h = 0;	    queue.AddFree(i);	}	MUTEX_UNLOCK(data);	LOG_MSG("Flush complete");    }    // Call to get writable buffer    void LockData(Frame * pt) {	int i, l = 0;	while((i = queue.GetFree()) < 0) {	    // crap...we've overrun the render thread	    if(!ThreadStatus() || (++l > 50)) {		// Render thread is not running ?		ERROR_MSG("Child thread not running!?");		pt->id = -1;		return;	    }	    LOG_MSG("Waiting for free frame...");	    SDL_Delay(20);	}	pt->id = i;	Frame * fp = &frames[i];	DEBUG_MSG("Allocating frame %d", i);	// Check if size changed	if((pt->pitch != fp->pitch) || (pt->h != fp->h) || (pt->edge != fp->edge)) {	    fp->w = pt->w; fp->h = pt->h;	    fp->pitch = pt->pitch;  fp->edge = pt->edge;	    if(fp->data[0]) _aligned_free(fp->data[0]);	    fp->data[0] = NULL;	}	// Allocate buffer	if(fp->data[0] == NULL) {	    i = ((fp->pitch)*(fp->h+(fp->edge<<1)))>>1;	    fp->data[0] = (unsigned char*)_aligned_malloc(3*i, 64);	    LOG_MSG("Allocated %d bytes (%dx%d) at 0x%p", 3*i, fp->pitch, fp->h+(fp->edge<<1), fp->data[0]);	    if(fp->data[0] == NULL) {		ERROR_MSG("Unable to allocate memory!");		queue.ReturnUsed(pt->id, false);		pt->id = -1;		return;	    }	    fp->data[1] = fp->data[0] + (i<<1);	    fp->data[2] = fp->data[1] + (i>>1);	}	pt->data[0] = fp->data[0];	pt->data[1] = fp->data[1];	pt->data[2] = fp->data[2];    }    void UnlockData(int id, Frame * frame) {	if(frame == NULL) {	    queue.ReturnUsed(id, false);	    return;	}	frames[id].changed = frame->changed;	frames[id].aspect = frame->aspect;	frames[id].time = frame->time;	frames[id].pts = frame->pts;	queue.ReturnUsed(id, true);	ThreadUnpause();    }    void ReleaseData(int id) {	queue.Release(id);    }    void SetDeinterlace(int d);    void Lock() {        DEBUG_MSG("Display lock requested from %u", SDL_ThreadID());        if(MUTEX_LOCK(display_lock) == 0) {	    DEBUG_MSG("Lock() OK to %u", SDL_ThreadID());            return;        }        ERROR_MSG("Mutex lock failed!");    }    void Unlock() {        DEBUG_MSG("Display lock requested from %u", SDL_ThreadID());        if(MUTEX_UNLOCK(display_lock) == 0) {	    DEBUG_MSG("Unlock() OK to %u", SDL_ThreadID());            return;        }        ERROR_MSG("Mutex unlock failed!");    }    Videoinfo * GetInfo() {	return &info;    }    ~Renderer();};#undef MODULE#endif // RENDERER_H

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品色婷婷| 91视频.com| 欧美日韩中文字幕精品| 综合久久国产九一剧情麻豆| 国产一区二区久久| 久久午夜免费电影| 韩国三级中文字幕hd久久精品| 欧美日韩视频在线第一区 | 日本乱人伦aⅴ精品| 国产欧美日韩麻豆91| 极品少妇xxxx精品少妇| 亚洲精品一区二区三区四区高清 | 亚洲一级片在线观看| 欧美四级电影网| 亚洲一级在线观看| 91精品国产乱码久久蜜臀| 日日欢夜夜爽一区| 久久亚洲欧美国产精品乐播| 久久99日本精品| 国产精品日韩成人| 日本韩国欧美国产| 麻豆成人综合网| 国产精品电影院| 91精品免费在线| 狠狠色丁香九九婷婷综合五月| 日韩欧美色综合网站| 精品在线亚洲视频| 亚洲精品免费视频| 日韩欧美国产小视频| 成人黄色av电影| 午夜电影一区二区三区| 国产亚洲1区2区3区| 欧美亚男人的天堂| 国产精品亚洲一区二区三区在线 | 欧美国产日韩精品免费观看| 91在线视频网址| 狠狠色丁香九九婷婷综合五月| 日本一二三四高清不卡| 欧美一级艳片视频免费观看| 91麻豆精品一区二区三区| 激情综合色丁香一区二区| 中文字幕欧美一区| 国产午夜三级一区二区三| 欧美人狂配大交3d怪物一区| 国产91精品欧美| 日韩电影免费在线看| 亚洲综合色网站| 亚洲精品免费播放| 国产精品国产三级国产| 国产三级一区二区| 久久精品一二三| 亚洲精品在线免费播放| 91麻豆精品国产91久久久| 欧美性大战久久久久久久| 在线亚洲人成电影网站色www| 成人午夜精品在线| 欧美一区二区在线免费观看| 亚洲最大成人网4388xx| 日韩一区二区三区免费看| 在线不卡免费av| 在线看国产一区二区| 色综合久久六月婷婷中文字幕| 99久久99久久综合| 在线观看国产精品网站| 色吧成人激情小说| 91蜜桃在线观看| 欧美日韩国产小视频| 日韩三级精品电影久久久| 欧美成人猛片aaaaaaa| 国产无人区一区二区三区| 国产精品视频线看| 亚洲午夜激情av| 国产精品自拍一区| 在线视频国产一区| 26uuu精品一区二区| 国产精品久久久久久久蜜臀| 亚洲综合久久久久| 韩国v欧美v亚洲v日本v| 一本色道久久加勒比精品 | 国产日韩欧美激情| 亚洲欧美经典视频| 久久se这里有精品| 欧美日韩国产影片| 欧美激情中文不卡| 国产自产2019最新不卡| 在线视频一区二区三区| 中文字幕不卡一区| 精油按摩中文字幕久久| 在线中文字幕一区| 亚洲免费在线电影| 国产98色在线|日韩| 精品入口麻豆88视频| 亚洲五月六月丁香激情| 91欧美激情一区二区三区成人| 欧美sm美女调教| 男女视频一区二区| 欧美最猛黑人xxxxx猛交| 欧美—级在线免费片| 国产一区欧美一区| 久久亚洲精品国产精品紫薇| 奇米色一区二区| 国产亚洲一区字幕| 蜜桃视频一区二区三区在线观看| 在线看日本不卡| 日韩黄色片在线观看| 在线视频一区二区免费| 亚洲另类一区二区| 91精品福利在线| 午夜日韩在线电影| 精品国免费一区二区三区| 日日噜噜夜夜狠狠视频欧美人 | 午夜视频久久久久久| 欧美精品高清视频| 久久99热99| 自拍偷拍亚洲综合| 欧美男男青年gay1069videost| 亚洲电影欧美电影有声小说| 欧美人与z0zoxxxx视频| 久久91精品国产91久久小草| 久久久国际精品| 一本到不卡免费一区二区| 亚洲va天堂va国产va久| 欧美成人性战久久| 成人av电影在线| 亚州成人在线电影| 国产午夜精品一区二区三区四区| av在线不卡免费看| 激情五月婷婷综合网| 五月天激情综合网| 精品视频在线视频| 午夜电影久久久| 久久久久久黄色| 欧美日本一区二区三区| 国产不卡视频在线播放| 亚洲va国产va欧美va观看| 国产欧美日韩三级| 精品区一区二区| youjizz国产精品| 国产在线播放一区三区四| 亚洲成av人在线观看| 国产精品久久久99| 久久久国产精华| 精品国产一二三| 91精品国产综合久久福利| 欧洲日韩一区二区三区| jiyouzz国产精品久久| 国产麻豆视频一区二区| 日韩综合小视频| 偷拍一区二区三区四区| 亚洲成人精品在线观看| 亚洲乱码精品一二三四区日韩在线 | 国产精品高潮呻吟| 中文字幕日韩一区| 亚洲免费观看高清完整版在线观看熊 | 亚洲日本电影在线| 一区二区三区久久| 亚洲无人区一区| 图片区小说区区亚洲影院| 亚洲国产日韩在线一区模特| 亚洲第一主播视频| 免费人成网站在线观看欧美高清| 日本不卡免费在线视频| 麻豆视频一区二区| 成人免费福利片| 色88888久久久久久影院野外| 欧美日韩一区视频| 精品sm捆绑视频| 亚洲人成网站精品片在线观看| 亚洲精品免费一二三区| 日本强好片久久久久久aaa| 老汉av免费一区二区三区| 国产精品亚洲综合一区在线观看| 不卡的电影网站| 精品国产乱子伦一区| 2020日本不卡一区二区视频| 国产精品乱码一区二三区小蝌蚪| 亚洲欧美日韩国产成人精品影院| 日韩精品一区第一页| 不卡影院免费观看| 欧美群妇大交群的观看方式| 欧美精品一区二区三区在线播放| 国产精品成人免费在线| 精品无人区卡一卡二卡三乱码免费卡| 国产成人在线观看免费网站| 欧美三区免费完整视频在线观看| 国产亚洲综合色| 亚洲成av人影院| 欧美色男人天堂| 国产精品第13页| 成人黄色免费短视频| 久久久午夜电影| 国产一区二区调教| 欧美一区二区视频在线观看| 亚洲一区在线看| 欧美在线视频日韩| 伊人色综合久久天天| 99久久国产免费看| 日韩码欧中文字| 色爱区综合激月婷婷| 亚洲美女屁股眼交3|