2014-07-10 13 views
-1

C에서 비디오에서 프레임을 추출하는 솔루션을 가지고 있습니다 (github). 문제는 매우 느립니다. 내가하고있는 일은 타이머를 사용하고 비디오를 재생하고 프레임이 준비 될 때마다 비트 맵으로 변환하여 저장하고 다음 위치로 이동하는 것입니다. 이것은 내가 생각하는 바른 접근 방식이 아닙니다. 프레임을 꺼내는 또 다른 방법이 있어야합니다. Github 프로젝트를 통해 변경 사항을 제안하십시오. 오른쪽 프레임을 추출하는 유일한 방법은 이것이다 :CFT의 MFT 프레임 추출

if (m_spMediaEngine != nullptr) 
{ 

    LONGLONG pts; 
    if (m_spMediaEngine->OnVideoStreamTick(&pts) == S_OK) 
    { 
     // new frame available at the media engine so get it 
     ComPtr<ID3D11Texture2D> spTextureDst; 
     MEDIA::ThrowIfFailed(
      m_d3dDevice->CreateTexture2D(
      &CD3D11_TEXTURE2D_DESC(
      DXGI_FORMAT_B8G8R8A8_UNORM, 
      m_rcTarget.right,  // Width 
      m_rcTarget.bottom,  // Height 
      1,   // MipLevels 
      1,   // ArraySize 
      D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET 
      ), 
      nullptr, 
      &spTextureDst 
      ) 
      ); 


     if (FAILED(
      m_spMediaEngine->TransferVideoFrame(spTextureDst.Get(), nullptr, &m_rcTarget, &m_bkgColor) 
      )) 
     { 
      return; 
     } 

     Position = Position + interval; 
     SetPlaybackPosition(Position); 

     ComPtr<IDXGISurface2> surface; 
     MEDIA::ThrowIfFailed(
      spTextureDst.Get()->QueryInterface(
      __uuidof(IDXGISurface2), &surface) 
      ); 

     D2D1_BITMAP_PROPERTIES1 bitmapProperties = 
      D2D1::BitmapProperties1(
      D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW, 
      D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED), 
      96, 
      96 
      ); 


     m_d2dContext->CreateBitmapFromDxgiSurface(surface.Get(), &bitmapProperties, &bitmap); 

     SaveBitmapToFile(); 
    } 
} 

내 질문에 내 타이머 기능

다음이다?

+1

무엇이 문제입니까? – egur

+6

"Github 프로젝트를 거치며 변경 사항 제안"이것은 StackOverflow 작동 방식이 아닙니다. 가장 좋은 설명과 세부 사항을 제공하면서 구체적인 질문을해야합니다. 그렇다면 대답을 얻습니다. –

+0

@Roman 나는 프레임과 코드를 추출하는 방법에 대해 언급했다. 누군가가 관심이 있다면 전체 프로젝트를 설정할 필요가 없으며 github 프로젝트를 사용할 수 있습니다. –

답변

0

나는 그것을 해시 덤으로 변환하고 저장할 때 뭔가를 할 것이고, 속도를 올려야한다. 예를 들어 해시의 특정 인스턴스를 보유하거나 해시를 사용하여 해시를 사용하여 프레임을 추출하고 해시하는 클래스를 만들 수 있습니다. http://www.hackerfactor.com/blog/index.php?/archives/2013/01/21.html

+0

안녕하세요. 저는 이미지를 비교하고 추출하고 싶지 않습니다. 매초마다 프레임을 추출하고 싶습니다. 목록에 표시하여 사용자가 비디오의 모든 프레임을 찾을 수 있도록합니다. http://postimg.org/image/i1w5b90i7/ –