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

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

?? overlay.cpp

?? linux下實現視頻播放的播放器
?? CPP
字號:
/* *  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$ */#include "iptv.h"#define USES_BASECLASS#include "video.h"#include "overlay.h"#include "video/output.h"//#define DEBUG#include "log.h"#define MODULE "Renderer"int Renderer::CreateOutput(OUTPUT output_mode){    // Create output class    if(output_mode < 2) {	output = new Overlay();#if (HAVE_DDRAW_H)    } else if(output_mode == DDRAW) {	output = new DDraw();#endif#if (C_OPENGL)    } else if(output_mode == OPENGL) {	output = new OpenGL();#endif    }}void Renderer::SetDeinterlace(int d){    Lock();    if(output) output->SetDeinterlace(d);    Unlock();}Renderer::~Renderer(){    SDL_SemPost(info.display_change);    TerminateThread();    SDL_DestroySemaphore(info.display_change);    for(unsigned int i = 0; i < FRAMES; i++) {        if(frames[i].data[0]) _aligned_free(frames[i].data[0]);    }    MUTEX_DESTROY(data);    MUTEX_DESTROY(display_lock);    LOG_MSG("Destroyed renderer object");}int Renderer::Run(){    // Last valid PTS and last displayed frame    int cropx = 0, cropy = 0;    unsigned int laststamp = 0, lastticks = 0;    SDL_Rect clip; clip.x = 0; clip.y = 0;    double aspect = 0.0;    Buffer buffer;    ERROR_MSG("(ThreadID: %u) init complete", SDL_ThreadID());    while(ThreadRun()) {	// Get current frame number, LockFrame will block if insufficient frames	// will return -1 if thread should quit	int i = LockFrame();	if(i < 0) {	    LOG_MSG("Got empty frame");	    if(output) {		Lock(); i = 0;		while((output->CopyData(NULL) < 0) && (i < 20)) {		    LOG_MSG("Overlay lock failed!");		    SDL_Delay(1); i++;		    if(!ThreadRun()) goto end;		}		output->SwapBuffers(&clip);		Unlock();	    }	    UnlockFrame();	    continue;	}	LOG_MSG("Processing frame %d, timestamp %d", i, frames[i].pts);	bool dropframe = false;	// Ready to display the frame	unsigned int pts = frames[i].pts;	// If frame does not have a timestamp, use last timestamp + frame duration	if(!pts) {	    pts = (unsigned int)lrint(laststamp + frames[i].time);	    LOG_MSG("Missing timestamp, using %d", pts);	}	laststamp = pts;	// Sleep until PTS	dropframe = timer->SleepPTS(pts-2);	// Protect against display mode changes	Lock();	if((info.changed) || (frames[i].changed)) {	    output->Free();	    frames[i].changed = false;	    // Adjust drawing rectagnle	    if(info.aspect == 0.0)		clip.w = (Uint16)(info.h*frames[i].aspect);	    else		clip.w = (Uint16)(info.h*info.aspect);	    clip.h = info.h;	    // Calculate crop	    cropx = info.cropx&0x3F;	    cropy = info.cropy&0x3F;	    if(info.cropy&0xF00)		cropy += (frames[i].h - (int)(frames[i].h*(4.0/3.0)*(9.0/16.0)))>>1;	    else if(info.cropy&0xF000)		cropy += (frames[i].h - (int)(frames[i].h*(4.0/3.0)*(10.0/16.0)))>>1;	    buffer.height = frames[i].h - (cropy * 2);	    buffer.src_width = frames[i].pitch;	    buffer.dst_width = frames[i].w - (cropx * 2);	    // if aspect ratio changed, resize main window	    if(((info.aspect == 0.0) && (aspect != frames[i].aspect)) ||		((info.aspect != 0.0) && (aspect != info.aspect)))  {		if(info.aspect == 0.0)		    aspect = frames[i].aspect;		else		    aspect = info.aspect;		LOG_MSG("Source video aspect ratio changed to %.2f (%d)", aspect, i);    		// Resize surface		SDL_Event event;		event.type = SDL_USEREVENT;		event.user.data1 = (void*)((intptr_t)clip.w);		event.user.data2 = (void*)((intptr_t)clip.h);		SDL_PushEvent(&event);		// Unlock mutex so display mode change can lock it		Unlock();		// Wait for ack                while((queue.GetUsed() > -1) && (SDL_SemWaitTimeout(info.display_change, 500) == SDL_MUTEX_TIMEDOUT)) {#ifndef SEM_SILENT                    ERROR_MSG("Semaphore timeout expired, line: %d, thread: %u", __LINE__, SDL_ThreadID());#endif		}		// At this point a flush could already be requested,		// check if current frame is still valid		if(queue.GetUsed() < 0) {		    ERROR_MSG("Flush requested, display mode change aborted");		    UnlockFrame();		    continue;		}		// As soon as we have surface lock mutex again		Lock();	    }	    if(clip.w > info.w) {		clip.w = info.w;		clip.h = (Uint16)(info.w/aspect);	    }	    clip.x = (info.w - clip.w) / 2;	    clip.y = (info.h - clip.h) / 2;	    LOG_MSG("New video size: %dx%d", clip.w, clip.h);	    info.changed = false;	    if((buffer.dst_width > 0) && (buffer.height > 0)) {		if(output->Create(buffer.dst_width, buffer.height, info.colorspace, info.surface) < 0) {		    ERROR_MSG("Overlay mode set failed: %s", SDL_GetError());		    Unlock();		    UnlockFrame();		    break;		}	    } else {		ERROR_MSG("Invalid video size %dx%d!", buffer.dst_width, buffer.height);	    }	}	if(GCC_UNLIKELY(dropframe)) {	    LOG_MSG("Dropping frame");	    Unlock();	    UnlockFrame();	    continue;	}	if(abs(info.offset) > cropy) {	    info.offset = cropy * (info.offset < 0 ? -1 : 1);	}	SDL_memcpy(buffer.data, frames[i].data, 3*sizeof(void*));	if(buffer.data) {	    buffer.data[0] +=  ((cropy + info.offset + frames[i].edge) * buffer.src_width) + cropx + frames[i].edge;	    buffer.data[1] += (((cropy + info.offset + frames[i].edge)>>1) * (buffer.src_width>>1)) + ((cropx + frames[i].edge)>>1);	    buffer.data[2] += (((cropy + info.offset + frames[i].edge)>>1) * (buffer.src_width>>1)) + ((cropx + frames[i].edge)>>1);	    if(output->CopyData(&buffer) == 0) {		UnlockFrame();		output->SwapBuffers(&clip);	    } else {		ERROR_MSG("Error locking overlay!");		UnlockFrame();	    }	    Unlock();#ifndef RELEASE	    int tt = timer->GetPTS();	    LOG_MSG("Frame displayed at PTS: %d (%d) last frame was %dms ago", tt, tt-pts, SDL_GetTicks()-lastticks);	    lastticks = SDL_GetTicks();#endif	} else {	    LOG_MSG("No overlay or no buffer!");	    UnlockFrame();	    Unlock();	}    }    Lock();end:    output->Free();    delete output;    Unlock();    ERROR_MSG("(ThreadID: %u) finish complete", SDL_ThreadID());    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨九色丨尤物| 一区二区三区中文在线观看| 日韩一级免费一区| 欧美日本在线播放| 欧美二区三区的天堂| 91精品久久久久久蜜臀| 91精品国产aⅴ一区二区| 在线播放91灌醉迷j高跟美女 | 国产在线看一区| 国产主播一区二区| 国产91精品久久久久久久网曝门| 国产麻豆成人精品| 国产成人日日夜夜| 99国产精品99久久久久久| 91免费观看国产| 欧美日韩视频一区二区| 欧美一区二区三区公司| 精品国产乱码久久久久久蜜臀| 久久久夜色精品亚洲| 欧美国产97人人爽人人喊| 国产精品麻豆久久久| 日韩一区欧美一区| 亚洲一线二线三线视频| 日本视频免费一区| 国产露脸91国语对白| 99久久综合色| 538在线一区二区精品国产| 欧美成人激情免费网| 国产女人水真多18毛片18精品视频| 国产精品网站在线观看| 一区二区三区精密机械公司| 日韩av在线免费观看不卡| 国产一区二区三区不卡在线观看| 99久久精品情趣| 欧美日韩国产另类不卡| 欧美精品一区二区久久久| 中文字幕在线免费不卡| 亚洲成人激情社区| 国产成人啪免费观看软件| 欧美亚洲一区二区在线观看| 欧美大片一区二区三区| 18涩涩午夜精品.www| 日本不卡的三区四区五区| 成人久久18免费网站麻豆| 欧美性色黄大片手机版| 精品福利在线导航| 亚洲黄一区二区三区| 国产在线一区观看| 欧美最猛黑人xxxxx猛交| 精品美女在线播放| 亚洲精选视频免费看| 蜜臀久久99精品久久久久久9| 不卡av电影在线播放| 欧美一区二区成人6969| 中文字幕一区二区三区在线观看 | 99久久精品99国产精品| 欧美一区二区三区视频在线| 综合久久久久久久| 国内精品视频一区二区三区八戒| 一本到高清视频免费精品| 久久日一线二线三线suv| 亚洲自拍欧美精品| 高清成人免费视频| 欧美一区二区三区人| 亚洲三级在线免费| 国产福利91精品| 日韩欧美国产电影| 亚洲自拍都市欧美小说| 成人av电影在线网| 久久久www成人免费无遮挡大片| 亚洲成人动漫在线免费观看| 91在线视频网址| 久久人人爽爽爽人久久久| 日韩精品成人一区二区三区| 日本丶国产丶欧美色综合| 国产日韩精品一区二区三区在线| 麻豆国产精品视频| 欧美精品久久一区二区三区| 亚洲免费在线视频| caoporn国产精品| 国产亚洲精品超碰| 国内精品久久久久影院色| 在线综合视频播放| 亚洲一级在线观看| 91免费国产视频网站| 国产精品美女久久久久aⅴ| 国产一区不卡视频| 精品国产在天天线2019| 日本午夜一区二区| 6080亚洲精品一区二区| 一区二区在线免费| 一本色道综合亚洲| 亚洲三级免费电影| 91一区二区三区在线观看| 中文字幕第一区| 成人网在线免费视频| 国产欧美一区二区三区在线看蜜臀 | 97se亚洲国产综合自在线| 国产精品久久久爽爽爽麻豆色哟哟| 国产成人综合精品三级| 国产亚洲欧美一级| 国产suv一区二区三区88区| 久久综合九色综合欧美98| 国内精品伊人久久久久影院对白| 欧美精品一区男女天堂| 国内精品自线一区二区三区视频| 精品免费日韩av| 国产乱子伦视频一区二区三区| 久久久91精品国产一区二区精品| 国产精品12区| 综合网在线视频| 欧美亚洲一区二区在线| 丝袜诱惑亚洲看片| 欧美一级欧美三级| 激情综合五月天| 国产女同性恋一区二区| 色综合天天综合狠狠| 亚洲综合999| 欧美精品日日鲁夜夜添| 麻豆精品蜜桃视频网站| 久久久久久久电影| 99久久久久久99| 亚洲一区二区三区中文字幕| 欧美另类一区二区三区| 久久99国产精品麻豆| 国产人成一区二区三区影院| 97久久精品人人澡人人爽| 亚洲综合久久久| 日韩亚洲电影在线| 国产成人免费视频精品含羞草妖精| 中文字幕在线观看不卡| 欧美日韩国产高清一区| 久久激五月天综合精品| 国产精品婷婷午夜在线观看| 欧美在线一区二区| 麻豆91在线播放免费| 国产精品久久777777| 欧美亚洲愉拍一区二区| 国内精品视频一区二区三区八戒| 亚洲欧洲日韩av| 日韩一区二区高清| 9久草视频在线视频精品| 视频一区二区三区入口| 久久久久九九视频| 欧美在线观看18| 韩国av一区二区三区在线观看| 亚洲品质自拍视频网站| 日韩午夜激情视频| 91影院在线免费观看| 天堂一区二区在线| 欧美国产日韩一二三区| 777午夜精品免费视频| 成人美女视频在线观看18| 婷婷开心激情综合| 国产精品美女久久久久久久久久久| 欧美日韩一级大片网址| 成人视屏免费看| 麻豆精品视频在线| 亚洲香蕉伊在人在线观| 国产色产综合产在线视频| 欧美丰满少妇xxxxx高潮对白 | 精品美女在线播放| 在线视频中文字幕一区二区| 国产福利电影一区二区三区| 五月婷婷综合激情| 1000部国产精品成人观看| 欧美xxxx在线观看| 欧美视频在线一区| 99免费精品视频| 国产二区国产一区在线观看| 日本免费新一区视频| 一区二区三区久久久| 中文一区一区三区高中清不卡| 日韩一区二区三区三四区视频在线观看 | 99久久综合色| 国产传媒一区在线| 久久成人羞羞网站| 午夜免费久久看| 一区二区三区中文字幕电影| 国产日韩欧美综合一区| 日韩精品在线网站| 欧美精品乱码久久久久久| 色94色欧美sute亚洲线路一ni| 欧美自拍偷拍午夜视频| 成人av电影在线网| 国产成人综合自拍| 精品一区二区三区日韩| 秋霞午夜av一区二区三区| 亚洲国产综合在线| 一区二区三区美女视频| 亚洲欧美日韩电影| 中文字幕亚洲精品在线观看| 欧美激情一区在线观看| 久久久久久久精| www激情久久| 久久久久久久精| 久久免费的精品国产v∧| 精品成人免费观看| 欧美精品一区二区在线播放| 精品国产亚洲一区二区三区在线观看|