2014-11-10 2 views
1

변환을 작성 중이며 프레임 및 비디오의 출력 크기를 변경하려고합니다. 샘플을 검사하여 함수 호출 순서를 찾았습니다.Media Foundation 변환 출력 프레임 (비디오) 크기를 변경하는 방법?

SetInputType 
SetOutputType 
    GetInputCurrentType 
    SetInputType 
      UpdateFormatInfo 
       GetOutputCurrentType 
       SetOutputType 
         GetOutputStreamInfo 
          SetProperties 
           ProcessOutput (THROW NEED INPUT) 
           ProcessInput 
           ProcessOutput 
           ProcessOutput (THROW 
           .... 
           .... repeat until done 

어떤 단계에서 출력 크기와 방법을 수정해야합니까?

예 : 640x480 비디오를 출력하고 480x480 비디오를 스트레칭없이 입력하십시오.

+0

먼저 출력에 480x480 비디오 크기를 협상하도록 변환을 프로그래밍해야합니다 (SetOutputType 무시). 그런 다음 ProcessOutput()에서 실제 크기 조정을 수행해야합니다. 지금까지 뭐 했니? –

+0

문제를 해결 했습니까? 이것에 대한 힌트를 게시 할 수 있을까요? 나는 슬프게도 여기에도 같은 문제가있다. – sebhaub

답변

1

MFT에서 "출력 크기를 변경하는"두 단계가 있습니다.

1) 당신은 SetOutputType 및 GetOutputAvailableType 루틴을 수정해야합니다

  • SetOutputType는 현재 다음) 그들은 당신이 또는 일을하지 않을 수 있습니다 입력 (과 동일한 지 확인하기 위해 치수를 확인하는 경우 당신이 그것을 업데이 트해야합니다.
  • GetOutputAvailableType을 통해 지원하는 출력 형식을 열거하도록 요청하면 (열거 형을 지원한다고 가정 할 때) 출력 미디어 형식의 크기가 정확해야합니다.

2) 당신은 실제로 크기 조정 작업을 수행하는 ProcessInput/ProcessOutput에 샘플의 처리를 수정해야합니다. 미디어 유형을 변경해도 자동 크기 조정은 수행되지 않습니다. 크기를 변경하는 방법은 제공하지 않은 비디오 데이터의 실제 형식과 크기 조정 방법에 대한 세부 정보에 따라 다릅니다. 여분의 줄을 잘라 내고 싶니? 위 또는 아래에서? 도마도자를 지원해야합니까?

나는 MFT를 생성하는 모든 오버 헤드와 함께 http://www.LimeGreenSocks.com/MFT에서 사용 가능한 클래스를 사용하는 방법을 보여주는 많은 샘플 MFT를 처리하는 C++ 클래스를 사용합니다. 이 글을 쓰는 동안 여전히 베타 버전이지만, 몇 가지 아이디어를 제공해야합니다.

아마도 가장 가까운 샘플은 회전입니다. 회전 할 때 800x600 비디오는 600x800 비디오가 될 수 있습니다. 회전은 스트리밍하는 동안 회전을 변경할 수도 있습니다 (비동기 MFT의 Format Changes 참조). C++ rotate mft는 잘 설명 된 350 줄의 길이입니다.

관련 문제