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

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

?? mpeg_decoder.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 "wxgui/StreamInfo.h"#include "libmpeg2/mpeg2.h"//#define DEBUG#include "log.h"#define MODULE "mpeg_decoder"int mpeg_decoder::Run(){    mpeg2dec_t *m_dec;    const mpeg2_info_t *m_info;    // Pitcure info    bool changed = false;    unsigned int w = 0, h = 0;    double aspect = 0.0;    // 4:2:0 or 4:2:2 ?    //bool mode422 = false;#if (C_HAVE_WXGUI)    long sliceSize;    Uint32 sliceStartTicks;#endif    if(SDL_HasMMX()) {	ERROR_MSG("Detected MMX capable CPU");	h |= MPEG2_ACCEL_X86_MMX;    }    // Set acceleration    mpeg2_accel(h);    w = h = 0;    // Init MPEG2 decoder    m_dec = mpeg2_init();    m_info = mpeg2_info(m_dec);    ERROR_MSG("(ThreadID: %u) init complete", SDL_ThreadID());    // Frame counter    int frames = 0;    double frame_period = 0.0;    // Target surface info    Frame frame;    Renderer * renderer;#if (C_HAVE_WXGUI)    sliceSize = 0;    sliceStartTicks = SDL_GetTicks();#endif    while(ThreadRun()) {	renderer = (Renderer*)filterinfo;	// Get next packet from the fifo queue	unsigned int offset, m_size, pts;	m_size = fifo->GetPacket(&offset, &pts);#if (C_HAVE_WXGUI)	sliceSize += m_size;#endif	if((m_size == 0) || (m_size > buffersize)) {	    LOG_MSG("Error invalid packet size: %d", m_size);	    SDL_Delay(10);	    continue;	}	LockBuffer();	roffset = offset;	LOG_MSG("Set roffset to %d, pts %d", offset, pts);	if(!SDL_SemValue(data))	    SDL_SemPost(data);	UnlockBuffer();	mpeg2_buffer(m_dec, buffer+offset, buffer+offset+m_size);	DEBUG_MSG("Buffer set to 0x%x-0x%x", buffer+offset, buffer+offset+m_size);	mpeg2_state_t state = mpeg2_parse(m_dec);	while(state != STATE_BUFFER) {	    switch(state) {		case STATE_BUFFER:		    DEBUG_MSG("STATE_BUFFER");		    break;		case STATE_INVALID:		    DEBUG_MSG("STATE_INVALID");		    break;		case STATE_GOP:		    DEBUG_MSG("GOP header found");		    DEBUG_MSG("User data (cc): %d", m_info->user_data_len);		    break;		case STATE_SEQUENCE:		    DEBUG_MSG("SEQUENCE header found");		    frame_period = (double)m_info->sequence->frame_period / 27000.0;		    LOG_MSG("Frame period: %.2f ms", frame_period);		    // Check for video size change		    if((w != m_info->sequence->picture_width) || (h != m_info->sequence->picture_height)			    || (aspect != m_info->sequence->aspect)) {			w = m_info->sequence->picture_width;			h = m_info->sequence->picture_height;			aspect = m_info->sequence->aspect;			LOG_MSG("New picture size: %dx%d, AR: %.2f", w, h, m_info->sequence->aspect);			if(m_info->sequence->height == m_info->sequence->chroma_height) {			    ERROR_MSG("Mpeg 4:2:2 not supported!");			    goto finish_thread;			}			changed = true;#if (C_HAVE_WXGUI)			// New video size			if(gui.wxStreamInfo != NULL)			    gui.wxStreamInfo->UpdateVideoStream(w, h, m_info->sequence->byte_rate * 8, aspect);			sliceSize = 0;			sliceStartTicks = SDL_GetTicks();#endif		    }		    // Set pitch & height		    frame.w = w; frame.h = h;		    frame.aspect = aspect;		    frame.pitch = ALIGN(frame.w, 16);		    frame.h = ALIGN(frame.h, 16);		    // Use custom buffers		    if(renderer) {			// Set the first 2 reference frames			renderer->LockData(&frame);			if(frame.id < 0) goto finish_thread;			mpeg2_custom_fbuf(m_dec, 1);			mpeg2_set_buf(m_dec, frame.data, (void*)((intptr_t)frame.id));			renderer->LockData(&frame);			if(frame.id < 0) goto finish_thread;			mpeg2_set_buf(m_dec, frame.data, (void*)((intptr_t)frame.id));		    }		    break;		case STATE_PICTURE:		    mpeg2_setPTS(m_dec, pts);#ifdef DEBUG		    switch(m_info->current_picture->flags&PIC_MASK_CODING_TYPE) {			case PIC_FLAG_CODING_TYPE_I:			    LOG_MSG("I frame, pts: %d", pts);			    break;			case PIC_FLAG_CODING_TYPE_P:			    LOG_MSG("P frame, pts: %d", pts);			    break;			case PIC_FLAG_CODING_TYPE_B:			    LOG_MSG("B frame, pts: %d", pts);			    break;			case PIC_FLAG_CODING_TYPE_D:			    LOG_MSG("D frame, pts: %d", pts);			    break;			default:			    LOG_MSG("Unknown frame, pts: %d", pts);			    break;		    }#endif		    pts = 0;		    // Set pitch & height		    frame.w = w; frame.h = h;		    frame.pitch = ALIGN(frame.w, 16);		    frame.h = ALIGN(frame.h, 16);		    if(renderer) {			renderer->LockData(&frame);			if(frame.id < 0) goto finish_thread;			mpeg2_set_buf(m_dec, frame.data, (void*)((intptr_t)frame.id));		    }		    break;		case STATE_END:		case STATE_SLICE: {		    DEBUG_MSG("SLICE found");		    if((m_info->display_fbuf) && (renderer)) {			if((frames == 0) &&			    (m_info->display_picture->flags&PIC_MASK_CODING_TYPE != PIC_FLAG_CODING_TYPE_I)) {			    renderer->UnlockData((int)PT2L(m_info->display_fbuf->id), NULL);			    break;			}			// Fill all real info			frame.aspect = aspect;			frame.time = frame_period;			frame.pts = m_info->display_picture->pts;			frame.changed = changed; changed = false;			renderer->UnlockData((int)PT2L(m_info->display_fbuf->id), &frame);			renderer->ReleaseData((int)PT2L(m_info->display_fbuf->id));			++frames;		    }		    else if((m_info->discard_fbuf) && (renderer)) {			renderer->UnlockData((int)PT2L(m_info->discard_fbuf->id), NULL);		    }#if (C_HAVE_WXGUI)		    Uint32 sliceTimeTaken = SDL_GetTicks() - sliceStartTicks;		    // Update ~twice per second		    if(sliceTimeTaken > 500) {			if(gui.wxStreamInfo != NULL)			    gui.wxStreamInfo->UpdateVideoActualBitrate((long)((double)sliceSize * 8000.0 / (double)sliceTimeTaken));			sliceSize = 0;			sliceStartTicks = SDL_GetTicks();		    }#endif		    break;		}		default:		    DEBUG_MSG("STATE 0x%x", state);		    break;	    } // switch	    state = mpeg2_parse(m_dec);	} // while(state != STATE_BUFFER)    } // while(ThreadRun())finish_thread:    if(m_dec)	mpeg2_close(m_dec);    m_dec = NULL;    if(renderer)	renderer->FlushBuffers();    ERROR_MSG("(ThreadID: %u) finish complete", SDL_ThreadID());    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清av一区二区| 亚洲国产精品久久不卡毛片| 黄网站免费久久| 2欧美一区二区三区在线观看视频| 麻豆精品在线看| www国产亚洲精品久久麻豆| 国产成人自拍在线| 中文字幕日韩av资源站| 欧美日韩中文字幕一区| 久久国产综合精品| 最新成人av在线| 欧美日韩国产综合视频在线观看| 免费成人美女在线观看.| 久久综合久色欧美综合狠狠| 99免费精品视频| 日韩av中文在线观看| 精品国产91九色蝌蚪| 成人18视频在线播放| 亚洲国产日韩在线一区模特 | 调教+趴+乳夹+国产+精品| 日韩一级欧美一级| 北条麻妃一区二区三区| 亚洲福中文字幕伊人影院| 日韩欧美在线一区二区三区| 成人影视亚洲图片在线| 一区二区在线观看视频| 日韩精品一区二区三区视频| 99久久精品国产一区| 日日噜噜夜夜狠狠视频欧美人| 久久久精品国产免大香伊| 在线免费一区三区| 经典三级视频一区| 亚洲成人精品影院| 国产视频一区在线播放| 欧美三级电影精品| 风流少妇一区二区| 日本中文一区二区三区| 中文字幕在线不卡| 精品久久久久久久久久久久久久久久久 | 亚洲v中文字幕| 欧美国产欧美综合| 日韩一区国产二区欧美三区| 日本乱码高清不卡字幕| 国产成+人+日韩+欧美+亚洲 | 男女激情视频一区| 亚洲视频在线观看三级| 久久久国产精华| 8v天堂国产在线一区二区| 91成人在线观看喷潮| 成人av网址在线| 国产麻豆成人传媒免费观看| 日韩国产成人精品| 亚洲一区二区三区四区的| 国产日本欧洲亚洲| 日韩精品在线看片z| 欧美日韩视频专区在线播放| 91麻豆福利精品推荐| 成人一区二区三区| 国产一区二区主播在线| 奇米四色…亚洲| 五月激情六月综合| 亚洲va国产天堂va久久en| 亚洲精品少妇30p| 国产精品精品国产色婷婷| 国产欧美一区二区精品性| 欧美精品一区二区三区在线播放| 在线播放亚洲一区| 欧美精品三级日韩久久| 欧美日韩国产一级二级| 欧美日韩一级二级三级| 色88888久久久久久影院野外| 成+人+亚洲+综合天堂| 国产高清成人在线| 国产91综合一区在线观看| 美腿丝袜亚洲三区| 精品一区二区三区不卡| 麻豆freexxxx性91精品| 国模大尺度一区二区三区| 精品在线一区二区| 国产一区二区不卡| 国产a视频精品免费观看| 成人精品视频一区二区三区 | 91捆绑美女网站| 91麻豆国产福利精品| 在线观看成人小视频| 欧美日韩视频一区二区| 欧美一区二区免费| 久久奇米777| 国产精品理伦片| 亚洲特黄一级片| 亚洲一本大道在线| 日韩成人一区二区| 国产伦理精品不卡| 成人黄色在线看| 日本韩国欧美国产| 欧美挠脚心视频网站| 欧美一区二区三区四区在线观看| www国产成人| 亚洲色图都市小说| 亚洲18影院在线观看| 国内成人自拍视频| 成人动漫一区二区| 欧美视频一区二区三区四区| 日韩欧美成人一区二区| 国产精品久久看| 日日夜夜一区二区| 国产成人自拍网| 91精品91久久久中77777| 欧美一区二区三区在线观看| 国产丝袜美腿一区二区三区| 亚洲免费av网站| 三级欧美在线一区| 国产91丝袜在线18| 欧美亚洲一区三区| 久久婷婷国产综合国色天香| 综合av第一页| 国产一区二区三区高清播放| 91在线观看免费视频| 欧美不卡123| 亚洲精品久久嫩草网站秘色| 久久99精品久久久久久动态图| 成人avav在线| 日韩欧美资源站| 一区二区在线观看免费| 国产一区999| 91精品蜜臀在线一区尤物| 国产精品你懂的| 日本不卡的三区四区五区| 91美女视频网站| 国产三级一区二区| 麻豆freexxxx性91精品| 欧美日韩一区高清| 国产精品乱码一区二区三区软件| 日本最新不卡在线| 91视频在线观看| 国产欧美精品在线观看| 日av在线不卡| 欧美影院一区二区| 国产精品第四页| 国产一区二区不卡在线| 欧美一区二视频| 亚洲国产三级在线| 色婷婷av一区二区| 国产精品久久久久影院色老大 | 欧美日韩大陆一区二区| 18成人在线观看| 国产精品一区二区三区乱码| 国产麻豆精品视频| 成人黄页毛片网站| 国产欧美精品日韩区二区麻豆天美| 一区二区三区国产精华| 大陆成人av片| 国产精品视频在线看| 精品一区二区在线免费观看| 欧美人与z0zoxxxx视频| 亚洲午夜国产一区99re久久| 95精品视频在线| 亚洲人成网站在线| av一本久道久久综合久久鬼色| 精品少妇一区二区三区免费观看 | 一区二区三区视频在线观看| 波多野结衣欧美| 国产日韩三级在线| 高清国产午夜精品久久久久久| 精品日韩欧美在线| 激情五月激情综合网| 久久午夜电影网| 国产一区视频网站| 国产日产亚洲精品系列| 成人午夜视频免费看| 国产欧美久久久精品影院| 成人免费视频一区| 最新国产成人在线观看| 在线免费精品视频| 亚洲成人av一区| 欧美电影一区二区三区| 日韩精品一二三四| 精品久久久久香蕉网| 国产精品一区在线观看你懂的| 久久婷婷国产综合精品青草| 国产999精品久久久久久绿帽| 国产精品久久久久久一区二区三区| 成人黄色电影在线| 亚洲国产综合人成综合网站| 精品视频色一区| 久久精工是国产品牌吗| 国产偷v国产偷v亚洲高清| 91一区二区三区在线观看| 亚洲高清免费视频| 日韩小视频在线观看专区| 国产一区二区三区四| 亚洲品质自拍视频| 欧美精品1区2区| 国产精品资源网| 亚洲免费在线看| 日韩一级黄色大片| 不卡区在线中文字幕| 一区二区三国产精华液| 日韩免费观看高清完整版| 懂色av中文字幕一区二区三区|