KR20050015930A - 디멀티플렉서 애플리케이션 프로그래밍 인터페이스 - Google Patents

디멀티플렉서 애플리케이션 프로그래밍 인터페이스

Info

Publication number
KR20050015930A
KR20050015930A KR1020030058228A KR20030058228A KR20050015930A KR 20050015930 A KR20050015930 A KR 20050015930A KR 1020030058228 A KR1020030058228 A KR 1020030058228A KR 20030058228 A KR20030058228 A KR 20030058228A KR 20050015930 A KR20050015930 A KR 20050015930A
Authority
KR
South Korea
Prior art keywords
demultiplexer
presentation
descriptor
stream
data
Prior art date
Application number
KR1020030058228A
Other languages
English (en)
Inventor
데비큐커트
스피드로빈씨.비.
러드위그씨.알랜
던바지오프레이티.
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20050015930A publication Critical patent/KR20050015930A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/434Disassembling of a multiplex stream, e.g. demultiplexing audio and video streams, extraction of additional data from a video stream; Remultiplexing of multiplex streams; Extraction or processing of SI; Disassembling of packetised elementary stream

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Television Systems (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Information Transfer Between Computers (AREA)
  • Television Signal Processing For Recording (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

멀티미디어 데이터의 디멀티플렉서를 나타내기 위한 일련의 인터페이스와 데이터구조(즉, 디멀티플렉서 API)가 제시된다. 데이터 구조는 다수의 필드를 사용하며, 각각은 명령 요소를 포함한다. 일 구현예에서, 초기화, 프리젠테이션디스크립터설정, 프리젠테이션디스크립터얻기, 펜딩프리젠테이션디스크립터얻기, 프로세스입력, 프로세스출력, 플러시 명령을 포함하는 적어도 7개의 명령이 디멀티플렉서의 적절한 동작을 위해 형성된다. 디멀티플렉서 API는 고객이 균일한 방식으로 DV와 같은 먹스 스트림 데이터(muxed stream data)를 사용하여 오디오와 비디오(압축 또는 비압축)와 같은 기본 스트림 데이터를 생성할 수 있게 하며, 디멀티플렉서가 독립 콤포넌트로서 사용될 수 있게 한다.

Description

디멀티플렉서 애플리케이션 프로그래밍 인터페이스{DEMULTIPLEXER APPLICATION PROGRAMMING INTERFACE}
본 발명은 전자 데이터 프로세싱에 관한 것으로서, 특히, 컴퓨팅 환경에서 멀티미디어 데이터의 처리에 관한 것이다.
디지털 장치에서 관측하기 위한 디지털 포맷의 비디오 및 오디오의 조합인 디지털 기반 멀티미디어는 용량과 확산(proliferation)에서 급격하게 증가하고 있다. 오늘날 제조되는 거의 모든 새로운 개인용 컴퓨터는 일부 멀티미디어의 형태를 포함한다. 카메라, 비디오 리코더, 전화기 및 텔레비전과 같은 디지털 제품의 판매를 꾸준히 증가하고 있다. 또한, 멀티미디어는 인터넷의 성장이 지속적으로 급격하게 진행됨에 따라서 인터넷 영역에서 점점 광범위하게 사용되고 있다. 이러한 컴퓨터 장치의 사용자들의 성능 기대치도 이 성장과 더불어 증가되고 있다. 이들 증가된 사용자 기대치는 하드웨어 성능 뿐만 아니라 데이터 자체의 프로세싱 성능으로 확장된다.
스트리밍(streaming)으로 알려진 기술이 멀티미디어 애플리케이션에서 이들 증가하는 기대치를 충족하기 위해 개발되어 왔다. 스트리밍은 데이터가 안정적이고 연속적인 스트림으로서 프로세싱될 수 있도록 전송되게 한다. 이는, 대용량의 멀티미디어 파일에서는 필수요건인, 전체 파일이 전송되기 전에 데이터를 표시하거나 들을 수 있는 이점을 갖는다.
초기에, 스트리밍 프레임워크는, 체인 관리자(chain manager)로부터의 정보가 거의 없이 데이터 프로세싱 모듈 체인(예를 들어, 캡쳐링 필터, 변환 필터, 및 렌더링 필터)으로 이루어진다. 필터로도 불리우는 데이터 프로세싱 모듈은, 어떻게 접속할지, 어떤 데이터 포맷을 사용할 지, 그리고 서로 어떻게 제어할 지를 판단한다. 체인 내의 필터 접속동안, 프로토콜은 데이터 플로우 및 제어 접속 협상의 소정의 고정 시퀀스를 정의한다. 통상의 협상 시퀀스는, 인터페이스, 매체, 데이터 포맷, 할당기, 마스터 클록의 순서로 협상하는 것이다. 데이터 프로세싱 체인은 컴퓨터 시스템에서 단 대 단(end-to-end) 솔루션을 제공한다.
스트리밍의 복잡도가 증가함에 따라, 업계에서는, 비디오 및 오디오 프로세싱 체인과 같이 실시간 제한이 있는 데이터를 프로세싱하는 프로세싱 체인을 최적화할 필요가 있음을 인식하였다. 한 솔루션은, 로컬 파일 또는 인터넷 서버로부터의 멀티미디어 스트림의 재생, 장치들로부터의 멀티미디어 스트림의 캡쳐, 및 멀티미디어 스트림의 포맷 전환 등을 제공하는 Microsoft Corporation의 DirectShow이다. DirectShow는 윈도우즈 미디어 오디오, 윈도우즈 미디어 비디오, MPEG, Apple QuickTime, 오디오-비디오 인터리브(AVI), 및 WAV(윈도우즈 웨이브)와 같은 파일 유형의 비디오 및 오디오 컨텐츠를 재생할 수 있게 한다. DirectShow는 플러깅가능 필터 콤포넌트의 시스템을 포함한다. 필터는 DirectShow 인터페이스를 지원하고 파일에 데이터를 검색, 복사, 변경, 및 기입함으로써 데이터의 스트림에 동작할 수 있는 오브젝트이다. 필터의 기본 유형은, 디스크, 위성 피드(satellite feed), 인터넷 서버, 또는 VCR 상의 파일과 같은 일부 소스로부터 데이터를 취하고, 이를 필터의 연결인 필터 그래프(filter graph)에 도입하는 소스 필터(source filter)를 포함한다. 필터 그래프 내의 필터는, 데이터의 포맷을 변경하는 변환 필터, 데이터를 송수신하는 동기 및 소스 필터, 데이터를 디스플레이 장치에 렌더링하는 것과 같이 데이터를 렌더링하는 렌더링 필터(rendering filter)를 포함한다. 데이터는 미디어를 수용하는 임의의 지점에 렌더링될 수 있다. DirectShow에 포함된 다른 유형의 필터는, 데이터 유형의 변경없이 효과를 추가하는 효과 필터(effect filter), 및 소스 데이터의 포맷을 이해하고 올바른 바이트를 어떻게 검색하는지를 인식하며, 타임 스탬프(time stamp)를 생성하고, 탐색을 이행하는 파서 필터를 포함한다.
동작 동안, 모든 데이터는 필터들 사이에서 매우 많은 양의 제어 정보와 함께 통과한다. 각각의 필터는 다른 필터와 접속하는 데 사용되는 "핀(pins)"으로 불리는 오브젝트를 포함한다. 필터가 핀을 사용하여 접속할 때, 필터 그래프가 생성된다. 접속된 필터의 그룹 개념인 "필터 그래프(filter graph)"와 그 접속된 필터의 그룹, 즉 "필터 그래프"를 제어하는, DirectShow에서 생성되는 오브젝트인 "필터 그래프(Filter Graph)" 간에는 차이점이 있음을 주목하자. "필터 그래프(Filter Graph)"는 보다 정확하게는 필터 그래프 관리자로 지칭된다. 필터 그래프에서 데이터 플로우와 접속을 제어하기 위해서, DirectShow는 필터 그래프 관리자를 포함한다. 필터 그래프 관리자는 필터가 적절한 순서로 접속되는 것을 보장할 수 있게 한다. 그러나, 데이터 및 대부분의 제어는 필터 그래프 관리자를 통과하지 않는다. 필터는 적절하게 연결되어야 한다. 예를 들어, 필터 그래프 관리자는 렌더링 구성을 탐색하고, 이용가능한 필터 유형을 판정하며, 주어진 데이터 유형에 대하여 적절한 순서로 필터를 연결하고, 적절한 렌더링 필터를 제공하여야 한다.
필터가 프로그램의 상당한 양의 재사용을 허용하지만, 이들 필터의 사용은 또한 어떤 예기치 않은 문제들을 야기한다. 필터에 의해 생성되는 문제들 중의 하나는, 생성되는 필터에 대한 많은 개수의 API이다. 각각의 필터는 본질적으로 개별 API를 갖는다. 그 결과, 주어진 필터는 그것이 부착되는 모든 필터에 대한 API에 인터페이싱할 수 있어야 한다. 또한, 필터의 사용은 주어진 필터를 확실하지 않게 셧다운하는 문제를 야기한다. 그래프 내의 주어진 필터가 셧다운되면, 셧다운 필터와 인터페이스하는 임의의 필터는 다른 관련 인터페이스를 요청한다. 통상, 인터페이스가 소실될 때에는 필터의 상태가 알려지지 않을 수 있으므로, 필터를 인터페이스의 소실에 적절하게 대처하도록 프로그래밍하는 것은 힘들다. 따라서, 인터페이스의 소실은 필터의 이상 행동을 초래하여 궁극적으로는 오작동하는 프로그램이 되기 쉽다. 더욱이, DirectShow에서의 전반적인 제어는 두개의 블록 사이에서 분산된다. 필터들 간의 인터페이스는 데이터 플로우를 제어하는 반면, 필터 관리자는 필터의 인스턴스화(instantiation) 및 제거를 제어한다. 이러한 방식으로 제어를 분산시키는 것은 블록들 간의 경계를 가로지르는 일부 제어함수가 불가피하게 있기 때문에, 소프트웨어 디자인을 성가시게 만든다. DirectShow의 다른 문제점은 필터가 미디어 포맷 협상 및 버퍼 관리 기능의 책임을 진다는 점이다. 필터는 다른 필터와 통신하여 이 작업을 달성한다. 필터에 대한 의존성은 DirectShow 상에서의 애플리케이션 구성이 필터 내에 프로그래밍될 수 있는 버그및 비능률에 취약하게 한다. 따라서, 열악하게 기입된 필터는 필터 그래프 및 그 필터 그래프에 관련되는 애플리케이션을 쉽게 망가뜨릴 수 있다.
DirectShow 구조를 향상시킬 필요가 있다. 특히, 멀티미디어 데이터의 프로세싱 제어를 향상시킬 필요가 있다.
본 발명은 멀티미디어 데이터의 디멀티플렉서를 나타내는 일련의 인터페이스, 데이터 구조 및 이벤트를 포함한다. 데이터 구조는 다수의 필드를 사용하고, 각각의 필드는 명령 요소를 포함한다. 일 구현예에서, 초기화(Initialize), 프리젠테이션디스크립터설정(SetPresentationDescriptor), 프리젠테이션디스크립터얻기(GetPresentationDescriptor), 펜딩프리젠테이션디스크립터얻기(GetPendingPresentationDescriptor), 프로세스입력(ProcessInput), 프로세스출력(ProcessOutput), 및 플러시(Flush) 명령을 포함하는 적어도 7개의 명령이 디멀티플렉서의 적절한 동작을 위해 형성된다. 인터페이스는 통합하여 디멀티플렉서 애플리케이션 프로그래밍 인터페이스(디먹스 API)로서 알져져 있다. 디먹스 API는 고객이 균일한 방식으로 DV와 같은 먹스 스트림 데이터(muxed stream data)를 사용하여 오디오와 비디오(압축 또는 비압축)와 같은 기본 스트림 데이터(elementary stream data)를 생성할 수 있게 한다.
초기화 메소드는 디멀티플렉서 오브젝트를 초기화하고 구성하는 데 사용되며 디멀티플렉서를 구성하는 데 사용되는 파라미터를 가진다. 그 파라미터는 먹스 스트림을 기술하는 먹스 스트림 디스크립터 오브젝트(muxed stream discriptor object), 먹스 스트림 디스크립터에 대한 선택된 미디어 유형, 사용자가 디멀티플렉서로부터의 출력으로서 검색하는데 관심있는 기본 스트림의 주요 유형의 어레이, 및 그 주요 유형 어레이 내의 주요 유형의 수를 포함한다.
프리젠테이션디스크립터설정 메소드는 디멀티플렉서 오브젝트에 대한 액티브 프리젠테이션 디스크립터를 동적으로 설정하는 데 사용된다. 프리젠테이션디스크립터설정 메소드는 프리젠테이션 디스크립터 오브젝트에 대한 포인터를 포함한다. 프로세스입력 메소드는 새로운 입력 먹스 스트림을 디멀티플렉서 오브젝트에 제공하는 데 사용되며 샘플 오브젝트에 대한 포인터를 포함한다. 프로세스입력 메소드는 새로운 프리젠테이션 플래그를 갖는 리턴값을 가진다. 새로운 프리젠테이션 플래그(presentation flag)가 참(TRUE)이면, 프리젠테이션은 먹스 샘플에서 프리젠테이션 디스크립터에 기초하여 변경된다. 사용자는 펜딩프리젠테이션디스크립터얻기 메소드를 호출하여 다음 펜딩 프리젠테이션을 검색하고, 원하는 스트림을 선택하고, 프리젠테이션디스크립터설정 메소드를 호출하여 디멀티플렉서의 입력 큐(input queue)로부터 샘플의 프로세싱을 할 수 있게 하여야 한다.
프로세스출력 메소드는 액티브 프리젠테이션으로부터 적어도 하나의 기본 스트림을 검색하는 데 사용된다. 프로세스출력 메소드는 스트림 식별자 및 샘플 오브젝트에 대한 포인터에 대한 포인터를 포함한다. 프로세스출력 메소드는 출력 리턴값을 더 포함한다. 출력 리턴값은 스트림의 끝(end of stream) 에러 코드 그리고 데이터 더이상 없음(no more data) 에러 코드를 포함한다.
플러시 메소드는 현재 큐 입력과 출력 샘플을 플러시하는 데 사용된다. 파라미터는 플러시 메소드에 필요하지 않다.
프리젠테이션디스크립터얻기 메소드는 디멀티플렉서 오브젝트에 대한 현재 액티브한 프리젠테이션 디스크립터의 클론을 검색하는 데 사용된다. 프리젠테이션디스크립터얻기 메소드는 프리젠테이션 디스크립터를 포함한다.
펜딩프리젠테이션디스크립터얻기 메소드는 다음의 펜딩 프리젠테이션을 검색하는 데 사용된다. 펜딩프리젠테이션디스크립터얻기 메소드는 펜딩 프리젠테이션 디스크립터를 포함한다.
본 발명의 추가적인 특징 및 이점은 첨부한 도면을 참조하여 예시적인 구현예의 상세한 설명으로부터 보다 명확해질 것이다.
본 발명은, 통칭하여 디멀티플렉서 API라 불리는 멀티미디어 데이터의 디멀티플렉서를 나타내기 위한 일련의 인터페이스, 데이터 구조, 및 이벤트를 제공한다. API는 고객이 DV, MPEG2, ASF 등과 같은 먹스 스트림 데이터를 균일한 방식으로 사용하여 오디오와 비디오(압축 또는 비압축)와 같은 기본 스트림 데이터를 생성할 수 있게 한다. 디멀티플렉서 API는 먹스 스트림 초기화 데이터에 기초하여 새로운 스트림 디스크립터의 동적 생성을 지원하며, 먹스 스트림 샘플에 기초하여 새로운 스트림 디스크립터의 동적 생성을 지원한다. 또한, 디멀티플렉서 API는 먹스 스트림에 관한 메터데이터를 통해 외대역(out of band) 초기화 또는 먹스 스트림 샘플을 통한 내대역(in band) 초기화를 지원하고, 다중 버퍼를 취할 수 있는 디멀디플렉스 샘플의 생성을 지원한다. Microsoft Corporation에 의한 미디어 파운데이션 구조(Media Foundation architecture)의 경우, 디멀티플렉서 API는 주로 이하 여기서 설명된 바와 같은 미디어 프로세서에 의해 제어되고 출력이 전달된다. 디멀티플렉서 API는 임의의 멀티미디어 구조가 잘 정의된 방식으로 멀티플렉서를 사용할 수 있도록 설계된다.
도면을 참조하면, 유사 참조부호는 유사한 요소를 참조하며, 본 발명은 적절한 컴퓨팅 환경을 구현되는 것으로서 설명된다. 요구되는 것은 아닐지라도, 본 발명은, 개인용 컴퓨터에 의해 실행되는 프로그램 모듈 컴퓨터 실행가능 명령의 일반적의 경우로 기술될 것이다. 통상, 프로그램 모듈은, 특정 작업을 이행하거나 특정한 추상 데이터형을 구현하는 루틴, 프로그램, 오브젝트, 콤포넌트, 데이터 구조 등을 포함한다. 또한, 당업자는 본 발명이 핸드헬드 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 또는 프로그래머블 소비자 전자제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터 등을 포함하는 다른 컴퓨터 시스템을 사용하여 실시될 수 있다. 본 발명은 또한 통신 네트워크를 통해 연결되는 원격 프로세싱 장치에 의해 작업이 이행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 스토리지 장치에 모두 배치될 수 있다.
도 1은 본 발명이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 일예를 도시한다. 컴퓨팅 시스템 환경(100)은 적절한 컴퓨팅 환경의 단지 일예이며, 본 발명의 사용 또는 기능의 범주에 대한 어떠한 제한을 암시하려는 것은 아니다. 또한, 컴퓨팅 환경(100)은 예시적인 동작환경(100)에서 도시된 임의의 개별 컴포넌트 또는 이들의 조합에 대한 어떠한 의존성 또는 요건을 갖는 것으로 이해되어서는 안된다.
본 발명은 다수의 다른 범용 또는 특정 목적 컴퓨팅 시스템 환경 또는 구성에서 동작한다. 본 발명에서 사용하기에 적합할 수 있는 잘 알려진 컴퓨터 시스템, 환경 및/또는 예는 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 장치, 태블릿 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋탑 박스, 프로그래머블 소비자 전자제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템 또는 장치의 임의의 것을 포함하는 분산 컴퓨터 장치 등을 포함하며 이에 한정되지는 않는다.
본 발명은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령의 일반적인 경우로서 기술될 것이다. 통상, 프로그램 모듈은, 특정 작업을 이행하거나 특정 추상 데이터형을 이행하는 루틴, 프로그램, 오브젝트, 콤포넌트, 데이터 구조 등을 포함한다. 또한, 본 발명은 통신 네트워크을 통해 연결되는 원격 프로세싱 장치에 의해 작업이 이행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 스토리지 장치를 포함하는 로컬 및/또는 원격 컴퓨터 스토리지 미디어에 배치될 수 있다.
도 1을 참조하면, 본 발명을 구현하기 위한 예시적인 시스템은 컴퓨터(110)의 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 콤포넌트는 처리부(120), 시스템 메모리(130), 시스템 메모리를 포함하는 다양한 시스템 콤포넌트를 처리부(120)에 결합시키는 시스템 버스(121)를 포함할 수 있으며, 이에 한정되지는 않는다. 시스템 버스(121)는 메모리 버스 또는 메모리 제어기, 병렬 버스, 및 다양한 버스 구조 중에서 임의의 것을 사용하는 로컬 버스 등을 포함하는 여러 유형의 버스 구조 중에서의 임의의 것일 수 있다. 예를 들어 -한정이 아님-, 이러한 구조는 산업표준 구조(ISA) 버스, 마이크로 채널구조(MCA) 버스, 개선된 ISA(EISA) 버스, 비디오 전자표준 협회(VESA) 로컬 버스, 및 메자닌 버스(Mezzanine bus)로도 알려진 병렬 콤포넌트 상호접속(PCI) 버스 등을 포함한다.
통상, 컴퓨터(110)는 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 이용가능 매체일 수 있으며, 휘발성과 비휘발성, 및 분리형과 비분리형 매체를 모두 포함한다. 예를 들어, 한정하는 것이 아니라, 컴퓨터 판독가능 매체는 컴퓨터 스토리지 매체와 통신 매체를 포함할 수 있다. 컴퓨터 스토리지 매체는, 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로서 구현되는 휘발성과 비휘발성, 분리형과 비분리형 매체를 포함한다. 컴퓨터 스토리지 매체는, RAM, ROM, EEPROM, 플래시 메모리 도는 다른 메모리 기술, CD-ROM, 디지털 다용도 디스크(DVD) 또는 다른 광학 디스크 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 다른 자기 스토리지 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있으며 컴퓨터(110)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하며 이에 한정되지는 않는다. 통상, 통신 매체는, 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 또는 반송파 또는 다른 운송 매커니즘과 같은 변조된 데이터 신호 내의 다른 데이터를 구현하며, 임의의 정보전달매체를 포함한다. "변조된 데이터 신호(modulated data signal)"라는 용어는 신호 내의 정보를 인코딩하는 방식으로 설정 또는 변경된 하나 이상의 특정을 갖는 신호를 의미한다. 예를 들어 -한정이 아님-, 통신 매체는, 유선 네트워크, 또는 다이렉트 유선 접속과 같은 유선 매체, 및 음성, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 상기한 것의 임의의 조합은 컴퓨터 판독가능 매체의 범주 내에서 또한 포함되어야 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM;131), 랜덤 액세스 메모리(RAM;132)와 같은 휘발성 및/또는 비휘발성 메로리 형태의 컴퓨터 스토리지 매체를 포함한다. 기본 입출력 시스템(BIOS;133)은 시동할 때와 같이 컴퓨터(110) 내의 요소들 간의 정보를 전송할 수 있게 하는 기본 루틴을 포함하여, 통상 ROM(131)에 저장된다. RAM(132)은 통상 처리부(120)에 즉시 액세스가능하고 및/또는 현재 처리부에 대하여 동작되는 데이터 및/또는 프로그램 모듈을 포함한다. 예를 들어 -한정이 아님-, 도 1은 운용시스템(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136), 및 프로그램 데이터(137)를 포함한다.
컴퓨터(110)는 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 스토리지 매체를 포함할 수도 있다. 예를 들어, 도 1은 비분리형, 비휘발성 자기 매체로부터 판독하고 이에 기입하는 하드 디스크 드라이브(141), 분리형, 비휘발성 자기 디스크(152)로부터 판독하고 이에 기입하는 자기 디스크 드라이브(151), 및 CD ROM 또는 다른 광학 매체와 같이 분리형, 비휘발성 광 디스크(156)로부터 판독하고 이에 기입하는 광 디스크 드라이브(155)를 도시한다. 예시적인 운용 환경에서 사용될 수 있는 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 스토리지 매체는 자기 테이프 카세트, 플래시 메모리 카드, 디지털 다용도 디스크, 디지털 비디오 테이프, 고체 상태 RAM, 고체 상태 ROM 등을 포함하며 이에 한정되지는 않는다. 하드 디스크 드라이브(141)는 통상 인터페이스(140)과 같은 비분리형 메모리 인터페이스를 통하여 시스템 버스(121)에 접속되며, 자기 디스크 드라이브(151)와 광 디스크 드라이브(155)는 인터페이스(150)과 같은 분리형 메모리 인터페이스에 의해 시스템 버스(121)에 통상 접속된다.
드라이브 및 이들의 관련 컴퓨터 스토리지 매체는, 도 1에 도시되고 상술된 바와 같이, 컴퓨터(110)에 대한 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 및 다른 데이터의 스토리지를 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운용시스템(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146), 및 프로그램 데이터(147)을 저장하는 것으로 도시된다. 이들 콤포넌트는 운용시스템(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일하거나 상이할 수 있다. 운용 시스템(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146), 및 프로그램 데이터(147)는 다른 번호가 부여되어 최소한 다른 복사본임을 여기서 설명한다. 사용자는 명령이나 정보를 키보드(162), 통상 마우스로서 지칭되는 포인팅 장치(161), 트랙볼 또는 터치 패드, 마이크로폰(163), 및 태블릿 또는 전자 디지타이저(164)와 같은 입력 장치를 통해 입력한다. 다른 입력 장치(미도시)는 조이스틱, 게임 패드, 위성 접시, 스캐너등을 포함할 수 있다. 이들 및 다른 입력 장치는 종종 시스템 버스에 결합되는 사용자 입력 인터페이스(160)를 통해 처리부(120)에 접속되며, 병렬 포트, 게임 포트 또는 범용 직렬 버스(USB)와 같은 버스 구조와 다른 인터페이스에 의해 접속될 수 있다. 모니터 또는 다른 유형의 디스플레이 장치는 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)에 또한 접속될 수 있다. 모니터(191)는 또한 터치스크린 패널 등과 통합될 수 있다. 모니터 및/또는 터치 스크린 패널은 컴퓨팅 장치(110)가 통합되는 태블릿형 개인용 컴퓨터와 같은 하우징에 물리적으로 결합될 수 있다. 또한, 컴퓨팅 장치(110)와 같은 컴퓨터는 스피커(197), 프린터(196)와 같은 다른 병렬 출력 장치를 포함할 수 있으며, 이들은 출력 병렬 인터페이스(194) 등을 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 접속을 사용하여 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드일 수 있으며, 비록 단지 메모리 스토리지 장치(181)가 도 1에 도시되었지만, 통상 컴퓨터(110)에 대한 상술한 요소의 다수 또는 모두를 포함한다. 도 1에 도시된 논리적 접속은 근거리 통신망(LAN;171)과 원거리 통신망(WAN;173)을 포함하며, 다른 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무소, 범사내 컴퓨터 네트워크, 인트라넷 및 인터넷에서는 흔하다. 예를 들어, 컴퓨터 시스템(110)은 그로부터 데이터가 이동되는 소스 머신(source machine)을 포함할 수 있으며, 원격 컴퓨터(180)는 데스티네이션 머신(destination machine)을 포함할 수 있다. 그러나, 소스 및 데스티네이션 머신은 네트워크 또는 임의의 다른 수단에 의해 접속될 필요는 없으며, 그 대신에, 소스 플랫폼에 의해 기입되고 데스티네이션 플랫폼(들)에 의해 검색될 수 있는 임의의 매체를 통해 데이터가 이동될 수 있다.
LAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통하여 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(110)는 통상 모뎀(172) 또는 인터넷과 같이 WAN(173)을 통해 통신을 설정하는 다른 수단을 포함한다. 모뎀(172)은 내장형 또는 외장형일 수 있으며, 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘에 의해 시스템 버스(121)에 접속될 수 있다. 네트워킹 환경에서, 컴퓨터(110) 또는 그 일부에 대하여 도시된 프로그램 모듈은 원격 메모리 스토리지 장치 내에 저장될 수 있다. 예를 들어 -한정이 아님-, 도 1 은 메모리 장치(181)에 상주하는 바와 같은 원격 애플리케이션 프로그램(185_을 도시한다. 도시된 네트워크 접속은 예시적이며, 컴퓨터들 간의 통신 링크를 설정하는 다른 수단이 사용될 수 있음이 이해될 것이다.
후술하는 설명에서, 본 발명은, 달리 언급하지 않는다면, 하나 이상의 컴퓨터에 의해 이행되는 동작 및 연산의 기호표현을 참조하여 기술될 것이다. 이와 같이, 이러한 동작 및 연산은 컴퓨터 실행가능한 것으로 종종 지칭되며, 구조형의 데이터를 나타내는 전기적 신호의 컴퓨터의 처리부에 의한 조작을 포함한다. 이 조작은 데이터를 변형하고 컴퓨터 메모리 시스템에 보관하여 이를 당업자에 의해 잘 알려진 방식으로 컴퓨터 연산을 재구성하거나 변경한다. 데이터가 보관되는 데이터 구조는 데이터 포맷에 의해 정의되는 특정 속성을 갖는 메모리의 물리적 위치이다. 그러나, 본 발명이 후술하는 경우에서 기술되는 반면에, 이는 한정적인 것이 아니므로, 당업자는 이후 개시되는 다양한 동작 및 연산의 변형이 하드웨어에서 구현될 수 있음을 인식할 것이다.
이제 도 2를 참조하면, 본 발명의 디멀티플렉서는 미디어 파운데이션 구조에서 동작하며, 이는 마이크로소프트의 멀티미디어 구조들 중의 하나의 구현예이다. 도 2가 미디어 파운데이션 구조를 도시하였지만, 본 발명의 디멀티플렉서 API는 다른 멀티미디어 구조에서 사용가능함이 인식될 것이다. 디멀티플렉서를 설명하기 전에, 미디어 파운데이션을 설명하고자 한다. 미디어 파운데이션은 콤포넌트화된 구조이다. 도시된 바와 같이, 미디어 파운데이션은, 미디어 파운데이션 내의 기능의 일부 기본 유닛을 맡고 있는 코어 레이어(211) 콤포넌트 , 및 하부의 코어 콤포넌트를 사용하여 보다 일반적인 작업을 이행하는 것을 맡는 제어 레이어(201) 콤포넌트를 포함한다.
코어 레이어(211) 콤포넌트는 미디어 소스(210)와 스트림 소스(214)를 포함하며, 이들은 일반적인, 잘 정의된 인터페이스를 통해 멀티미디어 데이터를 제공한다. 미디어 소스(210)는 액세스될 스트림을 포함하는 프리젠테이션을 나타낸다. 다른 멀티미디어 파일 유형 또는 장치로부터 멀티미디어 데이터를 제공하기 위한 미디어 소스의 많은 구현예가 있다. 코어 레이어(211)는 블록 208에서 도시된 변환을 더 포함하며, 이는 일반적인, 잘 정의된 인터페이스를 통해 멀티미디어 데이터에 대한 일종의 변환 연산을 이행한다. 변환 예는 코덱(codec), 비디어 리사이저(video resizer), 오디오 리샘플러, 통계 프로세서, 색 리샘플러(color resampler) 등이다. 본 발명의 디멀티플렉서는 입력으로서 인터리브 멀티미디어 데이터(interleaved multimedia data)를 취하며, 그 데이터를 멀티미디어 데이터의 개별적으로 유용한 미디어 스트림으로 구별시키는 도 2의 구조에서의 변환이다. 블록 208은 개별적인 미디어 스트림을 취하고 인터리브된 멀티미디어 데이터로 결합하는 멀티플렉서를 더 포함한다. 멀티플렉서는, 일반적인, 잘 정의된 인터페이스를 공유하며, 다른 유형의 멀티미디어 데이터로 멀티플렉싱하기 위한 많은 구현예가 있다. 코어 레이어(211)는 스트림 싱크(stream sink;212) 및 미디어 싱크(media sink;230)를 더 포함한다. 미디어 싱크(230)는 일반적인, 잘 정의된 인터페이스를 통해 멀티미디어 데이터를 입력으로 수용한다. 멀티미디어 데이터를 가지고 다른 함수를 이행하기 위한 미디어 싱크의 많은 구현예가 있다. 예를 들어, 멀티미디어 데이터를 주어진 파일 유형에 기입하거나, 멀티미디어 데이터를 비디오 카드를 사용하여 모니터 상에 디스플레이하는 것 등이다.
제어 레이어(201) 콤포넌트는 코어 레이어(211) 콤포넌트를 이용하여 보다 높은 레벨의 작업을 보다 단순한 방식으로 이행한다. 통상, 제어 레이어 콤포넌트는 많은 다른 코어 레이어 콤포넌트를 주어진 작업에 대하여 사용한다. 예를 들어, 멀티미디어 파일을 재생하는 것은 디스크로부터 파일을 검색하여 데이터를 파싱하기 위한 미디어 소스, 압축된 멀티미디어 데이터를 압축해제하기 위한 하나 이상의 변환, 그 멀티미디어 데이터를 디스플레이하기 위한 하나 이상의 미디어 싱크를 포함할 것이다. 제어 레이어(201)는 미디어 엔진(260)을 포함하며, 이는 애플리케이션(202)과 상호작용하여, 미디어 스트림, 미디어 세션(240), 미디어 세션(240) 내부에 도시된 미디어 프로세서(220) 및 토폴로지 로더(topology loader;250)를 송수신한다. 토폴로지 로더(250)는 코어 레이어 콤포넌트 간의 데이터 플로우를 나타내는 것을 맡고 있는 제어 레이어 콤포넌트이다. 제어 레이어 콤포넌트는, 제어 레이어에 의해 사용되는 보다 원시적인 코어 레벨 콤포넌트에 액세스하는 것을 방지하도록 구성될 수 있다. 데이터는 미디어 소스(210)에서 개시하고 미디어 세션(240)을 통해 미디어 프로세서(220)로 진행하여 미디어 싱크(230)에서 출력인 시스템을 통해 진행한다. 미디어 프로세서(220)는 토폴로지에서 미디어 소스 및 다른 콤포넌트의 파이프라인을 따라 진행한다. 미디어 세션(240)은 토폴로지 내의 이벤트가 발생하는 경우에 가이드하며, 토폴로지 로더(250)는 토폴로지 내에 기술된 이벤트가 발생하는 것을 보장한다. 미디어 세션(240)은 또한 미디어 프로세서(220)를 구성하며, 미디어 프로세서(220)에 의해 리턴된 샘플을 소비한다. 미디어 엔진(260)의 경우에는 이를 행하여, 미디어 프로세서(220)로부터 미디어 엔진(260)의 호출자(예를 들어, 애플리케이션(202))와 협상하는 미디어 싱크로의 샘플을 전송한다. 토폴로지 내의 콤포넌트는 미디어 소스(210) 콤포넌트 및 미디어 싱크(230) 콤포넌트 뿐만 아니라 다른 노드를 포함한다. 미디어 파운데이션 시스템(200)은 스트리밍 미디어 오브젝트를 접속하기 위한 인터페이스와 레이아웃을 제공한다. 그 시스템은 사용자가 토폴로지 개념을 사용하는 기호추상을 통해 일반 또는 특정 소스, 변환, 및 싱크 오브젝트 간의 접속을 규정할 수 있게 한다.
이제 도 3을 참조하면, 디멀티플렉서(300)가 개략적으로 설명된다. 후술하는 설명에서, 명령은 명세서 내에서 참조될 것이다. 이들 명령은 여기서 후술하여 설명된다. 디멀티플렉서 API는 데이터의 소스와 데이터의 포맷을 분리한다. 디멀티플렉서 API는 데이터의 인메모리 버퍼(in-memory buffer)로서 멀티플렉스된 데이터를 취하며, 디멀티플렉스 연산을 이행한다. 이는 많은 다른 데이터 소스가 이 연산을 이행하기 위해 동일한 디멀티플렉서 구현예를 사용할 수 있는 바람직한 효과를 갖는다. 예를 들어, DV 데이터는 DV 카메라로부터 직접 도출되지만, 하드 드라이브 상의 파일로서 저장될 수 있다. 이 경우, 멀티플렉스된 DV 데이터를 생성하기 위한 코드 2개(예를 들어, 하나는 카메라와 말하고, 다른 하나는 파일 시스템과 말하는 등)가 있지만, 동일 디멀티플렉스가 사용될 수 있다. 디멀티플렉서(300)는 IMF디멀티플렉서 인터페이스(IMFDemultiplexer interface)를 지원하고 먹스 스트림을 그의 기본 스트림 부분으로 분할 하는 것을 맡는다. 디멀티플렉서(300)는 동기 방식(DMO와 유사)으로 동작하며, 먹스 스트림 내의 변경에 의해 야기되는 이용가능한 기본 스트림 내의 동적 변화를 다룰 수 있다. 이는 IMF샘플 인터페이스(IMFSample interface)를 통해 표현될 수 있는 샘플을 수용하여 생성하며, 다중 버퍼를 묶는 샘플을 생성하는 것을 조정한다.
먹스 시스템(302)은 하나 이상의 기본 시스템을 포함하는 단일 스트림이다. 기본 스트림(304,306)은 유사 요소(예를 들어, 오디오, 비디오 등)의 스트림이다. 먹스 샘플(308)과 기본 샘플(310,312) 사이에는 일 대 일 대응과 같은 것일 필요는 없다. 예를 들어, 매 먹스 샘플에서 매 기본 스트림에 대하여 완전한 기본 샘플일 수 있고 아닐 수도 있다. 또한, 기본 샘플은 먹스 스트림에서 올바른 순서이어야 하는 특정한 요건은 없다. 스트림에서 나오는 기본 샘플은 동일 타임 스탬프를 공유하지 않을 수 있다. 하나의 기본 스트림은 다른 것과 오프셋될 수 있다. 일부 먹스 스트림은 스트림 기간동안 단일한 기본 스트림 집합을 포함할 수 있다. 일부 먹스 스트림은 다른 시점에서 다른 기본 스트림 집합을 가질 수 있다.
각각의 조절된 기본 스트림 집합은 프리젠테이션(320)으로 지칭된다. 각 집합은 대응 프리젠테이션 디스크립터(322)를 갖는다. 이 프리젠테이션 디스크립터(322)는 두개의 주요 목적을 갖는다. 첫째, 각 기본 스트림의 매체 유형을 기술하는 것이다. 둘째, 이용가능한 스트림 중 어느 것이 디멀티플렉서(300)에 의해 추출될 것인지를 선택하는 메커니즘을 제공하는 것이다. 현재의 프리젠테이션(324)은 항상 선택된 스트림과 현재의 출력 스트림의 데이터형을 기술한다.
샘플이 디멀티플렉서(300)에 의해 프로세싱되기 전에, 멀티플렉싱된 샘플을 기본 샘플로 변환하는 데 사용되는 분할 알고리즘은 어느 스트림을 추출할 것인지를 인식할 필요가 있다. 이 정보는 프리젠테이션 디스크립터(322) 내에 포함된다. 스트림이 선택되기 전에, 프리젠테이션 디스크립터는 "펜딩(pending)"이다. 일단 스트림이 선택되면, 프리젠테이션 디스크립터는 "액티브"이다. 프리젠테이션을 액티브하게 만들려면, 펜딩프리젠테이션디스크립터얻기를 호출함으로써 펜딩 프리젠테이션 큐(326)로부터 검색된다. 적절한 스트림이 선택된 후, 호출자는 프리젠테이션디스크립터설정 메소드를 호출한다. 이 때(특정 조건이 충족되면), 프리젠테이션은 액티브 프리젠테이션(324)이 되며, 펜딩 프리젠테이션 큐(326)로부터 제거된다. 펜딩 프리젠테이션은 이전 액티브 프리젠테이션으로부터 모든 출력이 서비스된 경우에만 액티브하게 될 수 있다.
디멀티플렉서(300)는 적어도 2개의 큐 집합을 포함한다. 그 큐(queue)는 입력 큐(330)와 출력 큐(340,342)이다. 프로세스입력()이 디멀티플렉서(300) 상에서 호출되는 경우, 입력은 즉시 프로세싱되거나 입력 큐(330)내에 놓일 수 있다. 일단 데이터가 프로세싱되면, 이는 출력 큐(340,342)에 놓이게 된다. 출력 큐에서 이용가능한 데이터형 및 스트림은 항상 현재 액티브한 프리젠테이션(324)에 대응한다.
멀티플렉서(300)의 전반적인 기술이 설명되었지만, 디멀티플렉서(300)의 상태 및 천이는 곧 기술될 것이다. 후술하는 설명에서, 명령이 명세서 내에 참조될 것이다. 이들 명령은 여기서 후술된다. 이제 도 4를 참조하면, 디멀티플렉서(300)는, 디멀티플렉서(300)가 생성되었지만 초기화가 아직 호출되지 않을 경우 비초기화 상태(uninitialized state;400)에 있게된다. 초기화는 이 상태에서 멀티플렉서 오브젝트(300) 상에 유일한 유효 연산이다. 초기화()를 호출하는 것은 디멀티플렉서(300)를 펜딩 상태(402)로 천이시킬 것이다.
펜딩 상태(402)는 유효 액티브 프리젠테이션이 없음을 나타낸다. 프로세스출력에 대한 호출은 실패할 것이다. 액티브 프리젠테이션을 설정하기 위해서, 미디어 프로세서(220)는 펜딩프리젠테이션디스크립터얻기()를 호출하고, 적절한 스트림을 선택하여 프리젠테이션디스크립터설정()을 호출한다. 만약 펜딩프리젠테이션디스크립터얻기()에 대한 호출이 실패하면, 프로세스입력()이 호출된다. 그 후, 펜딩프리젠테이션디스크립터얻기()는 프리젠테이션 디스크립터(322)가 획득될 수 있을 때까지 다시 호출된다. 일단 프리젠테이션디스크립터가 디멀티플렉서(300) 상에 설정되면, 이는 중립 상태(404)로 천이할 것이다. 플러시()를 호출하는 것은 모든 큐 입력과 출력을 폐기하고 디멀티플렉서(300)를 펜딩 상태(402)로 천이할 것이다.
중립 상태(404)에서는, 모든 함수 호출(초기화 제외)이 유효하다. 프로세스입력 호출 상에 발견되는 새로운 프리젠테이션이 있고, 현재의 프리젠테이션으로부터의 최종 샘플이 출력 큐로부터 서비스되는 경우, 디멀티플렉서(300)는 펜딩 상태(402)로 천이할 것이다.
일부 스트림은 스트림 컨텐츠에 기초하여 탐지될 수 있는 고정적이고 유한한 기간을 갖는다. 이 조건이 탐지되어 모든 출력이 서비스될 때, 디멀티플렉서는 스트림 끝(end of stream) 상태(406)로 천이할 것이다. 모든 장래의 호출은 적절한 에러 코드를 리턴할 것이다.
회복할 수 없는 에러가 디멀티플렉서(300) 내에 발생할 때, 에러 상태(408)로 천이할 것이다. 에러 상태(408)는 임의의 다른 상태로부터 도달될 수 있다. 디멀티플렉서(300)가 제거되는 것이면, 릴리스()가 호출되어 디멀티플렉서(300)는 시스템으로부터 제거되기 이전에 디멀티플렉서(300)는 최종 상태(410)로 천이한다. 디멀티플렉서(300)에 대한 최종 참조가 릴리스되면, 디멀티플렉서(300)는 어떤 상태가 디멀티플렉서(300) 내에 있는지에 관계없이 메모리로부터 제거된다. 릴리스()는 비초기화된 상태를 포함하는 임의의 상태로부터 호출될 수 있다.
디멀티플렉서(300)의 상태와 천이가 기술되었으며, 이제 상기 참조된 명령들이 기술될 것이다. 이들 명령은, 초기화(), 프리젠테이션디스크립터설정(), 프리젠테이션디스크립터얻기(), 펜딩프리젠테이션디스크립터얻기(), 프로세스입력(), 프로세스출력(), 및 플러시()를 포함한다.
도 5에서는 본 발명의 디멀티플렉서 API의 7개의 메시지를 구성하는 데 사용되는 기본 메시지 데이터 구조(460)를 도시하는 예시적인 데이터 구조도를 나타낸다. 도시된 바와 같이, 메시지 데이터 구조(460)는 필드번호 4621-N 를 포함한다. 바람직한 구현예에서, 제1 필드 4621 는 헤더 용으로 예약된다. 나머지 필드는 파라미터이다.
본 발명의 데이터 구조에 따라서, 초기화 명령이 구성된다. 도 6의 데이터 구조도에서 나타낸 바와 같이, 초기화 명령(480)은 필드번호 482-490으로부터 구성된다. 이들 필드는 헤더필드(482), 스트림 디스크립터 오브젝트 필드(484), 미디어 유형 필드(486), 주요 유형 수 필드(488), 및 주요 유형 어레이 필드(490)이다. 각각의 다른 명령은 도 5에 나타낸 바와 같이 유사한 방식으로 구성되며, 각각의 설명은 후술된다.
초기화() 메소드는 디멀티플렉서 오브젝트(300)를 구성하고 초기화한다. 먹스 스트립 디스크립터는 디멀티플렉서 상태(임의의 헤더 데이터 등을 포함)를 초기화하는 데 적합한 메타데이터를 포함할 수 있다. 그 명령의 구문은
HRESULT Initialize(
IMFStreamDescriptor* pMuxedStreamDescriptor,
IMFMediaType* pSelectedMediaType,
DWORD cMajorTyeps,
GUID* aMajorTypes,
);
pMuxedStreamDescriptor는 입력 파라미터이며 먹스 스트림을 기술하는 스트림 디스크립터 오브젝트에 대한 포인터이다. 이 파라미터의 주요 목적은 스트림 디스크립터 상에 있을 주 있는 임의의 메타데이터가 디멀티플렉서(300)에 의해 사용될 수 있게 하는 것이다. pSelectedMediaType 파라미터는 pMuxedStreamDescriptor에 대한 선택된 미디어 유형을 규정하는 입력 파라미터이다. 이는 프로세스입력()에 대한 호출에서 디멀티플렉서(300)에 통과되는 샘플에 대응하는 미디어 유형이다. cMajorTypes 파라미터는 aMajorType 어레이에서 주요 유형의 수인 입력 파라미터이다. 이 파라미터는 영일 수 있다. aMajorTypes 파라미터는 입력 파라미터이며, 호출자가 디멀티플렉서(300)로부터의 출력으로서 검색에 흥미있는 기본 스트림의 주요 유형의 어레이이다. 이 파라미터는 cMajorTypes이 영이면 NULL일 수 있다. 어레이에서 발견된 각각의 주요 유형의 디폴트 스트림은 펜딩프리젠테이션디스크립터얻기()로부터 리턴되는 프리젠테이션 디스크립터에서 선택될 것이다. 메소드가 성공적이면 S_OK 값을 리턴한다. 메소드가 실패하면, 에러 코드를 리턴한다. 프리젠테이션이 이용가능하면, 펜딩프리젠테이션디스크립터얻기 메소드를 통해 검색될 수 있을 것이다. 프리젠테이션이 초기화 후에 이용가능하지 않으면, 데이터가 프로세스입력을 통해 디멀티플레스에 입력된 후, 프리젠테이션이 이용가능하게 될 수 있다.
프리젠테이션디스크립터설정 메소드는, 호출자가 관심을 갖는 새로운 스트림 선택을 표시하는 액티브 프리젠테이션 디스크립터를 디멀티플렉서(300) 상에 설정한다. 그 프리젠테이션 디스크립터는 프리젠테이션디스크립터얻기 메소드 또는 펜딩프리젠테이션디스크립터얻기 메소드를 통해 생성되는 디스크립터이어야 한다. 그 명령의 구문은
HRESULT SetPresentationDescriptor(
IMFPresentationDescriptor* pPresentationDescriptor
);
pPresentationDescriptor 파라미터는 프레진테이션 디스크립터 오브젝트에 대한 포인터이다. 메소드가 성적적이면 S_OK를 리턴한다. 프리젠테이션 디스크립터가 무효이면, MF_E_INVALID_PRESENTATION으로 실패할 것이다. 프리젠테이션 디스크립터가 펜딩 프리젠테이션이고 여전히 현재 액티브한 프리젠테이션으로부터의 펜딩 출력이 있으면, MF_E_OUTPUT_PENDING으로 실패할 것이다. 프리젠테이션디스크립터설정()은 현재 액티브한 프리젠테이션으로부터의 펜딩 출력이 있으면, 펜딩 프리젠테이션으로 호출되지 않을 수 있다. 프리젠테이션디스크립터설정()은 스트림을 선택 또는 선택해제하는 액티브 프리젠테이션으로 호출될 수 있다. 스트림이 선택해제되면, 출력 큐에 있는 스트림으로부터의 모든 샘플은 소실된다. 새로운 스트림이 선택되면, 그 스트림으로부터의 샘플은 어떤 장래 시점에서 이용가능하게 될 것이다. 다른 스트림은 다른 입력과 출력 버퍼링 요건을 갖기 때문에, 새로운 스트림의 샘플이 이용가능하게 되는 지점에서의 개별 디멀티플렉서에 의존하게 될 것이다.
프리젠테이션디스크립터얻기 메소드는 디멀티플렉서(300) 상에서 현재 액티브한 프리젠테이션 디스크립터의 클록을 검색한다. 그 명령의 구문은
HRESULT GetPresentationDescriptor(
IMFPresentationDescriptor* ppPresentationDescriptor
);
ppPresentationDescriptor는 프리젠테이션 디스크립터 오브젝트에 대한 포인터에 대한 포인터이다. 메소드가 성공적이면, S_OK를 리턴한다. 메소드가 실패하면, 에러 코드를 리턴한다. 펜딩 출력이 있으면, 프리젠테이션디스크립터얻기는 그 출력에 대응하는 프리젠테이션 디스크립터를 리턴한다.
펜딩프리젠테이션디스크립터얻기 메소드는 다음 펜딩 프리젠테이션을 검색한다. 그 명령의 구문은
HRESULT GetPendingPresentationDescriptor(
IMFPresentationDescriptor* ppPendingPresentationDescriptor
);
ppPendingPresentationDescriptor 파라미터는 프리젠테이션 디스크립터 오브젝트에 대한 포인터에 대한 포인터이다. 메소드가 성공적이면, S_OK를 리턴한다. 펜딩 프리젠테이션이 없으면, 메소드는 MF_E_PRESENTATION_NOT_AVAILABLE을 리턴한다. 프로세스입력이 여러번 호출되면, 큐(queued) 여러 펜딩 프리젠테이션이 있을 수 있다. 이 메소드는 다음 펜딩 프리젠테이션만을 리턴할 것이다. 일단 현재 액티브한 프리젠테이션에 대한 모든 출력이 프로세싱되면, 펜딩 프리젠테이션은 프리젠테이션설정을 호출함으로써 액티브로 될 것이다.
프로세스입력 메소드는 호출자가 새로운 입력 먹스 스트림 샘플을 디멀티플렉서에 제공할 수 있게 한다. 디멀티플렉서가 프리젠테이션 내의 새로운 스트림의 존재를 탐지하면, *pfNewPresentationAvailable은 참으로 설정될 것이고, 호출자는 ::펜딩프리젠테이션디스크립터얻기를 경유하여 펜딩 프리젠테이션 디스크립터를 검색할 수 있다. 그 명령의 구문은
HRESULT ProcessInput(
IMFSample* pSample
BOOL* pfNewPresentationAvailable
);
pSample 파라미터는 샘플 오브젝트에 대한 포인터이다. 메소드가 성공적이면, S_OK를 리턴한다. pfNewPresentationAvailable 파라미터는 프로세스입력에 대한 호출이 펜딩 프리젠테이션 큐에 추가되는 새로운 프리젠테이션 디스크립터가 되는 경우에 참을 리턴한다. 디멀티플렉싱 연산은 프로세스입력 또는 프로세스출력에 대한 호출 상으로 디멀티플렉서에 의해 행해질 수 있다. 어느 경우이든지, 데이터는 사용자가 프로세스출력을 호출하거나 데이터가 플러시()에 대한 호출로 폐기될 때까지 프로세스입력에 대한 호출 상에서 큐될 것이다. 단지 하나의 프리젠테이션만이 한 번에 액티브하게 될 것이다. 새로운 프리젠테이션이 이용가능하면, 호출자는 프로세스출력을 호출함으로써 모든 펜딩 출력을 소거하고, 펜딩프리젠테이션디스크립터얻기를 호출함으로써 새로운 프리젠테이션을 검색하며, 프리젠테이션설정을 호출함으로써 액티브 프리젠테이션을 설정하여야 한다.
프로세스입력 메소드는 호출자가 액티브 프리젠테이션으로부터 기본 스트림 또는 스트림들을 검색할 수 있게 한다. 그 명령의 구문은
HRESULT ProcessOutput(
DWORD dwStreamIdentifier
IMFSample* ppSample
);
dwStreamIdentifier 파라미터는 요청된 샘플에 대한 액티브 프리젠테이션으로부터의 스트림 식별자을 포함하는 32비트 값이다. ppSample 파라미터는 샘플 오브젝트에 대한 포인터에 대한 포인터이다. 메소드가 성공적이면, S_OK를 리턴한다. 메소드가 실패하면, 에러코드를 리턴한다. 스트림의 끝에 도달하되면, MF_E_ENDOFSTREAM 에러코드가 리턴될 것이다. E_NO_MORE_DATA가 리턴되면, 처리할 이용가능 데이터가 없게 될 것이다. 프로세스입력()을 다른 멀티플렉스 데이터 샘플을 가지고 호출하는 것은 에러를 경감시킬 것이다. 액티브 프리젠테이션이 더이상 유효하지 않기 때문에, 이용가능 데이터의 프로세싱이 차단되는 경우, 메소드는 MF_E_NEW_PRESENTATION을 리턴할 것이다. 프리젠테이션이 변하는 경우, 새로운 이용가능 스트림 집합이 있게 된다. 사용자는 어떤 스트림이 추출될 지를 디멀티플렉서(300)에 표시하여야 한다. 펜딩프리젠테이션디스크립터얻기를 호출하고, 원하는 스트림을 선택하며, 프리젠테이션디스크립터설정()를 호출하는 것은 입력 큐로부터 보다 많은 샘플의 프로세싱을 할 수 있게 한다. 디멀티플렉서 오브젝트(300)는 요청되면 샘플에 대한 공간을 할당할 것이다. 디멀티플렉싱 연산은 프로세스입력 또는 프로세스출력에 대한 호출 상으로 디멀티플렉서에 의해 행해질 수 있다. 어떤 경우이든, 데이터는 사용자가 프로세스출력을 호출하거나 데이터가 플러시()에 대한 호출로 폐기될 때까지 프로세스입력에 대한 호출 상에서 큐될 것이다.
플러시 메소드는 호출자가 디멀티플렉서(300) 내의 모든 현재의 큐 입출력 샘플을 플러시할 수 있게 한다. 또한, 플러시는 액티브프리젠테이션디스크립터를 소거한다. 이는 업스트림 데이터가 새로운 위치로 탐색되거나 호출자가 단순히 모든 버퍼 데이터를 폐기하기를 원할 때 행해질 수 있다. 그 명령의 구문은
HRESULT Flush();
플러시 명령에서는 파라미터가 없다. 메소드가 성공적이면, S_OK를 리턴한다. 메소드가 실패하면, 에러코드를 리턴한다. 플러시를 호출하는 것은 액티브 프리젠테이션 디스크립터를 소거할 뿐만 아니라 디멀티플렉서(300)으로부터의 모든 큐 데이터를 소거한다. 특정 디멀티플렉서에 따라, 펜딩 프리젠테이션은 펜딩프리젠테이션얻기를 호출함으로써 즉시 이용가능하게 될 수 있고, 호출자는 펜딩 프리젠테이션이 이용가능하게 될 때까지 프로세스입력을 반복적으로 호출할 필요가 있을 것이다.
디멀티플렉서(300) 명령이 기술되었으므로, 소스(예를 들어, 애플리케이션(202))가 먹스 스트림을 수용하는 싱크와 협상하지 않는 경우의 통상의 동작이 기술된다. 이제 도 7을 참조하면, 소스는 애플리케이션에 의해 선택을 위한 먹스 스트림을 노출한다(예를 들어, 비디오 캡쳐 소스는 DV를 노출하고 TV소스는 MPEG2 프로그램 스트림을 노출한다)(단계 500). 제어 레이어(201)는 애플리케이션이 먹스 스트림에 대한 싱크와 협상했는 지를 판정한다(단계 502). 애플리케이션(202)이 먹스 스트림에 대한 싱크와 협상하지 않으면, 미디어 세션(240)은 적절한 디멀티플렉서를 불러와서 먹스 스트림 디스크립터로서 이를 초기화한다(단계 504).
프리젠테이션이 디멀티플렉서로부터 이용가능하게 되면(단계 506), 미디어 세션(240)은 기본 스트림 디스크립터를 사용하여 협상을 시도할 것이다(단계 508). 나머지 토폴로지가 구성된다(단계 510). 노출된 기본 스트림은 DMO(예를 들어, 디코더)를 사용하여 미디어 프로세서(220)에 의해 프로세싱된다.
프리젠테이션이 이용가능하지 않으면, 미디어 세션은 NULL 미디어 싱크를 사용하여 보다 많은 정보가 이용가능할 때까지 먹스 스트림에 대한 토폴로지를 종료시킬 것이다(단계 512). 세션이 개시되고 샘플이 진행될 때마다, 디멀티플렉서(300)는 프리젠테이션 디스크립터가 이용가능하게 될 때까지 샘플에 부여된다(단계 514). 이는, IMFMediaStream::ProcessSample을 호출함으로써 행해지며, 이는 먹스 스트림을 나타내는 미디어 프로세서 노드 상에서 호출된다. 미디어 프로세서(220)는 예를 들어, DV 스트림을 노출시키는 AVI 소스인, 하부 먹스 스트림 상에 IMF::MediaStream::ProcessInput를 호출한다. 먹스 스트림 샘플이 검색되면, 미디어 프로세서는 디멀티플렉서(300) 상의 IMFDemultiplexer::ProcessInput을 호출한다. 프로세스샘플과 프로세스입력 호출은 새로운 프리젠테이션 플래그가 IMFDemultiplexser::ProcessInput으로부터의 리턴에 대하여 참일 때까지 계속된다. 그 후, 미디어 프로세서(220)는 디멀티플렉서 변경에 기인하여 현재의 토폴로지가 갱신될 필요가 있음을 이벤트를 통해 미디어 세션(240)에 알린다. 미디어 세션(240)은 IMFDemultiplexer::GetCurrentPresentation을 호출하여 새롭게 이용가능한 기본 스트림 디스크립터에 액세스하게 한다. 프리젠테이션 디스크립터가 이용가능하게 되면, 미디어 세션은 기본 스트림 디스크립터를 사용하여 재협상할 수 있다(단계 516).
특허, 특허출원, 특허공개를 포함하는 여기서 인용된 모든 참조문헌은, 전체로서 참조하여 통합된다.
본 발명의 원리가 적용될 수 있는 많은 가능한 구현예의 관점에서, 도면으로서 여기서 기술된 구현예는 단지 예시적이며 본 발명의 범위를 한정하는 것으로서 취해져서는 아니됨이 인식되어야 한다. 예를 들어, 당업자는 소프트웨어로 도시된 구현예의 요소들이 하드웨어로서 구현될 수 있고, 그 역도 또한 참이며, 설명된 구현예는 본 발명의 정신을 벗어나지 않으면서 배치상 그리고 세부적으로 변경될 수 있음을 인식할 것이다. 따라서, 여기서 개시된 본 발명은 후술하는 청구범위와 그 균등물의 범위에서 이러한 구현예를 고찰한다.
멀티미디어 데이터 스트림에 대한 디멀티플렉서 API가 기술되었다. 디멀티플렉서 API는 인터페이스 집합, 멀티미디어의 디멀티플렉서를 나타내는 데이터 구조와 이벤트를 포함한다. API는 고객이 DV와 같은 먹스 스트림 데이터를 균일한 방식으로 사용하여 오디오와 비디오(압축 또는 비압축)와 같은 기본 스트림 데이터를 생성할 수 있게 한다. API는 디멀티플렉서가 독립 콤포넌트로서 사용될 수 있게 한다. 이 API는 많은 개수의 필터용 API에 대한 요구를 감소시키고, 주어진 필터는 레거시 필터(legacy filter)가 지원되지 않은 시스템에 첨부할 수 있는 모든 필터에 대하여 API에 더이상 인터페이스할 수 있을 필요가 없다. 또한, 디멀티플렉서는 미디어 프로세서가 필터 그래프내의 필터가 아닌 디멀티플렉서를 제어함으로써 적절하게 셧다운될 것이다.
도 1은 본 발명이 상주하는 예시적인 컴퓨터 시스템을 일반적으로 나타내는 블록도.
도 2는 본 발명이 동작하는 예시적인 컴퓨터 환경을 일반적으로 나타내는 블록도.
도 3은 본 발명의 교시에 따른 디멀티플렉서를 나타내는 블록도.
도 4는 본 발명의 디멀티플렉서의 상태천이도.
도 5는 본 발명의 호 구성을 할 수 있게 하는 데이터 구조모델을 나타내는 데이터 구조도.
도 6은 본 발명의 예시적인 메시지의 구성을 나타내는 간략화된 데이터 구조도.
도 7은, 애플리케이션이 멀티미디어 싱크(multimedia sink)와 협상하지 않을 때 본 발명의 교시에 따라 디멀티플렉서를 로딩하고 동작하도록 취해지는 단계를 나타내는 흐름도.
<도면의 주요부분에 대한 부호의 설명>
201: 제어 레이어 202: 애플리케이션
210: 미디어 소스 211: 코어 레이어
212: 스트림 싱크 214: 스트림 소스
220: 미디어 프로세서 230: 미디어 싱크
240: 미디어 세션 250: 토폴로지 로더
260: 미디어 엔진 302: 먹스 시스템
308: 먹스 샘플 322: 프리젠테이션 디스크립터

Claims (21)

  1. 디멀티플렉서 오브젝트(demultiplexer object)와의 통신을 제공하기 위한 인터페이스를 노출시키는 단계를 이행하기 위한 컴퓨터 실행가능 명령을 갖는 컴퓨터 판독가능 매체에 있어서, 상기 인터페이스는,
    상기 디멀티플렉서 오브젝트를 구성하기 위한 초기화(Initialize) 메소드;
    상기 디멀티플렉서 오브젝트에 대한 액티브 프리젠테이션 디스크립터를 동적으로 설정하기 위한 프리젠테이션디스크립터설정(SetPresentationDescriptor) 메소드;
    새로운 입력 먹스 스트림(input muxed stream)을 상기 디멀티플렉서 오브젝트에 제공하기 위한 프로세스입력(ProcessInput) 메소드;
    액티브 프리젠테이션으로부터 적어도 하나의 기본 스트림을 검색하기 위한 프로세스출력(ProcessOutput) 메소드; 및
    현재의 큐 입력 및 출력 샘플(currently queued input and output samples) 을 플러시하기 위한 플러시 메소드를 포함하는 컴퓨터 판독가능 매체.
  2. 제1항에 있어서,
    상기 인터페이스는, 상기 디멀티플렉서 오브젝트에 대한 현재 액티브한 프리젠테이션 디스크립터의 클론(clone)을 검색하기 위한 프리젠테이션디스크립터얻기(GetPresentationDescriptor) 메소드를 더 포함하는 컴퓨터 판독가능 매체.
  3. 제2항에 있어서,
    상기 프리젠테이션디스크립터얻기 메소드는 프리젠테이션 디스크립터(presentation descriptor)를 포함하는 컴퓨터 판독가능 매체.
  4. 제1항에 있어서,
    상기 인터페이스는, 다음 펜딩 프리젠테이션(next pending descriptor)을 검색하기 위한 펜딩프리젠테이션디스크립터얻기(GetPendingPresentationDescriptor)메소드를 더 포함하는 컴퓨터 판독가능 매체.
  5. 제4항에 있어서,
    상기 펜딩프리젠테이션디스크립터얻기 메소드는 펜딩 프리젠테이션 디스크립터를 포함하는 컴퓨터 판독가능 매체.
  6. 제1항에 있어서,
    상기 초기화 메소드는 파라미터를 포함하고, 상기 파라미터는
    먹스 스트림 디스크립터(muxed stream discriptor);
    상기 먹스 스트림 디스크립터에 대한 선택된 미디어 유형(selected media type);
    기본 스트림(elemetary stream)의 주요 유형의 어레이; 및
    주요 유형의 어레이 내의 주요 유형의 수를 포함하는 컴퓨터 판독가능 매체.
  7. 제1항에 있어서,
    상기 프리젠테이션디스크립터설정 메소드는 프리젠테이션 디스크립터 오브젝트에 대한 포인터를 포함하는 컴퓨터 판독가능 매체.
  8. 제1항에 있어서,
    상기 프로세스입력 메소드는 샘플 오브젝트에 대한 포인터를 포함하는 컴퓨터 판독가능 매체.
  9. 제8항에 있어서,
    상기 프로세스입력 메소드는 새로운 프리젠테이션 플래그(presentation flag)를 갖는 리턴값을 더 포함하는 컴퓨터 판독가능 매체.
  10. 제9항에 있어서,
    새로운 프리젠테이션 플래그가 참(TRUE) 값을 갖는 경우,
    펜딩프리젠테이션디스크립터얻기 메소드를 호출하여 다음 펜딩 프리젠테이션을 검색하는 단계;
    원하는 스트림을 선택하는 단계; 및
    프리젠테이션디스크립터설정 메소드를 호출하여 상기 디멀티플렉서의 입력 큐로부터 샘플의 프로세싱을 할 수 있게 하는 단계를 포함하는 단계들을 이행하기 위한 컴퓨터 실행가능 명령을 더 포함하는 컴퓨터 판독가능 매체.
  11. 제1항에 있어서,
    상기 프로세스출력 메소드는 스트림 식별자(stream identifier) 및 샘플 오브젝트에 대한 포인터에 대한 포인터를 포함하는 컴퓨터 판독가능 매체.
  12. 제11항에 있어서,
    상기 프로세스출력 메소드는 출력 리턴값을 더 포함하는 컴퓨터 판독가능 매체.
  13. 제12항에 있어서,
    상기 출력 리턴값은 스트림끝(end of stream) 에러 코드와 데이터 더이상 없음(no more data) 에러코드 중의 하나를 포함하는 컴퓨터 판독가능 매체.
  14. 제1항에 있어서,
    상기 인퍼페이스는 데이터의 인메모리 버퍼(in-memory buffer)로서 멀티플레싱된 데이터를 취하는 컴퓨터 판독가능 매체.
  15. 제14항에 있어서,
    상기 멀티플렉싱된 데이터는 디지털 비디오, MPEG2, 및 ASF 중의 적어도 하나를 포함하는 포맷을 갖는 컴퓨터 판독가능 매체.
  16. 디멀티플렉서에서 사용하기 위한 초기화 데이터 구조를 저장한 컴퓨터 판독가능 매체에 있어서,
    헤더를 포함하는 제1 필드;
    먹스 스트림 디스크립터를 포함하는 제2 필드;
    상기 먹스 스트림 디스크립터의 선택된 매체 유형을 포함하는 제3 필드;
    기본 스트림의 주요 유형의 어레이를 포함하는 제4 필드;
    상기 주요 유형의 어레이 내에 주요 유형의 수를 포함하는 제5 필드를 포함하는 컴퓨터 판독가능 매체.
  17. 디멀티플렉서에서 사용하기 위한 프리젠테이션디스크립터설정 데이터 구조를 저장한 컴퓨터 판독가능 매체에 있어서,
    헤더를 포함하는 제1 필드; 및
    프리젠테이션 디스크립터를 포함하는 제2 필드를 포함하는 컴퓨터 판독가능 매체.
  18. 디멀티플렉서에서 사용하기 위한 프리젠테이션디스크립터얻기 데이터 구조를 저장한 컴퓨터 판독가능 매체에 있어서,
    헤더를 포함하는 제1 필드; 및
    프리젠테이션 디스크립터를 포함하는 제2 필드를 포함하는 컴퓨터 판독가능 매체.
  19. 디멀티플렉서에서 사용하기 위한 펜딩프리젠테이션디스크립터얻기 데이터 구조를 저장한 컴퓨터 판독가능 매체에 있어서,
    헤더를 포함하는 제1 필드; 및
    펜딩 프리젠테이션 디스크립터를 포함하는 제2 필드를 포함하는 컴퓨터 판독가능 매체.
  20. 디멀티플렉서에서 사용하기 위한 프로세스입력 데이터 구조를 저장한 컴퓨터 판독가능 매체에 있어서,
    헤더를 포함하는 제1 필드; 및
    샘플 오브젝트에 대한 포인터를 포함하는 제2 필드를 포함하는 컴퓨터 판독가능 매체.
  21. 디멀티플렉서에서 사용하기 위한 프로세스출력 데이터 구조를 저장한 컴퓨터 판독가능 매체에 있어서,
    헤더를 포함하는 제1 필드;
    스트림 식별자를 포함하는 제2 필드; 및
    샘플 오브젝트에 대한 포인터에 대한 포인터를 포함하는 제3 필드를 포함하는 컴퓨터 판독가능 매체.
KR1020030058228A 2003-08-06 2003-08-22 디멀티플렉서 애플리케이션 프로그래밍 인터페이스 KR20050015930A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/635,730 2003-08-06
US10/635,730 US7882510B2 (en) 2003-08-06 2003-08-06 Demultiplexer application programming interface

Publications (1)

Publication Number Publication Date
KR20050015930A true KR20050015930A (ko) 2005-02-21

Family

ID=33552948

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020030058228A KR20050015930A (ko) 2003-08-06 2003-08-22 디멀티플렉서 애플리케이션 프로그래밍 인터페이스

Country Status (8)

Country Link
US (1) US7882510B2 (ko)
EP (1) EP1505501A1 (ko)
JP (1) JP4249569B2 (ko)
KR (1) KR20050015930A (ko)
CN (1) CN1581067B (ko)
AU (1) AU2003236379A1 (ko)
CA (1) CA2438418A1 (ko)
MX (1) MXPA03007574A (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7555540B2 (en) * 2003-06-25 2009-06-30 Microsoft Corporation Media foundation media processor
US8165449B2 (en) * 2003-10-01 2012-04-24 Microsoft Corporation DV metadata extraction
US20060197767A1 (en) * 2005-03-07 2006-09-07 Ward Robert G Algorithm to automatically configure a SONET/SDH demultiplexer by pushing a button, and displaying a result and status thereof
US7827554B2 (en) * 2005-06-20 2010-11-02 Microsoft Corporation Multi-thread multimedia processing
JP4828927B2 (ja) * 2005-12-16 2011-11-30 パナソニック株式会社 ストリーム制御装置
US7802005B2 (en) * 2007-03-30 2010-09-21 Motorola, Inc. Method and apparatus for configuring buffers for streaming data transfer
CN108319438B (zh) * 2017-01-16 2019-05-17 视联动力信息技术股份有限公司 一种音频数据采集的方法和装置

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2351002A (en) * 1941-11-18 1944-06-13 Burton Gus Emergency landing runway
US5065396A (en) * 1990-01-02 1991-11-12 At&T Bell Laboratories Inverse multiplexer and demultiplexer techniques
US5455910A (en) * 1993-01-06 1995-10-03 International Business Machines Corporation Method and system for creating a synchronized presentation from different types of media presentations
WO1994018771A1 (en) 1993-02-03 1994-08-18 Novell, Inc. Flow control by evaluating network load
US5576843A (en) * 1993-10-29 1996-11-19 Time Warner Entertainment Co., L.P. System and method for controlling play of multiple dialog audio tracks of a software carrier
US5583562A (en) * 1993-12-03 1996-12-10 Scientific-Atlanta, Inc. System and method for transmitting a plurality of digital services including imaging services
AU697039B2 (en) * 1993-12-18 1998-09-24 Sony Corporation Data reproduction apparatus and data storage
US6334219B1 (en) * 1994-09-26 2001-12-25 Adc Telecommunications Inc. Channel selection for a hybrid fiber coax network
JP3078215B2 (ja) * 1995-01-06 2000-08-21 ミツビシ・エレクトリック・インフォメイション・テクノロジー・センター・アメリカ・インコーポレイテッド ディスプレイ装置
WO1997019451A1 (fr) * 1995-11-24 1997-05-29 Kabushiki Kaisha Toshiba Support d'enregistrement multi-langages et dispositif de reproduction associe
FR2743245B1 (fr) * 1995-12-29 1998-01-23 Thomson Multimedia Sa Dispositif de demultiplexage
US6172988B1 (en) * 1996-01-31 2001-01-09 Tiernan Communications, Inc. Method for universal messaging and multiplexing of video, audio, and data streams
US5754774A (en) * 1996-02-15 1998-05-19 International Business Machine Corp. Client/server communication system
WO1998046006A2 (en) * 1997-04-07 1998-10-15 At & T Corp. System and method for interfacing mpeg-coded audiovisual objects permitting adaptive control
RU2143726C1 (ru) 1997-07-15 1999-12-27 Козлов Михаил Кириллович Формульный процессор с командоподобными логическими управляющими элементами
US6535530B1 (en) * 1997-07-23 2003-03-18 Matsushita Electric Industrial Co., Ltd. Apparatus and method for demultiplexing multiplexed data
US6631403B1 (en) * 1998-05-11 2003-10-07 At&T Corp. Architecture and application programming interfaces for Java-enabled MPEG-4 (MPEG-J) systems
JP3593883B2 (ja) * 1998-05-15 2004-11-24 株式会社日立製作所 映像ストリーム送受信システム
US6636222B1 (en) * 1999-11-09 2003-10-21 Broadcom Corporation Video and graphics system with an MPEG video decoder for concurrent multi-row decoding
US7174560B1 (en) * 1999-02-25 2007-02-06 Sharp Laboratories Of America, Inc. Method of synchronizing events with a digital television audio-visual program
JP4362906B2 (ja) 1999-09-21 2009-11-11 ソニー株式会社 情報処理装置および方法、並びに記録媒体
US6611907B1 (en) * 1999-10-21 2003-08-26 Matsushita Electric Industrial Co., Ltd. Semiconductor memory card access apparatus, a computer-readable recording medium, an initialization method, and a semiconductor memory card
KR100590185B1 (ko) * 1999-11-20 2006-06-14 삼성전자주식회사 부가정보를 포함하는 오디오/비디오데이터의 저장 및검색장치
US20020024967A1 (en) * 1999-12-14 2002-02-28 Zaun David Brian Dynamic configuration of input filtering parameters for an MPEG re-multiplexer
GB9930788D0 (en) * 1999-12-30 2000-02-16 Koninkl Philips Electronics Nv Method and apparatus for converting data streams
GB9930787D0 (en) * 1999-12-30 2000-02-16 Koninkl Philips Electronics Nv Method and apparatus for convrerting data streams
US7035916B1 (en) 2000-02-16 2006-04-25 Microsoft Corporation Coupling a filter graph space to a network driver space
US6975628B2 (en) * 2000-12-22 2005-12-13 Intel Corporation Method for representing and controlling packet data flow through packet forwarding hardware
US7010004B2 (en) * 2001-08-03 2006-03-07 Optibase Ltd. Method for multiplexing data for packet networks
KR100436759B1 (ko) * 2001-10-16 2004-06-23 삼성전자주식회사 수신된 멀티미디어 데이터를 저장하는 버퍼의 용량을가변할 수 있는 멀티미디어 데이터 복원장치
US7116712B2 (en) * 2001-11-02 2006-10-03 Koninklijke Philips Electronics, N.V. Apparatus and method for parallel multimedia processing
TWI247295B (en) * 2002-03-09 2006-01-11 Samsung Electronics Co Ltd Reproducing method and apparatus for interactive mode using markup documents
US7246318B2 (en) * 2002-06-28 2007-07-17 Microsoft Corporation Application programming interface for utilizing multimedia data
US7269836B2 (en) * 2003-03-24 2007-09-11 International Business Machines Corporation System and method for providing multiplexing and remultiplexing of MPEG-2 streams

Also Published As

Publication number Publication date
CN1581067B (zh) 2010-10-06
EP1505501A1 (en) 2005-02-09
US20050030980A1 (en) 2005-02-10
CN1581067A (zh) 2005-02-16
AU2003236379A1 (en) 2005-02-24
US7882510B2 (en) 2011-02-01
CA2438418A1 (en) 2005-02-06
JP2005056364A (ja) 2005-03-03
JP4249569B2 (ja) 2009-04-02
MXPA03007574A (es) 2005-02-09

Similar Documents

Publication Publication Date Title
KR101122860B1 (ko) 미디어 기반 미디어 프로세서
US11336953B2 (en) Video processing method, electronic device, and computer-readable medium
US7609653B2 (en) Resolving partial media topologies
US6748440B1 (en) Flow of streaming data through multiple processing modules
US7669206B2 (en) Dynamic redirection of streaming media between computing devices
US20040267778A1 (en) Media foundation topology application programming interface
US7555756B2 (en) Dynamic reconfiguration of multimedia stream processing modules
US7774375B2 (en) Media foundation topology
US7941739B1 (en) Timeline source
US7882510B2 (en) Demultiplexer application programming interface
US7725920B2 (en) Media foundation media sink
US7577940B2 (en) Managing topology changes in media applications
RU2351002C2 (ru) Программный интерфейс приложения демультиплексора
Suchomski et al. Multimedia conversion with the focus on continuous media
CN115086282A (zh) 一种视频播放方法、设备及存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application