직접 쇼 변환 필터에 타사 비디오 디코더 라이브러리를 래핑하는 작업이 있습니다. 비동기 변환을 사용하여 DirectShow 변환 필터를 작성할 수 있습니까?
나는 제 3 자 라이브러리는 비동기 콜백을 사용하기 때문에 전체 프레임이 준비가되었을 때 나는 순수 가상 CTransformFilter.Transform 기능을 볼 때// on main thread
lib->RegisterCallback(callback function)
lib->write(raw data bytes)
void callback(frame)
{
// here is your frame (on a worker thread)
}
이가 기대 즉,이 문제가 될 것입니다 생각 동기가되도록 변환하십시오. 이제 콜백에 설정된 이벤트에서 차단되도록 설정할 수 있지만 변환 기능으로 들어오는 데이터가 완전히 새로운 프레임을 생성하기에 충분하지 않은 경우 어떻게됩니까? 나는 그 기능을 교착 상태로 만들 것이다.
도서관 개발자에게 가서 동기식 디코더를 요청하는 유일한 방법은 무엇입니까?
CTransformFilter Receive 기능을 살펴 보았습니다. 이것이 (재정의 된) Transform 함수를 호출하는 것입니다. 그런 다음 m_pOutput-> m_pInputPin-> Receive (pOutSample)를 호출하여 샘플을 전달합니다. 콜백의 작업자 스레드에서이 수신 함수를 호출 할 수 있습니까? 아니면 동일한 스레드에서 모든 것을 유지해야합니까?
감사합니다.
고마워, 그것은 좋은 소식입니다. 두 번째 선택 (및 내 원래 질문)이 효과가 있다고 생각하지 않는 이유는 입력 샘플에 새 프레임을 생성하기에 충분한 데이터가 포함되어 있는지 (또는 여러 프레임에 대해 충분한 데이터가 포함되어 있는지) 확실하지 않다는 것입니다. 각 샘플이 다음 프레임과 일치해야한다는 변환 필터의 입력에 대한 규정이 있습니까? –