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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dshowtools.cpp

?? Window Mobile Capture with DirectDraw
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
CxImageRenderer::CxImageRenderer(LPUNKNOWN pUnk, HRESULT* phr)
	: CBaseRenderer(CxImageRenderer_GUID, NAME("CxImageRenderer"), pUnk, phr)
{
	NOTE("CxImageRenderer::CxImageRenderer()");
	*phr = S_OK;
	m_ImageValid = false;
};

HRESULT CxImageRenderer::CheckMediaType(const CMediaType* pmt)
{
	NOTE("CxImageRenderer::CheckMediaType()");
	//Check the stream type
	bool bIsVideo = (pmt->majortype == MEDIATYPE_Video) 
		&& ((pmt->formattype == FORMAT_VideoInfo) 
		|| (pmt->formattype == FORMAT_VideoInfo2));		
	//Check the colorspace
	bool bColorspaceOk =
		pmt->subtype == MEDIASUBTYPE_RGB32
		|| pmt->subtype == MEDIASUBTYPE_RGB24
		|| pmt->subtype == MEDIASUBTYPE_YUY2
		|| pmt->subtype == MEDIASUBTYPE_YV12
		;
	if (bIsVideo && bColorspaceOk)
		return S_OK;
	else
		return E_FAIL;
};

HRESULT CxImageRenderer::DoRenderSample(IMediaSample *pSample)
{
	NOTE("CxImageRenderer::DoRenderSample()");

	CMediaType mt;
	m_pInputPin->ConnectionMediaType(&mt);
	BITMAPINFOHEADER bih;		

	//See if we are using VideoHeader2
	if (mt.formattype == FORMAT_VideoInfo2) {
		VIDEOINFOHEADER2 *vih2 = (VIDEOINFOHEADER2*)mt.Format();
		bih = vih2->bmiHeader;
	} else {
		VIDEOINFOHEADER *vih = (VIDEOINFOHEADER*)mt.Format();
		bih = vih->bmiHeader;
	}
	if (bih.biSize == 0) {
		// A hack for a strange bug, it's VideoHeader2 but it's not?
		VIDEOINFOHEADER *vih = (VIDEOINFOHEADER*)mt.Format();
		bih = vih->bmiHeader;
	}
	BYTE* p;
	pSample->GetPointer(&p);
	long dataSize = pSample->GetSize();

	//Do something with the pic
	if (mt.subtype == MEDIASUBTYPE_RGB32) {
		lastImage.CreateFromARGB(bih.biWidth, bih.biHeight, p);
		lastImage.Flip();
		m_ImageValid = lastImage.IsValid();						
	} else if (mt.subtype == MEDIASUBTYPE_RGB24) {				
		lastImage.Create(bih.biWidth, bih.biHeight, 24);					
		// Do a direct memory copy
		memcpy(lastImage.GetBits(), p, bih.biWidth * bih.biHeight * 3);
		m_ImageValid = lastImage.IsValid();						
	} else if (mt.subtype == MEDIASUBTYPE_YV12) {				
		BYTE *yuvBuffer = new BYTE[bih.biHeight * bih.biWidth * 16];
		
		// Call Klaus Post's mmx YV12->YUY2 conversion routine
		BYTE *y = p;
		BYTE *u = y + (bih.biHeight/2 * bih.biWidth/2);
		BYTE *v = u + (bih.biHeight/2 * bih.biWidth/2);
		mmx_yv12_to_yuy2(
			y,
			u, 
			v, 
			bih.biWidth, // rowsize
			bih.biWidth, // pitch
			bih.biWidth/2, // pitch_uv
			yuvBuffer, 
			bih.biWidth*2, // dst_pitch
			bih.biHeight);

		lastImage.Create(bih.biWidth, bih.biHeight, 24);					
		//Using alexnoe's YUV2->RGB24 Assembly rountines
		YUV422toRGB24_MMX(yuvBuffer, lastImage.GetBits(), 0, bih.biWidth, bih.biHeight, bih.biWidth * 2, bih.biWidth * 3);
		m_ImageValid = lastImage.IsValid();						
		//lastImage.Draw(GetDC(NULL));
		delete [] yuvBuffer;

	}else if (mt.subtype == MEDIASUBTYPE_YUY2) {				
		lastImage.Create(bih.biWidth, bih.biHeight, 24);					
		//Using alexnoe's YUV2->RGB24 Assembly rountines
		YUV422toRGB24_MMX(p, lastImage.GetBits(), 0, bih.biWidth, bih.biHeight, bih.biWidth * 2, bih.biWidth * 3);
		m_ImageValid = lastImage.IsValid();						
	}

	//We only need one good sample
	m_bAbort = true;

	return S_OK;
};

CxImage &CxImageRenderer::GetImage()
{
	NOTE("CxImageRenderer::GetImage()");
	return lastImage;
};

bool CxImageRenderer::GetImageOk()
{
	NOTE("CxImageRenderer::GetImageOk()");
	return m_ImageValid;
}

/*************************************
 * Progressive YV12 -> YUY2 conversion
 *
 * (c) 2003, Klaus Post.
 *
 * Requires mod 8 rowsize.
 * MMX version.
 *************************************/

void mmx_yv12_to_yuy2(const BYTE* srcY, const BYTE* srcU, const BYTE* srcV, int src_rowsize, int src_pitch, int src_pitch_uv, 
                    BYTE* dst, int dst_pitch,
                    int height) {
  static __int64 add_64=0x0002000200020002;
  const BYTE** srcp= new const BYTE*[3];
  int src_pitch_uv2 = src_pitch_uv*2;
  int skipnext = 0;

  int dst_pitch2=dst_pitch*2;
  int src_pitch2 = src_pitch*2;


  
  /**** Do first and last lines - NO interpolation:   *****/
  // MMX loop relies on C-code to adjust the lines for it.
  const BYTE* _srcY=srcY;
  const BYTE* _srcU=srcU;
  const BYTE* _srcV=srcV;
  BYTE* _dst=dst;

  for (int i=0;i<4;i++) {
    switch (i) {
    case 1:
      _srcY+=src_pitch;  // Same chroma as in 0
      _dst+=dst_pitch;
      break;
    case 2:
      _srcY=srcY+(src_pitch*(height-2));
      _srcU=srcU+(src_pitch_uv*((height>>1)-1));
      _srcV=srcV+(src_pitch_uv*((height>>1)-1));
      _dst = dst+(dst_pitch*(height-2));
      break;
    case 3: // Same chroma as in 4
      _srcY += src_pitch;
      _dst += dst_pitch;
      break;
    default:  // Nothing, case 0
        break;
    }


    __asm {
    mov edi, [_dst]
    mov eax, [_srcY]
    mov ebx, [_srcU]
    mov ecx, [_srcV]
    mov edx,0
    pxor mm7,mm7
    jmp xloop_test_p
xloop_p:
    movq mm0,[eax]    //Y
      movd mm1,[ebx]  //U
    movq mm3,mm0  
     movd mm2,[ecx]   //V
    punpcklbw mm0,mm7  // Y low
     punpckhbw mm3,mm7   // Y high
    punpcklbw mm1,mm7   // 00uu 00uu
     punpcklbw mm2,mm7   // 00vv 00vv
    movq mm4,mm1
     movq mm5,mm2
    punpcklbw mm1,mm7   // 0000 00uu low
     punpcklbw mm2,mm7   // 0000 00vv low
    punpckhbw mm4,mm7   // 0000 00uu high
     punpckhbw mm5,mm7   // 0000 00vv high
    pslld mm1,8
     pslld mm4,8
    pslld mm2,24
     pslld mm5,24
    por mm0, mm1
     por mm3, mm4
    por mm0, mm2
     por mm3, mm5
    movq [edi],mm0
     movq [edi+8],mm3
    add eax,8
    add ebx,4
    add ecx,4
    add edx,8
    add edi, 16
xloop_test_p:
      cmp edx,[src_rowsize]
      jl xloop_p
    }
  }

/****************************************
 * Conversion main loop.
 * The code properly interpolates UV from
 * interlaced material.
 * We process two lines in the same field
 * in the same loop, to avoid reloading
 * chroma each time.
 *****************************************/

  height-=4;

  dst+=dst_pitch2;
  srcY+=src_pitch2;
  srcU+=src_pitch_uv;
  srcV+=src_pitch_uv;

  srcp[0] = srcY;
  srcp[1] = srcU-src_pitch_uv;
  srcp[2] = srcV-src_pitch_uv;

  int y=0;
  int x=0;

  __asm {
    mov esi, [srcp]
    mov edi, [dst]

    mov eax,[esi]
    mov ebx,[esi+4]
    mov ecx,[esi+8]
    mov edx,0
    jmp yloop_test
    align 16
yloop:
    mov edx,0               // x counter
    jmp xloop_test
    align 16
xloop:
    mov edx, src_pitch_uv
    movq mm0,[eax]          // mm0 = Y current line
     pxor mm7,mm7
    movd mm2,[ebx+edx]            // mm2 = U top field
     movd mm3, [ecx+edx]          // mm3 = V top field
    movd mm4,[ebx]        // U prev top field
     movq mm1,mm0             // mm1 = Y current line
    movd mm5,[ecx]        // V prev top field

    punpcklbw mm2,mm7        // U 00uu 00uu 00uu 00uu
     punpcklbw mm3,mm7         // V 00vv 00vv 00vv 00vv
    punpcklbw mm4,mm7        // U 00uu 00uu 00uu 00uu
     punpcklbw mm5,mm7         // V 00vv 00vv 00vv 00vv
    paddusw mm4,mm2
     paddusw mm5,mm3
    paddusw mm4,mm2
     paddusw mm5,mm3
    paddusw mm4,mm2
     paddusw mm5,mm3
    paddusw mm4, [add_64]
     paddusw mm5, [add_64]
    psrlw mm4,2
     psrlw mm5,2


     punpcklbw mm0,mm7        // Y low
    punpckhbw mm1,mm7         // Y high*
     pxor mm6,mm6
    punpcklbw mm6,mm4         // U 0000 uu00 0000 uu00 (low)
     punpckhbw mm7,mm4         // V 0000 uu00 0000 uu00 (high
    por mm0,mm6
     por mm1,mm7
    movq mm6,mm5
     punpcklbw mm5,mm5          // V 0000 vvvv 0000 vvvv (low)
    punpckhbw mm6,mm6           // V 0000 vvvv 0000 vvvv (high)
     pslld mm5,24
    pslld mm6,24
     por mm0,mm5
    por mm1,mm6
    mov edx, src_pitch_uv2
     movq [edi],mm0
    movq [edi+8],mm1

    //Next line 
     
    movd mm4,[ebx+edx]        // U next top field
     movd mm5,[ecx+edx]       // V prev top field
    mov edx, [src_pitch]
     pxor mm7,mm7
    movq mm0,[eax+edx]        // Next U-line
    movq mm1,mm0             // mm1 = Y current line

    punpcklbw mm4,mm7        // U 00uu 00uu 00uu 00uu
     punpcklbw mm5,mm7         // V 00vv 00vv 00vv 00vv
    paddusw mm4,mm2
     paddusw mm5,mm3
    paddusw mm4,mm2
     paddusw mm5,mm3
    paddusw mm4,mm2
     paddusw mm5,mm3
    paddusw mm4, [add_64]
     paddusw mm5, [add_64]
    psrlw mm4,2
     psrlw mm5,2

     punpcklbw mm0,mm7        // Y low
    punpckhbw mm1,mm7         // Y high*
     pxor mm6,mm6
    punpcklbw mm6,mm4         // U 0000 uu00 0000 uu00 (low)
     punpckhbw mm7,mm4         // V 0000 uu00 0000 uu00 (high
    por mm0,mm6
     por mm1,mm7
    movq mm6,mm5
     punpcklbw mm5,mm5          // V 0000 vvvv 0000 vvvv (low)
    punpckhbw mm6,mm6           // V 0000 vvvv 0000 vvvv (high)
     pslld mm5,24
    mov edx,[dst_pitch]
    pslld mm6,24
     por mm0,mm5
    por mm1,mm6
     movq [edi+edx],mm0
    movq [edi+edx+8],mm1
     add edi,16
    mov edx, [x]
     add eax, 8
    add ebx, 4
     add edx, 8
    add ecx, 4
xloop_test:
    cmp edx,[src_rowsize]
    mov x,edx
    jl xloop
    mov edi, dst
    mov eax,[esi]
    mov ebx,[esi+4]
    mov ecx,[esi+8]

    add edi,[dst_pitch2]
    add eax,[src_pitch2]
    add ebx,[src_pitch_uv]
    add ecx,[src_pitch_uv]
    mov edx, [y]
    mov [esi],eax
    mov [esi+4],ebx
    mov [esi+8],ecx
    mov [dst],edi
    add edx, 2

yloop_test:
    cmp edx,[height]
    mov [y],edx
    jl yloop
    emms
  }
   delete[] srcp;
}

HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister) 
{
	IMoniker * pMoniker;
	IRunningObjectTable *pROT;
	if (FAILED(GetRunningObjectTable(0, &pROT))) 
	{
		return E_FAIL;
	}

	WCHAR wsz[128];
	wsprintfW(wsz, L"FilterGraph %08x pid %08x - AudioDShowEncoder", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());

	HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
	if (SUCCEEDED(hr)) 
	{
		// Use the ROTFLAGS_REGISTRATIONKEEPSALIVE to ensure a strong reference
		// to the object.  Using this flag will cause the object to remain
		// registered until it is explicitly revoked with the Revoke() method.
		//
		// Not using this flag means that if GraphEdit remotely connects
		// to this graph and then GraphEdit exits, this object registration 
		// will be deleted, causing future attempts by GraphEdit to fail until
		// this application is restarted or until the graph is registered again.
		hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pUnkGraph, pMoniker, pdwRegister);
		pMoniker->Release();
	}

	pROT->Release();
	return hr;
}

void RemoveGraphFromRot(DWORD pdwRegister)
{
	IRunningObjectTable *pROT;

	if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) 
	{
		pROT->Revoke(pdwRegister);
		pROT->Release();
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频小说图片| 国产一区二区日韩精品| 久久 天天综合| 99免费精品视频| 欧美精品一区二区高清在线观看| 国产精品蜜臀av| 久久99国产精品久久99| 91国产免费观看| 国产精品视频一区二区三区不卡| 人人超碰91尤物精品国产| 99久久综合色| 国产调教视频一区| 久久99深爱久久99精品| 欧美日韩午夜在线视频| 亚洲你懂的在线视频| 国产九九视频一区二区三区| 91精品欧美一区二区三区综合在 | 欧美丰满美乳xxx高潮www| 国产精品国产自产拍高清av| 亚洲精品午夜久久久| 丰满亚洲少妇av| 2024国产精品视频| 免费不卡在线视频| 欧美日韩国产首页| 亚洲成人一二三| 欧美亚男人的天堂| 亚洲激情男女视频| 91小宝寻花一区二区三区| 中日韩av电影| www.66久久| 国产精品国产三级国产aⅴ中文| 国产一区视频在线看| 精品国产成人在线影院| 麻豆精品一二三| 精品卡一卡二卡三卡四在线| 日本电影欧美片| 亚洲精品国产无天堂网2021| 97久久超碰国产精品电影| 亚洲欧美日韩国产综合在线| 91婷婷韩国欧美一区二区| 亚洲免费观看视频| 欧美午夜精品一区二区蜜桃| 亚洲大片一区二区三区| 欧美曰成人黄网| 日韩电影一区二区三区四区| 777亚洲妇女| 精品亚洲aⅴ乱码一区二区三区| 精品国产精品一区二区夜夜嗨| 精品亚洲国产成人av制服丝袜 | 国产亚洲成aⅴ人片在线观看| 国产高清精品久久久久| 国产精品色婷婷久久58| 欧美专区日韩专区| 男男视频亚洲欧美| 久久精品视频网| 色综合中文字幕国产 | 色综合久久99| 日本成人中文字幕在线视频| 91精品国产色综合久久不卡蜜臀 | 国产亚洲欧美中文| 99精品国产热久久91蜜凸| 亚洲成a人v欧美综合天堂下载 | 欧美激情中文字幕一区二区| 91首页免费视频| 偷拍一区二区三区四区| 精品区一区二区| 97久久精品人人做人人爽50路| 丝袜亚洲精品中文字幕一区| 久久久久久久综合日本| 91福利在线播放| 寂寞少妇一区二区三区| 亚洲另类春色校园小说| 欧美成人a视频| 色综合久久久久综合99| 麻豆精品国产91久久久久久 | 欧美精品一区二区三区蜜臀| 99久久99久久综合| 久久国产剧场电影| 亚洲一区二区三区四区的| 久久久激情视频| 欧美日韩第一区日日骚| 成人黄色大片在线观看| 日本一不卡视频| 夜夜精品视频一区二区 | 欧美一级淫片007| 91蝌蚪porny九色| 国产精品一区三区| 男男成人高潮片免费网站| 一区二区三区中文字幕电影| 国产日韩欧美a| 欧美成人高清电影在线| 欧美午夜片在线看| 99久久精品99国产精品 | 国产欧美精品一区二区色综合| 在线视频中文字幕一区二区| 国产一区福利在线| 日韩**一区毛片| 亚洲最新在线观看| 成人欧美一区二区三区视频网页| 精品国产一区二区精华| 欧美一区二区不卡视频| 欧美日韩另类国产亚洲欧美一级| 色又黄又爽网站www久久| 成人中文字幕电影| 国产成人小视频| 狠狠v欧美v日韩v亚洲ⅴ| 三级欧美在线一区| 亚洲国产成人精品视频| 一区二区三区中文字幕| 亚洲精品国产品国语在线app| 国产精品久久综合| 日本一区二区三级电影在线观看 | 欧美一区2区视频在线观看| 欧美日韩激情在线| 在线精品国精品国产尤物884a| 91在线观看污| 91麻豆123| 色88888久久久久久影院按摩| 91视频精品在这里| 色哟哟欧美精品| 91久久人澡人人添人人爽欧美| 97精品国产97久久久久久久久久久久 | 欧美人伦禁忌dvd放荡欲情| 欧亚一区二区三区| 正在播放一区二区| 精品国产亚洲在线| 欧美激情一区在线| 亚洲欧美欧美一区二区三区| 亚洲一区二区在线免费观看视频| 一二三四区精品视频| 日韩av网站在线观看| 欧美美女网站色| 制服丝袜在线91| 久久久噜噜噜久久中文字幕色伊伊| 国产日韩欧美精品综合| 亚洲欧美一区二区三区国产精品| 亚洲一区免费在线观看| 麻豆91在线看| va亚洲va日韩不卡在线观看| 91福利精品视频| 欧美一级精品在线| 国产精品午夜久久| 五月婷婷综合激情| 国产伦精品一区二区三区免费迷 | 97久久精品人人做人人爽| 欧美色综合网站| 亚洲精品在线免费播放| 国产精品区一区二区三区| 亚洲一区二区三区四区不卡| 狠狠色2019综合网| 99国产精品久久久久久久久久 | 欧美tickling挠脚心丨vk| 国产日韩精品一区二区三区| 亚洲人吸女人奶水| 免费人成黄页网站在线一区二区| 国产成人综合在线| 欧美日韩国产bt| 中文字幕免费在线观看视频一区| 亚洲国产成人91porn| 国产成人综合在线播放| 欧美日韩国产a| 中文字幕中文在线不卡住| 三级亚洲高清视频| 99久久久国产精品| 精品国产百合女同互慰| 亚洲一区二区在线播放相泽| 国产精品系列在线播放| 欧美日韩国产综合久久| 国产精品久久久久婷婷| 久久精品国内一区二区三区| 欧美亚洲一区二区在线观看| 久久久99精品久久| 麻豆91免费看| 欧美日韩中文国产| 一区二区中文字幕在线| 国产麻豆精品视频| 欧美一区在线视频| 亚洲第一精品在线| 色狠狠一区二区三区香蕉| 中文字幕国产一区二区| 久久99国产精品免费网站| 欧美情侣在线播放| 一区二区三区免费在线观看| 成人黄色在线网站| 国产日韩欧美精品综合| 在线观看一区不卡| 亚洲免费在线观看视频| 不卡视频在线观看| 国产精品天美传媒沈樵| 国产精品一二二区| 精品不卡在线视频| 久久国内精品视频| 日韩欧美国产系列| 蜜桃av一区二区| 日韩视频一区二区| 久久精品噜噜噜成人88aⅴ| 日韩一区二区三区视频在线观看 | 亚洲欧美日韩在线| 91久久精品一区二区三区| 亚洲日本护士毛茸茸|