KR20070086808A - 데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체,데이터 기록 매체, 및 데이터 구조 - Google Patents

데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체,데이터 기록 매체, 및 데이터 구조 Download PDF

Info

Publication number
KR20070086808A
KR20070086808A KR1020077014920A KR20077014920A KR20070086808A KR 20070086808 A KR20070086808 A KR 20070086808A KR 1020077014920 A KR1020077014920 A KR 1020077014920A KR 20077014920 A KR20077014920 A KR 20077014920A KR 20070086808 A KR20070086808 A KR 20070086808A
Authority
KR
South Korea
Prior art keywords
stream
data
video
control module
audio
Prior art date
Application number
KR1020077014920A
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 KR20070086808A publication Critical patent/KR20070086808A/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B27/00Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
    • G11B27/10Indexing; Addressing; Timing or synchronising; Measuring tape travel
    • G11B27/102Programmed access in sequence to addressed parts of tracks of operating record carriers
    • G11B27/105Programmed access in sequence to addressed parts of tracks of operating record carriers of operating discs
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/12Formatting, e.g. arrangement of data block or words on the record carriers
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B27/00Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
    • G11B27/005Reproducing at a different information rate from the information rate of recording
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B27/00Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
    • G11B27/10Indexing; Addressing; Timing or synchronising; Measuring tape travel
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B27/00Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
    • G11B27/10Indexing; Addressing; Timing or synchronising; Measuring tape travel
    • G11B27/19Indexing; Addressing; Timing or synchronising; Measuring tape travel by using information detectable on the record carrier
    • G11B27/28Indexing; Addressing; Timing or synchronising; Measuring tape travel by using information detectable on the record carrier by using information signals recorded by the same method as the main recording
    • G11B27/32Indexing; Addressing; Timing or synchronising; Measuring tape travel by using information detectable on the record carrier by using information signals recorded by the same method as the main recording on separate auxiliary tracks of the same or an auxiliary record carrier
    • G11B27/327Table of contents
    • G11B27/329Table of contents on a disc [VTOC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/91Television signal processing therefor
    • H04N5/92Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N9/00Details of colour television systems
    • H04N9/79Processing of colour television signals in connection with recording
    • H04N9/80Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback
    • H04N9/804Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback involving pulse code modulation of the colour picture signal components
    • H04N9/8042Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback involving pulse code modulation of the colour picture signal components involving data reduction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/765Interface circuits between an apparatus for recording and another apparatus
    • H04N5/775Interface circuits between an apparatus for recording and another apparatus between a recording apparatus and a television receiver
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/78Television signal recording using magnetic recording
    • H04N5/781Television signal recording using magnetic recording on disks or drums
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/78Television signal recording using magnetic recording
    • H04N5/782Television signal recording using magnetic recording on tape
    • H04N5/783Adaptations for reproducing at a rate different from the recording rate
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/84Television signal recording using optical recording
    • H04N5/85Television signal recording using optical recording on discs or drums
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N9/00Details of colour television systems
    • H04N9/79Processing of colour television signals in connection with recording
    • H04N9/80Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback
    • H04N9/804Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback involving pulse code modulation of the colour picture signal components
    • H04N9/806Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback involving pulse code modulation of the colour picture signal components with processing of the sound signal
    • H04N9/8063Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback involving pulse code modulation of the colour picture signal components with processing of the sound signal using time division multiplex of the PCM audio and PCM video signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N9/00Details of colour television systems
    • H04N9/79Processing of colour television signals in connection with recording
    • H04N9/80Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback
    • H04N9/82Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only
    • H04N9/8205Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only involving the multiplexing of an additional signal and the colour video signal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N9/00Details of colour television systems
    • H04N9/79Processing of colour television signals in connection with recording
    • H04N9/80Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback
    • H04N9/82Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only
    • H04N9/8205Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only involving the multiplexing of an additional signal and the colour video signal
    • H04N9/8227Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only involving the multiplexing of an additional signal and the colour video signal the additional signal being at least another television signal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N9/00Details of colour television systems
    • H04N9/79Processing of colour television signals in connection with recording
    • H04N9/80Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback
    • H04N9/82Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only
    • H04N9/8205Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only involving the multiplexing of an additional signal and the colour video signal
    • H04N9/8233Transformation of the television signal for recording, e.g. modulation, frequency changing; Inverse transformation for playback the individual colour picture signal components being recorded simultaneously only involving the multiplexing of an additional signal and the colour video signal the additional signal being a character code signal

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Television Signal Processing For Recording (AREA)
  • Indexing, Searching, Synchronizing, And The Amount Of Synchronization Travel Of Record Carriers (AREA)
  • Management Or Editing Of Information On Record Carriers (AREA)
  • Studio Circuits (AREA)

Abstract

재생 장치의 성능에 따라 효율 좋게 재생할 수 있도록 하는, 컨트롤러(446)는, 비디오의 엔트리에 대하여, 비디오의 챕터의 선두 위치인지의 여부, 또는 씬 체인지의 중요도를 판단한다. 즉, 평가중의 엔트리가 챕터 씬 체인지 정보(447)에 있는 챕터의 시각에 해당하는지의 여부, 또는 중요한 씬 체인지인지의 여부를 판정한다. 예를 들면, 챕터의 시각에 해당하는 경우, 컨트롤러(446)는 priority_flag=3으로서 설정하고 출력 서버(426)에 기억시킨다. 본 발명은, 예를 들면 DVD를 이용한 게임 장치 등에 적용할 수 있다.
오디오 인코더, 비디오 인코더, 다중화기, FIFO, RAPI 재기입기, 출력 서버, RAPI 정보 추출기, 컨트롤러

Description

데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치 및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체, 데이터 기록 매체, 및 데이터 구조{DATA RECORDING DEVICE, DATA RECORDING METHOD, DATA PROCESSING DEVICE, DATA PROCESSING METHOD, PROGRAM, PROGRAM RECORDING MEDIUM, DATA RECORDING MEDIUM, AND DATA STRUCTURE}
본 발명은, 데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치 및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체, 데이터 기록 매체 및 데이터 구조에 관한 것으로, 특히, 예를 들면, 편리성 등이 높은 데이터 처리를 가능하게 하는 데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치 및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체, 데이터 기록 매체, 및 데이터 구조에 관한 것이다.
최근, 대용량이며, 랜덤 액세스가 가능한 기록 미디어로서, 예를 들면, DVD(Digital Versatile Disc)가 보급되고, 또한, DVD를 이용하여 각종 처리를 행하는 DVD 장치도 널리 보급되고 있다.
DVD 장치로서는, 예를 들면, DVD에 대하여, 텔레비전 방송 프로그램의 데이터 등의 기록 재생을 행하는 DVD 레코더나, DVD에 지도 정보 등을 기록하고, 그 지 도 정보의 표시를 행하는 카 네비게이션 시스템, DVD에 게임의 프로그램 등을 기록하고, 그 프로그램을 실행하는 게임 장치 등이 있다.
또한, DVD에 대해서는, 예를 들면, 비특허 문헌 1 「DVD Specifications for Read-Only Disc Part 3; Version 1.1 December 1997」에, 그 상세가 기재되어 있다.
DVD 장치와 같이, 대량의 데이터를 처리할 수 있는 장치에서, 편리성이 높은 데이터 처리를 행하는 것이 요청된다.
<발명의 개시>
본 발명은, 이러한 상황을 감안하여 이루어진 것으로, 편리성 등이 높은 데이터 처리를 행할 수 있도록 하는 것이다.
본 발명의 데이터 기록 장치는, 스트림 데이터의 엔트리 포인트를 인식하도록 구성된 인식부와, 상기 인식부의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하도록 구성된 설정부와, 상기 스트림 데이터와 함께, 상기 설정부에 의해 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하도록 구성된 기록부를 포함하는 것을 특징으로 한다.
상기 스트림 데이터는, 비디오 스트림 데이터, 또는 서브타이틀 스트림 데이터로 하도록 할 수 있다.
상기 설정부에는, 상기 엔트리 포인트가, 챕터의 선두인지의 여부, 및 씬 체인지의 중요도에 따라, 상기 엔트리 포인트마다 우선 순위를 설정시키도록 할 수 있다.
본 발명의 데이터 기록 방법은, 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝과, 상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝과, 상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝을 포함하는 것을 특징으로 한다.
본 발명의 제1 프로그램은, 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝과, 상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝과, 상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝을 포함하는 처리를 컴퓨터에 실행시키는 것을 특징으로 한다.
본 발명의 제1 프로그램 기록 매체의 프로그램은, 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝과, 상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝과, 상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝을 포함하는 것을 특징으로 한다.
본 발명의 데이터 처리 장치는, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내도록 구성된 읽어내기부와, 상기 읽어내기부에 의해 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하도록 구성된 재생부를 포함하는 것을 특징으로 한다.
상기 스트림 데이터는, 비디오 스트림 데이터, 또는 서브타이틀 스트림 데이터로 하도록 할 수 있다.
상기 우선 순위는, 엔트리 포인트가 챕터의 선두인지의 여부, 및 씬 체인지이 중요도에 따라 설정되어 있도록 할 수 있다.
본 발명의 데이터 처리 방법은, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝과, 상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝을 포함하는 것을 특징으로 한다.
본 발명의 제2 프로그램은, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝과, 상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝을 포함하는 처리를 컴퓨터에 실행시키는 것을 특징으로 한다.
본 발명의 제2 프로그램 기록 매체의 프로그램은, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝과, 상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝을 포함하는 것을 특징으로 한다.
본 발명의 데이터 기록 매체는, 스트림 데이터와 함께, 상기 스트림 데이터 에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터가 기록되어 있는 것을 특징으로 한다.
본 발명의 데이터 구조는, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 것을 특징으로 한다.
본 발명의 데이터 기록 장치 및 방법과 제1 프로그램에서는, 스트림 데이터의 엔트리 포인트가 인식되고, 인식 결과에 따라, 엔트리 포인트마다 우선 순위가 설정되고, 스트림 데이터와 함께, 설정된 엔트리 포인트마다의 우선 순위가 데이터 기록 매체에 기록된다.
본발명의 데이터 처리 장치 및 방법과 제2 프로그램에서는, 스트림 데이터와 함께, 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터가 데이터 기록 매체로부터 읽어내어지고, 읽어내어진 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만이 재생된다.
본 발명의 기록 매체 및 데이터 구조에서는, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터가 기록된다.
본 발명의 데이터 기록 방치 및 데이터 처리 장치는, 독립된 장치이어도 되고, 데이터 처리를 행하는 블록이어도 된다.
본 발명에 따르면, 편리성 등이 높은 데이터 처리가 가능하게 된다. 특히, 저코스트의 재생 장치라도, 메모리의 용량 등의 재생 능력에 따라 엔트리를 기억시킬 수 있어, 효율적인 재생 처리를 실현시키는 것이 가능하게 된다.
도 1은, 본 발명을 적용한 디스크 재생 장치의 일 실시 형태의 하드웨어 구성예를 도시하는 블록도.
도 2A 및 도 2B는, CPU(112)가 실행하는 소프트웨어 모듈군의 구성예를 도시하는 블록도.
도 3은, 실제의 시간 경과와 90㎑의 시계의 계시의 관계를 도시한 도면.
도 4는, 실제의 시간 경과와 비디오 디코더의 비디오 데이터의 출력에 따라 시각을 갱신하는 시계의 계시의 관계를 도시한 도면.
도 5는, 버퍼 제어 모듈(215)의 구성예를 도시하는 블록도.
도 6은, 디스크(101)에서의 디렉토리 구성예를 도시하는 도면.
도 7은, "PLAYLIST.DAT" 파일의 신택스를 도시하는 도면.
도 8은, PlayItem()의 신택스를 도시하는 도면.
도 9는, PlayListMark()의 신택스를 도시하는 도면.
도 10은, mark_type의 값과, Mark()의 타입의 관계를 도시하는 도면.
도 11은, PlayList(), PlayItem(), 클립, 및 클립 스트림 파일에 저장된 프로그램 스트림의 관계를 도시하는 도면.
도 12는, 클립 정보 파일 Clip()의 신택스를 도시하는 도면.
도 13은, 엘리멘터리 스트림을 식별하는 stream_id 및 private_stream_id와, 엘리멘터리 스트림의 관계를 도시하는 도면.
도 14는, StaticInfo()의 신택스를 도시하는 도면.
도 15는, DynamicInfo()의 신택스를 도시하는 도면.
도 16은, EP_map()의 신택스를 도시하는 도면.
도 17은, 도 16의 index_N_minus1의 값과 1stRef_Picture 내지 4thRef_Picture의 관계를 도시하는 도면.
도 18A 및 도 18B는, MPEG-2 System의 프로그램 스트림, 프로그램 스트림 팩, 및 프로그램 스트림 팩 헤더의 신택스를 도시하는 도면.
도 19A 및 도 19B는, MPEG-2 System의 PES 패킷의 신택스를 도시하는 도면.
도 20A, 도 20B 및 도 20C는, MPEG-2 System의 PES 패킷의 신택스를 도시하는 도면.
도 21A 및 도 21B는, MPEG-2 System의 PES 패킷의 신택스를 도시하는 도면.
도 22A 및 도 22B는, MPEG-2 System에서의 PES_packet()의 stream_id에 기술되는 값과, 엘리멘터리 스트림의 속성의 관계를 도시하는 도면.
도 23은, 디스크 재생 장치가 채용하는 stream_id를 도시하는 도면.
도 24는, private_stream1_PES_payload()의 신택스를 도시하는 도면.
도 25는, private_stream_id의 값과, private_payload()에 저장되는 엘리멘터리 스트림의 속성의 관계를 도시하는 도면.
도 26은, private_stream2_PES_payload()의 신택스를 도시하는 도면.
도 27은, au_information()의 신택스를 도시하는 도면.
도 28은, pic_struct를 설명하는 도면.
도 29는, "PLAYLIST.DAT" 파일의 구체예를 도시하는 도면.
도 30A 및 도 30B는, 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"의 구체예를 도시하는 도면.
도 31은, 클립 정보 파일 "00001.CLP" 중 EP_map()의 구체예를 도시하는 도면.
도 32는, PlayList #0과 PlayList #1 중의 PlayListMark()의 구체예를 도시하는 도면.
도 33은, 재생 전 처리를 설명하는 플로우차트.
도 34는, 재생 처리를 설명하는 플로우차트.
도 35는, 디코드 순서와 출력 순서의 관계를 설명하는 플로우차트.
도 36은, 비디오 디코더의 구성을 설명하는 도면.
도 37은, 도 36의 DPB의 구성을 설명하는 도면.
도 38은, 시각 갱신 처리를 설명하는 플로우차트.
도 39는, pic_struct의 값에 따른 시각 갱신 처리를 설명하는 도면.
도 40은, PlayItem 갈아타기 처리를 설명하는 플로우차트.
도 41은, 타임 코드 표시 처리를 설명하는 플로우차트.
도 42는, 스트림 절환 처리를 설명하는 플로우차트.
도 43은, 버퍼 제어 모듈(215)의 처리를 설명하는 플로우차트.
도 44는, 버퍼 제어 모듈(215)의 처리를 설명하는 플로우차트.
도 45는, 비디오 스트림의 읽어내기의 처리를 설명하는 플로우차트.
도 46은, 오디오 스트림의 읽어내기의 처리를 설명하는 플로우차트.
도 47은, 자막 스트림의 읽어내기의 처리를 설명하는 플로우차트.
도 48은, 재동기 처리를 설명하는 플로우차트.
도 49는, 마크 처리를 설명하는 플로우차트.
도 50은, 마크 처리에서의 일치 판정을 설명하는 도면.
도 51은, playListEnd 타이밍을 설명하는 도면.
도 52는, playListEnd 타이밍을 설명하는 도면.
도 53은, 이벤트의 간격을 설명하는 도면.
도 54는, 출력 속성의 제어 처리를 설명하는 플로우차트.
도 55는, 클립 정보 파일 "00003.CLP"에 기술되어 있는 pts_change_point와 DynamicInfo()의 세트의 구체예를 도시하는 도면.
도 56은, 자막 표시 제어 처리를 설명하는 플로우차트.
도 57은, 캡쳐 제어 처리와 백그라운드/스크린 세이버 처리를 설명하는 플로우차트.
도 58은, private_stream2_PES_payload()의 다른 신택스를 도시하는 도면.
도 59는, au_information()의 다른 신택스를 도시하는 도면.
도 60은, 디스크 기록 장치의 하드웨어 구성예를 도시하는 블록도.
도 61은, 도 60의 디스크 기록 장치에 의해 실현되는 기능을 설명하는 블록도.
도 62는, Ep_map 생성 처리를 설명하는 플로우차트.
도 63은, 앞으로 감기 재생 처리를 설명하는 플로우차트.
도 64는, 엔트리 포인트 선정 처리를 설명하는 플로우차트.
도 65는, 도 60의 디스크 기록 장치에 의해 실현되는 그 밖의 기능을 설명하는 블록도.
도 66은, EP_map()의 그 밖의 신택스를 도시하는 도면.
도 67은, 도 65의 priority_flag를 설명하는 도면.
도 68은, 프라이어리티 설정 처리를 설명하는 플로우차트.
<부호의 설명>
101 : 디스크
102 : 디스크 드라이브
111 : 버스
112 : CPU
113 : 메모리
114 : 드라이브 인터페이스
115 : 입력 인터페이스
116 : 비디오 디코더
116A : 비디오에서 코드 엔지
116B : DPB(Decoded Picture Baffer)
117 : 오디오 디코더
118 : 비디오 출력 인터페이스
119 : 오디오 출력 인터페이스
120 : 비디오 출력 단자
121 : 오디오 출력 단자
201 : 오퍼레이팅 시스템
210 : 비디오 콘텐츠 재생 프로그램
211 : 스크립트 제어 모듈
212 : 플레이어 제어 모듈
213 : 콘텐츠 데이터 공급 모듈
214 : 디코드 제어 모듈
214A : 계시부
215 : 버퍼 제어 모듈
215A : 버퍼
216 : 비디오 디코더 제어 모듈
217 : 오디오 디코더 제어 모듈
218 : 자막 디코더 제어 모듈
219 : 그래픽 처리 모듈
220 : 비디오 출력 모듈
220A : FIFO
221 : 오디오 출력 모듈
221A : FIFO
231 : 데이터 선두 포인터 기억부
232 : 데이터 써넣기 포인터 기억부
233 : 비디오 읽어내기 기능부
234 : 오디오 읽어내기 기능부
235 : 자막 읽어내기 기능부
241 : 비디오 읽어내기 포인터 기억부
242 : stream_id 레지스터
243 : au_information() 레지스터
251 : 오디오 읽어내기 포인터 기억부
252 : stream_id 레지스터
253 : private_stream_id 레지스터
261 : 자막 읽어내기 기능 플래그 기억부
262 : 자막 읽어내기 포인터 기억부
263 : stream_id 레지스터
264 : private_stream_id 레지스터
301 : 비디오 버퍼
302 : 부가 정보 버퍼
400A : 비디오 입력 단자
S101 : 디스크 체크
S102 : 에러 처리
S103 : SCRIPT.DAT와 PLAYLIST.DAT의 읽어들이기
S104 : 파일 공급
S105 : PLAYLIST.DAT의 해석
S106 : Clip 정보 파일의 읽어내기
S107 : 파일 체크
S108 : SCRIPT.DAT의 해석, 실행
S121 : IN_time 인식
S122 : 재생 개시 위치 조사
S123 : 타임 코드 표시
S124 : PlaylistMark()의 해석
S125 : 재생하는 스트림의 결정
S126 : 출력 속성 제어
S127 : 재생 개시의 준비
S128 : 데이터 읽어들이기 개시
S129 : 디코더 제어 개시
S130 : 디코드 개시
S131 : 그래픽 처리 개시
S132 : 출력 처리 개시
S141 : 타임 스탬프를 갖고 있는가?
S142 : 타임 스탬프를 대입(PST)
S143 : 금회의 pic_struct를 보존한다
S144 : 전회의 pic_struct에 의해 정해진 간격을 가산
S151 : 디코드 중단 제어
S152 : 플레이 아이템 재생 개시
S171 : 메시지 출력
S172 : 타임 코드 환산
S173 : 타임 코드 출력
S191 : 스트림수 체크
S192 : 재생하고 있는 스트림의 특정
S193 : 다음에 재생하는 스트림의 인식
S194 : 다음에 재생하는 스트림의 읽어내기 지시
S211 : private_stream_2 packet의 탐색
S212 : 지정된 stream_id인가?
S213 : au_Information()을 내부 레지스터에 읽어들임
S214 : 비디오 읽어내기 포인트에 직후의 비디오 패킷의 선두를 삽입한다
S215 : 데이터 요구가 있는가?
S216 : 프로그램 스트림의 구문 해석을 행하면서, AU_length분의 비디오 데이터를 출력
S217 : number_of_access_unit만큼 처리하였는가?
S230 : private_stream_1?
S231 : 동기 코드 탐색
S232 : MPEG 오디오 패킷의 탐색
S233 : 오디오 읽어내기 포인터 갱신
S234 : private_stream_1 패킷의 탐색
S235 : 지정된 private_stream_id인가?
S236 : 오디오 읽어내기 포인터(234)←Au_locator 직후의 위치+Au_locator
S237 : 데이터 요구가 있는가?
S238 : 프로그램 스트림의 구문 해석을 행하면서, 고정 길이의 오디오 액세스 유닛을 출력
S251 : 자막 읽어내기 기능 플래그?
S252 : private_stream_1 packet의 탐색
S253 : 지정된 private_stream_id인가?
S254 : 자막 읽어내기 포인터 ←Au_locator 직후의 위치+Au_locator
S255 : 데이터 요구가 있는가?
S256 : 프로그램 스트림의 구문 해석을 행하면서, 자막 액세스 유닛의 선두에 기술을 하고 있는 길이분의 자막 액세스 유닛을 출력
S271 : 타임 스탬프 어긋남이 큰가?
S272 : 비디오가 지연되어 있는가?
S273 : 비디오 액세스 유닛의 스킵을 지시
S274 : 액세스 유닛의 au_ref_flag를 검사
S275 : 액세스 유닛은, 비참조 화상인가?
S276 : 비디오 액세스 유닛을 처리
S277 : 비디오 액세스 유닛의 처리를 스킵
S278 : 비디오의 반복 출력을 지시
S279 : 비디오의 반복 출력
S301 : 현재 시각이, mark_time_stamp에 일치?
S302 : 처리 대상으로 하는 mark를 인식
S303 : 처리 대상 mark에, entry_ES_stream_id/entry_ES_private_stream_id가 기술되어 있는가?
S304 : 재생 중인 스트림에, entry_ES_stream_id/entry_ES_private_stream_id의 스트림이 포함되는가?
S305 : 처리 대상 mark의 mark_type을 판정
S306 : 챕터/인덱스의 갱신 처리
S307 : 이벤트 메시지와 mark_date를, 스크립트 제어 모듈(211)에 통지
S308 : mark_data에 대응하는 처리
S320 : pts_change_point를 건네준다
S321 : 현재 시각이, pts_change_point에 일치하는가?
S322 : 현재 시각에 일치하는 pts_change_point의 DynamicInfo()를 인식
S323 : DynamicInfo()에 기술된 출력 속성을 공급
S324 : 출력 속성에 따라, 비디오/오디오의 출력의 제어를 개시
S341 : 자막 처리의 초기화를 개시
S342 : 자막의 표시에 대하여, 새로운 표시 방식 지시가 있는가?
S343 : 자막 스트림을 재생 중인가?
S345 : 디폴트 표시의 지시?
S346 : 재생 중인 자막 스트림의 StaticInfo()를 취득
S347 : StaticInfo()의 configurable_flag를 판정
S348 : 에러 표시
S349 : 표시 방식 지시를 공급
S350 : 표시 방식 지시에 따라, 자막의 처리를 개시
S351 : PlayItem 갈아타기?
S371 : 비디오를 재생 중?
S372 : 재생 중인 비디오의 PlayList()와 Clip()으로부터, capture_enable_flag를 취득
S373 : capture_enable_flag에 기초하여, 캡쳐의 가부를 판정?
S374 : 에러 표시
S375 : 캡쳐 지시를 공급
S376 : 캡쳐, 기억
S380 : 픽쳐의 표시
S381 : 인코드한다
S382 : 다중화하고, 인트라 픽쳐를 선택한다
S383 : 인트라 픽쳐와 그것에 계속되는 픽쳐의 위치를 검출한다
S384 : RAPI 정보를 다시 써넣기한다
S385 : RAPI 정보에 기초하여, 30섹터에 가까운 픽쳐의 위치를 N-th_Ref_picture_copy에 카피한다
S386 : N-th_Ref_picture_copy에 기초하여, index_N_minus1을 결정하고, 기록한다
S391 : 재생 가능 위치를 선택한다
S392 : RPN_EP_Start와 N-th_Ref_picture_copy에 기초하여 읽어내기 데이터를 결정한다
S393 : 재생 대상으로 되는 엘리멘터리 스트림이 다중화되어 있는 프로그램 스트림이 저장된 클립 스트림을 읽어냄
S394 : 비디오 스트림을 다중화 분리한다
S395 : 엔트리 포인트 선정 처리
S396 : 참조 화상을 디코드하여 표시한다
S397 : 앞으로 감기의 종료가 지시되었는가?
S401 : 고속?
S402 : 엔트리 번호(N)+=2
S403 : N, N+1, N-1번째의 index_N_minus1을 읽어냄
S404 : index_N_minus1(N)==0 혹은 1?
S405 : N을 사용
S406 : index_N_minus1(N+1)==0 혹은 1?
S407 : N+1을 사용
S408 : index_N_minus1(N-1)==0 혹은 1?
S409 : N-1을 사용
S410 : N을 사용
S411 : 엔트리 번호(N)+=5
S412 : N, N+1, N-1번째의 index_N_minus1을 읽어냄
S413 : index_N_minus1(N)==3 혹은 2?
S414 : N을 사용
S415 : index_N_minus1(N+1)==3 혹은 2?
S416 : N+1을 사용
S417 : index_N_minus1(N-1)==3 혹은 2?
S418 : N-1을 사용
S419 : N을 사용
S441 : 비디오의 챕터 선두에 해당?
S442 : priority_flag=3
S443 : 비디오의 중요한 씬 체인지인가?
S444 : priority_flag=2
S445 : 비디오의 통상의 씬 체인지인가?
S446 : priority_flag=1
S447 : priority_flag=0
S448 : 모두 종료?
S449 : 자막의 챕터 선두에 해당?
S450 : priority_flag=3
S451 : 자막의 중요한 씬 체인지인가?
S452 : priority_flag=2
S453 : 자막의 통상의 씬 체인지인가?
S454 : priority_flag=1
S455 : priority_flag=0
S456 : 모두 종료?
<발명을 실시하기 위한 최량의 형태>
이하에 본 발명의 실시 형태를 설명하지만, 청구 범위에 기재된 구성 요건과, 발명의 실시 형태에서의 구체예와의 대응 관계를 예시하면, 다음과 같이 된다. 본 기재는, 청구 범위에 기재되어 있는 발명을 서포트하는 구체예가, 발명의 실시 형태에 기재되어 있는 것을 확인하기 위한 것이다. 따라서, 발명의 실시 형태 중에는 기재되어 있지만, 구성 요건에 대응하는 것으로서, 여기에는 기재되어 있지 않은 구체예가 있다고 하여도, 그것은, 그 구체예가, 그 구성 요건에 대응하는 것이 아닌 것을 의미하는 것은 아니다. 반대로, 구체예가 구성 요건에 대응하는 것으로서 여기에 기재되어 있다고 하여도, 그것은, 그 구체예가, 그 구성 요건 이외의 구성 요건에는 대응하지 않는 것을 의미하는 것도 아니다.
또한, 이 기재는, 발명의 실시 형태에 기재되어 있는 구체예에 대응하는 발 명이, 청구 범위에 모두 기재되어 있는 것을 의미하는 것은 아니다. 바꾸어 말하면, 이 기재는, 발명의 실시 형태에 기재되어 있는 구체예에 대응하는 발명으로서, 본 출원의 청구 범위에는 기재되어 있지 않은 발명의 존재, 즉, 장래, 분할 출원되거나, 보정에 의해 추가되는 발명의 존재를 부정하는 것은 아니다.
즉, 본 발명의 데이터 기록 장치는, 스트림 데이터의 엔트리 포인트를 인식하도록 구성된 인식부(예를 들면, 도 68의 플로우챠트에서의 S441, S443, S445, S449, S451, S453의 처리를 실행하는 도 65의 컨트롤러(446))와, 상기 인식부의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하도록 구성된 설정부(예를 들면, 도 68의 플로우챠트에서의 S442, S444, S446, S447, S450, S452, S454, S455의 처리를 실행하는 도 65의 컨트롤러(446))와, 상기 스트림 데이터와 함께, 상기 설정부에 의해 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하도록 구성된 기록부(예를 들면, 도 60의 디스크 드라이브(409))를 포함하는 것을 특징으로 한다.
본 발명의 데이터 기록 방법은, 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝(예를 들면, 도 68의 플로우챠트에서의 S441, S443, S445, S449, S451, S453의 처리)과, 상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝(예를 들면, 도 68의 플로우챠트에서의 S442, S444, S446, S447, S450, S452, S454, S455의 처리)과, 상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝을 포함하는 것을 특징으로 한다.
본 발명의 데이터 처리 장치는, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내도록 구성된 읽어내기부(예를 들면, 도 2A, 2B의 플레이어 제어 모듈(212))와, 상기 읽어내기부에 의해 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하도록 구성된 재생부(예를 들면, 도 1의 디스크 드라이브(102))를 포함하는 것을 특징으로 한다.
본 발명의 데이터 처리 방법은, 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝(예를 들면, 도 33의 스텝 S106의 처리)와, 상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝(예를 들면, 도 34의 스텝 S132의 처리)를 포함하는 것을 특징으로 한다.
또한, 프로그램 기록 매체 및 프로그램에 대해서는, 데이터 기록 방법과 마찬가지이므로, 그 설명은 생략한다.
이하, 도면을 참조하여, 본 발명의 실시 형태에 대해서 설명한다.
[하드웨어 구성]
도 1은, 본 발명을 적용한 디스크 재생 장치의 일 실시 형태의 하드웨어의 구성예를 도시하는 블록도이다.
도 1의 디스크 재생 장치는, 예를 들면, 디스크 플레이어나, 게임 장치, 카 네비게이션 시스템 그 밖에 적용할 수 있다.
도 1의 디스크 재생 장치에서, 디스크(101)는, 예를 들면, DVD 등의 광 디스크, 혹은 광 자기 디스크, 자기 디스크 등이며, 비디오 데이터나, 오디오 데이터, 자막 데이터 등의 콘텐츠 데이터, 또한, 콘텐츠 데이터를 재생하는 데에 필요한 데이터가 기록되어 있다.
또한, 디스크(101)에 기록되는 데이터에는, 필요에 따라, 컴퓨터가 실행 가능한 프로그램도 포함된다. 또한, 본 실시 형태에서는, 기록 매체로서, 디스크 형상의 기록 매체인 디스크(101)를 채용하지만, 그 밖에, 기록 매체로서는, 예를 들면, 반도체 메모리나, 테이프 형상의 기록 매체이어도 된다. 또한, 도 1의 디스크 재생 장치에는, 먼 쪽에 있는 디스크(101)로부터 읽어내어져 송신되어 오는 데이터를 입력할 수 있다. 즉, 디스크(101)로부터의 데이터의 읽어내기는, 디스크 재생 장치에 접속한 별도의 장치에 의해 행하고, 그 별도의 장치에 의해 읽어내어진 데이터를, 디스크 재생 장치에서 수신해서 처리할 수 있다. 또한, 디스크 재생 장치에서는, 디스크(101)에 기록된 데이터와 마찬가지의 데이터를 스토리지에 기억하고 있는 서버 등으로부터, 인터넷 등의 네트워크를 통하여, 데이터의 배신을 받아 처리하는 것도 가능하다. 또한, 디스크 재생 장치에서는, 서버 그 밖의 장치로부터의 데이터를 수신하고, 일단, 디스크(101)에 기록하고 나서, 그 디스크(101)에 기록된 데이터를 처리하는 것도 가능하다.
디스크 드라이브(102)에는, 디스크(101)가 착탈 가능하게 되어 있다. 디스크 드라이브(102)는, 도시하지 않은 인터페이스를 내장하고, 그 인터페이스를 통하여, 드라이브 인터페이스(114)에 접속되어 있다. 디스크 드라이브(102)는, 거기에 장착된 디스크(101)를 구동하고, 드라이브 인터페이스(114)로부터의 읽어내기 등의 명령에 따라, 디스크(101)로부터 데이터를 읽어내어, 드라이브 인터페이스(114)에 공급하는 등의 처리를 행한다.
버스(111)에는, CPU(Central Processing Unit)(112), 메모리(113), 드라이브 인터페이스(114), 입력 인터페이스(115), 비디오 디코더(116), 오디오 디코더(117), 비디오 출력 인터페이스(118), 오디오 출력 인터페이스(119)가 접속되어 있다.
CPU(112) 및 메모리(113)는, 컴퓨터 시스템을 형성하고 있다. 즉, CPU(112)는, 메모리(113)에 기억된 프로그램인, 후술하는 소프트웨어 모듈군을 실행하고, 디스크 재생 장치 전체를 제어함과 함께, 후술하는 각종 처리를 행한다. 메모리(113)는, CPU(112)가 실행하는 소프트웨어 모듈군을 기억하고 있다. 또한, 메모리(113)는, CPU(112)의 동작상 필요한 데이터를 일시 기억한다. 또한, 메모리(113)는, 불휘발성 메모리만, 또는 휘발성 메모리와 불휘발성 메모리의 조합으로 구성하는 것이 가능하다. 또한, 도 1의 디스크 재생 장치에, 하드 디스크를 설치하고, 그 하드 디스크에, CPU(112)가 실행하는 소프트웨어 모듈군을 기록(인스톨)해 두는 경우에는, 메모리(113)는, 휘발성 메모리만으로 구성하는 것이 가능하다.
여기서, CPU(112)가 실행하는 프로그램(소프트웨어 모듈군)은, 디스크 재생 장치에 내장되어 있는 기록 매체로서의 메모리(113)에 미리 저장해 둘 수 있다.
혹은 또한, 프로그램은, 디스크(101), 또한, 디스크(101) 이외의 플렉시블 디스크, CD-ROM(Compact Disc Read Only Memory), MO(Magneto Optical) 디스 크, 자기 디스크, 메모리 카드 등의 리무버블 기록 매체에, 일시적 혹은 영속적으로 저장해 둘 수 있다. 이와 같은 리무버블 기록 매체는, 소위 패키지 소프트웨어로서 제공할 수 있다.
또한, 프로그램은, 메모리(113)에 미리 기억시켜 두는 것, 혹은, 전술한 바와 같은 리무버블 기록 매체로부터 디스크 재생 장치에 인스톨할 수 있다. 또한, 프로그램은, 다운로드 사이트로부터, 디지털 위성 방송용의 인공 위성을 통하여, 디스크 재생 장치에 무선으로 전송하거나, LAN(Local Area Network), 인터넷 등의 네트워크를 통하여, 디스크 재생 장치에 유선으로 전송하고, 디스크 재생 장치에서는, 그와 같이 하여 전송되어 오는 프로그램을, 입력 인터페이스(115)에서 수신하고, 내장하는 메모리(113)에 인스톨할 수 있다.
또한, 프로그램은, 하나의 CPU에 의해 처리되는 것이어도 되고, 복수의 CPU에 의해 분산 처리되는 것이어도 된다.
드라이브 인터페이스(114)는, CPU(112)의 제어 하에서, 디스크 드라이브(102)를 제어하고, 이에 의해, 디스크 드라이브(102)가 디스크(101)로부터 읽어낸 데이터를, 버스(111)를 통하여, CPU(112)나, 메모리(113), 비디오 디코더(116), 오디오 디코더(117) 등에 공급한다.
입력 인터페이스(115)는, 도시하지 않은 키(버튼)나, 리모콘(리모트 컨트롤 커맨더)이 유저에 의해 조작됨으로써 공급되는 신호를 수신하고, 버스(111)를 통하여, CPU(112)에 공급한다. 또한, 입력 인터페이스(115)는, 그 밖에, 예를 들면, 모뎀(ADSL(Asymmetric Digital Subscriber Line) 모뎀을 포함)이나, NIC(Network Interface Card) 등의 통신 인터페이스로서도 기능한다.
비디오 디코더(116)는, 디스크 드라이브(102)에 의해 디스크(101)로부터 읽어내어지고, 드라이브 인터페이스(114) 및 버스(111)를 통해서 공급되는 부호화 비디오 데이터를 디코드하고, 그 결과 얻어지는 비디오 데이터를, 버스(111)를 통하여, CPU(112)나 비디오 출력 인터페이스(118)에 공급한다.
 오디오 디코더(117)은, 디스크 드라이브(102)에 의해 디스크(101)로부터 읽어내어지고, 드라이브 인터페이스(114) 및 버스(111)를 통해서 공급되는 부호화 오디오 데이터를 디코드하고, 그 결과 얻어지는 오디오 데이터를, 버스(111)를 통하여, CPU(112)나 오디오 출력 인터페이스(119)에 공급한다.
비디오 출력 인터페이스(118)는, 버스(111)를 통해서 공급되는 비디오 데이터에 필요한 처리를 실시하고, 비디오 출력 단자(120)로부터 출력한다. 오디오 출력 인터페이스(119)는, 버스(111)를 통해서 공급되는 오디오 데이터에 필요한 처리를 실시하고, 오디오 출력 단자(121)로부터 출력한다.
비디오 출력 단자(120)는, 도시하지 않은 CRT(Cathode Ray Tube)나, 액정 패널 등의 비디오 출력 장치에 접속되어 있고, 따라서, 비디오 출력 단자(120)로부터 출력되는 비디오 데이터는, 비디오 출력 장치에 공급되어 표시된다. 오디오 출력 단자(121)는, 도시하지 않은 스피커나 앰프 등의 오디오 출력 장치에 접속되어 있고, 따라서, 오디오 출력 단자(121)로부터 출력되는 오디오 데이터는, 오디오 출력 장치에 공급되어 출력된다.
또한, 디스크 재생 장치로부터, 비디오 출력 장치와 오디오 출력 장치에의 비디오 데이터와 오디오 데이터의 공급은, 유선 또는 무선 중 어느 것에 의해서도 행하는 것이 가능하다.
[소프트웨어 모듈군의 구성]
다음으로, 도 2A 및 도 2B는, 도 1의 CPU(112)가 실행하는 소프트웨어 모듈군의 구성예를 도시하고 있다.
CPU(112)가 실행하는 소프트웨어 모듈군은, 오퍼레이팅 시스템(OS)(201)과, 어플리케이션 프로그램으로서의 비디오 콘텐츠 재생 프로그램(210)으로 대별된다.
「오퍼레이팅 시스템(201)」
오퍼레이팅 시스템(201)은, 디스크 재생 장치의 전원이 투입되면 최초로 기동하여, 초기 설정 등의 필요한 처리를 행하고, 어플리케이션 프로그램인 비디오 콘텐츠 재생 프로그램(210)을 호출한다.
오퍼레이팅 시스템(201)은, 비디오 콘텐츠 재생 프로그램(210)에 대하여, 파일의 읽어내기 등의 인프라(인프라스트럭쳐(infrastructure))적인 서비스를 제공한다. 즉, 오퍼레이팅 시스템(201)은, 예를 들면, 파일의 읽어내기에 관해서는, 비디오 콘텐츠 재생 프로그램(210)으로부터의 파일의 읽어내기의 리퀘스트에 대하여, 드라이브 인터페이스(114)를 통해서 디스크 드라이브(102)를 조작하여, 디스크(101)의 데이터를 읽어내고, 비디오 콘텐츠 재생 프로그램(210)에 건네주는 서비스를 제공한다. 또한, 오퍼레이팅 시스템(201)은, 파일 시스템의 해석 등도 행한다.
또한, 오퍼레이팅 시스템(201)은, 멀티태스크 처리의 기능을 구비하고 있어, 복수의 소프트웨어 모듈을, 시분할로 동작시킬 수 있다. 즉, 비디오 콘텐츠 재생 프로그램(210)은, 몇개의 소프트웨어 모듈로 구성되지만, 각 소프트웨어 모듈은, 병렬로 동작할 수 있다.
「비디오 콘텐츠 재생 프로그램(210)」
비디오 콘텐츠 재생 프로그램(210)은, 스크립트 제어 모듈(211), 플레이어 제어 모듈(212), 콘텐츠 데이터 공급 모듈(213), 디코드 제어 모듈(214), 버퍼 제어 모듈(215), 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218), 그래픽 처리 모듈(219), 비디오 출력 모듈(220), 및 오디오 출력 모듈(221)로 구성되어 있다.
비디오 콘텐츠 재생 프로그램(210)은, 디스크(101)의 재생 시에 중심적인 역할을 하는 소프트웨어이며, 디스크(101)가 디스크 드라이브(102)에 장착(삽입)되면, 그 디스크(101)가, 콘텐츠가 기록된 후술하는 포맷의 디스크인지를 확인한다. 또한, 비디오 콘텐츠 재생 프로그램(210)은, 디스크(101)로부터, 후술하는 스크립트 파일을 읽어내어 실행하고, 또한, 디스크(101)로부터, 그 디스크(101)에 기록된 콘텐츠를 재생하는 데에 필요한 메타데이터의 파일을 읽어내고, 그 메타데이터에 기초하여, 콘텐츠의 재생을 제어한다.
 이하, 도 2A 및 도 2B의 비디오 콘텐츠 재생 프로그램(210)을 구성하는 소프트웨어 모듈에 대해서 설명한다. 또한, 도 2A 및 도 2B에서는, 원칙적으로, 실선의 화살표는, 콘텐츠의 데이터를 나타내고, 점선의 화살표는, 제어의 데이터를 나타낸다.
「스크립트 제어 모듈(211)」
스크립트 제어 모듈(211)은, 디스크(101)에 기록된 스크립트 파일에 기술되어 있는 스크립트 프로그램(스크립트)을 해석하여 실행한다. 스크립트 프로그램에서는, 예를 들면, 「그래픽 처리 모듈(219)을 조작하고, 메뉴 등의 화상을 작성해서 표시한다」, 「리모콘 등의 UI(User Interface)로부터의 신호에 따라 메뉴의 표시를 변경한다(예를 들면, 메뉴 상의 커서를 이동하는 등)」, 「플레이어 제어 모듈(212)을 제어한다」 등의 동작을 기술할 수 있다.
「플레이어 제어 모듈(212)」
플레이어 제어 모듈(212)은, 디스크(101)에 기록되어 있는 메타데이터 등을 참조하여, 콘텐츠의 재생에 관한 제어를 행한다. 즉, 플레이어 제어 모듈(212)은, 예를 들면, 디스크(101)에 기록되어 있는, 후술하는 PlayList()나 Clip()을 해석하고, 그 해석 결과에 따라, 콘텐츠 데이터 공급 모듈(213)이나, 디코드 제어 모듈(214), 버퍼 제어 모듈(215)을 제어한다. 또한, 플레이어 제어 모듈(212)은, 스크립트 제어 모듈(211)이나 입력 인터페이스(115)로부터의 지시에 따라, 재생 대상의 스트림을 절환하는, 후술하는 스트림 절환 등의 제어를 행한다. 또한, 플레이어 제어 모듈(212)은, 디코드 제어 모듈(214)로부터 시각을 취득하고, 시각 표시나, 후술하는 마크(Mark())의 처리 등을 행한다.
「콘텐츠 데이터 공급 모듈(213)」
콘텐츠 데이터 공급 모듈(213)은, 플레이어 제어 모듈(212)의 제어에 따라, 혹은, 버퍼 제어 모듈(215)에 축적된 데이터의 양에 기초하여, 디스크(101)로부터 의 콘텐츠의 데이터나 메타데이터 등의 읽어내기를, 오퍼레이팅 시스템(201)에 요구한다.
또한, 오퍼레이팅 시스템(201)이, 콘텐츠 데이터 공급 모듈(213)로부터의 요구에 따라 디스크(101)로부터 읽어낸 메타데이터 등은, 필요한 모듈에 공급된다. 또한, 오퍼레이팅 시스템(201)이, 콘텐츠 데이터 공급 모듈(213)로부터의 요구에 따라 디스크(101)로부터 읽어낸 콘텐츠의 데이터는, 버퍼 제어 모듈(215)에 공급된다.
「디코드 제어 모듈(214)」
디코드 제어 모듈(214)은, 플레이어 제어 모듈(212)로부터의 제어에 따라, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 및 자막 디코더 제어 모듈(218)의 동작을 제어한다. 또한, 디코드 제어 모듈(214)은, 시각을 계시하는 계시부(214A)를 내장하고, 비디오 디코더 제어 모듈(216)의 제어에 의해 출력되는 비디오 데이터의 출력과, 그 비디오 데이터와 동기하여 출력될 데이터(출력 데이터)의 출력, 즉, 여기서는, 오디오 디코더 제어 모듈(217)의 제어에 의해 출력되는 오디오 데이터의 출력과의 동기를 관리한다.
계시부(214A)는, 외부로부터 공급된 기준 클럭 혹은, 디코더 등에 동기하는 내부 클럭을 계수함으로써 자율적으로 계시하도록 하여도 된다.
그러나, 도 2A 및 도 2B에서 도시되는 각종 모듈을 제어함으로써 실현되는, 소프트웨어 베이스의 디코더에서는, 이들 처리와는 별도로, 독립된 계시 처리를 소프트웨어에 의해 실행시키는 것은, CPU(112)의 처리 부하를 증대시키게 된다. 이 때문에, 계시부(214A)는, 디코더로부터의 비디오 데이터의 출력에 따라 시각을 갱신한다고 하는 방식이 요구되고 있다.
도 3은, 계시부(214A)가 독립된 시계를 나타내는 경우의 시각과 실제의 시간 경과의 관계를 도면에 도시하고 있다. 도 3에서는, 계시부(214A)는 90㎑의 클럭에서 카운트 업하므로, 시각 0으로부터 우상승의 직선으로 증가하고, 시각 33.3밀리초의 순간에 시계가 나타내는 시각은 3003으로 되어 있다.
도 4는, 계시부(214A)가 비디오 디코더의 비디오 데이터의 출력에 따라 시각을 갱신하는 시계를 나타내는 경우의 시각의 일예를 도시하고 있다. 도 4의 경우, 시각은, 예를 들면, 33.3밀리초가 경과하면 시계의 출력 시각이 3003으로 갱신되고, 83.3밀리초가 경과하면 출력 시각은 7507로 갱신되고, 또한, 116밀리초가 경과하면 출력 시각은 10510으로 갱신된다. 여기서, 1프레임의 출력 시간은, 16.66밀리초이다.
또한, 도 3에서는, 실제로는 1/90㎑의 분해능으로 나타내어지는 계단 형상으로 시각이 추이하게 되지만, 도 4와의 대비를 위해서, 도 3에서는 직선으로 표현되어 있다. 또한, 이후에서는, 계시부(214A)는, 도 4를 참조하여 설명한, 비디오 데이터의 출력에 따라 시각을 갱신한다고 하는 방식인 것으로 하여 설명한다.
「버퍼 제어 모듈(215)」
버퍼 제어 모듈(215)은, 도 1의 메모리(113)의 기억 영역의 일부인 버퍼(215A)를 내장하고 있고, 그 버퍼(215A)에, 콘텐츠 데이터 공급 모듈(213)이 오퍼레이팅 시스템(201)에 요구를 행함으로써 디스크(101)로부터 읽어내어진 콘텐츠 의 데이터를 일시 기억한다.
또한, 버퍼 제어 모듈(215)은, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 또는 자막 디코더 제어 모듈(218)의 요구에 따라, 버퍼(215A)에 기억된 데이터를, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 또는 자막 디코더 제어 모듈(218)에 공급한다.
즉, 버퍼 제어 모듈(215)은, 후술하는 도 5에서 설명하는 비디오 읽어내기 기능부(233), 오디오 읽어내기 기능부(234), 및 자막 읽어내기 기능부(235)를 내장하고 있다. 그리고, 버퍼 제어 모듈(215)은, 비디오 디코더 제어 모듈(216)로부터의 데이터의 요구를, 비디오 읽어내기 기능부(233)에서 처리함으로써, 버퍼(215A)에 기억된 데이터를, 비디오 디코더 제어 모듈(216)에 공급한다. 마찬가지로, 버퍼 제어 모듈(215)은, 오디오 디코더 제어 모듈(217)로부터의 데이터의 요구를, 오디오 읽어내기 기능부(234)에서 처리함으로써, 버퍼(215A)에 기억된 데이터를, 오디오 디코더 제어 모듈(217)에 공급함과 함께, 자막 디코더 제어 모듈(218)로부터의 데이터의 요구를, 자막 읽어내기 기능부(235)에서 처리함으로써, 버퍼(215A)에 기억된 데이터를, 자막 디코더 제어 모듈(218)에 공급한다.
「비디오 디코더 제어 모듈(216)」
비디오 디코더 제어 모듈(216)은, 버퍼 제어 모듈(215) 내의 비디오 읽어내기 기능부(233)(도 5)를 조작하여, 비디오 데이터를 부호화한 데이터(비디오 부호화 데이터)를, 비디오 액세스 유닛 단위로, 버퍼 제어 모듈(215)의 버퍼(215A)로부터 읽어내어, 도 1의 비디오 디코더(116)에 공급한다. 또한, 비디오 디코더 제어 모듈(216)은, 비디오 디코더(116)를 제어하여, 비디오 액세스 유닛 단위의 데이터를 디코드시킨다. 또한, 비디오 디코더 제어 모듈(216)은, 비디오 디코더(116)에서의 디코드의 결과 얻어지는 비디오 데이터를, 그래픽 처리 모듈(219)에 공급한다.
여기서, 비디오 액세스 유닛이란, 예를 들면, 비디오 데이터의 1픽쳐(1프레임 또는 1필드)분이다.
「오디오 디코더 제어 모듈(217)」
오디오 디코더 제어 모듈(217)은, 버퍼 제어 모듈(215) 내의 오디오 읽어내기 기능부(234)(도 5)를 조작하여, 오디오 데이터를 부호화한 데이터(오디오 부호화 데이터)를, 오디오 액세스 유닛 단위로, 버퍼 제어 모듈(215)의 버퍼(215A)로부터 읽어내어, 도 1의 오디오 디코더(117)에 공급한다. 또한, 오디오 디코더 제어 모듈(217)은, 오디오 디코더(117)를 제어하여, 오디오 액세스 유닛 단위의 데이터를 디코드시킨다. 또한, 오디오 디코더 제어 모듈(217)은, 오디오 디코더(117)에서의 디코드의 결과 얻어지는 오디오 데이터를, 오디오 출력 모듈(221)에 공급한다.
여기서, 오디오 액세스 유닛이란, 오디오 데이터의 소정의 데이터량분(예를 들면, 1픽쳐에 동기하여 출력되는 분)이다. 본 실시 형태에서는, 오디오 액세스 유닛은, 예를 들면, 기지의 고정 길이인 것으로 한다.
「자막 디코더 제어 모듈(218)」
자막 디코더 제어 모듈(218)은, 버퍼 제어 모듈(215) 내의 자막 읽어내기 기 능부(235)(도 5)를 조작하여, 자막 데이터를 부호화한 데이터(자막 부호화 데이터)를, 자막 액세스 유닛 단위로, 버퍼 제어 모듈(215)의 버퍼(215A)로부터 읽어낸다. 또한, 자막 디코더 제어 모듈(218)은, 내부에, 도시하지 않은 자막 디코드 소프트웨어를 구비하고 있고, 버퍼(215A)로부터 읽어낸 데이터를 디코드한다. 또한, 자막 디코더 제어 모듈(218)은, 그 디코드의 결과 얻어지는 자막 데이터(자막의 화상 데이터)를, 그래픽 처리 모듈(219)에 공급한다.
여기서, 자막 액세스 유닛이란, 자막 데이터의 소정의 데이터량분(예를 들면, 1픽쳐에 동기하여 출력되는 분)이다. 본 실시 형태에서는, 자막 액세스 유닛의 사이즈는, 예를 들면, 그 자막 액세스 유닛의 선두에 기술되어 있는 것으로 한다.
「그래픽 처리 모듈(219)」
그래픽 처리 모듈(219)은, 플레이어 제어 모듈(212)의 지시에 따라, 자막 디코더 제어 모듈(218)로부터의 자막 데이터의 확대나 축소를 행하여, 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터에 자막 데이터를 서로 겹치게 한다. 또한, 그래픽 처리 모듈(219)은, 자막 데이터와 서로 겹치게 한 후의 비디오 데이터의 화상 틀을, 도 1의 비디오 출력 단자(120)에 접속된 비디오 출력 장치의 표시 화면에 맞추기 위한 확대 또는 축소 등을 행하고, 그 결과 얻어지는 비디오 데이터를, 비디오 출력 모듈(220)에 출력한다.
또한, 그래픽 처리 모듈(219)은, 스크립트 제어 모듈(211)이나 플레이어 제어 모듈(212)의 지시에 따라, 메뉴나 메시지 등을 생성하고, 출력 비디오 데이터에 오버레이한다.
또한, 그래픽 처리 모듈(219)은, 도 1의 비디오 출력 단자(120)에 접속된 비디오 출력 장치의 어스펙트비와, 디스크(101)에 기록된 비디오 데이터의 어스펙트비를 지시하는 정보 등에 기초하여, 비디오 출력 모듈(220)에 출력하는 비디오 데이터의 어스펙트비의 변환을 행한다.
즉, 예를 들면, 비디오 출력 장치의 어스펙트비가 16:9인 경우에서, 비디오 데이터의 어스펙트비를 지시하는 정보가 4:3의 어스펙트비를 나타내고 있을 때에는, 그래픽 처리 모듈(219)은, 비디오 출력 모듈(220)에 출력하는 비디오 데이터를, 가로 방향(수평 방향)으로 축소시키는 스퀴즈 처리를 하고, 좌우에 흑색을 표시시키는 데이터를 넣어 출력한다. 또한, 예를 들면, 비디오 출력 장치의 어스펙트비가 4:3인 경우에서, 비디오 데이터의 어스펙트비를 지시하는 정보가 16:9의 어스펙트비를 나타내고 있을 때에는, 그래픽 처리 모듈(219)은, 비디오 출력 모듈(220)에 출력하는 비디오 데이터를, 세로 방향(수직 방향)으로 스퀴즈 처리하고, 상하에 흑색을 표시시키는 데이터를 넣어 출력한다.
또한, 비디오 출력 장치의 어스펙트비와, 비디오 데이터의 어스펙트비를 지시하는 정보가 나타내는 어스펙트비가, 모두, 4:3이거나 16:9로, 동일한 경우, 그래픽 처리 모듈(219)은, 비디오 출력 모듈(220)에 출력하는 비디오 데이터를, 스퀴즈 처리하지 않고, 그대로 출력한다.
그 밖에, 그래픽 처리 모듈(219)은, 예를 들면, 플레이어 제어 모듈(212)로부터의 요구에 따라, 현재 처리 중인 비디오 데이터를 캡쳐한다. 또한, 그래픽 처 리 모듈(219)은, 그 캡쳐한 비디오 데이터를 기억하거나, 혹은, 플레이어 제어 모듈(212)에 공급한다.
「비디오 출력 모듈(220)」
비디오 출력 모듈(220)은, 도 1의 메모리(113)의 일부를 배타적으로 점유하여 FIFO(First In First Out)의 버퍼(220A)로서 사용하여, 그래픽 처리 모듈(219)로부터의 비디오 데이터를 일시적으로 기억하고, 또한, 그 버퍼(220A)에 기억된 비디오 데이터를 적절히 읽어내어, 비디오 출력 단자(120)(도 1)에 출력한다.
「오디오 출력 모듈(221)」
오디오 출력 모듈(221)은, 도 1의 메모리(113)의 일부를 배타적으로 점유해서 FIFO의 버퍼(221A)로서 사용하여, 오디오 디코더 제어 모듈(217)(오디오 디코더(117))로부터의 오디오 데이터를 일시적으로 기억하고, 또한, 그 버퍼(221A)에 기억된 오디오 데이터를 적절히 읽어내어, 오디오 출력 단자(121)(도 1)에 출력한다.
또한, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터가, 좌 채널이 「주음성」의 오디오 데이터이고, 우 채널의 「부음성」의 오디오 데이터인 듀얼(Dual)(2개 국어) 모드의 오디오 데이터인 경우, 미리 지정된 음성 출력 모드에 따라, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를, 오디오 출력 단자(121)에 출력한다.
즉, 음성 출력 모드로서, 예를 들면, 「주음성」이 지정되어 있을 때에는, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터 중 좌 채널의 오디오 데이터를, 우 채널의 오디오 데이터로서 카피하고, 그 좌 채널과 우 채널의 오디오 데이터(「주음성」의 오디오 데이터)를, 오디오 출력 단자(121)에 출력한다. 또한, 음성 출력 모드로서, 「부음성」이 지정되어 있을 때에는, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터 중 우 채널의 오디오 데이터를, 좌 채널의 오디오 데이터로서 카피하고, 그 좌 채널과 우 채널의 오디오 데이터(「부음성」의 오디오 데이터)를, 오디오 출력 단자(121)에 출력한다. 또한, 음성 출력 모드로서, 「주·부」가 지정되어 있을 때에는, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를, 그대로, 오디오 출력 단자(121)에 출력한다.
또한, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터가, 스테레오(Stereo) 모드의 오디오 데이터인 경우, 오디오 출력 모듈(221)은, 음성 출력 모드의 지정에 관계없이, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를, 그대로, 오디오 출력 단자(121)에 출력한다.
여기서, 음성 출력 모드의 지정은, 예를 들면, 비디오 콘텐츠 재생 프로그램(210)이 생성하는 메뉴가 표시된 화면 등에서, 유저가 리모콘 등을 조작함으로써 대화적으로 행할 수 있다.
[버퍼 제어 모듈(215)의 구성]
다음으로, 도 5는, 도 2A 및 도 2B의 버퍼 제어 모듈(215)의 구성예를 도시하고 있다.
버퍼 제어 모듈(215)은, 도 1의 메모리(113)의 일부를, 버퍼(215A)로서 배타 적으로 사용하여, 그 버퍼(215A)에, 디스크(101)로부터 읽어내어진 데이터를 일시 기억시킨다. 또한, 버퍼 제어 모듈(215)은, 버퍼(215A)에 기억된 데이터를 읽어내어, 도 2A 및 도 2B의 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 또는 자막 디코더 제어 모듈(218)에 공급한다.
즉, 버퍼 제어 모듈(215)은, 버퍼(215A) 외에, 메모리(113)의 일부인 데이터 선두 포인터 기억부(231), 및 데이터 써넣기 포인터 기억부(232)를 가짐과 함께, 내부 모듈로서, 비디오 읽어내기 기능부(233), 오디오 읽어내기 기능부(234), 자막 읽어내기 기능부(235)를 갖는다.
버퍼(215A)는, 예를 들면, 링 버퍼로서, 디스크(101)로부터 읽어내어진 데이터를 순차적으로 기억하고, 그 기억 용량분의 데이터를 기억한 후에는, 가장 오래된 데이터에 덮어쓰기하는 형태로, 최신의 데이터를, 소위 무한 루프 형상으로 기억해 간다.
데이터 선두 포인터 기억부(231)는, 버퍼(215A)에 기억된 데이터 중, 또한, 버퍼(215A)로부터 읽어내어지지 않은 가장 오래된 데이터가 기억되어 있는 위치(어드레스)를 가리키는 데이터 선두 포인터를 기억한다.
데이터 써넣기 포인터 기억부(232)는, 디스크(101)로부터 읽어내어진 최신의 데이터가 써넣어지는 버퍼(215A)의 위치(어드레스)를 가리키는 써넣기 포인터를 기억한다.
여기서, 데이터 써넣기 포인터가 가리키는 위치는, 버퍼(215A)에, 디스크(101)로부터 읽어내어진 데이터가 기억될 때마다, 도면에서의, 오른쪽으로 도는 방향(시계 방향)으로 갱신되어 가고, 데이터 선두 포인터가 가리키는 위치는, 버퍼(215A)로부터의 데이터의 읽어내기에 따라, 도면에서, 오른쪽으로 도는 방향으로 갱신되어 간다. 따라서, 버퍼(215A)에 기억된 데이터 중, 소위 유효한 데이터는, 데이터 선두 포인터가 가리키는 위치부터, 오른쪽으로 도는 방향으로, 데이터 써넣기 포인터가 가리키는 위치까지 기억되어 있는 데이터이다.
비디오 읽어내기 기능부(233)는, 도 2A 및 도 2B의 비디오 디코더 제어 모듈(216)로부터의 요구에 따라, 버퍼(215A)로부터 비디오 스트림(비디오 데이터에 관한 엘리멘터리 스트림)을 읽어내어, 비디오 디코더 제어 모듈(216)에 공급한다. 오디오 읽어내기 기능부(234)도, 도 2A 및 도 2B의 오디오 디코더 제어 모듈(217)로부터의 요구에 따라, 버퍼(215A)로부터 오디오 스트림(오디오 데이터에 관한 엘리멘터리 스트림)을 읽어내어, 오디오 디코더 제어 모듈(217)에 공급한다. 자막 읽어내기 기능부(235)도, 도 2A 및 도 2B의 자막 디코더 제어 모듈(218)로부터의 요구에 따라, 버퍼(215A)로부터 자막 스트림(자막 데이터에 관한 엘리멘터리 스트림)을 읽어내어, 자막 디코더 제어 모듈(218)에 공급한다.
즉, 디스크(101)에는, 예를 들면, MPEG(Moving Picture Experts Group)2의 규격에 준거한 프로그램 스트림(MPEG2-System Program Stream)이 기록되어 있고, 버퍼(215A)에는, 디스크(101)로부터 읽어내어진 프로그램 스트림이 기억된다. 이 프로그램 스트림은, 비디오 스트림이나, 오디오 스트림, 자막 스트림 등의 1 이상의 엘리멘터리 스트림이 시분할 다중되어 있다. 비디오 읽어내기 기능부(233)는, 프로그램 스트림의 디멀티플렉스의 기능을 가지며, 버퍼(215A)에 기억된 프로 그램 스트림으로부터, 비디오 스트림을 분리하여 읽어낸다.
마찬가지로, 오디오 읽어내기 기능부(234)도, 프로그램 스트림의 디멀티플렉스의 기능을 가지며, 버퍼(215A)에 기억된 프로그램 스트림으로부터, 오디오 스트림을 분리하여 읽어낸다. 자막 읽어내기 기능부(235)도, 프로그램 스트림의 디멀티플렉스의 기능을 가지며, 버퍼(215A)에 기억된 프로그램 스트림으로부터, 자막 스트림을 분리하여 읽어낸다.
여기서, 비디오 읽어내기 기능부(233)는, 도 1의 메모리(113)의 일부인 비디오 읽어내기 포인터 기억부(241), stream_id 레지스터(242), 및 au_information() 레지스터(243)를 갖고 있다.
비디오 읽어내기 포인터 기억부(241)는, 버퍼(215A)의, 비디오 스트림이 기억된 위치(어드레스)를 가리키는 비디오 읽어내기 포인터를 기억하고, 비디오 읽어내기 기능부(233)는, 버퍼(215A)의, 비디오 읽어내기 포인터가 가리키는 위치에 기억되어 있는 데이터를, 비디오 스트림으로서 읽어낸다. stream_id 레지스터(242)는, 버퍼(215A)에 기억된 프로그램 스트림을 해석하고, 그 프로그램 스트림 중으로부터 읽어내는 비디오 스트림을 특정하기 위한 후술하는 stream_id를 기억한다. au_information() 레지스터(243)는, 버퍼(215A)로부터 비디오 스트림을 읽어내기 위해서 필요한 데이터인 후술하는 au_information()을 기억한다.
오디오 읽어내기 기능부(234)는, 도 1의 메모리(113)의 일부인 오디오 읽어내기 포인터 기억부(251), stream_id 레지스터(252), 및 private_stream_id 레지스터(253)를 갖고 있다.
오디오 읽어내기 포인터 기억부(251)는, 버퍼(215A)의, 오디오 스트림이 기억된 위치(어드레스)를 가리키는 오디오 읽어내기 포인터를 기억하고, 오디오 읽어내기 기능부(234)는, 버퍼(215A)의, 오디오 읽어내기 포인터가 가리키는 위치에 기억되어 있는 데이터를, 오디오 스트림으로서 읽어낸다. stream_id 레지스터(252)와 private_stream_id 레지스터(253)는, 버퍼(215A)에 기억된 프로그램 스트림을 해석하고, 그 프로그램 스트림 중으로부터 읽어내는 오디오 스트림을 식별하기 위한 후술하는 stream_id와 private_stream_id를, 각각 기억한다.
자막 읽어내기 기능부(235)는, 도 1의 메모리(113)의 일부인 자막 읽어내기 기능 플래그 기억부(261), 자막 읽어내기 포인터 기억부(262), stream_id 레지스터(263), 및 private_stream_id 레지스터(264)를 갖고 있다.
자막 읽어내기 기능 플래그 기억부(261)는, 자막 읽어내기 기능 플래그를 기억한다. 자막 읽어내기 기능 플래그 기억부(261)에 기억된 자막 읽어내기 기능 플래그가, 예를 들면 0인 경우, 자막 읽어내기 기능부(235)는 기능 동작하지 않고, 자막 읽어내기 기능 플래그 기억부(261)에 기억된 자막 읽어내기 기능 플래그가, 예를 들면 1인 경우, 자막 읽어내기 기능부(235)는 기능한다.
자막 읽어내기 포인터 기억부(262)는, 버퍼(215A)의, 자막 스트림이 기억된 위치(어드레스)를 가리키는 자막 읽어내기 포인터를 기억하고, 자막 읽어내기 기능부(235)는, 버퍼(215A)의, 자막 읽어내기 포인터가 가리키는 위치에 기억되어 있는 데이터를, 자막 스트림으로서 읽어낸다. stream_id 레지스터(263)와 private_stream_id 레지스터(264)는, 버퍼(215A)에 기억된 프로그램 스트림을 해석 하고, 그 프로그램 스트림 중으로부터 읽어내는 자막 스트림을 식별하기 위한 후술하는 stream_id와 private_stream_id를, 각각 기억한다.
[디스크(101)에 기록된 데이터의 데이터 포맷의 설명]
다음으로, 디스크(101)에 기록된 데이터의 데이터 포맷에 대해서 설명한다.
도 6은, 디스크(101)의 디렉토리 구조를 모식적으로 도시하고 있다.
디스크(101)의 파일 시스템으로서는, 예를 들면, ISO(International Organization for Standardization)-9660이나, UDF(Universal Disk Format: http://www.osta.org/specs/) 등에서 규정된 파일 시스템이 이용되고 있고, 디스크(101)에 기록된 데이터의 파일은 디렉토리 구조에 의해 계층적으로 관리되고 있다. 여기서, 파일 시스템은, 전술한 파일 시스템에 한정되는 것은 아니다.
도 6에서는, 파일 시스템의 기점을 나타내는 루트(root) 디렉토리에, "VIDEO" 디렉토리가 놓여지고, "VIDEO" 디렉토리에는, "CLIP" 디렉토리와, "STREAM" 디렉토리의 2개의 디렉토리가 놓여져 있다.
"VIDEO" 디렉토리에는, "CLIP" 디렉토리와 "STREAM" 디렉토리의 2개의 디렉토리 외에, "SCRIPT.DAT" 파일과, "PLAYLIST.DAT" 파일의 2개의 데이터 파일이 놓여져 있다.
"SCRIPT.DAT" 파일은, 스크립트 프로그램이 기술된 스크립트 파일이다. 즉, "SCRIPT.DAT" 파일에는, 디스크(101)의 재생 형태를 인터랙티브한 것으로 하기 위해서 사용하는 스크립트 프로그램이 기술되어 있다. 이 "SCRIPT.DAT" 파일에 기술된 스크립트 프로그램은, 도 2A 및 도 2B의 스크립트 제어 모듈(211)에 의해 해석, 실행된다.
"PLAYLIST.DAT" 파일에는, 디스크(101)에 기록된 비디오 데이터 등의 콘텐츠의 재생 수순이 기술된 플레이 리스트(후술하는 도 7의 PlayList())가 1 이상 저장되어 있다.
"CLIP" 디렉토리에는, 1 이상의 클립 정보 파일이 놓여지고, "STREAM" 디렉토리에는, 1 이상의 클립 스트림 파일이 놓여진다. 즉, 도 6에서는, "CLIP" 디렉토리에는, 3개의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"가 놓여져 있고, "STREAM" 디렉토리에는, 3개의 클립 스트림 파일 "00001.PS", "00002.PS", "00003.PS"가 놓여져 있다.
클립 스트림 파일에는, 비디오 데이터, 오디오 데이터, 자막 데이터 등의 데이터를 압축, 부호화하여 얻어지는 1 이상의 엘리멘터리 스트림을 시분할 다중화한 프로그램 스트림이 저장되어 있다.
클립 정보 파일에는, 대응하는 클립 스트림 파일의 성질 등의, 클립 스트림에 관한 메타데이터가 기술되어 있다.
즉, 클립 스트림 파일과 클립 정보 파일은, 일대일로 대응하고 있다. 도 6에서는, 클립 스트림 파일에는, 5문자의 숫자+피리어드+"PS"라고 하는 명명 규칙에 따라, 파일명이 붙여져 있고, 클립 정보 파일에는, 대응하는 클립 스트림 파일과 동일한 5문자의 숫자+피리어드+"CLP"이라고 하는 명명 규칙에 따라, 파일명이 붙여져 있다.
따라서, 파일이, 클립 스트림 파일 또는 클립 정보 파일 중 어느 것인지는, 파일명의 확장자(피리어드보다 우측의 부분)에 의해 식별할 수 있고, 또한, 대응하는 클립 스트림 파일과 클립 정보 파일은, 파일명의 확장자 이외의 부분(피리어드로부터 좌측의 부분)이 일치하는지의 여부에 의해 식별할 수 있다.
이하, 디스크(101)에 기록된 각 파일의 상세에 대해서 설명한다.
「PLAYLIST.DAT 」
도 7은, 도 6의 "VIDEO" 디렉토리 아래의 "PLAYLIST.DAT" 파일의 내부 구조(신택스(syntax))를 도시하고 있다.
여기서, 도 7에서, "신택스(Syntax)"의 란의 기재가 데이터 구조를 나타내고, "비트수(No. of bits)"의 란의 기재는, 대응하는 행의 "신택스"의 란의 데이터의 비트 길이를 나타낸다. 또한, "니모닉(Mnemonic)"의 란의 기재 중의 "bslbf"(bit string left bit first)는, 대응하는 행의 "신택스"의 란의 데이터가 왼쪽의 비트로부터 송출되는 것을 의미하고, "uimsbf"(unsigned integer most significant bit first)는, 대응하는 행의 "신택스"의 란의 데이터가, 부호 없음 정수값이며, 최상위 비트로부터 송출되는 것을 의미한다. 이하 설명하는, 도 7과 마찬가지의 도면에 대해서도, 마찬가지이다.
"PLAYLIST.DAT" 파일에서는, 그 선두로부터, 그 명칭(파일명) 등의 정보를 기술하기 위한 name_length(8비트)와 name_string(255바이트)이 순차적으로 배치된다.
즉, name_length는, 그 뒤에 배치되는 name_string의 사이즈를, 바이트수로 나타낸다. name_string은, "PLAYLIST.DAT" 파일의 명칭(파일명)을 나타낸다.
또한, name_string에 대해서는, 그 선두부터, name_length로 나타내어지는 바이트수까지가 유효한 명칭으로서 사용된다. 예를 들면 name_length가 값 10인 경우에는, name_string의 선두부터 10바이트분이 유효한 명칭으로서 해석된다.
name_string 뒤에는, number_of_PlayLists(16비트)가 배치된다. number_of_PlayLists는, 계속되는 PlayList()의 개수를 나타낸다. number_of_PlayLists 뒤에, 그 number_of_PlayLists의 수만큼의 PlayList()가 배치된다.
PlayList()는, 디스크(101)에 기록된 클립 스트림 파일의 재생 수순이 기술된 플레이 리스트이며, 이하와 같은 내부 구조를 갖는다.
즉, PlayList()의 선두에는, PlayList_data_length(32비트)가 배치된다. PlayList_data_length는, 그 PlayList()의 사이즈를 나타낸다.
PlayList_data_length 뒤에는, reserved_for_word_alignment(15비트)와 capture_enable_flag_PlayList(1비트)가 순차적으로 배치된다. 15비트의 reserved_for_word_alignment는, 그 뒤에 배치되는 1비트의 capture_enable_flag_PlayList의 위치에서, 16비트의 위치에 맞추기 위해서 배치된다. capture_enable_flag_PlayList는, PlayList()에 의해 재생되는 비디오 스트림에 대응하는 비디오 데이터(PlayList()에 속하는 비디오 데이터)의, 디스크(101)가 재생되는 도 1의 디스크 재생 장치 내에서의 2차 이용을 허가할지의 여부를 나타내는 1비트의 플래그이다. capture_enable_flag_PlayList가, 0 또는 1 중, 예를 들면 1인 경우, PlayList()에 속하는 비디오 데이터의 2차 이용이 허가되어 있는 것 을 나타내고, capture_enable_flag_PlayList가, 0 또는 1 중, 예를 들면 0인 경우, PlayList()에 속하는 비디오 데이터의 2차 이용이 허가되어 있지 않은 것을 나타낸다.
또한, 도 7에서는, capture_enable_flag_PlayList를 1비트로 했지만, 그 밖에, capture_enable_flag_PlayList는, 복수 비트로 구성하고, PlayList()에 속하는 비디오 데이터의 2차 이용을, 말하자면 단계적으로 허가하도록 하는 것이 가능하다. 즉, capture_enable_flag_PlayList는, 예를 들면, 2비트로 구성할 수 있다. 그리고, capture_enable_flag_PlayList의 값이 00B(B는, 그 앞의 숫자가 2진수인 것을 나타냄)인 경우에는, 비디오 데이터의 2차 이용을 금지하고, capture_enable_flag_PlayList의 값이 01B인 경우에는, 비디오 데이터를, 64×64픽셀 이하의 사이즈로 축소하여 이용하는 2차 이용만을 허가할 수 있다. 또한, capture_enable_flag_PlayList의 값이 10B인 경우에는, 사이즈의 제한 없이, 비디오 데이터의 2차 이용을 허가할 수 있다.
또한, 전술한 바와 같이, 비디오 데이터의 2차 이용 시에, 사이즈에 제한을 설정하는 것이 아니라, 용도에 제한을 설정하도록 하는 것도 가능하다. 즉, capture_enable_flag_PlayList의 값이 01B인 경우에는, 비디오 콘텐츠 재생 프로그램(210)(도 2A 및 도 2B)에서만의 2차 이용을 허가하고, capture_enable_flag_PlayList의 값이 10B인 경우에는, 도 1의 디스크 재생 장치 내의, 비디오 콘텐츠 재생 프로그램(210)을 포함하는 임의의 어플리케이션에 의한 2차 이용을 허가할 수 있다. 여기서, 도 1의 디스크 재생 장치 내의 비디오 콘텐 츠 재생 프로그램(210) 이외의 어플리케이션으로서는, 예를 들면, 벽지나 스크린 세이버의 표시의 처리를 행하는 어플리케이션 등이 있다.
또한, capture_enable_flag_PlayList를, 전술한 바와 같이, 2비트로 한 경우, 그 앞에 배치되는 reserved_for_word_alignment는, 워드 얼라인을 취하기 위해서, 14비트로 된다.
또한, capture_enable_flag_PlayList에 의해, 비디오 데이터의 디스크 재생 장치 내에서의 2차 이용을 허가하는 것 외에, 디스크 재생 장치 밖에서의 2차 이용을 허가하도록 하는 것도 가능하다. 여기서, 비디오 데이터의, 디스크 재생 장치 밖에서의 2차 이용을 허가하는 경우에는, 비디오 데이터는, 예를 들면, 디스크 재생 장치에 착탈 가능한 기록 매체나 디스크 재생 장치에 접속 가능한 다른 장치에 착탈 가능한 기록 매체에 기록되거나, 혹은 인터넷 등의 네트워크를 통하여, 다른 장치에 송신된다. 이 경우, 비디오 데이터에는, 그 비디오 데이터를 기록 매체에 기록하는 횟수나 배신하는 횟수를 제한하는 정보를 부가하도록 할 수 있다.
capture_enable_flag_PlayList에 계속해서는, PlayList_name_length(8비트)와 PlayList_name_string(255바이트)이 순차적으로 배치된다. PlayList_name_length는, 그 뒤에 배치되는 PlayList_name_string의 사이즈를, 바이트수로 나타내고, PlayList_name_string은, PlayList()의 명칭을 나타낸다.
PlayList_name_string 뒤에는, number_of_PlayItems(16비트)가 배치된다. number_of_PlayItems은, 계속되는 PlayItem()의 개수를 나타낸다.
number_of_PlayItems 뒤에는, 그 number_of_PlayItems의 수만큼의 PlayItem()의 구조가 기술된다.
여기서, 1개의 PlayList()에서는, PlayItem() 단위로, 콘텐츠의 재생 수순을 기술할 수 있다.
또한, PlayList() 중, number_of_PlayItems의 수만큼의 PlayItem() 각각에 대해서는, 그 PlayList() 중에서 유니크한 ID(Identification)가 붙여진다. 즉, PlayList() 중 최초의 PlayItem()에는, ID로서 0번이 붙여지고, 이하, 계속되는 PlayItem()에 대하여, 그 출현순으로, 1번, 2번, …으로 일련 번호의 ID가 붙여진다.
number_of_PlayItems의 수만큼의 PlayItem() 뒤에는, 1개의 PlayListMark()가 배치된다. PlayListMark()는, PlayList()에 따라 행해지는 재생의 시간축 상의 표시로 되는 후술하는 Mark()의 집합으로, 그 상세에 대해서는, 도 9를 참조하여 후술한다.
「PlayItem()의 설명」
다음으로, 도 8은, 도 7의 PlayList()에 포함되는 PlayItem()의 내부 구조를 도시하고 있다.
PlayItem()의 선두에는, length(16비트)가 배치되고, length는, 그것을 포함하는 PlayItem()의 사이즈를 나타낸다.
length에 계속해서는, Clip_Information_file_name_length(16비트)와 Clip_Information_file_name(가변 길이)이 순차적으로 배치된다. Clip_Information_file_name_length는, 그 뒤에 배치되는 Clip_Information_file_name의 사이즈를, 바이트수로 나타낸다. Clip_Information_file_name은, PlayItem()에 의해 재생하는 클립 스트림 파일(도 6의 확장자가 PS인 파일)에 대응하는 클립 정보 파일(도 6의 확장자가 CLP인 파일)의 파일명을 나타낸다. 또한, 클립 스트림 파일 및 클립 정보 파일의 파일명의, 전술한 명명 규칙에 의해, Clip_Information_file_name으로부터, PlayItem()에 의해 재생하는 클립 정보 파일의 파일명을 인식하고, 그 클립 스트림 파일을 특정할 수 있다.
Clip_Information_file_name에 계속해서는, IN_time(32비트)과 OUT_time(32비트)이 순차적으로 배치된다.
IN_time과 OUT_time은, 각각, Clip_Information_file_name으로부터 특정되는 클립 스트림 파일의 재생 개시 위치와 재생 종료 위치를 지정하는 시각 정보이다.
IN_time에 따르면, 클립 스트림 파일의 선두를 포함하는 도중의 위치를 재생 개시 위치로서 지정할 수 있고, OUT_time에 따르면, 클립 스트림 파일의 최후를 포함하는 도중의 위치를 재생 종료 위치로서 지정할 수 있다.
여기서, PlayItem()에 따르면, Clip_Information_file_name으로부터 특정되는 클립 스트림 파일의, IN_time부터 OUT_time까지의 동안의 콘텐츠가 재생된다. 이 PlayItem()에 의해 재생되는 콘텐츠를, 이하, 적절하게, 클립이라고 한다.
「PlayListMark()의 설명」
다음으로, 도 9는, 도 7의 PlayList()에 포함되는 PlayListMark()의 내부 구조를 도시하고 있다.
PlayListMark()는, 전술한 바와 같이, 그 PlayListMark()를 포함하는 PlayList()(도 7)에 따라 행해지는 재생의 시간축 상의 표시로 되는, 0 이상의 Mark()의 집합이다. 1개의 Mark()는, PlayList()에 따라 행해지는 재생의 시간축 상의 1개의 시각을 나타내는 시각 정보, Mark()의 타입을 나타내는 타입 정보, 및 타입 정보가 이벤트를 발생시키는 타입을 나타내고 있을 때의, 그 이벤트의 인수로 되는 인수 정보를, 적어도 갖는다.
즉, PlayListMark()의 선두에는, length(32비트)가 배치된다. length는, 그것을 포함하는 PlayListMark()의 사이즈를 나타낸다.
length 뒤에는, number_of_PlayList_marks(16비트)가 배치되고, number_of_PlayList_marks는, 거기에 계속해서 배치되는 Mark()의 개수를 나타낸다. number_of_PlayList_marks 뒤에는, 그 number_of_PlayList_marks의 수만큼 Mark()의 구조가 기술된다.
Mark()의 선두에는, mark_type(8비트)이 배치된다. mark_type은, 전술한 타입 정보이며, 그것을 포함하는 Mark()의 타입을 나타낸다.
본 실시 형태에서는, Mark()의 타입으로서, 예를 들면, 챕터(Chapter), 인덱스(Index), 이벤트(Event)의 3종류가 준비되어 있다.
타입이 챕터인 Mark()(이하, 적절하게, 챕터 마크라고 함)는, PlayList()를 분할하는 첫머리 탐색의 단위인 챕터의 선두 위치의 표시이다. 또한, 타입이 인덱스인 Mark()(이하, 적절하게, 인덱스 마크라고 함)는, 챕터를 세분화한 단위인 인덱스의 선두 위치의 표시이다. 타입이 이벤트인 Mark()(이하, 적절하게, 이벤트 마크라고 함)는, PlayList()에 따른 콘텐츠의 재생 중에서 이벤트를 발생시키는 위치의 표시이다. 이벤트 마크에 의한 이벤트의 발생은, 후술하는 바와 같이, 스크립트 제어 모듈(211)에 통지된다.
여기서, mark_type의 값과, Mark()의 타입과의 관계를, 도 10에 도시한다. 도 10에 따르면, 챕터 마크의 mark_type에는, 1이 세트된다. 또한, 인덱스 마크의 mark_type에는, 2가 세트되고, 이벤트 마크의 mark_type에는, 3이 세트된다. 또한, 도 10에서는, mark_type으로 나타내어지는 8비트의 값 중, 0과, 4 내지 255는, 장래의 확장을 위한 예약(reserved)으로 되어 있다.
도 9로 되돌아가서, mark_type 뒤에는, mark_name_length(8비트)가 배치된다. 또한, Mark()의 마지막에는, mark_name_string(24바이트)이 배치된다. mark_name_length와 mark_name_string은, Mark()의 명칭을 기술하기 위한 것으로서, mark_name_length는, mark_name_string의 유효한 사이즈를, mark_name_string은, Mark()의 명칭을, 각각 나타낸다. 따라서, mark_name_string의 선두부터 mark_name_length가 나타내는 바이트수까지가, Mark()의 유효한 명칭을 나타낸다.
mark_name_length에 계속해서는, PlayList() 상에서 정의되는 Mark()를 클립 스트림 파일과 대응짓는 4개의 요소 ref_to_PlayItem_id(16비트), mark_time_stamp(32비트), entry_ES_stream_id(8비트), entry_ES_private_stream_id(8비트)가 순차적으로 배치된다.
ref_to_PlayItem_id에는, Mark()가 속하는 PlayItem()에 대하여 일련 번호로 붙여진 ID가 기술된다. ref_to_PlayItem_id에 의해, Mark()가 속하는 PlayItem()(도 8)이 특정되고, 나아가서는, 도 8에서 설명한 바와 같이, 클립 정보 파일과 클립 스트림 파일이 특정된다.
mark_time_stamp는, ref_to_PlayItem_id에 의해 특정되는 클립 스트림 파일 내에서의 Mark()가 나타내는 시각을 나타낸다.
여기서, 도 11은, PlayList(), PlayItem(), 클립, 및 클립 스트림 파일에 저장된 프로그램 스트림의 관계를 도시하고 있다.
도 11에서는, PlayList()는, 3개의 PlayItem()으로 구성되어 있고, 그 3개의 PlayItem() 각각에는, 일련 번호로 붙여지는 ID #0, #1, #2가 붙여져 있다. 여기서, 이하, 적절하게, ID #i가 붙여진 PlayItem()을, PlayItem #i라고 기술한다.
또한, 도 11에서는, PlayItem #0, PlayItem #1, PlayItem #2에 의해 재생되는 콘텐츠인 클립이, 각각, 클립 A, 클립 B, 클립 C로서 나타내어져 있다.
클립의 실체는, 도 8의 PlayItem()에서의 Clip_Information_file_name으로부터 특정되는 클립 스트림 파일에 저장된 프로그램 스트림 중, IN_time부터 OUT_time까지의 프로그램 스트림이다. 도 11에서는, 클립 A, 클립 B, 클립 C의 실체로서의 프로그램 스트림이, 프로그램 스트림 A, 프로그램 스트림 B, 프로그램 스트림 C로서, 각각 나타내어져 있다.
예를 들면, 도 11에서, PlayList()에 따라 행해지는 재생의 시간축 상의 시각 t0의 표시로 되는 Mark()에서는, 그 ref_to_PlayItem_id와 mark_time_stamp는, 다음과 같이 기술된다.
즉, 시각 t0은, PlayItem #1의 재생이 행해지는 시각이기 때문에, ref_to_PlayItem_id에는, 그 PlayItem #1의 ID인 1이 기술된다. 또한, 시각 t0에서는, PlayItem #1에 의해, 클립 B의 실체인 프로그램 스트림 B가 재생되기 때문에, mark_time_stamp에는, 프로그램 스트림 B가 저장된 클립 스트림 파일에서의 시각 t0에 상당하는 시각이 기술된다.
다시, 도 9로 되돌아가, entry_ES_stream_id와, entry_ES_private_stream_id는, Mark()를 특정한 엘리멘터리 스트림에 관련짓는 경우에, 그 엘리멘터리 스트림을 특정하기 위해서 사용된다. 즉, entry_ES_stream_id에는, Mark()를 관련짓는 엘리멘터리 스트림의 후술하는 stream_id가 기술된다. 또한, entry_ES_private_stream_id에는, 필요에 따라, Mark()를 관련짓는 엘리멘터리 스트림의 후술하는 private_stream_id가 기술된다.
예를 들면, 비디오 스트림 #1과 비디오 스트림 #2가 다중화되어 있는 클립에서, 비디오 스트림 #1을 재생하고 있는 경우와, 비디오 스트림 #2를 재생하고 있는 경우에서 챕터의 발생 시각을 변경하고자 할 때에는, 비디오 스트림 #1 재생 시의 챕터 마크 발생 시각의 Mark()의 entry_ES_stream_id와 entry_ES_private_stream_id에, 비디오 스트림 #1의 stream_id와 private_stream_id가 기술되고, 또한, 비디오 스트림 #2 재생 시의 챕터 마크 발생 시각의 Mark()의 entry_ES_stream_id와 entry_ES_private_stream_id에, 비디오 스트림 #2의 stream_id와 private_stream_id가 기술된다.
또한, 특정한 엘리멘터리 스트림에 관련짓지 않은 Mark()의 entry_ES_stream_id와, entry_ES_private_stream_id에는, 예를 들면, 모두 0이 기 술된다.
entry_ES_private_stream_id 뒤에는, mark_data(32비트)가 배치된다. mark_data는, Mark()가 이벤트 마크인 경우에, 그 이벤트 마크에 의해 발생되는 이벤트의 인수로 되는 인수 정보이다. 또한, Mark_data는, Mark()가 챕터 마크나 인덱스 마크인 경우에, 그 챕터 마크나 인덱스 마크가 나타내는 챕터나 인덱스의 번호로서 사용하는 것도 가능하다.
「Clip()의 설명」
다음으로, 도 6의 "CLIP" 디렉토리에 놓여지는, 확장자가 CLP인 클립 정보 파일의 내부 구조에 대해서 설명한다.
도 6에서는, "CLIP" 디렉토리에, 3개의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"가 놓여져 있고, 각각에는, "STREAM" 디렉토리에 놓여진 클립 스트림 파일 "00001.PS", "00002.PS", "00003.PS"의 성질 등을 나타내는 메타데이터가 저장되어 있다.
도 12는, 그와 같은 클립 정보 파일 Clip()의 내부 구조를 도시하고 있다.
클립 정보 파일 Clip()의 선두에는, presentation_start_time과 presentation_end_time(모두 32비트)이, 순차적으로 배치된다. presentation_start_time과 presentation_end_time은, 클립 정보 파일 Clip()에 대응하는 클립 스트림 파일의 선두와 최후의 시각을 나타낸다. 또한, 클립 스트림 파일의 시각은, MPEG2-System의 시각에서 사용되고 있는 90㎑의 배수로 기술된다.
presentation_end_time에 계속해서는, reserved_for_word_alignment(7비트) 와 capture_enable_flag_Clip(1비트)이 순차적으로 배치된다. 7비트의 reserved_for_word_alignment는, 워드 얼라인을 취하기 위한 것이고, capture_enable_flag_Clip은, 전술한 도 7의 capture_enable_flag_PlayList와 마찬가지로, 비디오 데이터의 2차 이용을 허가할지의 여부를 나타내는 플래그이다.
단, 도 7의 capture_enable_flag_PlayList는, PlayList()에 의해 재생되는 비디오 스트림에 대응하는, PlayList()에 속하는 비디오 데이터의 2차 이용을 허가할지의 여부를 나타내는 것에 대해서, 도 12의 capture_enable_flag_Clip은, 클립 정보 파일 Clip()에 대응하는 클립 스트림 파일에 저장되어 있는 비디오의 엘리멘터리 스트림에 대응하는 비디오 데이터의 2차 이용을 허가할지의 여부를 나타낸다. 따라서, 도 7의 capture_enable_flag_PlayList와, 도 12의 capture_enable_flag_Clip에서는, 2차 이용을 허가하는 비디오 데이터의 단위가 상이하다.
또한, 도 12의 capture_enable_flag_Clip도, 도 7의 capture_enable_flag_PlayList에서 설명한 바와 같이, 1비트가 아니라, 복수 비트로 하는 것이 가능하다.
capture_enable_flag_Clip 뒤에는, number_of_streams(8비트)가 배치되고, 이 number_of_streams에는, 그것에 계속되는 StreamInfo() 구조의 개수가 기술된다. 따라서, number_of_streams에 계속해서는, 그 number_of_Streams의 수만큼, StreamInfo()의 구조가 기술된다.
StreamInfo()의 선두에는, length(16비트)가 배치되고, 이 length는, 그것을 포함하는 StreamInfo()의 사이즈를 나타낸다. length에 계속해서는, stream_id(8비트)와 private_stream_id(8비트)가 배치되어 있고, 이 stream_id와 private_stream_id에 의해, StreamInfo()에 관련짓는 엘리멘터리 스트림이 특정된다.
여기서, 도 13은, 엘리멘터리 스트림을 식별하는 stream_id 및 private_stream_id와, 엘리멘터리 스트림과의 관계를 도시하고 있다.
stream_id는, MPEG2-System 규격에서 규정되어 있는 것과 동일한 것이며, 그 값은, MPEG2-System 규격에서, 엘리멘터리 스트림의 속성마다, 미리 정해져 있다. 따라서, MPEG2-System 규격에서 정의되어 있는 속성의 엘리멘터리 스트림은, stream_id만으로 특정할 수 있다.
본 실시 형태에서는, MPEG2-System 규격에서 규정되어 있지 않은 속성의 엘리멘터리 스트림도 취급하는 것이 가능하게 되어 있고, private_stream_id는, MPEG2-System 규격에서 규정되어 있지 않은 속성의 엘리멘터리 스트림을 식별하기 위한 정보이다.
도 13에서는, MPEG에서 규정되어 있는 부호화 방식으로 인코드된 비디오의 엘리멘터리 스트림, ATRAC(Adaptive TRansform Acoustic Coding) 방식으로 인코드된 오디오의 엘리멘터리 스트림(이하, 적절하게, ATRAC 오디오 스트림이라고 함), LPCM(Linear Pulse Code Modulation) 방식으로 인코드된 오디오의 엘리멘터리 스트림(이하, 적절하게, LPCM 오디오 스트림이라고 함), 자막의 엘리멘터리 스트림(이하, 적절하게, 자막 스트림이라고 함)의 4개의 속성의 엘리멘터리 스트림에 대해서, stream_id 및 private_stream_id와의 관계를 도시하고 있다.
MPEG2-System 규격에서는, MPEG에서 규정되어 있는 부호화 방식으로 인코드된 비디오의 엘리멘터리 스트림은, 0xE0 내지 0xEF의 범위의 값을(0x는, 그 뒤에 계속되는 문자열이 16진수인 것을 나타냄), 엘리멘터리 스트림을 식별하는 stream_id로서 이용하여 다중화하는 것이 규정되어 있다. 따라서, MPEG에서 규정되어 있는 부호화 방식으로 인코드된 비디오의 엘리멘터리 스트림에 대해서는, 0xE0 내지 0xEF의 범위의 값의 stream_id로 식별할 수 있는 16개의 비디오의 엘리멘터리 스트림을, 프로그램 스트림에 다중화할 수 있다.
또한, MPEG에서 규정되어 있는 부호화 방식으로 인코드된 비디오의 엘리멘터리 스트림의 식별은, 0xE0 내지 0xEF의 범위의 값의 stream_id로 행할 수 있으므로, private_stream_id는 불필요하다.
한편, MPEG2-System에서는, ATRAC 오디오 스트림, LPCM 오디오 스트림, 자막 스트림에 대해서는, stream_id는 정의되어 있지 않다.
따라서, 본 실시 형태에서는, MPEG2-System에서 stream_id가 정의되어 있지 않은 엘리멘터리 스트림에 대해서는, 그 stream_id에, MPEG2-System에서 private_stream_1이라고 하는 속성을 나타내는 값인 0xBD를 채용하고, 또한, 도 13에 도시하는 바와 같이 private_stream_id를 이용하여 특정을 행하는 것으로 하고 있다.
즉, ATRAC 오디오 스트림의 식별에는, 0x00 내지 0x0F의 범위의 값의 private_stream_id가 사용된다. 따라서, 프로그램 스트림에는, 16개의 ATRAC 오디 오 스트림을 다중화할 수 있다. 또한, LPCM 오디오 스트림의 식별에는, 0x10 내지 0x1F의 범위의 값 private_stream_id가 사용된다. 따라서, 프로그램 스트림에는, 16개의 LPCM 오디오 스트림을 다중화할 수 있다. 또한, 자막 스트림의 식별에는, 0x80 내지 0x9F의 범위의 값의 private_stream_id가 사용된다. 따라서, 프로그램 스트림에는, 32개의 자막 스트림을 다중화할 수 있다.
또한, stream_id 및 private_stream_id에 대해서는, 또한 후술한다.
도 12로 되돌아가서, private_stream_id 뒤에는, StaticInfo(), reserved_for_word_alignment(8비트)가 순차적으로 배치된다. StaticInfo()에는, 그 StaticInfo()를 포함하는 StreamInfo()에 기술된 stream_id 및 private_stream_id에 의해 특정되는 엘리멘터리 스트림의 재생 중에 변화되지 않는 정보가 기술된다. StaticInfo()의 상세에 대해서는, 도 14를 참조하여 후술한다.
reserved_for_word_alignment는, 워드 얼라인을 취하기 위해서 사용된다.
reserved_for_word_alignment에 계속해서는, number_of_DynamicInfo(8비트)가 배치되고, number_of_DynamicInfo는, 그 뒤에 계속해서 배치되는 pts_change_point(32비트)와 DynamicInfo()의 세트의 수를 나타낸다.
따라서, number_of_DynamicInfo에 계속해서는, 그 number_of_DynamicInfo의 수만큼의 세트수의 pts_change_point와 DynamicInfo()의 구조가 기술된다.
pts_change_point는, 그것과 세트로 되어 있는 DynamicInfo()의 정보가 유효하게 되는 시각을 나타낸다. 여기서, 엘리멘터리 스트림의 선두의 시각을 나타내는 pts_change_point는, 그 엘리멘터리 스트림이 저장된 클립 스트림 파일에 대응 하는 클립 정보 파일 Clip()의 처음에 기술되는 presentation_start_time과 동일하다.
DynamicInfo()에는, stream_id 및 private_stream_id에 의해 특정되는 엘리멘터리 스트림의 재생 중에 변화되는, 소위 동적인 정보가 기술된다. DynamicInfo()에 기술된 정보는, 그것과 세트로 되어 있는 pts_change_point가 나타내는 재생 시각으로 되었을 때에 유효하게 된다. 또한, DynamicInfo()의 상세에 대해서는, 도 15를 참조하여 후술한다.
number_of_DynamicInfo의 수만큼의 세트의 pts_change_point와 DynamicInfo() 뒤에는, EP_map()이 배치된다. 또한, EP_map()에 대해서는, 도 16을 참조하여 후술한다.
「StaticInfo()의 설명」
다음으로, 도 14를 참조하여, 도 12의 StaticInfo()의 상세에 대해서 설명한다.
도 14는, StaticInfo()의 신택스를 도시하고 있다.
StaticInfo()는, 대응하는 엘리멘터리 스트림의 속성에 의해 내용이 상이하다. StaticInfo()에 대응하는 엘리멘터리 스트림의 속성은, 그 StaticInfo()를 포함하는 도 12의 StreamInfo()에 포함되는 stream_id와 private_stream_id에 의해 판단된다.
StaticInfo()에 대응하는 엘리멘터리 스트림이 비디오 스트림인 경우(stream==VIDEO), StaticInfo()는, picture_size(4비트), frame_rate(4비트), 및 cc_flag(1비트)와, 워드 얼라인을 취하기 위한 reserved_for_word_alingment로 구성된다.
picture_size는, 비디오 스트림에 대응하는 비디오 데이터에 의해 표시되는 화상의 크기를 나타낸다. frame_rate는, 비디오 스트림에 대응하는 비디오 데이터의 프레임 주파수를 나타낸다. cc_flag는, 비디오 스트림에 클로즈드 캡션(Closed Caption) 데이터가 포함되어 있는지의 여부를 나타낸다. 즉, 예를 들면, 비디오 스트림에 클로즈드 캡션 데이터가 포함되어 있는 경우에는, cc_flag는 1로 되고, 비디오 스트림에 클로즈드 캡션 데이터가 포함되어 있지 않은 경우에는, cc_flag는 0으로 된다.
StaticInfo()에 대응하는 엘리멘터리 스트림이 오디오 스트림인 경우(stream==AUDIO), StaticInfo()는, audio_language_code(16비트), channel_configuration(8비트), lfe_existence(1비트), 및 sampling_frequency(4비트)와, 워드 얼라인을 취하기 위한 reserved_for_word_alingment로 구성된다.
audio_language_code에는, 오디오 스트림에 포함되어 있는 오디오 데이터의 언어를 나타내는 코드가 기술된다. channel_configuration은, 모노럴(mono)/스테레오(stereo)/멀티채널 등의, 오디오 스트림에 포함되어 있는 오디오 데이터의 속성을 나타낸다. lfe_existence는, 오디오 스트림에 저역 강조 채널이 포함되어 있는지의 여부를 나타내고, 포함되어 있으면 1로 되고, 포함되어 있지 않으면 0으로 된다. sampling_frequency는, 오디오 스트림에 포함되어 있는 오디오 데이터의 샘플링 주파수를 나타내는 정보이다.
StaticInfo()에 대응하는 엘리멘터리 스트림이 자막 스트림인 경우(stream==SUBTITLE), StaticInfo()는, subtitle_language_code(16비트) 및 configurable_flag(1비트)와, 워드 얼라인을 취하기 위한 reserved_for_word_alingment로 구성된다.
subtitle_language_code에는, 자막 스트림에 포함되어 있는 자막 데이터의 언어를 나타내는 코드가 기술된다. configurable_flag는, 자막 스트림에 포함되어 있는 자막 데이터의 표시를 디폴트의 표시 방식으로부터 변경하는 것을 허가할지의 여부를 나타내는 정보이며, 예를 들면, 표시 방식의 변경이 허가되어 있는 경우에는 1이 기술되고, 허가되어 있지 않은 경우에는 0이 기술된다. 또한, 자막 데이터의 표시 방식으로서는, 자막 데이터의 표시 사이즈나, 표시 위치, 표시 색, 표시 패턴(예를 들면, 점멸 표시 등), 표시 방향(예를 들면, 수직 방향이나 수평 방향) 등이 있다.
「DynamicInfo()의 설명」
다음으로, 도 15를 참조하여, 도 12의 DynamicInfo()의 상세에 대해서 설명한다.
도 15는, DynamicInfo()의 신택스를 도시하고 있다.
DynamicInfo()의 선두에는, 워드 얼라인을 위한 reserved_for_word_alignment(8비트)가 배치되어 있고, 그 뒤에 계속되는 요소는, DynamicInfo()에 대응하는 엘리멘터리 스트림의 속성에 의해 내용이 상이하다. DynamicInfo()에 대응하는 엘리멘터리 스트림의 속성은, 도 14에서 설명한 StaticInfo()에서의 경우와 마찬가지로, DynamicInfo()를 포함하는 도 12의 StreamInfo()에 포함되는 stream_id와 private_stream_id에 의해 판단된다.
DynamicInfo()에는, 도 12에서 설명한 바와 같이, 엘리멘터리 스트림의 재생 중에 변화되는 동적인 정보가 기술된다. 이 동적인 정보는, 특별히 한정되는 것은 아니지만, 도 15의 실시 형태에서는, DynamicInfo()에 대응하는 엘리멘터리 스트림에 대응하는 데이터, 즉, 엘리멘터리 스트림이 처리됨으로써 출력되는 데이터의 출력 속성이, DynamicInfo()에 기술된다.
구체적으로는, DynamicInfo()에 대응하는 엘리멘터리 스트림이 비디오 스트림인 경우(stream==VIDEO), DynamicInfo()는, display_aspect_ratio(4비트)와, 워드 얼라인을 위한 reserved_for_word_alingment로 구성된다. diplay_aspect_ratio에는, 비디오 스트림에 대응하는 비디오 데이터의 출력 방식으로서의, 예를 들면, 그 비디오 데이터의 어스펙트비가 기술된다. 즉, diplay_aspect_ratio에는, 예를 들면, 어스펙트비가, 16:9 또는 4:3 중 어느 것인지를 나타내는 정보가 기술된다. 또한, 비디오 스트림의 DynamicInfo()에는, 어스펙트비 외에, 예를 들면, 비디오 데이터에 의해 표시되는 화상의 사이즈(X화소×Y화소) 등을 기술하는 것이 가능하다.
DynamicInfo()에 대응하는 엘리멘터리 스트림이 오디오 스트림인 경우(stream==AUDIO), DynamicInfo()는, channel_assignment(4비트)와, 워드 얼라인을 취하기 위한 reserved_for_word_alingment로 구성된다. channel_assignment에는, 오디오 스트림에 2채널의 오디오 데이터가 포함되어 있는 경우에, 그 2채널의 출력 방식이 기술된다. 즉, channel_assignment에는, 오디오 데이터가, 스테레오 또는 듀얼(2개 국어) 중 어느 채널 할당이 되어 있는 것인지를 나타내는 정보가 기술된다.
DynamicInfo()에 대응하는 엘리멘터리 스트림이 자막 스트림인 경우(stream==SUBTITLE), DynamicInfo()는, 워드 얼라인을 취하기 위한 reserved_for_word_alingment로 구성된다. 즉, 도 15의 실시 형태에서는, 자막 스트림에 관해서는, 동적인 정보로서의 출력 속성은 정의되어 있지 않다.
「EP_map()의 설명」
다음으로, 도 16을 참조하여, 도 12의 EP_map()의 상세에 대해서 설명한다.
도 16은, EP_map()의 신택스를 도시하고 있다.
EP_map()에는, 그 EP_map()을 포함하는 도 12의 클립 정보 파일 Clip()에 대응하는 클립 스트림 파일에 저장된 프로그램 스트림에 다중화되어 있는 엘리멘터리 스트림마다, 각 엘리멘터리 스트림의, 디코드를 개시할 수 있는 디코드 개시 가능점(엔트리 포인트)의 정보가 기술된다.
여기서, 고정 레이트의 스트림에 대해서는, 디코드 개시 가능점은, 계산에 의해 구할 수 있지만, 가변 레이트의 스트림, 혹은 MPEG 규격에 따라 부호화된 비디오 스트림과 같이, 비디오 액세스 유닛마다 사이즈가 상이한 스트림에 대해서는, 디코드 개시 가능점은, 계산에 의해 구할 수 없고, 실제로 스트림을 해석하지 않으면 찾아낼 수 없다. 디코드 개시 가능점을 신속하게 인식하는 것은, 랜덤 액세스를 행하기 위해서 중요하며, EP_map()에 따르면, 디코드 개시 가능점을 신속하게 인식할 수 있다.
또한, MPEG2-Video에서는, Sequence_header()(시퀀스 헤더) 등을 포함시킨 인트라 픽쳐의 선두가, 디코드 개시 가능점이다.
EP_map()의 선두에는, 워드 얼라인을 위한 reserved_for_word_alignment(8비트)가 배치되어 있고, 계속해서 number_of_stream_id_entries(8비트)가 배치되어 있다. number_of_stream_id_entries는, EP_map()에 디코드 개시 가능점의 정보가 기술되어 있는 엘리멘터리 스트림의 개수를 나타낸다.
number_of_stream_id_entries 뒤에는, 엘리멘터리 스트림을 식별하기 위한 정보와, 그 엘리멘터리 스트림의 디코드 개시 가능점의 정보가, number_of_stream_id_entries가 나타내는 수만큼 반복 배치된다.
즉, number_of_stream_id_entries 직후에는, 엘리멘터리 스트림을 식별하는 정보로서의 stream_id(8비트)와 private_stream_id(8비트)가 배치되고, 그것에 계속해서, number_of_EP_entries(32비트)가 배치된다. number_of_EP_entries는, 그 직전의 stream_id와 private_stream_id로 특정되는 엘리멘터리 스트림의 디코드 개시 가능점의 수를 나타낸다.
number_of_EP_entries 뒤에는, 그 직전의 stream_id와 private_stream_id로 특정되는 엘리멘터리 스트림의 디코드 개시 가능점의 정보가 number_of_EP_entries가 나타내는 수만큼 반복 배치된다.
즉, 해당 엘리멘터리 스트림이 비디오 스트림인 경우에는, 우선 index_N_minus1과 N-th_Ref_picture_copy가 놓여지고, 그 뒤에 디코드 개시 가능점 의 정보로서의 PTS_EP_start(32비트)와 RPN_EP_start(32비트)가 놓여지고, 이들이 반복 배치된다. index_N_minus1과 N-th_Ref_picture_copy에 대해서는 후술한다.
또한, 해당 엘리멘터리 스트림이 비디오 스트림 이외인 경우에는, 16비트의 reserved_for_future_use 뒤에 디코드 개시 가능점의 정보로서의 PTS_EP_start(32비트)와 RPN_EP_start(32비트)가 놓여지고, 이들이 반복 배치된다.
N-th_Ref_picture_copy에는, 후술하는 RPN_EP_start로 나타내어지는 private_stream_2에 기록되어 있는, 1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture 중 어느 하나가 카피된다. 또한 index_N_minus1에는 어느 필드를 카피했는지라고 하는 정보가 도 17에 도시하는 값을 이용하여 기록된다. 즉, 도 17에서 도시되는 바와 같이, index_N_minus1에는, 1stRef_picture가 카피된 경우, 0이, 2ndRef_picture가 카피된 경우, 1이, 3rdRef_picture가 카피된 경우, 2가, 4thRef_picture가 카피된 경우, 4가, 기록된다.
디코드 개시 가능점의 정보의 하나인 PTS_EP_start는, 전술한 바와 같이 stream_id와 private_stream_id로 특정되는 엘리멘터리 스트림이 다중화되어 있는 프로그램 스트림이 저장된 클립 스트림 파일 내에서의, 디코드 개시 가능점의 시각(재생 시각)을 나타낸다.
디코드 개시 가능점의 정보의 다른 하나인 RPN_EP_start에는, 전술한 바와 같이 stream_id와 private_stream_id로 특정되는 엘리멘터리 스트림이 다중화되어 있는 프로그램 스트림이 저장된 클립 스트림 파일 내에서의, 디코드 개시 가능점의 위치를, 프로그램 스트림의 pack() 단위로 세었을 때의 값이 기술된다. 또한, 본 실시 형태에서는, pack()의 사이즈는 2048바이트로 고정인 것으로 한다. 또한, 본 실시 형태에서는, 디스크(101)(도 1)의 1섹터가, 2048바이트인 것으로 한다.
여기서, 비디오 스트림에 대해서는, 그 디코드 개시 가능점(엔트리 포인트) 직전에, 후술하는 private_stream_2 패킷(private_stream_2의 속성의 PES_packet())이 배치되어 있다. private_stream_2 패킷은, 그 private_stream_2 패킷부터, 다음 private_stream_2 패킷까지의 사이에 배치되어 있는 비디오 스트림을 디코드하는 데에 이용되는 정보가 저장되어 있다. 이 때문에, 비디오 스트림에 대해서는, 디코드 개시 가능점의 정보로서의 RPN_EP_start에는, 실제의 디코드 개시 가능점 그 자체가 아니라, 실제의 디코드 개시 가능점의 직전에 배치되어 있는 private_stream_2 패킷의 선두의 위치가 기술된다.
또한, EP_map()에서, 디코드 개시 가능점의 정보로서의 PTS_EP_start와 RPN_EP_start의 세트는, stream_id와 private_stream_id로 특정되는 엘리멘터리 스트림마다, 미리, 승순으로 소트되어 있다. 이에 의해, 디코드 개시 가능점의 정보로서의 PTS_EP_start와 RPN_EP_start의 세트는, 이분 탐색이 가능하게 되어 있다.
또한, 가변 레이트의 스트림이나, 비디오 액세스 유닛마다 사이즈가 상이한 스트림을 대상으로 한 랜덤 액세스의 방법은, 예를 들면, 일본 특개2000-341640호 공보(일본 특원평11-317738호) 등에 기재되어 있다.
「클립 스트림 파일의 설명」
다음으로, 도 6의 "STREAM" 디렉토리에 놓여지는, 확장자가 PS인 클립 스트림 파일(도 6에서는, "00001.PS", "00002.PS", "00003.PS")의 내부 구조에 대해서 설명한다.
클립 스트림 파일은, MPEG-2 System(ISO/IEC 13818-1)에 정의된 MPEG2_Program_Stream()을 베이스로 구성되어 있다.
즉, 도 18A 및 도 18B는, MPEG-2 System(ISO/IEC 13818-1:2000) 규격에 기술되어 있는 테이블 2-31, 테이블 2-32, 테이블 2-33을 도시하고 있다.
클립 스트림 파일에 저장된 프로그램 스트림은, MPEG-2 System 규격의 테이블 2-31에 정의되어 있는 MPEG2_Program_Stream()으로서, 1개 이상의 pack()과, 1개의 MPEG_program_end_code로 구성된다. 또한, MPEG2_Program_Stream()의 설명은, 특허 제2785220호 등에도 기재되어 있다.
1개의 pack()은, MPEG-2 System 규격의 테이블 2-32에 정의되어 있는 바와 같이, 1개의 Pack_header()와, 임의의 수의 PES_packet()으로 구성된다. Pack_header()의 상세는, MPEG-2 System 규격의 테이블 2-33에 정의되어 있다.
여기서, MPEG-2 System 규격에서는, pack()의 사이즈는, 가변 길이로서 정의되어 있지만, 여기서는, 도 16에서 설명한 바와 같이, 2048바이트로 고정인 것으로 한다. 또한, 여기서는, 1개의 pack()의 PES_packet()의 수는, 1개, 2개, 또는 3개로 한다. Pack()이 후술하는 private_stream_2 패킷으로 시작되는 경우, 그 직후에 대응하는 비디오 스트림의 PES_packet()이 반드시 존재한다. 또한 이에 부가하여 3개째의 PES_packet()으로서 padding_packet(패딩 패킷)을 놓을 수 있다. 또한 private_stream_2 패킷은 반드시 Pack()의 선두에 놓여진다.
Pack()이 private_stream_2 패킷으로 시작하지 않는 경우에는, Pack()의 선 두에는 비디오, 오디오, 자막 등의 콘텐츠 데이터가 저장된 PES_packet()이 놓여진다. 이에 부가하여 2개째의 PES_packet()으로서 padding_packet(패딩 패킷)을 놓을 수 있다.
도 19A 및 도 19B 내지 도 21A 및 도 21B는, MPEG-2 System 규격의 테이블 2-17에서 정의되어 있는 PES_packet()을 도시하고 있다.
PES_packet()은, packet_start_code_prefix, stream_id, 및 PES_packet_length(도 19A 및 도 19B)와, stream_id 등에 의해 구조가 변화되는 헤더 부분(stuffing_byte를 포함함)(도 19A 및 도 19B 내지 도 21A 및 도 21B)과, PES_packet_data_byte(도 21A 및 도 21B)로 대별할 수 있다. 또한, PES_packet()이, padding_packet인 경우(stream_id==padding_stream), PES_packet_data_byte 대신에, padding_byte(0xFF)(도 21A 및 도 21B)가 필요한 수만큼 반복 배치된다.
여기서, PES_packet()의 헤더 부분에는, 도 19A 및 도 19B, 및, 도 20A, 도 20B 및 도 20C에 도시한 바와 같이, PTS(Presentation Time Stamp)라고 불리는 표시 타이밍을 나타내는 정보와, DTS(Decoding Time Stamp)라고 불리는 디코드 타이밍을 나타내는 정보를 배치할 수 있다. 본 실시 형태에서는, 모든 액세스 유닛(MPEG2-System에서 정의된, 엘리멘터리 스트림을 구성하는 디코드 단위)에 대하여 PTS가 부가되고, MPEG2-System으로 정하는 경우에 DTS가 부가되는 것으로 한다.
프로그램 스트림에 다중화되는 엘리멘터리 스트림은, PES_packet()의 PES_packet_data_byte(도 21A 및 도 21B)에 저장된다. 그리고, PES_packet()의 stream_id에는, 그 PES_packet_data_byte에 저장된 엘리멘터리 스트림을 식별하기 위해서, 그 엘리멘터리 스트림의 속성에 따른 값이 기술된다.
PES_packet()의 stream_id에 기술되는 값과, 엘리멘터리 스트림의 속성(종류)의 관계는, MPEG-2 System 규격의 테이블 2-18에 정의되어 있다. 여기서, 도 22A 및 도 22B에, MPEG-2 System 규격의 테이블 2-18을 도시한다.
본 실시 형태에서는, 도 22A 및 도 22B에 도시한 MPEG-2 System 규격에서 정의되어 있는 stream_id 중, 예를 들면, 도 23에 도시하는 값을 채용한다.
즉, 본 실시 형태에서는, 10111101B, 10111110B, 10111111B, 110xxxxxB, 1110xxxxB의 5패턴을, stream_id의 값으로서 채용한다. 또한, "x"는, 0 또는 1 중의 임의의 값을 나타낸다.
그리고, private_stream_1이라고 불리는 속성의 엘리멘터리 스트림의 PES_packet()의 stream_id는, 도 23에 따라, 10111101B로 된다. 또한, padding_packet의 PES_packet()의 stream_id는, 도 23에 따라, 10111110B로 된다. 또한, private_stream_2라고 불리는 속성의 엘리멘터리 스트림의 PES_packet()의 stream_id는, 도 23에 따라, 10111111B로 된다.
또한, MPEG에서 정의된 오디오 스트림(오디오의 엘리멘터리 스트림)의 PES_packet()의 stream_id는, 110xxxxxB로 된다. 또한, 110xxxxxB 중 하위 5비트xxxxx는, 오디오 스트림을 구별하는 오디오 스트림 넘버이고, 프로그램 스트림(MPEG2_Program_Stream())에는, 이 오디오 스트림 넘버로 구별할 수 있는 수인 32(=25)개의 오디오 스트림(MPEG에서 정의된 오디오 스트림)을 다중화할 수 있다.
또한, MPEG에서 정의된 비디오 스트림(비디오의 엘리멘터리 스트림)의 PES_packet()의 stream_id는, 1110xxxxB로 된다. 또한, 1110xxxxB 중 하위 4비트 xxxx는, 비디오 스트림을 구별하는 비디오 스트림 넘버이며, 프로그램 스트림에는, 이 비디오 스트림 넘버로 구별할 수 있는 수인 16(=24)개의 비디오 스트림(MPEG에서 정의된 비디오 스트림)을 다중화할 수 있다.
그런데, stream_id가 1110xxxxB의 PES_packet()은, MPEG에서 정의된 비디오 스트림을 저장하기 위해서 사용되고, stream_id가 110xxxxxB의 PES_packet()은, MPEG에서 정의된 오디오 스트림을 저장하기 위해서 사용된다. 한편, MPEG에서 정의되어 있지 않은 부호화 방식(예를 들면 ATRAC방식)의 엘리멘터리 스트림을 저장하는 데에 사용하는 PES_packet()의 stream_id는, MPEG에서는 규정되어 있지 않고, 따라서, MPEG에서 정의되어 있지 않은 부호화 방식의 엘리멘터리 스트림은, MPEG에서 정의된 비디오 스트림이나 오디오 스트림과 마찬가지로, 단순하게, stream_id를 지정하여, PES_packet()에 저장할 수는 없다.
따라서, 본 실시 형태에서는, private_stream_1의 PES_packet()의 PES_packet_data_byte를 확장하여, MPEG에서 정의되어 있지 않은 부호화 방식의 엘리멘터리 스트림을 저장한다.
여기서, private_stream_1의 PES_packet()의, 확장된 PES_packet_data_byte를, private_stream1_PES_payload()라고 기술한다.
「private_stream1_PES_payload()의 설명」
도 24는, private_stream1_PES_payload()의 신택스를 도시하고 있다.
private_stream1_PES_payload()는, private_header()와 private_payload()로 구성된다. private_payload()에는, ATRAC 오디오 스트림이나, LPCM 오디오 스트림, 자막 스트림 등의, MPEG에서 정의되어 있지 않은 부호화 방식의 엘리멘터리 스트림이 저장된다.
private_header()의 선두에는, private_stream_id(8비트)가 배치된다. private_stream_id는, private_payload()에 저장되는 엘리멘터리 스트림을 식별하는 식별 정보이며, 그 속성에 따라, 예를 들면, 이하와 같은 값으로 된다.
즉, 도 25는, private_stream_id의 값과, private_payload()에 저장되는 엘리멘터리 스트림의 속성과의 관계를 도시하고 있다.
도 25에서는, 0000xxxxB, 0001xxxxB, 100xxxxxB의 3패턴이, private_stream_id의 값으로서 채용되어 있다. 또한, "x"는, 도 23에서의 경우와 마찬가지로, 0 또는 1 중 임의의 값을 나타낸다.
도 25에 따르면, ATRAC 오디오 스트림이 private_payload()에 저장되는 private_stream1_PES_payload()의 private_stream_id는, 0000xxxxB로 된다. 또한, 0000xxxxB 중 하위 4비트 xxxx는, ATRAC 오디오 스트림을 구별하는 오디오 스트림 넘버이며, 프로그램 스트림(MPEG2_Program_Stream())에는, 이 오디오 스트림 넘버로 구별할 수 있는 수인 16(=24)개의 ATRAC 오디오 스트림을 다중화할 수 있다.
또한, 도 25에 따르면, LPCM 오디오 스트림이 private_payload()에 저장되는 private_stream1_PES_payload()의 private_stream_id는, 0001xxxxB로 된다. 또한, 0001xxxxB 중 하위 4비트 xxxx는, LPCM 오디오 스트림을 구별하는 오디오 스트림 넘버이며, 프로그램 스트림에는, 이 오디오 스트림 넘버로 구별할 수 있는 수인 16(=24)개의 LPCM 오디오 스트림을 다중화할 수 있다.
또한, 도 25에 따르면, 자막 스트림이 private_payload()에 저장되는 private_stream1_PES_payload()의 private_stream_id는, 100xxxxxB로 된다. 또한, 100xxxxxB 중 하위 5비트 xxxxx는, 자막 스트림을 구별하는 자막 스트림 넘버이며, 프로그램 스트림에는, 이 자막 스트림 넘버로 구별할 수 있는 수인 32(=25)개의 자막 스트림을 다중화할 수 있다.
여기서, 도 23과 도 25의 관계를 통합한 것이, 전술한 도 13이다.
도 24로 되돌아가서, private_stream1_PES_payload()에서, private_stream_id에 계속되는 요소는, private_payload()에 저장되는 엘리멘터리 스트림의 속성에 의해 내용이 상이하다. private_payload()에 저장되는 엘리멘터리 스트림의 속성은, private_header()의 선두의 private_stream_id에 의해 판단된다.
private_payload()에 저장되는 엘리멘터리 스트림이 ATRAC 오디오 스트림인 경우(private_stream_id==ATRAC), 장래의 확장용의 reserved_for_future_use(8비트)가 배치되고, 그 뒤, AU_locator(16비트)가 배치된다. AU_locator는, 그 AU_locator 직후의 위치를 기준으로 하여, private_payload()에 저장된 ATRAC 오디 오 스트림의 오디오 액세스 유닛의 선두 위치를 나타낸다. private_payload()에 오디오 액세스 유닛이 존재하지 않는 경우, AU_locator에는, 예를 들면 0xFFFF가 기술된다.
private_payload()에 저장되는 엘리멘터리 스트림이 LPCM 오디오 스트림인 경우(private_stream_id==LPCM), fs_flag(1비트), reserved_for_future_use(3비트), ch_flag(4비트), 및 AU_locator(16비트)가 순차적으로 배치된다.
fs_flag는, private_payload()에 저장되는 LPCM 오디오 스트림의 샘플링 주파수를 나타낸다. 즉, 예를 들면, 샘플링 주파수가 48㎑인 경우, fs_flag는 0으로 되고, 샘플링 주파수가 44.1㎑인 경우, fs_flag는 1로 된다.
ch_flag는, private_payload()에 저장되는 LPCM 오디오 스트림의 채널수를 나타낸다. 예를 들면, LPCM 오디오 스트림이 모노럴인 경우, ch_flag는 1로 되고, LPCM 오디오 스트림이 스테레오인 경우, ch_flag는 2로 된다.
AU_locator는, 그 AU_locator 직후의 위치를 기준으로 하여, private_payload()에 저장되는 LPCM 오디오 스트림의 오디오 액세스 유닛의 선두 위치를 나타낸다. private_payload()에 오디오 액세스 유닛이 존재하지 않는 경우, AU_locator에는, 예를 들면 0xFFFF가 기술된다.
private_payload()에 저장되는 엘리멘터리 스트림이 자막 스트림인 경우(private_stream_id==SUBTITLE), 장래의 확장을 위한 reserved_for_future_use(8비트)가 배치되고, 그 뒤에, AU_locator(16비트)가 배치된다. AU_locator는, 그 AU_locator 직후의 위치를 기준으로 하여, private_payload()에 저장되는 자막 스 트림의 자막 액세스 유닛의 선두 위치를 나타낸다. private_payload()에 자막 액세스 유닛이 존재하지 않는 경우, AU_locator에는, 예를 들면 0xFFFF가 기술된다.
「private_stream2_PES_payload()의 설명」
다음으로, 도 26은, private_stream2_PES_payload()의 신택스를 도시하고 있다.
private_stream2_PES_payload()는, private_stream_2의 PES_packet()의 PES_packet_data_byte(도 21A 및 도 21B)를 확장한 것, 즉, private_stream_2의 PES_packet()의, 확장된 PES_packet_data_byte이며, 비디오 스트림의 디코드에 이용되는 정보가 기술된다.
본 실시 형태에서는, private_stream_2의 PES_packet()은, 비디오 스트림에서의 디코드 개시 가능점 직전에 배치된다. 따라서, 본 실시 형태에서는, 프로그램 스트림으로부터 private_stream_2의 PES_packet()을 찾아내면, 그 직후의 비디오 스트림으로부터 디코드를 개시할 수 있다.
여기서, 전술한 도 16의 EP_map()의 RPN_EP_start는, 비디오 스트림에 대해서는, private_stream_2의 PES_packet()의 선두의 위치를 나타낸다.
private_stream2_PES_payload()의 선두에는, 장래의 확장용의 reserved_for_future_use(8비트)가 배치되고, 계속해서, video_stream_id(8비트), 1stRef_picture(16비트), 2ndRef_picture(16비트), 3rdRef_picture(16비트), 4thRef_picture(16비트), au_information(), 및 VBI()가, 순차적으로 배치된다.
video_stream_id에는, private_stream_2의 PES_packet() 직후에 배치되는 비 디오 스트림의 PES_packet()의 stream_id와 동일한 값이 기술된다. 이 video_stream_id에 의해, private_stream_2의 PES_packet()의 private_stream2_PES_payload()에 저장된 정보를 이용하여 디코드되는 비디오 스트림이 저장된 PES_packet()이 특정된다.
1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture는, video_stream_id에 의해 특정되는 비디오 스트림의, private_stream_2의 PES_packet()부터 다음 private_stream_2의 PES_packet()까지 중 1, 2, 3, 4번째의 참조 화상을 포함하는 최후의 pack()의 위치를 상대값으로, 각각 나타낸다. 또한, 1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture에 대해서는, 예를 들면, 일본 특개평09-46712호 공보(일본 특원평07-211420호)에, bytes_to_first_P_pic bytes_to_second_P_pic으로서, 그 상세가 개시되어 있다.
au_information()에는, private_stream_2의 PES_packet()부터, 다음 private_stream_2의 PES_packet()까지의 비디오 스트림 중 비디오 액세스 유닛에 관한 정보가 기술된다. au_information()의 상세에 대해서는, 도 27을 참조하여 후술한다.
VBI()는, Closed Caption의 정보를 기술하기 위해서 사용된다.
이상과 같은 private_stream2_PES_payload()를 갖는 private_stream_2의 PES_packet()은, 비디오 스트림마다의, 디코드 개시 가능점마다 배치된다.
다음으로, 도 27은, 도 26의 au_information()의 신택스를 도시하고 있다.
au_information()의 선두에는, length(16비트)가 배치된다. length는, 그것 을 포함하는 au_information()의 사이즈를 나타낸다. length에 계속해서는, reserved_for_word_alignment(8비트), 및 number_of_access_unit(8비트)이 순차적으로 배치된다. reserved_for_word_alignment는, 워드 얼라인을 취하기 위해서 사용된다.
number_of_access_unit은, 그것을 포함하는 private_stream_2의 PES_packet()부터, 다음 private_stream_2의 PES_packet()까지의 사이에 포함되는 비디오 액세스 유닛의 수를 나타낸다.
즉, number_of_access_unit은, 도 26의 private_stream2_PES_payload()가 동일한 video_stream_id를 갖는 private_stream_2의 PES_packet() 중에서, 이 au_informatnio()부터 다음 au_information() 직전까지, 즉, 이 au_information()이 클립 스트림 파일에서 최후의 au_information()이면, 클립 스트림 파일의 최후까지, video_stream_id로 나타내어지는 비디오 스트림에 포함되는 액세스 유닛(픽쳐)의 수를 나타낸다.
number_of_access_unit 뒤에는, 그 number_of_access_unit의 수만큼 for 루프의 내용이 배치된다. 즉, number_of_access_unit을 포함하는 private_stream_2의 PES_packet()부터, 다음 private_stream_2의 PES_packet()까지의 사이에 포함되는 1 이상의 비디오 액세스 유닛 각각에 관한 정보가 배치된다.
for 루프 내에 배치되는 정보(비디오 액세스 유닛에 관한 정보)는, 이하와 같이 되어 있다.
즉, for 루프 내에는, pic_struct_copy(4비트), au_ref_flag(1비트), AU_length(21비트), reserved가 배치된다.
pic_struct_copy에는, 비디오 스트림이 MPEG4-AVC(ISO/IEC 14496-10)의 경우에, 대응하는 비디오 액세스 유닛에 대하여 설정되어 있는, ISO/IEC 14496-10, D.2.2에 정의되어 있는 pic_struct()의 카피가 기술된다. 또한, pic_struct()는, 예를 들면, 픽쳐를 프레임으로서 표시하거나, 혹은, 픽쳐의 톱 필드를 표시하고, 그 후, 보텀 필드를 표시하는 등이라고 하는 정보이다.
여기서, 도 28에, pic_struct의 테이블을 도시한다.
pic_struct는, 픽쳐를 어떻게 표시할지의 표시 방식을 지시하는 표시 방식 지시 정보로서 사용된다.
도 28의 pic_struct의 테이블에 따르면, 픽쳐에 의해, 1프레임을 표시하는 것을 지시하는 경우에는, 그 픽쳐의 pic_struct에는, 도 28의 가장 왼쪽의 Value의 란에 도시되어 있는 바와 같이, 0이 세트된다. 마찬가지로, 픽쳐에 의해, 톱 필드 또는 보텀 필드를 표시하는 것을 지시하는 경우에는, 그 픽쳐의 pic_struct에는, 각각 1 또는 2가 세트된다. 또한, 픽쳐에 의해, 톱 필드와 보텀 필드를 그 순으로 표시하는 것을 지시하는 경우에는, 그 픽쳐의 pic_struct에는, 3이 세트되고, 보텀 필드와 톱 필드를 그 순으로 표시하는 것을 지시하는 경우에는, pic_struct에는, 4가 세트된다. 또한, 픽쳐에 의해, 톱 필드, 보텀 필드, 반복해서 톱 필드를 그 순으로 표시하는 것을 지시하는 경우에는, 그 픽쳐의 pic_struct에는, 5가 세트되고, 보텀 필드, 톱 필드, 반복해서 보텀 필드를 그 순으로 표시하는 것을 지시하는 경우에는, pic_struct에는, 6이 세트된다. 또한, 픽쳐에 의해, 1프레임을 2회 반복 하여 또는 3회 반복하여 표시하는 것을 지시하는 경우에는, 그 픽쳐의 pic_struct에는, 각각 7 또는 8이 세트된다.
au_ref_flag는, 대응하는 액세스 유닛이, 다른 액세스 유닛의 디코드에서 참조되는 참조 화상인지의 여부를 나타내고, 참조 화상인 경우에는 1로 되고, 참조 화상이 아닌 경우에는 0으로 된다.
AU_length는, 대응하는 액세스 유닛의 사이즈를 바이트 단위로 나타낸다.
[디스크(101)에 기록된 데이터의 구체예]
다음으로, 도 29 내지 도 32는, 도 1의 디스크(101)에 기록된, 전술한 바와 같은 포맷의 데이터의 구체예를 도시하고 있다.
 여기서, 도 29 내지 도 32에서는, 비디오 스트림으로서는, MPEG2-Video를 채용하고, 오디오 스트림으로서는, ATRAC 오디오 스트림을 채용하고 있다. 단, 비디오 스트림이나 오디오 스트림은, 이에 한정되는 것은 아니다. 즉, 비디오 스트림으로서는, 예를 들면, MPEG4-Visual이나 MPEG4-AVC 등을 채용할 수 있다. 또한, 오디오 스트림으로서는, 예를 들면, MPEG1/2/4 오디오나 LPCM 오디오 스트림 등을 채용할 수 있다.
또한, 자막 스트림은, 비디오 스트림이나 오디오 스트림과 달리, 동일한 간격으로 연속적인 디코드나 표시가 행해진다고는 할 수 없다. 즉, 자막 스트림은, 때때로, 도 2A 및 도 2B의 버퍼 제어 모듈(215)로부터 자막 디코더 제어 모듈(218)에 공급되어 디코드된다.
도 29 내지 도 32는, 디스크(101)에서, 도 6에 도시한 바와 같이, "CLIP" 디 렉토리에, 3개의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"가 기록되고, "STREAM" 디렉토리에, 그 3개의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP" 각각에 대응하는 3개의 클립 스트림 파일 "00001.PS", "00002.PS", "00003.PS"가 기록되어 있는 경우의, "PLAYLIST.DAT" 파일, 클립 정보 파일 "00001.CLP", "00002.CLP", 및 "00003.CLP" 등의 구체적인 예를 도시하고 있다. 단, 도 29 내지 도 32에서는, "PLAYLIST.DAT" 파일 등의 데이터의 일부를 생략하고 있다.
즉, 도 29는, 도 7에서 설명한 "PLAYLIST.DAT" 파일의 구체예를 도시하고 있다.
도 29에서는, number_of_PlayLists는 2로 되어 있고, 따라서, "PLAYLIST.DAT" 파일에 포함되는 PlayList()의 수는 2이다. 도 29에서는, 그 2개의 PlayList() 중 1번째가 PlayList #0으로, 2번째가 PlayList #1로, 각각 기재되어 있다.
1번째의 PlayList()인 PlayList #0에 대해서는, capture_enable_flag_PlayList가 1로 되어 있고, 따라서, PlayList #0에 따라 재생되는 비디오 데이터의 2차 이용이 허가되어 있다. 또한, PlayList #0에 대해서는, number_of_PlayItems가 2로 되어 있고, 따라서, PlayList #0에 포함되는 PlayItem()의 수는 2이다. 도 29에서는, 그 2개의 PlayItem()인 PlayItem #0과 PlayItem #1의 구체예가, 「PlayList #0」의 란의 하방에 기재되어 있다.
PlayList #0에 포함되는 1번째의 PlayItem()인 PlayItem #0에서는, 도 8에서 설명한 Clip_Information_file_name이 "00001.CLP"로, In_time이 180,090으로, OUT_time이 27,180,090으로, 각각 되어 있다. 따라서, PlayList #0의 PlayItem #0에 의해 재생되는 클립은, 클립 정보 파일 "00001.CLP"에 대응하는 클립 스트림 파일 "00001.PS"의, 시각 180,090부터 27,180,090까지이다.
PlayList #0에 포함되는 2번째의 PlayItem()인 PlayItem #1에서는, 도 8에서 설명한 Clip_Information_file_name이 "00002.CLP"로, In_time이 90,000으로, OUT_time이 27,090,000으로, 각각 되어 있다. 따라서, PlayList #0의 PlayItem #1에 의해 재생되는 클립은, 클립 정보 파일 "00002.CLP"에 대응하는 클립 스트림 파일 "00002.PS"의, 시각 90,000부터 27,090,000까지이다.
한편, 도 29에서, 2번째의 PlayList()인 PlayList #1에 대해서는, capture_enable_flag_PlayList가 0으로 되어 있고, 따라서, PlayList #1에 따라 재생되는 비디오 데이터의 2차 이용이 허가되어 있지 않다. 또한, PlayList #1에 대해서는, number_of_PlayItems가 1로 되어 있고, 따라서, PlayList #1에 포함되는 PlayItem()의 수는 1이다. 도 29에서는, 그 1개의 PlayItem()인 PlayItem #0의 구체예가, 「PlayList #1」의 란의 하방에 기재되어 있다.
PlayList #1에 포함되는 1개의 PlayItem()인 PlayItem #0에서는, 도 8에서 설명한 Clip_Information_file_name이 "00003.CLP"로, In_time이 90,000으로, OUT_time이 81,090,000으로, 각각 되어 있다. 따라서, PlayList #1의 PlayItem #0에 의해 재생되는 클립은, 클립 정보 파일 "00003.CLP"에 대응하는 클립 스트림 파일 "00003.PS"의, 시각 90,000부터 81,090,000까지이다.
다음으로, 도 30A 및 도 30B는, 도 12에서 설명한 클립 정보 파일 Clip()의 구체예를 도시하고 있다. 즉, 도 30A 및 도 30B는, 도 6의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"의 구체예를 도시하고 있다.
클립 정보 파일 "00001.CLP"에서는, presentation_start_time이 90,000으로, presentation_end_time이 27,990,000으로, 각각 되어 있다. 따라서, 클립 정보 파일 "00001.CLP"에 대응하는 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림에 따르면, 310초분((27,990,000-90,000)/90㎑)의 콘텐츠가 이용 가능하다.
또한, 클립 정보 파일 "00001.CLP"에서는, capture_enable_flag_Clip이 1로 되어 있고, 따라서, 클립 정보 파일 "00001.CLP"에 대응하는 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림에 다중화된 비디오 스트림에 대해서는, 그 2차 이용이 허가되어 있다.
또한, 도 30A 및 도 30B에서, 클립 정보 파일 "00001.CLP"의 number_of_streams는 4로 되어 있고, 따라서, 대응하는 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림에는, 4개의 엘리멘터리 스트림이 다중화되어 있다.
지금, 그 4개의 엘리멘터리 스트림을, stream #0, stream #1, stream #2, stream #3으로 하면, 도 30A 및 도 30B에서는, 그 4개의 엘리멘터리 스트림 stream #0, stream #1, stream #2, stream #3 각각의 StreamInfo()(도 12)의 구체예가, 「"00001.CLP"」의 란의 하방에 기재되어 있다.
클립 스트림 파일 "00001.PS"의 1개째의 엘리멘터리 스트림 stream #0에 대 해서는, stream_id가 0xE0으로 되어 있고, 따라서, 이 엘리멘터리 스트림 stream #0은, 도 23 및 도 25(혹은 도 13)에서 설명한 바와 같이, 비디오 스트림이다. 또한, 본 실시 형태에서는, 비디오 스트림에 대해서는, 전술한 바와 같이, private_stream_id는 무관계하지만, 도 30A 및 도 30B에서는, 0x00으로 되어 있다.
또한, 클립 스트림 파일 "00001.PS"의 1개째의 엘리멘터리 스트림인 비디오 스트림 stream #0에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 picture_size가 '720×480'으로, frame_rate가 '29.97㎐'로, cc_flag가 'Yes'로, 각각 되어 있다. 따라서, 이 비디오 스트림 stream #0은, 720×480픽셀의, 프레임 주기가 29.97㎐인 비디오 데이터이며, 또한, 클로즈드 캡션 데이터를 포함하고 있다.
또한, 클립 스트림 파일 "00001.PS"의 1개째의 엘리멘터리 스트림인 비디오 스트림 stream #0에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 0으로 되어 있어, pts_change_point와 DynamicInfo()의 세트는 존재하지 않는다.
다음으로, 클립 스트림 파일 "00001.PS"의 2개째의 엘리멘터리 스트림 stream #1에 대해서는, stream_id가 0xBD로 되어 있고, private_stream_id가 0x00으로 되어 있다. 따라서, 이 엘리멘터리 스트림 stream #1은, 도 23 및 도 25에서 설명한 바와 같이, ATRAC 오디오 스트림이다.
또한, 클립 스트림 파일 "00001.PS"의 2개째의 엘리멘터리 스트림인 ATRAC 오디오 스트림 stream #1에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 audio_language_code가 '일본어'로, channel_configuration 이 'STEREO'로, lfe_existence가 'NO'로, sampling_frequency가 '48㎑'로, 각각 되어 있다. 따라서, 이 ATRAC 오디오 스트림 stream #1은, 일본어이며, 또한 스테레오의 오디오 데이터이다. 또한, 저역 강조 채널은 포함되어 있지 않고, 샘플링 주파수는, 48㎑이다.
또한, 클립 스트림 파일 "00001.PS"의 2개째의 엘리멘터리 스트림인 ATRAC 오디오 스트림 stream #1에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 0으로 되어 있어, pts_change_point와 DynamicInfo()의 세트는 존재하지 않는다.
다음으로, 클립 스트림 파일 "00001.PS"의 3개째의 엘리멘터리 스트림 stream #2에 대해서는, stream_id가 0xBD로 되어 있고, private_stream_id가 0x80으로 되어 있다. 따라서, 이 엘리멘터리 스트림 stream #2는, 도 23 및 도 25에서 설명한 바와 같이, 자막 스트림이다.
또한, 클립 스트림 파일 "00001.PS"의 3개째의 엘리멘터리 스트림인 자막 스트림 stream #2에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 subtitle_language_code가 '일본어'로, configurable_flag가 0으로, 각각 되어 있다. 따라서, 이 자막 스트림 stream #2는, 일본어의 자막 데이터이며, 또한, 그 표시 방식을 변경하는 것은 허가되어 있지 않다.
또한, 클립 스트림 파일 "00001.PS"의 3개째의 엘리멘터리 스트림인 자막 스트림 stream #2에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 0으로 되어 있어, pts_change_point와 DynamicInfo()의 세트는 존재하지 않는다.
다음으로, 클립 스트림 파일 "00001.PS"의 4개째의 엘리멘터리 스트림 stream #3에 대해서는, stream_id가 0xBD로 되어 있고, private_stream_id가 0x81로 되어 있다. 따라서, 이 엘리멘터리 스트림 stream #3은, 도 23 및 도 25에서 설명한 바와 같이, 자막 스트림이다.
또한, 클립 스트림 파일 "00001.PS"의 3개째의 엘리멘터리 스트림인 자막 스트림 stream #2와, 4개째의 엘리멘터리 스트림인 자막 스트림 stream #3을 구별하기 위해서, 각각의 private_stream_id는, 0x80과 0x81로 되어 있다.
또한, 클립 스트림 파일 "00001.PS"의 4개째의 엘리멘터리 스트림인 자막 스트림 stream #2에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 subtitle_language_code가 '일본어'로, configurable_flag가 1로, 각각 되어 있다. 따라서, 이 자막 스트림 stream #3은, 일본어의 자막 데이터이며, 또한, 그 표시 방식을 변경하는 것이 허가되어 있다.
또한, 클립 스트림 파일 "00001.PS"의 4개째의 엘리멘터리 스트림인 자막 스트림 stream #3에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 0으로 되어 있어, pts_change_point와 DynamicInfo()의 세트는 존재하지 않는다.
다음으로, 도 30A 및 도 30B에서, 클립 정보 파일 "00002.CLP"에 대해서는, presentation_start_time이 90,000으로, presentation_end_time이 27,090,000으로, 각각 되어 있다. 따라서, 클립 정보 파일 "00002.CLP"에 대응하는 클립 스트림 파일 "00002.PS"에 저장된 프로그램 스트림에 따르면, 300초분((27,090,000-90,000)/90㎑)의 콘텐츠가 이용 가능하다.
또한, 클립 정보 파일 "00002.CLP"에서는, capture_enable_flag_Clip이 0으로 되어 있고, 따라서, 클립 정보 파일 "00002.CLP"에 대응하는 클립 스트림 파일 "00002.PS"에 저장된 프로그램 스트림에 다중화된 비디오 스트림에 대해서는, 그 2차 이용이 허가되어 있지 않다.
또한, 도 30A 및 도 30B에서, 클립 정보 파일 "00002.CLP"의 number_of_streams는 4로 되어 있고, 따라서, 대응하는 클립 스트림 파일 "00002.PS"에 저장된 프로그램 스트림에는, 전술한 클립 스트림 파일 "00001.PS"에서의 경우와 마찬가지로, 4개의 엘리멘터리 스트림이 다중화되어 있다.
지금, 그 4개의 엘리멘터리 스트림을, stream #0, stream #1, stream #2, stream #3으로 하면, 도 30A 및 도 30B에서는, 그 4개의 엘리멘터리 스트림 stream #0, stream #1, stream #2, stream #3 각각의 StreamInfo()(도 12)의 구체예가, 「"00002.CLP"」의 란의 하방에 기재되어 있다.
여기서, 도 30A 및 도 30B에서는, 클립 스트림 파일 "00002.PS"의 1 내지 4개째의 엘리멘터리 스트림 stream #0 내지 #3 각각의 StreamInfo()의 내용은, 전술한 클립 스트림 파일 "00001.PS"의 1 내지 4개째의 엘리멘터리 스트림 stream #0 내지 #3 각각의 StreamInfo()의 내용과 동일하게 되어 있으므로, 그 설명은 생략한다.
또한, 전술한 바와 같이, 클립 스트림 파일 "00002.PS"의 1 내지 4개째의 엘리멘터리 스트림 stream #0 내지 #3 각각의 StreamInfo()의 내용은, 클립 스트림 파일 "00001.PS"의 1 내지 4개째의 엘리멘터리 스트림 stream #0 내지 #3 각각의 StreamInfo()의 내용과 동일하므로, 클립 스트림 파일 "00002.PS"의 1개째의 엘리멘터리 스트림 stream #0은 비디오 스트림이며, 2개째의 엘리멘터리 스트림 stream #1은 ATRAC 오디오 스트림이다. 또한, 그 3개째의 엘리멘터리 스트림 stream #2와, 4개째의 엘리멘터리 스트림 stream #3은, 모두 자막 스트림이다.
다음으로, 도 30A 및 도 30B에서, 클립 정보 파일 "00003.CLP"에 대해서는, presentation_start_time이 90,000으로, presentation_end_time이 81,090,000으로, 각각 되어 있다. 따라서, 클립 정보 파일 "00003.CLP"에 대응하는 클립 스트림 파일 "00003.PS"에 저장된 프로그램 스트림에 따르면, 900초분((81,090,000-90,000)/90㎑)의 콘텐츠가 이용 가능하다.
또한, 클립 정보 파일 "00003.CLP"에서는, capture_enable_flag_Clip이 1로 되어 있고, 따라서, 클립 정보 파일 "00003.CLP"에 대응하는 클립 스트림 파일 "00003.PS"에 저장된 프로그램 스트림에 다중화된 비디오 스트림에 대해서는, 그 2차 이용이 허가되어 있다.
또한, 도 30A 및 도 30B에서, 클립 정보 파일 "00003.CLP"의 number_of_streams는 3으로 되어 있고, 따라서, 대응하는 클립 스트림 파일 "00003.PS"에 저장된 프로그램 스트림에는, 3개의 엘리멘터리 스트림이 다중화되어 있다.
지금, 그 3개의 엘리멘터리 스트림을, stream #0, stream #1, stream #2로 하면, 도 30A 및 도 30B에서는, 그 3개의 엘리멘터리 스트림 stream #0, stream #1, stream #2 각각의 StreamInfo()(도 12)의 구체예가, 「"00003.CLP"」의 란의 하방에 기재되어 있다.
클립 스트림 파일 "00003.PS"의 1개째의 엘리멘터리 스트림 stream #0에 대해서는, stream_id가 0xE0으로 되어 있고, 따라서, 이 엘리멘터리 스트림 stream #0은, 도 23 및 도 25(혹은 도 13)에서 설명한 바와 같이, 비디오 스트림이다. 또한, 클립 스트림 파일 "00001.PS"의 1개째의 엘리멘터리 스트림 stream #0과 마찬가지로, private_stream_id는, 0x00으로 되어 있다.
또한, 클립 스트림 파일 "00003.PS"의 1개째의 엘리멘터리 스트림인 비디오 스트림 stream #0에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 picture_size가 '720×480'으로, frame_rate가 '29.97㎐'로, cc_flag가 'No'로, 각각 되어 있다. 따라서, 이 비디오 스트림 stream #0은, 720×480픽셀의, 프레임 주기가 29.97㎐인 비디오 데이터이며, 또한, 클로즈드 캡션 데이터를 포함하고 있지 않다.
또한, 클립 스트림 파일 "00003.PS"의 1개째의 엘리멘터리 스트림인 비디오 스트림 stream #0에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 2로 되어 있고, 따라서, 그 StreamInfo()에는, pts_change_point와 DynamicInfo()의 세트가 2세트 기술되어 있다.
다음으로, 클립 스트림 파일 "00003.PS"의 2개째의 엘리멘터리 스트림 stream #1에 대해서는, stream_id가 0xE1로 되어 있고, 따라서, 이 엘리멘터리 스트림 stream #1은, 도 23 및 도 25(혹은 도 13)에서 설명한 바와 같이, 비디오 스트림이다. 또한, 클립 스트림 파일 "00003.PS"의 1개째의 엘리멘터리 스트림인 비 디오 스트림 stream #0과, 2개째의 엘리멘터리 스트림인 비디오 스트림 stream #1을 구별하기 위해서, 각각의 stream_id는, 0xE0과 0xE1로 되어 있다. 또한, 클립 스트림 파일 "00001.PS"의 1개째의 엘리멘터리 스트림 stream #0과 마찬가지로, private_stream_id는, 0x00로 되어 있다.
또한, 클립 스트림 파일 "00003.PS"의 2개째의 엘리멘터리 스트림인 비디오 스트림 stream #1에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 picture_size, frame_rate, cc_flag가, 1개째의 엘리멘터리 스트림인 비디오 스트림 stream #0에 대한 것과 동일하게 되어 있다. 따라서, 클립 스트림 파일 "00003.PS"의 2개째의 엘리멘터리 스트림인 비디오 스트림 stream #1은, 720×480픽셀의, 프레임 주기가 29.97㎐인 비디오 데이터이며, 또한, 클로즈드 캡션 데이터를 포함하고 있지 않다.
또한, 클립 스트림 파일 "00003.PS"의 2개째의 엘리멘터리 스트림인 비디오 스트림 stream #1에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 0으로 되어 있어, pts_change_point와 DynamicInfo()의 세트는 존재하지 않는다.
다음으로, 클립 스트림 파일 "00003.PS"의 3개째의 엘리멘터리 스트림 stream #2에 대해서는, stream_id가 0xBD로 되어 있고, private_stream_id가 0x00으로 되어 있다. 따라서, 이 엘리멘터리 스트림 stream #2는, 도 23 및 도 25에서 설명한 바와 같이, ATRAC 오디오 스트림이다.
또한, 클립 스트림 파일 "00003.PS"의 3개째의 엘리멘터리 스트림인 ATRAC 오디오 스트림 stream #2에 대해서는, 그 StreamInfo()에 포함되는 StaticInfo()(도 14)의 audio_language_code, channel_configuration, lfe_existence, sampling_frequency가, 클립 스트림 파일 "00001.PS"의 2개째의 엘리멘터리 스트림인 ATRAC 오디오 스트림 stream #1의 것과 동일하게 되어 있다. 따라서, 클립 스트림 파일 "00003.PS"의 3개째의 엘리멘터리 스트림인 ATRAC 오디오 스트림 stream #2는, 일본어이며, 또한 스테레오의 오디오 데이터이다. 또한, 저역 강조 채널은 포함되어 있지 않고, 샘플링 주파수는, 48㎑이다.
또한, 클립 스트림 파일 "00003.PS"의 3개째의 엘리멘터리 스트림인 ATRAC 오디오 스트림 stream #2에 대해서는, StreamInfo()(도 12)의 number_of_DynamicInfo가 3으로 되어 있고, 따라서, 그 StreamInfo()에는, pts_change_point와 DynamicInfo()의 세트가 3세트 기술되어 있다.
다음으로, 도 31은, 도 12에서 설명한 클립 정보 파일 Clip() 중 EP_map() 구체예를 도시하고 있다. 즉, 도 31은, 도 6의 클립 정보 파일 "00001.CLP" 중, 도 16의 EP_map()의 구체예를 도시하고 있다.
도 31에서, EP_map()의 number_of_stream_id_entries는 1로 되어 있고, 따라서, 이 EP_map()에는, 1개의 엘리멘터리 스트림에 대한 디코드 개시 가능점의 정보가 기술되어 있다.
또한, 도 31의 EP_map()에서는, stream_id가 0xE0으로 되어 있다. 따라서, 도 23 및 도 25에서 설명한 것으로부터, EP_map()에는, 0xE0으로 되어 있는 stream_id에 의해 특정되는 비디오 스트림에 대한 디코드 개시 가능점인 RAPI(랜덤 액세스 포인트 정보)의 정보로서, PTS_EP_start와 RPN_EP_start(도 16)가 기술되어 있다. 즉, 도 31은, 클립 정보 파일 "00001.CLP"의 EP_map()이며, 클립 정보 파일 "00001.CLP"에 대응하는 클립 스트림 파일 "00001.CLP"에서, stream_id가 0xE0인 엘리멘터리 스트림은, 도 30A 및 도 30B에서 설명한 바와 같이, 클립 스트림 파일 "00001.CLP"의 1개째의 비디오 스트림 stream #0이기 때문에, 도 31의 EP_map()에 기술되어 있는 정보는, 그 비디오 스트림 stream #0의 디코드 개시 가능점의 PTS_EP_start와 RPN_EP_start이다.
도 31에서는, 클립 스트림 파일 "00001.CLP"의 1개째의 비디오 스트림 stream #0의 디코드 개시 가능점 중, 선두로부터 5점의 PTS_EP_start와 RPN_EP_start가 기재되어 있고, 6점째 이후의 PTS_EP_start와 RPN_EP_start의 기재는 생략하고 있다.
RPN_EP_start, PTS_EP_start, 1stRef_Picture, 2ndRef_Picture, 3rdRef_Picture, 4thRef_Picture에는, 다중화 스트림에 다중화된 모든 RAPI의 개시 위치 외에, RAPI 직후에 놓여져 있는 인트라 픽쳐 및 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치가 나타내어져 있다.
선두의 RAPI의 위치는 0(섹터)이며, 직후의 인트라 픽쳐의 PTS는 90,000이다. 또한, 해당 인트라 픽쳐, 및 2매째, 3매째, 4매째의 참조 화상의 종료 위치는, RAPI의 선두로부터의 상대 섹터수로 각각, 28, 37, 48, 58이다.
또한, 2번째의 RAPI의 위치는 244(섹터)이며, 직후의 인트라 픽쳐의 PTS는 135,045이다. 또한, 해당 인트라 픽쳐, 및 2매째, 3매째, 4매째의 참조 화상의 종료 위치는, RAPI의 선두로부터의 상대 섹터수로 각각 10, 18, 25, 31이다.
또한, 3번째의 RAPI의 위치는 305(섹터)이며, 직후의 인트라 픽쳐의 PTS는 180,090이다. 또한, 해당 인트라 픽쳐, 및 2매째, 3매째, 4매째의 참조 화상의 종료 위치는, RAPI의 선두로부터의 상대 섹터수로 각각 25, 44, 50, 54이다.
또한, 4번째의 RAPI의 위치는 427(섹터)이며, 직후의 인트라 픽쳐의 PTS는 225,135이다. 또한, 해당 인트라 픽쳐, 및 2매째, 3매째, 4매째의 참조 화상의 종료 위치는, RAPI의 선두로부터의 상대 섹터수로 각각 8, 15, 22, 29이다.
또한, 5번째의 RAPI의 위치는 701(섹터)이며, 직후의 인트라 픽쳐의 PTS는 270,180이다. 또한, 해당 인트라 픽쳐, 및 2매째, 3매째, 4매째의 참조 화상의 종료 위치는, RAPI의 선두로부터의 상대 섹터수로 각각 26, 32, 41, 48이다.
N-th_Ref_picture_copy는, 4점의 참조 화상 종료 위치(1stRef_Picture, 2ndRef_Picture, 3rdRef_Picture, 4thRef_Picture) 중, 소정의 섹터수(인코드 처리에서, 통합하여 읽어내기 가능한 섹터수)에 가까운 값이 저장된다. 도 31에서는, 섹터수가 "30"에 가장 가까운 것이 선택되어 있다.
예를 들면, 선두의 엔트리에 대해서는 PTS_EP_start=90,000, RPN_EP_start=0이다. N-th_Ref_picture_copy는, 28, 37, 48, 58 중에서 "30"에 가장 가까운 28이 선택되고, 이 결과 index_N_minus1에는 1stRef_picture를 나타내는 값 "0"이 저장되어 있다.
다음으로, 2번째의 엔트리에 대해서는 PTS_EP_start=135,045, RPN_EP_start=244이다. N-th_Ref_picture_copy는, 10, 18, 25, 31 중에서 "30"에 가장 가까운 31이 선택되고, 이 결과 index_N_minus1에는 4thRef_picture를 나타내 는 값 "3"이 저장되어 있다.
이에 의해, 도 31의 예의 5점의 엔트리에 대한 index_N_minus1과 N-th_Ref_picture_copy는 (0, 28), (3, 31), (0, 25), (3, 29), (1, 32)가 저장된다.
이 선택 알고리즘은, 재생 기기에서의 재생 품질 등, 종합적으로 감안하여 결정된다. 따라서, 본 실시예에서는, 비교적 작은 섹터수 "30"에 가장 가까운 것을 선택하는 것으로 하고 있지만, 이 이외의 섹터수이어도 된다. 또한, index_N_minus1의 값이 작을 때, RAPI의 위치로부터 N-th_Ref_picture_copy의 크기만큼 데이터를 읽어들였을 때에, 거기에 포함되는 참조 화상의 수가 적고, 반대로 index_N_minus1의 값이 클 때에는, 포함되어 있는 참조 화상의 수가 많다고 하는 것으로 된다.
또한, 이 예에서는 5점의 데이터 모두에 4매의 참조 화상의 종료 위치가 기술되어 있지만, 비디오 인코드의 방법, 혹은 인트라 픽쳐의 간격에 따라서는, 참조 화상이 4매 미만으로 될 가능성도 있다. 그와 같은 경우에는, 각 엔트리 포인트에 대하여 존재하는, 4매 이하의 최대의 참조 화상의 종료 위치를 기술한다고 하는 방법도 생각된다.
또한, 도 31의 EP_map()에서, private_stream_id는 0x00으로 되어 있지만, stream_id가 비디오 스트림을 나타내고 있는 경우에는, 전술한 바와 같이, private_stream_id는 무관계하다.
다음으로, 도 32는, 도 29에서 설명한 PlayList #0과 PlayList #1(도 7의 PlayList()) 중 PlayListMark()의 구체예를 도시하고 있다.
도 32 상측은, PlayList #0의 PlayListMark()(도 9)를 도시하고 있다.
도 32 상측에서, PlayList #0의 PlayListMark()에서의 number_of_PlayList_marks는 7로 되어 있고, 따라서, PlayList #0의 PlayListMark()에 포함되는 Mark()의 수는 7이다.
또한, 도 32 상측에서, PlayList #0에 포함되는 7개의 Mark() 중 1번째의 Mark()인 Mark #0은, mark_type(도 9)이 'Chapter'로 되어 있으므로, 챕터 마크이다. 또한, Mark #0은, ref_to_PlayItem_id(도 9)가 0으로 되어 있으므로, PlayList #0에 포함되는 도 29의 2개의 PlayItem #0과 #1 중, PlayItem #0에 속한다. 또한, Mark #0은, mark_time_stamp가 180,090으로 되어 있으므로, PlayList #0에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일의 시각(재생 시각) 180,090 상의 표시이다. 또한, Mark #0은, entry_ES_stream_id 및 entry_ES_private_stream_id가 모두 0으로 되어 있으므로, 어느 엘리멘터리 스트림에도 관련지어져 있지 않다. 또한, Mark #0은, mark_data가 1로 되어 있으므로, 번호가 1인 챕터를 나타낸다.
또한, 여기서는, PlayList #0에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일은, 도 29에서 설명한, 그 PlayItem #0의 Clip_Infomation_file_name에 기술되어 있는 "00001.CLP"로부터 특정되는 클립 스트림 파일 "00001.PS"이며, 따라서, Mark #0의 mark_time_stamp가 나타내는, 전술한 시각 180,090은, 클립 스트림 파일 "00001.PS"의 시각이다.
도 32 상측에서, PlayList #0에 포함되는 7개의 Mark() 중 5번째의 Mark()인 Mark #4도, 1번째의 Mark #0과 마찬가지의 챕터 마크이다.
즉, 5번째의 Mark()인 Mark #4는, mark_type(도 9)이 'Chapter'로 되어 있으므로, 챕터 마크이다. 또한, Mark #4는, ref_to_PlayItem_id(도 9)가 1로 되어 있으므로, PlayList #0에 포함되는 도 29의 2개의 PlayItem #0과 #1 중, PlayItem #1에 속한다. 또한, Mark #4는, mark_time_stamp가 90,000으로 되어 있으므로, PlayList #0에 포함되는 PlayItem #1에 의해 재생되는 클립 스트림 파일의 시각90,000 상의 표시이다. 또한, Mark #4는, entry_ES_stream_id 및 entry_ES_private_stream_id가 모두 0으로 되어 있으므로, 어느 엘리멘터리 스트림에도 관련지어져 있지 않다. 또한, Mark #4는, mark_data가 2로 되어 있으므로, 번호가 2인 챕터를 나타낸다.
또한, 여기서는, PlayList #0에 포함되는 PlayItem #1에 의해 재생되는 클립 스트림 파일은, 도 29에서 설명한, 그 PlayItem #1의 Clip_Infomation_file_name에 기술되어 있는 "00002.CLP"로부터 특정되는 클립 스트림 파일 "00002.PS"이며, 따라서, Mark #4의 mark_time_stamp가 나타내는, 전술한 시각 90,000은, 클립 스트림 파일 "00002.PS"의 시각이다.
또한, 도 32 상측에서, PlayList #0에 포함되는 7개의 Mark() 중 2번째의 Mark()인 Mark #1은, mark_type(도 9)이 'Index'로 되어 있으므로, 인덱스 마크이다. 또한, Mark #1은, ref_to_PlayItem_id(도 9)가 0으로 되어 있으므로, PlayList #0에 포함되는 도 29의 2개의 PlayItem #0과 #1 중, PlayItem #0에 속한다. 또한, Mark #1은, mark_time_stamp가 5,580,090으로 되어 있으므로, PlayList #0에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일의 시각 5,580,090 상의 표시이다. 또한, Mark #1은, entry_ES_stream_id 및 entry_ES_private_stream_id가 모두 0으로 되어 있으므로, 어느 엘리멘터리 스트림에도 관련지어져 있지 않다. 또한, Mark #1은, mark_data가 1로 되어 있으므로, 번호가 1인 인덱스를 나타낸다.
또한, 여기서는, PlayList #0에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일은, 전술한 바와 같이, 클립 스트림 파일 "00001.PS"이며, 따라서, Mark #1의 mark_time_stamp가 나타내는, 전술한 시각 5,580,090은, 클립 스트림 파일 "00001.PS"의 시각이다.
도 32 상측에서, PlayList #0에 포함되는 7개의 Mark() 중 3번째, 6번째, 7번째의 Mark()인 Mark #2, Mark #5, Mark #6도, 2번째의 Mark #1과 마찬가지의 인덱스 마크이다.
또한, 도 32 상측에서, PlayList #0에 포함되는 7개의 Mark() 중 4번째의 Mark()인 Mark #3은, mark_type(도 9)이 'Event'로 되어 있으므로, 이벤트 마크이다. 또한, Mark #3은, ref_to_PlayItem_id(도 9)가 0으로 되어 있으므로, PlayList #0에 포함되는 도 29의 2개의 PlayItem #0과 #1 중, PlayItem #0에 속한다. 또한, Mark #3은, mark_time_stamp가 16,380,090으로 되어 있으므로, PlayList #0에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일의 시각 16,380,090 상의 표시이다. 또한, Mark #3은, entry_ES_stream_id 및 entry_ES_private_stream_id가 모두 0으로 되어 있으므로, 어느 엘리멘터리 스트림 에도 관련지어져 있지 않다. 또한, Mark #3은, mark_data가 0으로 되어 있으므로, 인수로서 0을 수반하는 이벤트를 발생시킨다.
또한, 여기서는, PlayList #0에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일은, 전술한 바와 같이, 클립 스트림 파일 "00001.PS"이며, 따라서, Mark #3의 mark_time_stamp가 나타내는, 전술한 시각 16,380,090은, 클립 스트림 파일 "00001.PS"의 시각이다.
여기서, 도 32 상측에서는, PlayList #0의 PlayListMark()의 일람표의 란 밖의 우측에, Mark()가 속하는 PlayItem()의 선두로부터의 시간을 나타내고, 또한 그 우측에, PlayList #0의 선두로부터의 시각을 나타내고 있다.
다음으로, 도 32 하측은, PlayList #1의 PlayListMark()(도 9)를 도시하고 있다.
도 32 하측에서, PlayList #1의 PlayListMark()에서의 number_of_PlayList_marks는 3으로 되어 있고, 따라서, PlayList #1의 PlayListMark()에 포함되는 Mark()의 수는 3이다.
또한, 도 32 하측에서, PlayList #1에 포함되는 3개의 Mark() 중 1번째의 Mark()인 Mark #0은, mark_type(도 9)이 'Chapter'로 되어 있으므로, 챕터 마크이다. 또한, Mark #0은, ref_to_PlayItem_id(도 9)가 0으로 되어 있으므로, PlayList #1에 포함되는 도 29의 1개의 PlayItem #0에 속한다. 또한, Mark #0은, mark_time_stamp가 90,000으로 되어 있으므로, PlayList #1에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일의 시각 90,000 상의 표시이다. 또한, Mark #0은, entry_ES_stream_id 및 entry_ES_private_stream_id가 모두 0으로 되어 있으므로, 어느 엘리멘터리 스트림에도 관련지어져 있지 않다. 또한, Mark #0은, mark_data가 0으로 되어 있으므로, 번호가 0인 챕터를 나타낸다.
또한, 여기서는, PlayList #1에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일은, 도 29에서 설명한, 그 PlayItem #0의 Clip_Infomation_file_name에 기술되어 있는 "00003.CLP"로부터 특정되는 클립 스트림 파일 "00003.PS"이며, 따라서, Mark #0의 mark_time_stamp가 나타내는, 전술한 시각 90,000은, 클립 스트림 파일 "00003.PS"의 시각이다.
도 32 하측에서, PlayList #1에 포함되는 3개의 Mark() 중 2번째의 Mark()인 Mark #1은, mark_type(도 9)이 'Event'로 되어 있으므로, 이벤트 마크이다. 또한, Mark #1은, ref_to_PlayItem_id(도 9)가 0으로 되어 있으므로, PlayList #1에 포함되는 도 29의 1개의 PlayItem #0에 속한다. 또한, Mark #1은, mark_time_stamp가 27,090,000으로 되어 있으므로, PlayList #1에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일의 시각 27,090,000 상의 표시이다. 또한, Mark #1은, entry_ES_stream_id가 0xE0이고, entry_ES_private_stream_id가 0으로 되어 있으므로, stream_id가 0xE0으로 특정되는 엘리멘터리 스트림, 즉, 도 23 및 도 25에서 설명한 바와 같이, 비디오 스트림에 관련지어져 있다. 또한, Mark #1은, mark_data가 1로 되어 있으므로, 인수로서 1을 수반하는 이벤트를 발생시킨다.
또한, 여기서는, PlayList #1에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일은, 전술한 바와 같이, 클립 스트림 파일 "00003.PS"이며, 따라서, Mark #1의 mark_time_stamp가 나타내는, 전술한 시각 27,090,000은, 클립 스트림 파일 "00003.PS"의 시각이다.
또한, Mark #1이 관련지어져 있는, stream_id가 0xE0인 비디오 스트림은, 그 Mark #1이 속하는, 도 29의 PlayList #1에 포함되는 PlayItem #0의 Clip_Infomation_file_name에 기술되어 있는 "00003.CLP"에 기술되어 있는 stream_id가 0xE0인 비디오 스트림, 즉, 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"로부터 특정되는, 클립 스트림 파일 "00003.PS"에 다중화되어 있는 3개의 엘리멘터리 스트림 stream #0 내지 #2 중, 1개째의 엘리멘터리 스트림(비디오 스트림) stream #0이다.
다음으로, 도 32 하측에서, PlayList #1에 포함되는 3개의 Mark() 중 3번째의 Mark()인 Mark #2는, mark_type(도 9)이 'Event'로 되어 있으므로, 이벤트 마크이다. 또한, Mark #2는, ref_to_PlayItem_id(도 9)가 0으로 되어 있으므로, PlayList #1에 포함되는 도 29의 1개의 PlayItem #0에 속한다. 또한, Mark #1은, mark_time_stamp가 27,540,000으로 되어 있으므로, PlayList #1에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일의 시각 27,540,000 상의 표시이다. 또한, Mark #2는, entry_ES_stream_id가 0xE1이고, entry_ES_private_stream_id가 0으로 되어 있으므로, stream_id가 0xE1로 특정되는 엘리멘터리 스트림, 즉, 도 23 및 도 25에서 설명한 바와 같이, 비디오 스트림에 관련지어져 있다. 또한, Mark #2는, mark_data가 2로 되어 있으므로, 인수로서 2를 수반하는 이벤트를 발생시킨다.
또한, 여기서는, PlayList #1에 포함되는 PlayItem #0에 의해 재생되는 클립 스트림 파일은, 전술한 바와 같이, 클립 스트림 파일 "00003.PS"이고, 따라서, Mark #2가 나타내는, 전술한 시각 27,540,000은, 클립 스트림 파일 "00003.PS"의 시각이다.
또한, Mark #2가 관련지어져 있는, stream_id가 0xE1인 비디오 스트림은, 그 Mark #2가 속하는, 도 29의 PlayList #1에 포함되는 PlayItem #0의 Clip_Infomation_file_name에 기술되어 있는 "00003.CLP"에 기술되어 있는 stream_id가 0xE1인 비디오 스트림, 즉, 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"로부터 인식되는, 클립 스트림 파일 "00003.PS"에 다중화되어 있는 3개의 엘리멘터리 스트림 stream #0 내지 #2 중, 2개째의 엘리멘터리 스트림(비디오 스트림) stream #1이다.
여기서, 도 32 하측에서는, PlayList #1의 PlayListMark()의 일람표의 란 밖의 우측에, Mark()가 속하는 PlayItem()의 선두로부터의 시각을 나타내고 있다.
또한, 도 32에서는, 챕터 마크나 인덱스 마크가 나타내는 챕터나 인덱스의 번호가, mark_data에 기술되어 있지만, 챕터 마크나 인덱스 마크가 나타내는 챕터나 인덱스의 번호는, mark_data에 기술하지 않아도, 예를 들면, PlayListMark()에서의 챕터 마크나 인덱스 마크의 수를 카운트함으로써 인식할 수 있다.
[디스크 재생 장치의 동작 설명]
다음으로, 도 1의 디스크(101)에, 도 29 내지 도 32에서 설명한 바와 같은 데이터가 기록되어 있는 것으로 하여, 도 1의 디스크 재생 장치의 동작에 대해서 설명한다.
여기서, 다중 방식으로 하고 있는 MPEG2-system의 규정에 의하면, 타임 스탬프는 모든 액세스 유닛에 부가할 필요는 없고, 그 간격이 0.7초 이하이어도 되는 것으로 되어 있다. 즉, 타임 스탬프를 갖는 액세스 유닛과 갖지 않는 액세스 유닛이 존재한다.
또한, 여기서 설명하고 있는 예에서는, 디코드 개시 위치의 비디오 스트림의 액세스 유닛에는 반드시 타임 스탬프가 부가되어 있다고 가정하고 있다. 즉 「재생 준비 처리」에서 후술하는 바와 같이, 디코드 개시 위치는 EP_map()을 사용해서 식 PTS_EP_start≤IN_time을 만족하는 최대의 PTS_EP_start를, 이분 탐색(바이너리 서치) 등을 이용하여 검색하고 있다. EP_map()에 등록되어 있는 비디오의 재생 개시 위치 직후의 액세스 유닛에는 반드시 타임 스탬프가 부가되어 있다.
또한, 고립 필드(non-paired field)는 존재하지 않는 것으로 하고 있다. 즉, pic_struct=1의 액세스 유닛 직후에는 반드시 pic_struct=2의 액세스 유닛이 놓여진다. 또한 pic_struct=2의 액세스 유닛 직후에는 반드시 pic_struct=1의 액세스 유닛이 놓여진다.
또한 이 예에서는 pic_struct=7과 8은 발생하지 않는 것으로 한다.
디스크(101)가 디스크 드라이브(102)에 삽입되면, 그 취지를 나타내는 메시지가 드라이브 인터페이스(114), 또한, 도 2A 및 도 2B의 오퍼레이팅 시스템(201)을 경유하여, 비디오 콘텐츠 재생 프로그램(210)에 전달된다. 비디오 콘텐츠 재생 프로그램(210)은, 디스크(101)가 디스크 드라이브(102)에 삽입되었다는 취지의 메 시지를 오퍼레이팅 시스템(201)으로부터 수신하면, 도 33의 재생 전 처리를 개시한다.
「재생 전 처리」
즉, 도 33은, 비디오 콘텐츠 재생 프로그램(210)이 행하는 재생 전 처리를 설명하는 플로우차트이다.
여기서, 이하, 플로우차트에 의해 설명하는 디스크 재생 장치의 동작 또는 처리는, 반드시 플로우차트로서 기재된 순서를 따라 시계열로 행해질 필요는 없고, 병렬적 혹은 개별로 행해지는 경우도 있다. 단, 본 명세서에서는, 편의상, 디스크 재생 장치의 동작 또는 처리를, 플로우차트를 따라 설명한다.
재생 전 처리에서는, 비디오 콘텐츠 재생 프로그램(210)은, 스텝 S101에서, 오퍼레이팅 시스템(201)의 파일 시스템 기능을 사용하여, 디스크(101)를 체크하고, 디스크(101)가, 비디오 콘텐츠 재생 프로그램(210)용의 정상적인 디스크인지의 여부를 판정한다.
여기서, 전술한 바와 같이, 디스크(101)에의 액세스(파일의 읽어내기)는, 오퍼레이팅 시스템(201)의 파일 시스템 기능을 사용하여 행해지지만, 이하에서는, 그 설명은, 적절히 생략한다.
스텝 S101에서, 디스크(101)가 정상적인 디스크가 아니라고 판정된 경우, 즉, 예를 들면, 디스크(101)에 채용되어 있는 파일 시스템이, 오퍼레이팅 시스템(201)이 대응하고 있지 않은 타입이었던 경우나, 루트 디렉토리에 "VIDEO" 디렉토리가 놓여져 있지 않은 경우, 비디오 콘텐츠 재생 프로그램(210)은 디스크(101) 에 대응하고 있지 않다고 판단하고, 스텝 S102로 진행하여, 그래픽 처리 모듈(219)이, 에러 처리를 행하고, 재생 전 처리를 종료한다.
즉, 그래픽 처리 모듈(219)은, 에러 처리로서, 디스크(101)가 정상이 아니라고 하는 취지의 에러 메시지를 생성하여, 비디오 출력 모듈(220)로부터 출력시키고, 이에 의해, 에러 메시지를 표시시킨다. 또한, 에러 처리로서는, 그 밖에, 예를 들면, 오디오 출력 모듈(221)로부터의 경고음의 출력이나, 디스크 드라이브(102)로부터의 디스크(101)의 배출 등을 행하도록 하는 것이 가능하다.
한편, 스텝 S101에서, 디스크(101)가 정상적인 디스크라고 판정된 경우, 스텝 S103으로 진행하여, 비디오 콘텐츠 재생 프로그램(210)은, 콘텐츠 데이터 공급 모듈(213)에 의해, 오퍼레이팅 시스템(201)에 대하여, 디스크(101)(도 6)의 "VIDEO" 디렉토리에 놓여져 있는 "SCRIPT.DAT" 파일과, "PLAYLIST.DAT" 파일의 2개의 데이터 파일을 요구해서 읽어들이고, 스텝 S104로 진행한다. 스텝 S104에서는, "SCRIPT.DAT" 파일이, 스크립트 제어 모듈(211)에 공급됨과 함께, "PLAYLIST.DAT" 파일이, 플레이어 제어 모듈(212)에 공급된다.
그 후, 스텝 S104로부터 S105 내지 S107로 진행하여, 플레이어 제어 모듈(212)은, 초기화 처리를 행한다. 또한, 스크립트 제어 모듈(211)은, 플레이어 제어 모듈(212)의 초기화 처리가 종료될 때까지 대기한다.
「플레이어 제어 모듈(212)의 초기화 처리」
초기화 처리에서는, 스텝 S105에서, 플레이어 제어 모듈(212)이, "PLAYLIST.DAT" 파일의 해석을 행하여, "PLAYLIST.DAT" 파일 중에서 사용되고 있는 클립 정보 파일의 수와 그 파일명을 조사한다.
즉, 지금의 경우, "PLAYLIST.DAT" 파일은, 도 29에 도시한 것으로 되어 있고, 플레이어 제어 모듈(212)은, 도 29의 "PLAYLIST.DAT" 파일에서 number_of_PlayLists가 2로 되어 있으므로, 1번째의 PlayList #0과 2번째의 PlayList #1의 2개의 PlayList()가 존재하는 것을 인식한다. 또한, 플레이어 제어 모듈(212)은, 도 29의 "PLAYLIST.DAT" 파일에서의 1번째의 PlayList #0에 대해서, number_of_PlayItems가 2로 되어 있으므로, 그 PlayList #0에는, 1번째의 PlayItem #0과 2번째의 PlayItem #1의 2개의 PlayItem()이 존재하는 것을 인식한다. 그리고, 플레이어 제어 모듈(212)은, 도 29의 "PLAYLIST.DAT" 파일에서의, PlayList #0에 포함되는 1번째의 PlayItem #0과 2번째의 PlayItem #1 각각의 Clip_Information_file_name을 참조함으로써, PlayList #0에 포함되는 1번째의 PlayItem #0의 클립 정보 파일이 "00001.CLP"가며, 2번째의 PlayItem #1의 클립 정보 파일이 "00002.CLP"인 것을 인식한다.
플레이어 제어 모듈(212)은, 2번째의 PlayList #1에 대해서도 마찬가지로 하고, 그 number_of_PlayItems가 1이므로, 1개의 PlayItem()(PlayItem #0)이 존재하고, 또한, 그 PlayItem #0 중 Clip_Information_file_name으로부터, 그 PlayItem #0의 클립 정보 파일이 "00003.CLP"인 것을 인식한다.
그 후, 스텝 S105로부터 S106으로 진행하여, 플레이어 제어 모듈(212)은, 디스크(101)로부터, 스텝 S105에서 인식한 클립 정보 파일, 즉, 디스크(101)의 "VIDEO" 디렉토리 내의 "CLIP" 디렉토리로부터 3개의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"를 읽어들인다.
여기서, 스텝 S106에서의 클립 정보 파일의 읽어들이기는, 최초로 재생되는 PlayList()의 PlayItem의 클립 정보 파일만으로 충분하지만, 본 실시 형태에서는, 전술한 바와 같이, 모든 PlayList()의 PlayItem()의 클립 정보 파일을 미리 읽기해 두는 것으로 한다.
스텝 S106의 처리 후에는, 스텝 S107로 진행하여, 플레이어 제어 모듈(212)은, 스텝 S105에서 인식한 클립 정보 파일의 읽어들이기에 성공했는지의 여부를 판정하고, 또한, 그 읽어들인 클립 정보 파일에 대응하는 클립 스트림 파일이, 디스크(101)에 존재하는지의 여부를 판정한다. 즉, 스텝 S107에서는, 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"의 읽어들이기에 성공하고, 또한, 그 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP" 각각과 파일명의 확장자만이 상이한 클립 스트림 파일 "00001.PS", "00002.PS", "00003.PS"가, 디스크(101)의 "VIDEO" 디렉토리 아래에 있는 "STREAM" 디렉토리에 존재하는지의 여부를 판정한다.
스텝 S107에서, 스텝 S105에서 인식한 클립 정보 파일의 읽어들이기에 실패했다고 판정되거나, 또는, 클립 정보 파일에 대응하는 클립 스트림 파일이, 디스크(101)에 존재하지 않는다고 판정된 경우, 즉, 예를 들면, "PLAYLIST.DAT" 파일에 따른 재생에 필요한 클립 정보 파일이나 클립 스트림 파일이, 디스크(101)에 기록되어 있지 않은 경우, 비디오 콘텐츠 재생 프로그램(210)은, 디스크(101)에 대응하고 있지 않다고 판단하고, 스텝 S102로 진행하여, 전술한 에러 처리가 행해지고, 재생 전 처리를 종료한다.
한편, 스텝 S107에서, 스텝 S105에서 인식한 클립 정보 파일의 읽어들이기에 성공하고, 또한, 클립 정보 파일에 대응하는 클립 스트림 파일이, 디스크(101)에 존재한다고 판정된 경우, 플레이어 제어 모듈(212)은, 초기화 처리를 종료하고, 스텝 S108로 진행한다.
스텝 S108에서는, 스크립트 제어 모듈(211)이, "SCRIPT.DAT" 파일의 해석과 실행을 개시한다.
예를 들면, 지금, 스크립트 제어 모듈(211)이, "SCRIPT.DAT" 파일을 실행함으로써, 1번째의 PlayList()(PlayList #0)의 재생이, 플레이어 제어 모듈(212)에 지시된 것으로 하면, 도 34의 재생 처리가 행해진다.
「재생 처리」
즉, 도 34는, 비디오 콘텐츠 재생 프로그램(210)이 행하는 재생 처리를 설명하는 플로우차트이다.
「재생 준비 처리」
재생 처리에서는, 플레이어 제어 모듈(212)은, 우선 스텝 S121과 S122에서, 스크립트 제어 모듈(211)로부터 재생을 지시받은 PlayList(), 즉, 1번째의 PlayList()(PlayList #0)의 재생 준비 처리를 행한다.
즉, 플레이어 제어 모듈(212)은, 스텝 S121에서, 1번째의 PlayList #0에 포함되는 1번째의 PlayItem #0의 IN_time(도 8)을 확인하고, 스텝 S122로 진행하여, 1번째의 PlayList #0에 포함되는 1번째의 PlayItem #0에 의해 재생되는 클립 스트 림 파일 "00001.PS" 상의, 그 PlayItem #0의 IN_time에 상당하는, 재생을 개시하는 재생 개시 위치를 조사한다.
여기서, PlayItem()의 IN_time(도 8)이, 클립 스트림 파일의 선두를 지시하고 있는 경우에는, 클립 스트림 파일의 선두로부터, 프로그램 스트림을 읽어내면 되지만, IN_time이, 클립 스트림 파일의 선두 이외를 지시하고 있는 경우에는, IN_time에 대응하는 위치를 검출하고, 거기로부터 프로그램 스트림을 읽어낼 필요가 있다.
구체적으로는, 도 29에 도시한 경우, 1번째의 PlayList #0에 포함되는 1번째의 PlayItem #0의 IN_time은, 180,090이다. 플레이어 제어 모듈(212)은, 1번째의 PlayList #0에 포함되는 1번째의 PlayItem #0에 의해 재생되는 클립 스트림 파일 "00001.CLP"의, 도 31에 도시한 EP_map()으로부터, PlayItem #0의 IN_time인 180,090에 적합한 재생 개시 위치를 찾아낸다.
즉, 플레이어 제어 모듈(212)은, 예를 들면, EP_map()에 기술된 디코드 개시 가능점을 나타내는 PTS_EP_start 중, 식 PTS_EP_start≤IN_time을 만족하는 최대의 PTS_EP_start를, 이분 탐색(바이너리 서치) 등을 이용하여 검색한다. 여기서, IN_time 이하의 PTS_EP_start를 검색하는 것은, IN_time에 의해 나타내어지는 위치가, 디코드 개시 가능점이라고는 할 수 없기 때문이다.
지금의 경우, IN_time은, 전술한 바와 같이, 180,090이다. 또한, 1번째의 PlayList #0에 포함되는 1번째의 PlayItem #0에 의해 재생되는 클립 스트림 파일 "00001.CLP"의, 도 31에 도시한 EP_map()에서는, 식 PTS_EP_start≤IN_time을 만족 하는 최대의 PTS_EP_start로서, 180,090이 기술되어 있다. 따라서, 플레이어 제어 모듈(212)에서는, 도 31에 도시한 EP_map()으로부터, 그 180,090으로 되어 있는 PTS_EP_start가 검색된다.
또한, 플레이어 제어 모듈(212)에서는, 그 검색된 PTS_EP_start에 대응하는 RPN_EP_start인 305(섹터)가 읽어내어지고, 그 305인 RPN_EP_start에 의해 나타내어지는 클립 스트림 파일 "00001.PS" 상의 위치가, 재생 개시 위치로서 결정된다.
플레이어 제어 모듈(212)은, 이상과 같이 해서 재생 개시 위치를 결정하면, 스텝 S122로부터 S123으로 진행하여, 타임 코드를 표시하도록, 그래픽 처리 모듈(219)을 제어한다. 그래픽 처리 모듈(219)은, 플레이어 제어 모듈(212)의 제어에 따라, 타임 코드를 생성해서 비디오 출력 모듈(220)에 출력한다. 이에 의해, 타임 코드의 표시가 개시된다.
여기서, 스텝 S123에서 표시가 개시되는 타임 코드는, 예를 들면, PlayList()의 선두를 00:00:00(시간:분:초)으로 환산한 값으로 한다. 또한, 타임 코드와 함께, 또는 타임 코드가 아니라, 챕터나 인덱스의 번호를 표시하도록 하여도 된다.
「PlaylistMark()의 해석 처리」
스텝 S123에서 타임 코드의 표시가 개시된 후에는, 스텝 S124로 진행하여, 플레이어 제어 모듈(212)은, 스크립트 제어 모듈(211)로부터 재생을 지시받은 PlayList(), 즉, 1번째의 PlayList()(PlayList #0)에 기술되어 있는 PlayListMark()(도 9)를 해석하는 해석 처리를 행한다.
구체적으로는, 플레이어 제어 모듈(212)은, 이미 읽어들인 "PLAYLIST.DAT" 파일에서의 1번째의 PlayList #0의, 도 32 상측에 도시한 PlayListMark()에서, number_of_PlayList_marks가 7로 되어 있으므로, 그 PlayList #0에 포함되는 Mark()의 수가 7인 것을 인식한다.
또한, 플레이어 제어 모듈(212)은, PlayList #0에 포함되는, 도 32 상측의 7개의 Mark()를 해석하고, 그 ref_to_PlayItem_id로부터, 7개의 Mark() 중 1번째부터 4번째까지의 4개의 Mark()가, PlayList #0의 1번째의 PlayItem()(PlayItem #0)에 속해 있는 것을 인식한다.
그 후, 플레이어 제어 모듈(212)은, PlayList #0의 1번째의 PlayItem #0에 속해 있는 4개의 Mark()의 mark_time_stamp를 취출하고, 요소수가 4인 배열로 하여, 디코드 제어 모듈(214)에 건네준다. 즉, 이에 의해, 도 32 상측의 7개의 Mark() 중 1번째부터 4번째까지의 4개의 Mark() 각각의 mark_time_stamp인 {180,090}, {5,580,090}, {10,980,090}, {16,380,090}의 4개의 시각이, 플레이어 제어 모듈(212)로부터, 디코드 제어 모듈(214)에 건네진다. 이 때 이들 시각의 속성은 「마크 처리」인 것도, 플레이어 제어 모듈(212)로부터, 디코드 제어 모듈(214)에 전달된다. 디코드 제어 모듈(214)은, 계시부(214A)에서 계시하고 있는 시각이, 「마크 처리」의 속성의 시각에 일치했을 때, 그 취지를 나타내는 메시지, 「마크 처리」의 속성의 시각에 일치한 시각, 및 「마크 처리」의 속성을, 플레이어 제어 모듈(212)에 전달한다.
「재생하는 엘리멘터리 스트림의 결정 처리」
다음으로, 스텝 S124로부터 S125로 진행하여, 플레이어 제어 모듈(212)은, 재생하는 엘리멘터리 스트림을 결정한다.
즉, 플레이어 제어 모듈(212)은, 스크립트 제어 모듈(211)로부터 재생을 지시받은 PlayList()인 1번째의 PlayList #0에서의 1번째의 PlayItem #0(도 29)의 Clip_Information_file_name에 파일명이 기술되어 있는, 도 30A 및 도 30B의 클립 정보 파일 "00001.CLP"에서, number_of_streams가 4로 되어 있으므로, 대응하는 클립 스트림 파일 "00001.PS"에, 4개의 엘리멘터리 스트림이 다중화되어 있는 것을 인식한다. 또한, 플레이어 제어 모듈(212)은, 그 4개의 엘리멘터리 스트림에 대한, 도 30A 및 도 30B의 클립 정보 파일 "00001.CLP"의 StaticInfo()의 stream_id와 필요한 private_stream_id를 순서대로 조사하고, 그 4개의 엘리멘터리 스트림이, 1개의 비디오 스트림, 1개의 ATRAC 오디오 스트림, 및 2개의 자막 스트림인 것을 인식한다. 즉, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 각 속성의 엘리멘터리 스트림의 개수가 인식된다.
또한, 클립 스트림 파일에 다중화되어 있는 각 속성의 엘리멘터리 스트림의 개수의 정보는, 재생 중에서의 엘리멘터리 스트림의 절환(오디오 절환, 자막 절환 등)에 사용된다. 또한, 자막 스트림은, 클립 스트림 파일 내에 존재하지 않는(콘텐츠에 자막이 포함되지 않음) 경우가 있어, 자막 스트림이 존재하는지의 여부의 판단에, 「자막 스트림」의 속성의 엘리멘터리 스트림의 개수의 정보가 사용된다.
플레이어 제어 모듈(212)은, 이상과 같은 StaticInfo()의 조사의 결과에 기초하여, 재생할 엘리멘터리 스트림을 선택, 결정하지만, 지금의 경우, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 중에, 「비디오 스트림」과 「오디오 스트림」의 속성의 엘리멘터리 스트림은, 각각 1개뿐이므로, 「비디오 스트림」과 「오디오 스트림」의 속성의 엘리멘터리 스트림에 대해서는, 선택의 여지가 없이, 그 1개의 비디오 스트림과 오디오 스트림(ATRAC 오디오 스트림)이, 재생할 엘리멘터리 스트림으로서 결정된다.
또한, 「자막 스트림」의 속성의 엘리멘터리 스트림에 대해서는, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 중에 2개 존재하므로, 그 2개의 자막 스트림 중 어느 하나의 자막 스트림이, 재생할 엘리멘터리 스트림으로서 선택, 결정된다. 여기서는, 예를 들면, 2개의 자막 스트림 중, 클립 정보 파일 "00001.CLP"에서의 출현순으로 최초의 자막 스트림이 선택되는 것으로 한다.
여기서, 전술한 바와 같이, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림의 속성과 개수를 인식할 때에는, 그 4개의 엘리멘터리 스트림 각각을 특정할 필요가 있지만, 플레이어 제어 모듈(212)은, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림의 특정을, stream_id와 필요한 private_stream_id에 의해 행한다.
즉, 플레이어 제어 모듈(212)은, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 중, 「비디오 스트림」의 속성의 엘리멘터리 스트림인 비디오 스트림을, 도 30A 및 도 30B에서 클립 정보 파일 "00001.CLP"에 대해서 설명한 바와 같이, 0xE0으로 되어 있는 stream_id로 특정한다.
또한, 플레이어 제어 모듈(212)은, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 중, 「오디오 스트림」의 속성의 엘리멘터리 스트림인 ATRAC 오디오 스트림을, 도 30A 및 도 30B에서 클립 정보 파일 "00001.CLP"에 대해서 설명한 바와 같이, 0xBD로 되어 있는 stream_id, 및 0x00으로 되어 있는 private_stream_id로 특정한다.
또한, 플레이어 제어 모듈(212)은, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림에서의 「자막 스트림」의 속성의 엘리멘터리 스트림인 2개의 자막 스트림 각각을, 도 30A 및 도 30B에서 클립 정보 파일 "00001.CLP"에 대해서 설명한 바와 같이, 0xBD로 되어 있는 stream_id, 및 0x80으로 되어 있는 private_stream_id와, 0xBD로 되어 있는 stream_id, 및 0x81로 되어 있는 private_stream_id로, 각각 특정한다.
이상과 같이, 클립 스트림 파일에 대응하는 클립 정보 파일의 메타데이터로서 기술되는 stream_id와 private_stream_id의 조합에 의해, 그 클립 스트림 파일에 다중화되어 있는 엘리멘터리 스트림을 특정할 수 있다.
여기서, stream_id와 private_stream_id의 조합은, MPEG2-System의 다중화를 확장하기 위해서 설정한 메카니즘이다. 이 stream_id와 private_stream_id의 조합을, 메타데이터에서, 엘리멘터리 스트림을 특정하기 위해서 사용함으로써, 엘리멘터리 스트림을 확실하게 특정하는 것이 가능하게 된다. 또한, 장래, private_stream_id의 의미를 확장하고, 대응하는 엘리멘터리 스트림의 개수나 속성을 늘린 경우에도 현재의 메카니즘을 그대로 사용 가능하기 때문에, 확장성에서 뛰 어나다.
즉, 예를 들면, BD(Blu-ray Disc) 규격에서는, 데이터의 특정에, MPEG2 규격의 트랜스포트 스트림(Transport Stream)의 PID(Packet ID)가 이용되기 때문에, MPEG2 규격에 구속된다. 또한, 예를 들면, DVD-Video 규격에서는, private_stream_id에 유사한 sub_stream_id가 정의되어 있지만, sub_stream_id는, 스트림의 특정을 위해서 데이터베이스 상에 기술할 수 있도록은 되어 있지 않고, 8개 혹은 32개의 스트림 정보를 기술하는 고정적인 영역에 기술할 수 있는 것에 지나지 않기 때문에(예를 들면 VI4-49, 테이블 4.2.1-2(VTS-AST_ATRT)나 VI4-52, 테이블 4.2.1-3(VTS_SPST_ATRT) 등 참조), 확장성이 부족하다.
이에 대하여, stream_id와 private_stream_id의 조합은, 메타데이터가 기술되는, 예를 들면, 도 12의 클립 정보 파일 Clip()에서, number_of_streams로 나타낼 수 있는 수만큼 기술할 수 있고, 따라서, 클립 스트림 파일에 다중화되어 있는 엘리멘터리 스트림을, 그 수에 상관없이(단, number_of_streams로 나타낼 수 있는 수의 범위), 클립 정보 파일 Clip()에 기술된 메타데이터로서의 stream_id와 private_stream_id의 조합으로부터 특정하는 것이 가능하게 된다.
또한, 본 실시 형태에서는, stream_id와 private_stream_id의 조합은, 도 12의 클립 정보 파일에서, 대응하는 클립 스트림 파일에 다중화되어 있는 엘리멘터리 스트림을 특정하는 데에 사용되는 것 외에, 예를 들면, 도 9의 PlayListMark()에서의 entry_ES_stream_id와 entry_ES_private_stream_id의 조합으로 하여, Mark()를 관련짓는 엘리멘터리 스트림의 특정에도 사용된다. 또한, stream_id와 private_stream_id의 조합은, 그 밖에, 예를 들면, 도 16의 EP_map()에서, 디코드 가능 개시점의 정보를 기술하는 엘리멘터리 스트림의 특정에도 사용된다.
「출력 속성의 제어 처리」
그 후, 스텝 S125로부터 S126으로 진행하여, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림, 즉, 스텝 S125에서 재생한다고 결정한 엘리멘터리 스트림의 출력 속성의 제어 처리를 행한다.
구체적으로는, 플레이어 제어 모듈(212)은, 우선, 재생 대상의 엘리멘터리 스트림, 즉, 스텝 S125에서 재생한다고 결정한 비디오 스트림, ATRAC 오디오 스트림, 자막 스트림 각각에 대해서, 출력 속성이 기술되는 DynamicInfo()(도 15)의 수를 나타내는 number_of_DynamicInfo(도 12)를 조사한다.
여기서, 지금의 경우, 재생 대상의 비디오 스트림, ATRAC 오디오 스트림, 자막 스트림은, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 엘리멘터리 스트림으로서, 그들의 number_of_DynamicInfo는, 도 30A 및 도 30B의 "00001.CLP"에서 설명한 바와 같이, 모두 0으로 되어 있다. 이와 같이, 재생 대상의 엘리멘터리 스트림의 모두에 대해서, number_of_DynamicInfo가 0인 경우, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림의 출력 속성의 제어 처리로서는, 특별히 처리를 행하지 않는다.
또한, 재생 대상의 엘리멘터리 스트림에 대한 number_of_DynamicInfo가 0이 아닌 경우에, 그 엘리멘터리 스트림의 출력 속성의 제어로서 행해지는 처리에 대해서는, 후술한다.
「재생 개시의 준비 처리」
스텝 S126의 처리 후에는, 스텝 S127로 진행하여, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림의 재생 개시의 준비 처리를 행한다.
즉, 플레이어 제어 모듈(212)은, 콘텐츠 데이터 공급 모듈(213)에 대하여, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일 "00001.PS"의 파일명과, 스텝 S122에서 결정한 재생 개시 위치인 EP_map()에 기술된 RPN_EP_start(=305)를 공급한다.
또한, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림의, 버퍼 제어 모듈(215)에의 공급이 개시되기 전에, 버퍼 제어 모듈(215)을 초기화한다.
구체적으로는, 버퍼 제어 모듈(215)(도 5)에서는, 데이터 선두 포인터 기억부(231)에 기억되는 데이터 선두 포인터, 데이터 써넣기 포인터 기억부(232)에 기억되는 데이터 써넣기 포인터, 비디오 읽어내기 포인터 기억부(241)에 기억되는 비디오 읽어내기 포인터, 오디오 읽어내기 포인터 기억부(251)에 기억되는 오디오 읽어내기 포인터, 자막 읽어내기 포인터 기억부(262)에 기억되는 자막 읽어내기 포인터에, 동일한 값이 대입된다.
이에 의해, 데이터 선두 포인터 기억부(231)에 기억된 데이터 선두 포인터와, 데이터 써넣기 포인터 기억부(232)에 기억된 데이터 써넣기 포인터는, 버퍼 제어 모듈(215)의 버퍼(215A)의 동일한 위치를 가리킨다. 이것은, 버퍼(215A)에, 유효한 데이터가 축적되어 있지 않은 상태를 나타낸다.
또한, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림을 특정하기 위한 식별 정보로서의 stream_id, 또한, 필요에 따라, private_stream_id를, 버퍼 제어 모듈(215)에 공급한다.
즉, 전술한 바와 같이, 재생 대상의 엘리멘터리 스트림 중, 「비디오 스트림」의 속성의 비디오 스트림은, 0xE0으로 되어 있는 stream_id에 의해 특정되고, 「오디오 스트림」의 속성의 ATRAC 오디오 스트림은, 0xBD로 되어 있는 stream_id, 및 0x00으로 되어 있는 private_stream_id에 의해 특정되고, 「자막 스트림」의 속성의 자막 스트림은, 0xBD로 되어 있는 stream_id, 및 0x80으로 되어 있는 private_stream_id에 의해 특정된다. 플레이어 제어 모듈(212)은, 이들의 stream_id와 private_stream_id를, 버퍼 제어 모듈(215)에 공급한다.
버퍼 제어 모듈(215)(도 5)에서는, 비디오 읽어내기 기능부(233)가, 플레이어 제어 모듈(212)로부터의, 비디오 스트림에 대한 0xE0으로 되어 있는 stream_id를, stream_id 레지스터(242)에 기억시킨다. 또한, 오디오 읽어내기 기능부(234)가, 플레이어 제어 모듈(212)로부터의, 0xBD로 되어 있는 stream_id와, 0x00으로 되어 있는 private_stream_id를, stream_id 레지스터(252)와 private_stream_id 레지스터(253)에, 각각 기억시킨다. 또한, 자막 읽어내기 기능부(235)가, 플레이어 제어 모듈(212)로부터의, 0xBD로 되어 있는 stream_id와, 0x80으로 되어 있는 private_stream_id를, stream_id 레지스터(263)와 private_stream_id 레지스터(264)에, 각각 기억시킨다.
또한, 플레이어 제어 모듈(212)은, 버퍼 제어 모듈(215)에 공급한 재생 대상 의 엘리멘터리 스트림의 stream_id와 private_stream_id를, 금후의 처리를 위해서 기억한다. 플레이어 제어 모듈(212)은, 이들의 stream_id나 private_stream_id를, 후술하는 스트림 절환을 요구하는 메시지의 발생 시나, 후술하는 마크 처리에서 현재 재생 중인 스트림을 특정하기 위해서 사용한다.
플레이어 제어 모듈(212)은, 버퍼 제어 모듈(215)(도 5)의 초기화로서, 또한, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일에 따른 값의 자막 읽어내기 기능 플래그를, 자막 읽어내기 기능 플래그 기억부(261)에 세트한다.
즉, 지금의 경우, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일 "00001.PS"에는, 자막 스트림이 포함되기 때문에, 자막 읽어내기 기능부(235)를 기능시키기 위해서, 값이 1인 자막 읽어내기 기능 플래그가, 자막 읽어내기 기능 플래그 기억부(261)에 세트된다. 또한, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일에 자막 스트림이 포함되어 있지 않은 경우, 자막 읽어내기 기능 플래그 기억부(261)에는, 값이 0인 자막 읽어내기 기능 플래그가 세트된다. 이 경우, 자막 읽어내기 기능부(235)는 특별히 처리를 행하지 않는다.
또한, 플레이어 제어 모듈(212)은, 스크립트 제어 모듈(211)로부터 재생을 지시받은 1번째의 PlayList #0에 포함되는 1번째의 PlayItem #0(도 29)의 IN_time인 180,090과, OUT_time인 27,180,090을, 디코드 제어 모듈(214)에 대하여 공급한다. 디코드 제어 모듈(214)에서는, IN_time은, PlayItem()에 의해 재생되는 클립 의 디코드 개시의 제어에, OUT_time은, 그 클립의 디코드 종료, 또한, 후술하는 PlayItem 갈아타기의 제어에, 각각 사용된다.
또한, 플레이어 제어 모듈(212)은, 그래픽 처리 모듈(219)에 대한 자막 스트림의 표시 방식의 지시를 초기화한다. 즉, 플레이어 제어 모듈(212)은, 자막 스트림의 표시 방식을, 예를 들면, 디폴트의 표시 방식으로 하도록, 그래픽 처리 모듈(219)을 제어한다.
「데이터 읽어들이기 개시」
그 후, 스텝 S127로부터 S128로 진행하여, 플레이어 제어 모듈(212)은, 콘텐츠 데이터 공급 모듈(213)을 제어하고, 이에 의해, 콘텐츠 데이터 공급 모듈(213)은, 오퍼레이팅 시스템(201)의 기능을 사용하여, 재생 대상의 엘리멘터리 스트림이 다중화된 프로그램 스트림이 저장된 클립 스트림 파일을 읽어낸다. 즉, 콘텐츠 데이터 공급 모듈(213)은, 디스크(101)(도 6)의 "VIDEO" 디렉토리 아래에 있는 "STREAM" 디렉토리의 클립 스트림 파일 "00001.PS"를 지정하고, 또한, 스텝 S122에서 결정된 재생 개시 위치인 305섹터를 지정하여, 오퍼레이팅 시스템(201)에 대하여 파일 읽어내기를 요구한다. 또한, 콘텐츠 데이터 공급 모듈(213)은, 디스크(101)로부터 읽어낸 데이터를, 버퍼 제어 모듈(215)에 공급하도록 지정한다.
이에 의해, 디스크(101)로부터의, 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림의 읽어내기가 개시되고, 그 프로그램 스트림은, 버퍼 제어 모듈(215)에 공급된다.
버퍼 제어 모듈(215)(도 5)은, 디스크(101)로부터 읽어내어져 공급된 프로그 램 스트림을, 버퍼(215A)의 데이터 써넣기 포인터 기억부(232)의 데이터 써넣기 포인터가 가리키는 위치에 써넣어지고, 써넣어진 데이터의 사이즈만큼 데이터 써넣기 포인터를 인크리먼트한다.
여기서, 이하, 특별히 언급하지 않는 한, 콘텐츠 데이터 공급 모듈(213)은, 버퍼 제어 모듈(215)의 버퍼(215A)에 빈 부분이 있으면, 디스크(101)로부터 데이터를 읽어내어, 버퍼 제어 모듈(215)의 버퍼(215A)에 공급하여 기억시키는 것으로 한다. 따라서, 버퍼(215A)에는, 항상, 충분한 데이터가 축적되어 있는 것으로 한다.
「디코더 제어 개시」
이상과 같이 하여, 디스크(101)로부터의 데이터의 읽어내기가 개시되어, 그 데이터가 버퍼 제어 모듈(215)의 버퍼(215A)에 축적되기 시작하면, 스텝 S128로부터 S129로 진행하여, 디코드 제어 모듈(214)은, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218)을 제어하여, 디코드 동작 전단계로서, 버퍼(215A)로부터의 데이터의 읽어내기를 개시시킨다.
즉, 이에 의해, 비디오 디코더 제어 모듈(216)은, 버퍼 제어 모듈(215)(도 5)의 비디오 읽어내기 기능부(233)에 데이터를 요구하고, 그 요구에 따라 버퍼 제어 모듈(215)로부터 주어지는, 버퍼(215A)에 기억된 1개의 비디오 액세스 유닛, 그 비디오 액세스 유닛에 부가되어 있는 PTS와 DTS(이하, 적절하게, 타임 스탬프라고 함), 및 디코드 개시 가능점의 직전에 배치되어 있는 private_stream_2의 PES_packet()에 기술된 정보(이하, 적절하게, 부가 정보라고도 함)인 pic_struct_copy나, au_ref_flag, AU_length 등을 얻는다. 또한, 타임 스탬프는, 비디오 디코더 제어 모듈(216)이 비디오 액세스 유닛을 얻을 때마다, 비디오 디코더 제어 모듈(216)로부터 디코드 제어 모듈(214)에 주어진다.
여기서 이하의 시각 갱신을 위해서 사용하는 pic_struct_copy는, 비디오 읽어내기 기능부(233)로부터 주어진 것이지만, 구문 해석의 결과 얻어진 비트 스트림 중에 포함되는 pic_struct를 사용하는 것도 가능하다.
한편, 오디오 디코더 제어 모듈(217)도, 버퍼 제어 모듈(215)(도 5)의 오디오 읽어내기 기능부(234)에 데이터를 요구하고, 그 요구에 따라 버퍼 제어 모듈(215)로부터 주어지는, 버퍼(215A)에 기억된 1개의(ATRAC) 오디오 액세스 유닛과, 그 오디오 액세스 유닛에 부가되어 있는 타임 스탬프(PTS, DTS)를 얻는다. 또한, 타임 스탬프는, 오디오 디코더 제어 모듈(217)이 오디오 액세스 유닛을 얻을 때마다, 오디오 디코더 제어 모듈(217)로부터 디코드 제어 모듈(214)에 주어진다.
또한, 자막 디코더 제어 모듈(218)은, 버퍼 제어 모듈(215)(도 5)의 자막 읽어내기 기능부(235)에 데이터를 요구하고, 그 요구에 따라 버퍼 제어 모듈(215)로부터 주어지는, 버퍼(215A)에 기억된 1개의 자막 액세스 유닛과, 그 자막 액세스 유닛에 부가되어 있는 타임 스탬프를 얻는다. 또한, 타임 스탬프는, 자막 디코더 제어 모듈(218)이 자막 액세스 유닛을 얻을 때마다, 자막 디코더 제어 모듈(218)로부터 디코드 제어 모듈(214)에 주어진다. 또한, 재생 대상의 엘리멘터리 스트림에, 자막 스트림이 존재하지 않는 경우나, 버퍼(215A)에, 자막 액세스 유닛이 기억되어 있지 않은 경우에는, 버퍼 제어 모듈(215)로부터 자막 디코더 제어 모듈(218)에는, 데이터는 주어지지 않는다.
여기서, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 및 자막 디코더 제어 모듈(218)은, 버퍼 제어 모듈(215)에 대하여 데이터를 요구 할 때마다, 그 데이터의 요구에 대하는 결과를, 디코드 제어 모듈(214)에 건네준다.
또한, 버퍼 제어 모듈(215)로부터, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 및 자막 디코더 제어 모듈(218)에 대하여 데이터가 주어질 때의, 그 데이터의 버퍼(215A)로부터의 읽어내기의 상세에 대해서는, 후술한다.
「디코드 개시」
이상과 같이, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218)이, 버퍼 제어 모듈(215)의 버퍼(215A)로부터 데이터를 읽어내기 시작하면, 스텝 S129로부터 S130으로 진행하고, 그 데이터의 디코드가 개시된다.
즉, 디코드 제어 모듈(214)은, 스텝 S127에서 플레이어 제어 모듈(212)로부터 공급된, PlayList #0에 포함되는 1번째의 PlayItem #0의 IN_time인 180,090, 또한, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218)로부터 스텝 S129에서 설명한 바와 같이 주어지는 타임 스탬프에 기초하여, 동기를 확보하기 위해서 필요하다면 타이밍을 어긋나게 하여, 디코드 개시를, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 및 자막 디코더 제어 모듈(218)에 명령한다.
여기서, 동기를 확보하기 위한 타이밍을 어긋나게 한 디코드 개시의 명령의 방법은, 예를 들면, 일본 특허 제3496725호에 기재되어 있고, 간단히는, 비디오 디 코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218) 각각으로부터 주어진 타임 스탬프 중 최소값을, 계시부(214A)에 의해 계시되는 시각의 초기값으로서 설정하여 시각의 계시를 개시하고, 계시부(214A)에 의해 계시되는 시각과, 타임 스탬프가 일치한 시점에서, 디코드 개시를 명령하는 방법이 있다.
비디오 디코더 제어 모듈(216)은, 디코드 제어 모듈(214)로부터의 디코드 개시의 지시를 받아, 그 지시에 따라, 버퍼 제어 모듈(215)(도 5)의 비디오 읽어내기 기능부(233)로부터 얻은 1개의 비디오 액세스 유닛을, 비디오 디코더(116)(도 1)에 건네주어 디코드시킨다. 또한, 비디오 디코더 제어 모듈(216)은, 비디오 디코더(116)에 의한 디코드의 결과 얻어지는 비디오 데이터를, 그래픽 처리 모듈(219)에 공급한다.
이후, 비디오 디코더 제어 모듈(216)은, 버퍼 제어 모듈(215)의 비디오 읽어내기 기능부(233)로부터 얻어지는 1씩의 비디오 액세스 유닛을, 비디오 디코더(116)에서 순차적으로 디코드하고, 그 디코드 결과 얻어지는 비디오 데이터를, 그래픽 처리 모듈(219)에 공급해 간다.
이때, 비디오 디코더(116) 내부에서는, 디코드와 출력에서 비디오 데이터의 순번 교체(리오더링)가 발생하고 있다. 예를 들면 도 35에 도시하는 바와 같이, 디코드의 순번은 I1, B0, P3, B2, P5, B4이지만, 표시의 순번은 B0, I1, B2, P3, B4, P5로 되는 경우가 있다. 이 때문에 비디오 디코더(116) 내에는 디코드 후의 화상을 store해 두기 위한 decoded picture buffer가 설치되어 있다. 도 35에서, In은, n번째의 I픽쳐를 나타내고, Bn은, n번째의 B픽쳐를 나타내고, Pn은, n번 째의 P픽쳐를 나타내고 있다.
한편, 오디오 디코더 제어 모듈(217)도, 디코드 제어 모듈(214)로부터의 디코드 개시의 지시를 받아, 그 지시에 따라, 버퍼 제어 모듈(215)(도 5)의 오디오 읽어내기 기능부(234)로부터 얻은 1개의 오디오 액세스 유닛을, 오디오 디코더(117)(도 1)에 건네주어 디코드시킨다. 또한, 오디오 디코더 제어 모듈(217)은, 오디오 디코더(117)에 의한 디코드의 결과 얻어지는 오디오 데이터를, 오디오 출력 모듈(221)에 공급한다.
이후, 오디오 디코더 제어 모듈(217)은, 버퍼 제어 모듈(215)의 오디오 읽어내기 기능부(234)로부터 얻어지는 1씩의 오디오 액세스 유닛을, 오디오 디코더(117)에서 순차적으로 디코드하고, 그 디코드의 결과 얻어지는 오디오 데이터를, 오디오 출력 모듈(221)에 공급해 간다.
또한, 자막 디코더 제어 모듈(218)도, 디코드 제어 모듈(214)로부터의 디코드 개시의 지시를 받아, 그 지시에 따라, 버퍼 제어 모듈(215)(도 5)의 자막 읽어내기 기능부(235)로부터 얻은 1개의 자막 액세스 유닛을, 내부에 갖는 자막 디코드 소프트웨어로 디코드하고, 그 디코드의 결과 얻어지는 자막 데이터(자막의 화상 데이터)를, 그래픽 처리 모듈(219)에 공급한다.
이후, 자막 디코더 제어 모듈(218)은, 버퍼 제어 모듈(215)의 자막 읽어내기 기능부(235)로부터 얻어지는 1씩의 자막 액세스 유닛을, 내부에 갖는 자막 디코드 소프트웨어로 순차적으로 디코드하고, 그 디코드의 결과 얻어지는 자막 데이터를, 그래픽 처리 모듈(219)에 공급해 간다.
「그래픽 처리」
그 후, 스텝 S130으로부터 S131로 진행하여, 그래픽 처리 모듈(219)은, 전술한 바와 같이 하여, 비디오 디코더 제어 모듈(216)로부터 공급되는 비디오 데이터, 또한, 필요에 따라, 자막 디코더 제어 모듈(218)로부터 공급되는 자막 데이터를 대상으로, 그래픽 처리를 행한다.
즉, 그래픽 처리 모듈(219)은, 우선 자막 디코더 제어 모듈(218)로부터의 자막 데이터를, 플레이어 제어 모듈(212)로부터의 표시 방식의 지시에 따라, 확대나 축소하거나 하는 자막 처리를 행한다. 플레이어 제어 모듈(212)로부터, 표시 방식의 지시가 없는 경우, 또는 디폴트의 표시 방식의 지시가 있었던 경우, 그래픽 처리 모듈(219)은, 자막 디코더 제어 모듈(218)로부터의 자막 데이터를, 그대로 보존한다.
또한, 그래픽 처리 모듈(219)은, 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터와, 자막 디코더 제어 모듈(218)로부터의 자막 데이터, 또는 자막 처리 후의 자막 데이터를 가산하고, 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터에 자막 데이터가 오버레이된 출력 비디오 데이터를 얻어, 비디오 출력 모듈(220)에 공급한다.
또한, 그래픽 처리 모듈(219)은, 스크립트 제어 모듈(211)이나 플레이어 제어 모듈(212)로부터, 예를 들면, 메뉴나, 메시지, 타임 코드, 챕터 또는 인덱스의 번호 등의 정보의 표시의 지시를 받은 경우에는, 그 정보를 생성하고, 출력 비디오 데이터에 오버레이하여, 비디오 출력 모듈(220)에 공급한다.
「출력 처리」
스텝 S131의 처리 후에는, 스텝 S132로 진행하여, 비디오 출력 모듈(220)은, 스텝 S131에서 설명한 바와 같이 하여 그래픽 처리 모듈(219)로부터 공급되는 출력 비디오 데이터를, FIFO(220A)에 순차적으로 기억시키고, 그 FIFO(220A)에 기억된 출력 비디오 데이터를, 미리 정해진 출력 레이트로 순차적으로 출력한다.
비디오 출력 모듈(220)은, FIFO(220A)의 기억 용량(잔량)에 여유가 있는 한, 그래픽 처리 모듈(219)로부터의 출력 비디오 데이터를 받아들이지만, 여유가 없는 경우에는, 출력 비디오 데이터의 받아들임의 정지를, 그래픽 처리 모듈(219)에 요구한다. 이에 의해, 그래픽 처리 모듈(219)은, 처리를 정지함과 함께, 처리의 정지를, 비디오 디코더 제어 모듈(216) 및 자막 디코더 제어 모듈(218)에 요구한다. 이에 의해, 비디오 디코더 제어 모듈(216) 및 자막 디코더 제어 모듈(218)이 처리를 정지한다.
비디오 출력 모듈(220)은, 출력 비디오 데이터의 받아들임의 정지를, 그래픽 처리 모듈(219)에 요구한 후에, FIFO(220A)로부터의 출력 비디오 데이터의 출력이 진행되어, FIFO(220A)에 여유가 생긴 시점에서, 출력 비디오 데이터의 받아들임을, 그래픽 처리 모듈(219)에 요구한다. 이 요구는, 출력 비디오 데이터의 받아들임의 정지의 요구와 마찬가지로, 그래픽 처리 모듈(219)로부터, 비디오 디코더 제어 모듈(216) 및 자막 디코더 제어 모듈(218)에 전달된다. 이에 의해, 그래픽 처리 모듈(219), 또한, 비디오 디코더 제어 모듈(216) 및 자막 디코더 제어 모듈(218)은, 정지하고 있던 처리를 재개한다.
한편, 오디오 출력 모듈(221)도, 스텝 S130에서 설명한 바와 같이 하여 오디오 디코더 제어 모듈(217)로부터 공급되는 오디오 데이터를, FIFO(221A)에 순차적으로 기억시키고, 그 FIFO(221A)에 기억된 오디오 데이터를, 미리 정해진 출력 레이트(샘플링 주파수)로 순차적으로 출력한다.
오디오 출력 모듈(221)은, FIFO(221A)의 기억 용량(잔량)에 여유가 있는 한, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를 받아들이지만, 여유가 없는 경우에는, 오디오 데이터의 받아들임의 정지를, 오디오 디코더 제어 모듈(217)에 요구한다. 이에 의해, 오디오 디코더 제어 모듈(217)은, 처리를 정지한다.
오디오 출력 모듈(221)은, 오디오 데이터의 받아들임의 정지를, 오디오 디코더 제어 모듈(217)에 요구한 후에, FIFO(221A)로부터의 오디오 데이터의 출력이 진행되어, FIFO(221A)에 여유가 생긴 시점에서, 오디오 데이터의 받아들임을, 오디오 디코더 제어 모듈(217)에 요구한다. 이에 의해, 오디오 디코더 제어 모듈(217)은, 정지하고 있던 처리를 재개한다.
이상과 같이 하여, 비디오 출력 모듈(220) 및 오디오 출력 모듈(221)로부터 데이터가 출력됨에 따라, 엘리멘터리 스트림의 디코드가 행해져 간다.
[비디오 디코더(116)의 내부 구조의 설명]
도 36에 비디오 디코더(116)의 내부 구조를 도시한다. 이 예에서는 비디오 디코더(116)의 내부는 비디오 디코드 엔진(116A)과 DPB(디코디드 픽쳐 버퍼)(116B)로 구성되어 있다. DPB(116B)의 내부는 더욱 세분화되어 있어, DPB(116B-1) 내지 DPB(116B-n)(이후에서, 특별히 구별할 필요가 없는 경우, 간단히 DBP(116B)라고 칭하는 것으로 함)로 구성되어 있다. 또한, 도 37에서 도시되는 바와 같이, DPB(116B)의 내부는 비디오 버퍼(301)와 부가 정보 버퍼(302)로 나누어져 있다.
비디오 디코드 엔진(116A)은 비디오 데이터의 디코드 처리 시에, 디코드 중인 비디오 데이터를 일시 보존하거나, 혹은 장래의 참조 화상으로서 사용하기 위해서 유지하는 등의 용도를 위해서, DPB(116B)의 비디오 버퍼(301)를 사용한다. 이 때, 부가 정보 버퍼(302)에는, 비디오 버퍼(301)에 보존된 비디오 데이터에 대응할, 비디오 읽어내기 기능부(233)로부터 얻은 부가 정보나, 액세스 유닛을 구문 해석하여 얻어진 파라미터(예를 들면 pic_struct 등)가 기록된다.
다음으로, 도 1의 디스크 재생 장치가 디스크(101)를 재생할 때의 전체의 처리 또는 동작의 흐름은, 도 33 및 도 34에서 설명한 바와 같지만, 이하, 디스크 재생 장치에서 디스크(101)의 재생이 행해지고 있을 때의, 그 밖의 처리 또는 동작에 대해서 설명한다.
[시각 정보를 디코드 제어 모듈(214)에 건네준다]
이하, 시계(계시부(214A))의 갱신에 대해서 설명한다. 비디오 디코더 제어 모듈(216)은, 입력받은 비디오 액세스 유닛을 비디오 디코더(116)에 지시해서 디코드시킨다. 비디오 디코더(116)에 의한 디코드 및 리오더링 처리 후, 1프레임(2필드)분의 비디오 데이터가 그래픽 처리 모듈(219)에 출력됨과 동시에, 해당 비디오 데이터의 타임 스탬프(PTS/DTS)와 pic_struct 정보가 비디오 디코더 제어 모듈(216)로부터 디코드 제어 모듈(214)에 주어진다.
액세스 유닛의 pic_struct가 1 혹은 2인 경우에는 이들은 1필드분의 액세스 유닛이기 때문에, 1프레임분으로 하기 위해서 2개분의 액세스 유닛의 출력이 행해지는 단계에서 선행 필드의 pic_struct와, 선행 필드의 액세스 유닛에 타임 스탬프가 있던 경우에는 타임 스탬프가, 비디오 디코더 제어 모듈(216)로부터 디코드 제어 모듈(214)에 주어진다. 여기서 선행 필드가 타임 스탬프를 갖지 않는 경우에는, 타임 스탬프가 없다고 하는 정보가 주어진다. 전술한 바와 같이 고립 필드는 허용하고 있지 않기 때문에, pic_struct가 1 혹은 2인 필드의 직후에는 pic_struct가 2 혹은 1인 필드가 놓여져 있다. 이 2의 필드를 1로 통합해서 취급할 때에는, 선행하고 있는 필드의 타임 스탬프를 대표값으로서 사용한다.
또한, 액세스 유닛의 pic_struct가 0, 3, 4, 5, 6인 경우에는, 1의 액세스 유닛의 출력이 행해지는 단계에서 1의 pic_struct와, 해당 액세스 유닛에 타임 스탬프가 있는 경우에는 타임 스탬프가, 비디오 디코더 제어 모듈(216)로부터 디코드 제어 모듈(214)에 주어진다. 타임 스탬프를 갖지 않은 액세스 유닛에서는, 타임 스탬프가 없다고 하는 정보가 주어진다.
디코드 제어 모듈(214)은, 수취한 타임 스탬프와 pic_struct의 정보를 이용하여 계시부(214A)를 갱신한다.
이하, 도 38의 플로우차트를 참조하여 갱신의 방법을 설명한다.
디코드 제어 모듈(214)은, 수취한 액세스 유닛이 타임 스탬프가 부가되어 있는지의 여부를 판정한다(스텝 S141). 예를 들면, 액세스 유닛에 타임 스탬프가 부가되어 있었던 경우, 디코드 제어 모듈(214)은, 타임 스탬프(PTS)의 값을 계시부(214A)에 설정한다(스텝 S142). 전술한 바와 같이 디코드 개시 직후는 반드시 타임 스탬프가 존재하기 때문에, 첫회에서도 문제는 발생하지 않는다. 액세스 유닛에 타임 스탬프가 부가되어 있지 않았던 경우, 현재 시각에 전회의 pic_struct에 의해 정해지는 값을 가산한다(스텝 S144). 그 후, 금회의 pic_struct를 차회의 처리를 위해서 보존하고 종료한다(스텝 S143).
pic_struct에 의해 정해지는 값은, 도 39에서 도시되는 바와 같이, 보존되어 있었던 pic_struct가 0, 3 혹은 4이었던 경우, 계시부(214A)는 2필드 시간분의 시간을 가산한다. 또한 pic_struct가 5 혹은 6이었던 경우, 계시부(214A)는 3필드 시간분의 시간을 가산한다. 또한, 보존되어 있었던 pic_struct가 1 혹은 2이었던 경우, 계시부(214A)는 2필드 시간분의 시간을 가산한다.
이와 같은 시각 변경 처리에 의해, 계시부(214A)가 나타내는 시각의 값은, 비디오 디코더 제어 모듈(216)로부터 그래픽 처리 모듈(219)에의 출력이 종료된(1프레임분의) 액세스 유닛의 표시 개시 시각을 나타낸다. 즉, 해당 비디오 데이터가 타임 스탬프를 갖는 경우에는 PTS가 대입된다. 또한 타임 스탬프를 갖지 않는 경우에는, 표시순으로 직전의 비디오 데이터의 표시 간격이 가산된다.
이 예에서는 비디오 부호화 방식으로서 AVC를 사용하고 있지만, 예를 들면 MPEG2-Video에서도 repeat_first_field를 사용함으로써 액세스 유닛의 표시 duration을 알 수 있다.
또한, 전술한 바와 같이, 이 경우에도, FIFO(220A)의 기억 용량에 여유가 없는 경우에는 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터의 출력이 정지된다. 이 경우에는 계시부(214A)의 갱신도 자동적으로 정지된다. 또한, FIFO(220A)에의 비디오 데이터의 갱신이 재개되면 계시부(214A)의 갱신도 자동적으로 재개된다.
즉, 유저로부터의 지시에 의해 재생 모드가 포즈 상태로 천이한 경우, 비디오 출력 모듈(220)의 갱신이 멈춰짐으로써, 연동하여 비디오 디코더 제어 모듈(216)이 정지하고, 또한 그것과 링크하고 있는 시계(계시부(214A))도 연동하여 멈춰지는 것을 의미하고 있다. 또한, 포즈 상태로부터 통상 재생 상태로 복귀한 경우, 비디오 출력 모듈의 갱신이 허가됨으로써, 연동하여 비디오 디코더 제어 모듈(216)의 동작 및 비디오 데이터의 출력이 재개되고, 또한 그것과 링크하고 있는 시계(계시부(214A))도 연동하여 갱신이 재개되는 것을 의미하고 있다.
이와 같은 동작은 슬로우 재생에 대해서도 기대할 수 있다. 즉, 슬로우 재생은 포즈와 통상 재생을 짧은 주기로 교대로 반복하고 있는 상태이며, 그 때에도 시계(계시부(214A))는 비디오 출력에 동기하여 갱신된다.
또한, 이 예에서는 계시부(214A)의 갱신을 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터 출력과 동기하여 행한다고 설명했다. 그러나, 비디오 디코더 제어 모듈(216) 이후의 딜레이, 여기서는 그래픽 처리 모듈(219) 및 비디오 출력 모듈(220)에서 발생하는 딜레이가 큰 경우, 실제로 유저에 대하여 제공되고 있는 비디오 데이터와 시계(계시부(214A))의 관계가 어긋나게 될 가능성이 있다. 그와 같은 경우에는, 시계(계시부(214A))의 갱신을 비디오 출력 모듈(220)로부터의 비디오 데이터 출력과 동기하여 행한다고 하는 방식을 채용함으로써 방지하는 것이 가능하다.
구체적으로는, 그래픽 처리 모듈(219)과 비디오 출력 모듈(220) 및 FIFO(220A)에서의 비디오 데이터의 처리 부분에, 도 37을 참조하여 설명한 부가 정보 버퍼(302)를 추가하고, 출력에 이를 때까지, 비디오 데이터와 부가 정보를 항상 1조로서 취급한다. 또한, 비디오 출력 모듈(220)로부터의 비디오 데이터의 출력 시에, 대응하는 부가 정보가 디코드 제어 모듈(214)에 주어진다. 디코드 제어 모듈은 전술한 알고리즘에 의해 시계(계시부(214A))를 갱신한다.
이와 같은 방법을 취함으로써, 비디오 디코더 이후의 딜레이의 다소에 관계없이, 표시되는 비디오 데이터와 시계(계시부(214A))의 동기를 맞추는 것이 가능하게 된다.
결과적으로, 스트림 데이터를 재생하는 장치에서, 단독으로 카운트하는 시계를 구비하고 있지 않은 상태이어도, 정확하게 스트림 데이터를 재생하는 것이 가능해져, CPU(112) 등의 처리 부하를 저감시키는 것이 가능하게 된다.
[PlayItem 갈아타기]
도 33 및 도 34에서 설명한 바와 같이 하여, 도 29에서의 1번째의 PlayList #0의 1번째의 PlayItem #0의 재생이 시작되지만, PlayList #0에 따르면, 그 1번째의 PlayItem #0의 재생이 종료되면, 2번째의 PlayItem #1의 재생이 개시된다. 즉, PlayItem #0으로부터 PlayItem #1로 PlayItem을 갈아타기는 PlayItem 갈아타기가 행해진다.
다음으로, 도 40의 플로우차트를 참조하여, 이 PlayItem 갈아타기의 처리에 대해서 설명한다.
도 33 및 도 34에서 설명한 바와 같이 하여, 도 29에서의 PlayList #0의 1번째의 PlayItem #0의 클립의 재생이 개시되면, 디코드 제어 모듈(214)(도 2A 및 도 2B)은, 그 1번째의 PlayItem #0의 재생이 행해지고 있는 동안, 내장하는 계시부(214A)가 계시하고 있는 시각을 계속해서 확인하고 있다.
「PlayItem #0의 재생 종료」
그리고, 디코드 제어 모듈(214)은, 계시부(214A)가 계시하고 있는 시각이, 도 34의 스텝 S127에서 플레이어 제어 모듈(212)로부터 공급된 1번째의 PlayItem #0의 OUT_time인 27,180,090(도 29)과 동일하게 되면, 스텝 S151에서, 디코드 중단 제어를 행하여, PlayItem #0의 재생을 종료한다.
그런데, 계시부(214A)는, 90㎑로 변화되는 것이 아닌 경우, 즉, 비디오 데이터의 출력에 따라 시각을 갱신한다고 하는 방식인 경우, 계시부(214A)가 계시하고 있는 시각은, 엄밀하게는, PlayItem #0의 OUT_time과 동일하게 되지 않는 경우가 있다. 그와 같은 때, PlayItem #0의 OUT_time의 시각과 계시부(214A)가 계시하는 시각이 근방의 값으로 된 타이밍에서, 디코드 중단 제어가 행해져, PlayItem #0의 재생이 종료된다. 또한, 이 처리에 대해서는, 도 51, 도 52를 참조하여 상세를 후술한다.
즉, 디코드 제어 모듈(214)은, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218)을 조작하여, 디코드 동작을 정지시킨다. 또한, 디코드 제어 모듈(214)은, 비디오 출력 모듈(220)을 제어하여, 현재 출력 중인 출력 비디오 데이터를 계속하여 출력시킨다.
또한, 디코드 제어 모듈(214)은, 1번째의 PlayItem #0의 재생이 종료되었다는 취지의 메시지를, 플레이어 제어 모듈(212)에 전달한다.
「PlayItem #1의 재생 개시」
플레이어 제어 모듈(212)은, 전술한 바와 같이, 도 33의 스텝 S105에서, 1번째의 PlayList #0에, 1번째의 PlayItem #0과 2번째의 PlayItem #1이 존재하는 것을 인식하고 있고, 디코드 제어 모듈(214)로부터, 1번째의 PlayItem #0의 재생이 종료되었다는 취지의 메시지가 전달되면, 스텝 S151로부터 S152로 진행하여, 2번째의 PlayItem #1의 재생을, 전술한 1번째의 PlayItem #0에서의 경우와 마찬가지로 하여 개시한다.
즉, 2번째의 PlayItem #1의 재생 수순을 개설하면, 우선, 플레이어 제어 모듈(212)은, 도 34의 스텝 S122에서의 경우와 마찬가지로 하여, 2번째의 PlayItem #1에 대해서, EP_map()에 기술된 RPN_EP_start 중 어느 하나를, 재생 개시 위치로서 결정한다.
또한, 플레이어 제어 모듈(212)에서는, 도 34의 스텝 S124에서 설명한 바와 같이 하여, 2번째의 PlayItem #1에 속하는 Mark()의 인식이나, 도 34의 스텝 S125에서 설명한 바와 같이 하여, PlayItem #1에 의해 재생되는 클립 스트림 파일 "00002.PS"에 다중화되어 있는 각 속성의 엘리멘터리 스트림의 개수의 인식, 또한, 재생하는 엘리멘터리 스트림의 결정 등이 행해진다.
그리고, 플레이어 제어 모듈(212)은, 도 34의 스텝 S127에서의 경우와 마찬가지의 처리를 행한다.
즉, 플레이어 제어 모듈(212)은, 재생 개시 위치로서 결정한 EP_map()의 RPN_EP_start와, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일의 파일명, 즉, 지금의 경우, 2번째의 PlayItem #1(도 29)의 Clip_Information_file_name에 기술된 "00002.CLP"에 대응하는 클립 스트림 파일 "00002.PS"의 파일명을, 콘텐츠 데이터 공급 모듈(213)에 대하여 공급한다.
또한, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일 "00002.PS"에 저장된 프로그램 스트림의, 버퍼 제어 모듈(215)에의 공급이 개시되기 전에, 버퍼 제어 모듈(215)을 초기화한다.
즉, 이에 의해, 버퍼 제어 모듈(215)(도 5)에서, 데이터 선두 포인터 기억부(231)에 기억되는 데이터 선두 포인터, 데이터 써넣기 포인터 기억부(232)에 기억되는 데이터 써넣기 포인터, 비디오 읽어내기 포인터 기억부(241)에 기억되는 비디오 읽어내기 포인터, 오디오 읽어내기 포인터 기억부(251)에 기억되는 오디오 읽어내기 포인터, 자막 읽어내기 포인터 기억부(262)에 기억되는 자막 읽어내기 포인터에, 동일한 값이 대입된다.
또한, 플레이어 제어 모듈(212)은, 재생 대상의 엘리멘터리 스트림을 식별하기 위한 식별 정보로서의 stream_id, 또한, 필요에 따라, private_stream_id를, 버퍼 제어 모듈(215)에 공급한다.
버퍼 제어 모듈(215)(도 5)에서는, 비디오 읽어내기 기능부(233)가, 플레이어 제어 모듈(212)로부터의, 재생 대상의 엘리멘터리 스트림 중 비디오 스트림에 대한 stream_id를, stream_id 레지스터(242)에 기억시킨다. 또한, 오디오 읽어내 기 기능부(234)가, 플레이어 제어 모듈(212)로부터의, 재생 대상의 엘리멘터리 스트림 중 오디오 스트림의 stream_id와 private_stream_id를, stream_id 레지스터(252)와 private_stream_id 레지스터(253)에, 각각 기억시킨다.
또한, 지금 재생 대상으로 되어 있는 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일 "00002.PS"에는, 자막 스트림이 포함되기 때문에, 플레이어 제어 모듈(212)로부터 자막 읽어내기 기능부(235)에는, 재생 대상의 엘리멘터리 스트림 중 자막 스트림의 stream_id와 private_stream_id가 공급되고, 자막 읽어내기 기능부(235)는, 그 stream_id와 private_stream_id를, stream_id 레지스터(263)와 private_stream_id 레지스터(264)에, 각각 기억시킨다.
그리고, 플레이어 제어 모듈(212)은, 버퍼 제어 모듈(215)(도 5)의 초기화로서, 또한, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일에 따른 값의 자막 읽어내기 기능 플래그를, 자막 읽어내기 기능 플래그 기억부(261)에 세트한다.
즉, 지금의 경우, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일 "00002.PS"에는, 자막 스트림이 포함되기 때문에, 자막 읽어내기 기능부(235)을 기능시키기 위해서, 값이 1인 자막 읽어내기 기능 플래그가, 자막 읽어내기 기능 플래그 기억부(261)에 세트된다.
또한, 플레이어 제어 모듈(212)은, 재생하고자 하고 있는 2번째의 PlayItem #1(도 29)의 IN_time인 90,000과, OUT_time인 27,090,000을, 디코드 제어 모듈(214)에 대하여 공급한다.
또한, 플레이어 제어 모듈(212)은, 그래픽 처리 모듈(219)에 대한 자막 스트림의 표시 방식의 지시를 초기화한다. 즉, 플레이어 제어 모듈(212)은, 자막 스트림의 표시 방식을 디폴트의 표시 방식으로 하도록, 그래픽 처리 모듈(219)을 제어한다.
또한, 재생 대상의 자막 스트림에 대해서, configurable_flag(도 14)가, 표시 방식의 변경을 허가하는 1로 되어 있는 경우에는, 플레이어 제어 모듈(212)로부터 그래픽 처리 모듈(219)에 대한 자막 스트림의 표시 방식의 지시는, 현재의 표시 방식 그대로로 하도록 하여도 된다.
이하, 2번째의 PlayItem #1의 재생은, 1번째의 PlayItem #0의 재생과 마찬가지로 하여 행하여진다. 그리고, 디코드 제어 모듈(214)은, 그 2번째의 PlayItem #1의 재생이 행해지고 있는 동안, 내장하는 계시부(214A)가 계시하고 있는 시각을 계속해서 확인하고 있으며, 계시부(214A)가 계시하고 있는 시각이, 스텝 S152(도 40)에서 플레이어 제어 모듈(212)로부터 공급된 2번째의 PlayItem #1의 OUT_time인 27,090,000(도 29)과 동일하게 되면, 스텝 S151에서의 경우와 마찬가지의 디코드 중단 제어를 행하여, PlayItem #1의 재생을 종료한다. 또한, 전술한 바와 같이, 계시부(214A)가 계시하고 있는 시각은, 엄밀하게는, PlayItem #0의 OUT_time과 동일하게 되지 않는 경우가 있다. 그와 같은 때, PlayItem #0의 OUT_time의 시각과 계시부(214A)가 계시하는 시각이 근방의 값으로 된 타이밍에서, 디코드 중단 제어가 행해져, PlayItem #0의 재생이 종료되게 된다. 또한, 이 처리에 대해서는, 도 51, 도 52를 참조하여 상세를 후술한다.
[타임 코드의 표시]
다음으로, 전술한 바와 같이, 도 34의 스텝 S123에서, 타임 코드의 표시가 개시되지만, 이 타임 코드의 표시는, 순차적으로 갱신되어 간다.
따라서, 도 41의 플로우차트를 참조하여, 타임 코드의 표시의 처리에 대해서 설명한다.
디코드 제어 모듈(214)(도 2A 및 도 2B)은, 그 내장하는 계시부(214A)에 의해 1초가 계시되면, 스텝 S171에서, 1초가 경과하였다는 취지의 메시지와 함께, 그 계시부(214A)에 의해 계시되어 있는 현재 시각을, 플레이어 제어 모듈(212)에 공급하고, 스텝 S172로 진행한다. 스텝 S172에서는, 플레이어 제어 모듈(212)은, 디코드 제어 모듈(214)로부터의 메시지와 현재 시각을 수신하고, 그 현재 시각을, 타임 코드로 환산하고, 스텝 S173으로 진행한다.
스텝 S173에서는, 플레이어 제어 모듈(212)은, 스텝 S172에서 얻은 타임 코드를 표시하도록, 그래픽 처리 모듈(219)을 제어하고, 스텝 S171로 되돌아간다.
이에 의해, 타임 코드는, 1초마다 갱신된다. 또한, 타임 코드의 갱신의 간격은, 1초로 한정되는 것은 아니다.
[스트림 절환]
다음으로, 도 29에서 설명한 1번째의 PlayList #0을 구성하는 1번째의 PlayItem #0에 의해 재생되는 클립 스트림 파일 "00001.PS"나, 2번째의 PlayItem #1에 의해 재생되는 클립 스트림 파일 "00002.PS"에는, 도 30A 및 도 30B에서 설명한 바와 같이, 2개의 자막 스트림이 다중화되어 있다.
이와 같이, 클립 스트림 파일에, 복수의, 동일한 속성의 엘리멘터리 스트림이 다중화되어 있는 경우에서는, 재생 대상의 엘리멘터리 스트림을, 그 복수의, 동일한 속성의 엘리멘터리 스트림 중 하나로부터, 다른 하나로 절환하는 스트림 절환을 행할 수 있다.
따라서, 도 42의 플로우차트를 참조하여, 스트림 절환의 처리에 대해서 설명한다.
스트림 절환의 요구는, 예를 들면, "SCRIPT.DAT" 파일(도 6)에, 스트림 절환의 지시가 스크립트 프로그램으로서 기술되어 있는 경우에, 스크립트 제어 모듈(211)이, 그 스크립트 프로그램을 실행함으로써, 혹은, 유저가 리모콘을 조작함으로써, 플레이어 제어 모듈(212)에 공급된다.
즉, 스크립트 제어 모듈(211)은, 스트림 절환의 지시가 기술되어 있는 스크립트 프로그램을 실행하면, 스트림 절환을 요구하는 메시지를, 플레이어 제어 모듈(212)에 공급한다. 또한, 입력 인터페이스(115)는, 유저가 리모콘을 조작함으로써, 리모콘으로부터, 스트림 절환을 지시하는 신호를 수신하면, 스트림 절환을 요구하는 메시지를, 플레이어 제어 모듈(212)에 공급한다.
예를 들면, 지금, 플레이어 제어 모듈(212)에 대하여, 자막 스트림의 절환을 요구하는 메시지인 자막 스트림 절환의 메시지가 공급된 것으로 하면, 플레이어 제어 모듈(212)은, 스텝 S191에서, 도 34의 스텝 S125에서 행해진 재생 대상의 엘리멘터리 스트림의 결정 시에 인식한 자막 스트림의 개수를 체크한다.
플레이어 제어 모듈(212)은, 자막 스트림의 개수를 체크한 결과, 그 개수가 1개 이하인 경우, 자막 스트림 절환의 메시지를 무시하고, 따라서, 이후의 스텝 S192 내지 S194의 처리는 행해지지 않는다.
한편, 자막 스트림의 개수가 2개 이상인 경우, 스텝 S192 내지 S194로 순차적으로 진행하여, 재생하는 자막 스트림이, 현재 재생되고 있는 자막 스트림으로부터, 다른 자막 스트림으로 절환된다.
즉, 스텝 S192에서, 플레이어 제어 모듈(212)은, 현재 재생 중인 자막 스트림을, 클립 정보 파일 상에서 특정한다. 구체적으로는, 예를 들면, 지금, 도 29에서 설명한 1번째의 PlayList #0을 구성하는 2번째의 PlayItem #1에 의해, 클립 스트림 파일 "00002.PS"에 다중화된, stream_id가 0xBD이고, private_stream_id가 0x80인 자막 스트림이 재생되어 있는 것으로 하면, 스텝 S192에서는, 현재 재생 중인 자막 스트림이, 클립 스트림 파일 "00002.PS"에 다중화된 2개의 자막 스트림 중, 도 30A 및 도 30B의 클립 정보 파일 "00002.CLP" 상에서 3개째의 자막 스트림인 stream #2인 것이 특정된다.
그리고, 스텝 S193으로 진행하여, 플레이어 제어 모듈(212)은, 스텝 S192에서 특정한 자막 스트림의, 클립 정보 파일 상에서 다음 자막 스트림을, 다음에 재생할 자막 스트림으로서 특정한다. 도 30A 및 도 30B에서는, 클립 정보 파일 "00002.CLP" 상에서, 3개째의 자막 스트림 stream #2의 다음 자막 스트림은, 4개째의 자막 스트림 stream #3이기 때문에, 스텝 S193에서는, 이 4개째의 자막 스트림 stream #3이, 다음에 재생할 자막 스트림으로서 인식된다.
또한, 현재 재생 중인 자막 스트림이, 클립 스트림 파일 "00002.PS"에 다중 화된 2개의 자막 스트림 중, 도 30A 및 도 30B의 클립 정보 파일 "00002.CLP" 상에서 4개째의 자막 스트림인 stream #3인 것이 특정된 경우에는, 예를 들면, 3개째의 자막 스트림 stream #2가, 다음에 재생할 자막 스트림으로서 인식된다.
그 후, 스텝 S194로 진행하여, 플레이어 제어 모듈(212)은, 스텝 S193에서 인식한 다음에 재생할 자막 스트림의 stream_id와 private_stream_id를, 버퍼 제어 모듈(215)(도 5)의 자막 읽어내기 기능부(235)에 대하여 공급하고, 그 stream_id와 private_stream_id를, 차회로부터의, 자막 액세스 유닛의 버퍼(215A)로부터의 읽어내기로부터 사용하도록 지시한다.
버퍼 제어 모듈(215)(도 5)의 자막 읽어내기 기능부(235)에서는, 스텝 S194에서 플레이어 제어 모듈(212)로부터 공급되는 stream_id와 private_stream_id를, stream_id 레지스터(263)와 private_stream_id 레지스터(264)에, 각각 새롭게 세트하고, 차회 이후의 버퍼(215A)로부터의 읽어내기는, 그 stream_id 레지스터(263)와 private_stream_id 레지스터(264)에 각각 새롭게 세트된 stream_id와 private_stream_id에 의해 특정되는 자막 액세스 유닛을 대상으로 하여 행해진다.
이상과 같이 하여, 재생하는 자막 스트림이, 현재 재생되고 있는 자막 스트림으로부터, 다른 자막 스트림으로 절환된다.
[버퍼 제어 모듈(215)의 처리]
다음으로, 도 43 내지 도 47을 참조하여, 버퍼 제어 모듈(215)(도 5)의 처리, 즉, 버퍼(215A)에의 데이터의 써넣기와, 버퍼(215A)로부터의 데이터의 읽어내기에 대해서 설명한다.
버퍼 제어 모듈(215)은, 도 5에서 설명한 바와 같이, 버퍼(215A)에 대한 데이터의 읽기 쓰기를 행하기 위한 5개의 포인터를 갖고 있다.
즉, 도 43 및 도 44에 도시하는 바와 같이, 버퍼 제어 모듈(215)은, 데이터 선두 포인터 기억부(231)에 기억되는 데이터 선두 포인터, 데이터 써넣기 포인터 기억부(232)에 기억되는 데이터 써넣기 포인터, 비디오 읽어내기 포인터 기억부(241)에 기억되는 비디오 읽어내기 포인터, 오디오 읽어내기 포인터 기억부(251)에 기억되는 오디오 읽어내기 포인터, 및 자막 읽어내기 포인터 기억부(262)에 기억되는 자막 읽어내기 포인터를 갖고 있다.
또한, 도 43 및 도 44에서는, 도 5에서의 비디오 읽어내기 기능부(233)의 stream_id 레지스터(242) 및 au_information() 레지스터(243), 오디오 읽어내기 기능부(234)의 stream_id 레지스터(252) 및 private_stream_id 레지스터(253), 및 자막 읽어내기 기능부(235)의 자막 읽어내기 기능 플래그 기억부(261), stream_id 레지스터(263), 및 private_stream_id 레지스터(264)의 도시는, 생략하고 있다.
데이터 선두 포인터 기억부(231)에 기억된 데이터 선두 포인터는, 버퍼(215A)에 남는 가장 오래된 데이터(읽어낼 필요가 있는 데이터로서, 아직 읽어내어지지 않은 데이터 중 가장 오래된 데이터)의 위치를 나타낸다. 데이터 써넣기 포인터 기억부(232)에 기억된 데이터 써넣기 포인터는, 버퍼(215A)에의 데이터의 써넣기의 위치를 나타내고, 이 위치는, 버퍼(215A)에서 가장 새로운 데이터가 써넣어지는 위치이다.
비디오 읽어내기 포인터 기억부(241)에 기억된 비디오 읽어내기 포인터는, 버퍼(215A)로부터 읽어내는 비디오 스트림의 위치를 나타낸다. 또한, 오디오 읽어내기 포인터 기억부(251)에 기억된 오디오 읽어내기 포인터는, 버퍼(215A)로부터 읽어내는 오디오 스트림의 위치를 나타내고, 자막 읽어내기 포인터 기억부(262)에 기억된 자막 읽어내기 포인터는, 버퍼(215A)로부터 읽어내는 자막 스트림의 위치를 나타낸다.
또한, 도 5에서 설명한 바와 같이, 데이터 선두 포인터, 데이터 써넣기 포인터, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 및 자막 읽어내기 포인터는, 모두, 버퍼(215A)를 오른쪽으로 도는 방향으로 이동한다.
또한, 본 실시 형태에서는, 데이터 선두 포인터는, 도 44에 도시하는 바와 같이, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터 중, 가장 오래된 데이터의 위치를 가리키고 있는 것과 동일한 위치를 가리키도록, 항상 갱신되는 것으로 한다. 여기서, 도 44에서는, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터 중, 오디오 읽어내기 포인터가, 가장 오래된 데이터의 위치를 가리키고 있고, 데이터 선두 포인터는, 그 오디오 읽어내기 포인터와 일치하고 있다.
이상과 같은 데이터 선두 포인터, 데이터 써넣기 포인터, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 및 자막 읽어내기 포인터를 갖는 버퍼 제어 모듈(215)에서는, 데이터 써넣기 포인터는, 디스크(101)로부터 새로운 데이터가 읽어내어져, 버퍼(215A)에 써넣어지면, 그 써넣어진 새로운 데이터 직후의 위치를 가리키도록, 오른쪽으로 도는 방향으로 갱신된다.
또한, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터는, 버퍼(215A)로부터, 비디오 스트림, 오디오 스트림, 또는 자막 스트림이 읽어내어지면, 그 읽어내기량에 따른 분만큼, 각각, 오른쪽으로 도는 방향으로 갱신된다. 여기서 읽어내기량에 따른 분이란, 실제로 읽어낸 비디오, 오디오, 자막의 데이터에 대응하는 부분과, 읽어낸 데이터의 사이에 포함되어 있으며, 읽어내기 시에는 띄엄띄엄 읽기를 행한, 다른 스트림의 데이터의 부분을 합친 것으로 된다.
또한, 데이터 선두 포인터는, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터가 갱신되면, 그 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터 중, 가장 오래된 데이터의 위치를 가리키고 있는 것과 동일한 위치를 가리키도록 갱신된다.
여기서, 버퍼 제어 모듈(215)은, 버퍼(215A)에의 데이터의 써넣기에 대해서는, 데이터 써넣기 포인터가 데이터 선두 포인터를 추월하지 않도록, 버퍼(215A)에의 데이터의 써넣기를 제어한다.
즉, 데이터 써넣기 포인터에 의한 데이터 선두 포인터의 추월이 발생하지 않는 한, 버퍼 제어 모듈(215)에서는, 디스크(101)로부터 읽어내어진 데이터가, 데이터 써넣기 포인터가 가리키는 버퍼(215A)의 위치에 써넣어지고, 데이터 써넣기 포인터가 갱신되어 간다. 한편, 데이터 써넣기 포인터에 의한 데이터 선두 포인터의 추월이 발생할 것 같으면, 버퍼 제어 모듈(215)에서는, 콘텐츠 데이터 공급 모듈(213)에 대하여, 디스크(101)로부터의 데이터의 읽어내기의 정지가 요구되고, 또 한, 버퍼(215A)에의 데이터의 써넣기가 정지된다. 이에 의해, 버퍼(215A)의 오버플로우를 방지할 수 있다.
이상과 같이, 디스크(101)로부터 읽어내어진 데이터의, 버퍼(215A)에의 써넣기는 데이터 선두 포인터와 데이터 써넣기 포인터의 2개의 포인터의 위치 관계만으로 제어된다.
한편, 버퍼 제어 모듈(215)은, 버퍼(215A)로부터의 데이터의 읽어내기에 대해서는, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 및 자막 읽어내기 포인터, 나아가서는, 데이터 선두 포인터가, 데이터 써넣기 포인터를 추월하지 않도록, 버퍼(215A)로부터의 데이터의 읽어내기를 제어한다.
즉, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터에 의한 데이터 써넣기 포인터의 추월이 발생하지 않는 한, 버퍼 제어 모듈(215)에서는, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 또는 자막 디코더 제어 모듈(218)로부터의 요구에 따라, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터가 가리키는 버퍼(215A)의 위치로부터 데이터가 읽어내어지고, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터가 갱신됨과 함께, 필요에 따라, 데이터 선두 포인터가 갱신된다. 한편, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터에 의한 데이터 써넣기 포인터의 추월이 발생할 것 같으면, 버퍼 제어 모듈(215)에서는, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 또는 자막 디코더 제어 모듈(218)로부터의 요구가, 예를 들면 동결되어, 충분한 데이터가 준비될 때까지 대기한다. 이에 의해, 버퍼(215A)의 언더플로우를 방지할 수 있다.
이상으로부터, 버퍼(215A)에는, 데이터 선두 포인터가 가리키는 위치부터, 오른쪽으로 도는 방향으로, 데이터 써넣기 포인터가 가리키는 위치까지의 범위(도 43 및 도 44에서 음영이 가해져 있는 부분)에, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 및 자막 디코더 제어 모듈(218)에 공급할 데이터가 기억되어 있고, 또한, 그 범위 내에, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 및 자막 읽어내기 포인터는 존재한다.
또한, 전술한 경우에는, 데이터 선두 포인터는, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터가 가리키고 있는 위치 중, 가장 오래된 데이터의 위치를 가리키도록 갱신하는 것으로 했지만, 그 밖에, 데이터 선두 포인터의 갱신은, 예를 들면, 그 가장 오래된 데이터의 위치로부터, 소정 시간(예를 들면, 1초)분만큼 과거의 데이터의 위치를 가리키도록 행하는 것이 가능하다.
즉, 일반적으로는, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 또는 자막 읽어내기 포인터 중, 비디오 읽어내기 포인터나 오디오 읽어내기 포인터가, 가장 오래된 데이터의 위치를 가리키는 경우가 많을 것으로 예상된다.
따라서, 데이터 선두 포인터를, 비디오 읽어내기 포인터 또는 오디오 읽어내기 포인터가 가리키는 가장 오래된 데이터의 위치로부터, 예를 들면, 1초분만큼 과거의 데이터의 위치를 가리키도록 갱신한 경우, 도 43에 도시하는 바와 같이, 비디 오 읽어내기 포인터 또는 오디오 읽어내기 포인터가 가리키는 가장 오래된 데이터의 위치로부터 과거 1초분의 데이터를, 버퍼(215A)에 남겨 둘 수 있다. 여기서, 도 43에서는, 오디오 읽어내기 포인터가, 가장 오래된 데이터의 위치를 가리키고 있고, 데이터 선두 포인터는, 그 위치로부터 1초분만큼 과거의 데이터의 위치를 가리키고 있다.
이상과 같이, 1초분만큼 과거의 데이터의 위치를 가리키도록, 데이터 선두 포인터를 갱신함으로써, 디스크 재생 장치의 응답성을 향상시킬 수 있다.
즉, 도 44에 도시한 바와 같이, 오디오 읽어내기 포인터가 가리키고 있는 가장 오래된 데이터의 위치를 가리키도록, 데이터 선두 포인터를 갱신하는 경우에는, 예를 들면, 리버스 방향으로의 특수 재생이 지시되었을 때에, 버퍼(215A)로부터의 읽어내기가 종료된 데이터를, 디스크(101)로부터 다시 읽어낼 필요가 있기 때문에, 특수 재생이 지시되고 나서, 그 특수 재생이 가능하게 될 때까지, 어느 정도의 시간이 걸린다.
이에 대하여, 도 43에 도시한 바와 같이, 오디오 읽어내기 포인터가 가리키고 있는 가장 오래된 데이터의 위치로부터 1초분만큼 과거의 데이터의 위치를 가리키도록, 데이터 선두 포인터를 갱신하는 경우에는, 리버스 방향으로의 특수 재생이 지시되었을 때에, 그 특수 재생을 개시하는 데에 필요한 데이터가, 버퍼(215A)에 기억되어 있는 1초분만큼 과거의 데이터이면, 전술한 바와 같은 디스크(101)로부터의 데이터의 재읽어내기를 행하지 않고, 바로, 특수 재생을 개시하는 것이 가능하게 된다.
또한, 오디오 읽어내기 포인터가 가리키고 있는 가장 오래된 데이터의 위치로부터 1초분만큼 과거의 데이터의 위치를 가리키도록, 데이터 선두 포인터를 갱신하는 경우에도, 특수 재생을 개시하는 데에 필요한 데이터가, 버퍼(215A)에 기억되어 있지 않은 경우가 있을 수 있다. 이 경우에는, 특수 재생을 개시하는 데에 필요한 데이터가, 디스크(101)로부터 다시 읽어내어진다.
다음으로, 버퍼(215A)로부터의 비디오 스트림, 오디오 스트림, 자막 스트림 각각의 읽어내기의 상세에 대해서 설명한다.
도 34의 스텝 S127에서 설명한 바와 같이, 클립 스트림 파일의 재생이 개시될 때에, 버퍼 제어 모듈(215)에서는, 데이터 선두 포인터, 데이터 써넣기 포인터, 비디오 읽어내기 포인터, 오디오 읽어내기 포인터, 자막 읽어내기 포인터가, 모두, 버퍼(215A) 상의 동일한 위치를 가리키도록 초기화된다.
그리고, 디스크(101)로부터 클립 스트림 파일에 저장된 프로그램 스트림(MPEG2-System Program Stream)이 읽어내어져, 버퍼 제어 모듈(215)에 공급되면, 버퍼 제어 모듈(215)에서는, 그 프로그램 스트림이, 버퍼(215A)의 데이터 써넣기 포인터가 가리키는 위치에 기억됨과 함께, 데이터 써넣기 포인터가, 오른쪽으로 도는 방향으로 갱신되어 간다.
또한, 버퍼 제어 모듈(215)(도 5)에서는, 비디오 읽어내기 기능부(233)가, 버퍼(215A)에 기억된 프로그램 스트림의 구문 해석을 행하고, 비디오 디코더 제어 모듈(216)로부터의 요구에 따라, 버퍼(215A)에 기억된 프로그램 스트림으로부터, 비디오 액세스 유닛을 추출하여 읽어내어, 비디오 디코더 제어 모듈(216)에 공급한 다.
마찬가지로, 오디오 읽어내기 기능부(234)도, 버퍼(215A)에 기억된 프로그램 스트림의 구문 해석을 행하고, 오디오 디코더 제어 모듈(217)로부터의 요구에 따라, 버퍼(215A)에 기억된 프로그램 스트림으로부터, 오디오 액세스 유닛을 추출해서 읽어내어, 오디오 디코더 제어 모듈(217)에 공급한다. 자막 읽어내기 기능부(235)도, 버퍼(215A)에 기억된 프로그램 스트림의 구문 해석을 행하고, 자막 디코더 제어 모듈(218)로부터의 요구에 따라, 버퍼(215A)에 기억된 프로그램 스트림으로부터, 자막 액세스 유닛을 추출하여 읽어내어, 자막 디코더 제어 모듈(218)에 공급한다.
「비디오 스트림의 읽어내기」
다음으로, 도 45의 플로우차트를 참조하여, 비디오 읽어내기 기능부(233)(도 5)에 의한, 버퍼(215A)로부터의 비디오 스트림의 읽어내기 처리의 상세에 대해서 설명한다.
비디오 읽어내기 기능부(233)는, 우선 최초로, 스텝 S211에서, 버퍼(215A)에 기억된 프로그램 스트림 중 private_stream_2의 PES_packet()을 탐색하여 찾아낸다. 즉, private_stream_2의 PES_packet()의 stream_id는, 도 23에서 설명한 바와 같이, 10111111B(=0xBF)이며, 비디오 읽어내기 기능부(233)는, stream_id가 10111111B로 되어 있는 PES_packet()을 탐색해서 찾아낸다.
여기서, 예를 들면, 지금, 전술한 바와 같이, 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림에 다중화된 엘리멘터리 스트림이, 재생 대상의 엘리멘 터리 스트림인 것으로 하면, 그 프로그램 스트림을 디스크(101)로부터 읽어내어, 버퍼(215A)에 기억시킬 때에, 도 34의 스텝 S122에서, 클립 스트림 파일 "00001.PS"의 EP_map()(도 31)에 기술된 디코드 개시 가능점의 정보로부터, 305섹터가 재생 개시 위치로서 결정되고, 또한, 도 34의 스텝 S128에서, 재생 개시 위치인 305섹터가 지정되고, 오퍼레이팅 시스템(201)에 대하여, 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림의 읽어내기가 요구된다.
또한, 비디오 스트림에 대해서는, EP_map()에 기술된 디코드 개시 가능점의 정보는, 실제의 디코드 개시 가능점의 직전에 배치된 private_stream_2의 PES_packet()의 위치를 나타낸다.
따라서, 클립 스트림 파일 "00001.PS"에 저장된 프로그램 스트림이 디스크(101)로부터 읽어내어져, 버퍼(215A)에 기억된 직후에는, 데이터 선두 포인터나 비디오 읽어내기 포인터가 가리키는 버퍼(215A)의 위치에는, private_stream_2의 PES_packet()이 기억되어 있다.
비디오 읽어내기 기능부(233)는, 스텝 S211에서, private_stream_2의 PES_packet()이 발견되면, 스텝 S212로 진행하여, 그 private_stream_2의 PES_packet()의 PES_packet_data_byte인 private_stream2_PES_payload()(도 26)에 기술되어 있는 video_stream_id를 추출하고, 그 video_stream_id가, 도 34의 스텝 S127에서 stream_id 레지스터(242)(도 5)에 기억된, 재생 대상의 비디오 스트림의 stream_id와 일치하는지의 여부를 판정한다.
스텝 S212에서, private_stream2_PES_payload()에 기술되어 있는 video_stream_id가, stream_id 레지스터(242)에 기억된 stream_id와 일치하지 않는다고 판정된 경우, 즉, 직전의 스텝 S211에서 찾아낸 private_stream_2의 PES_packet()이, 재생 대상의 비디오 스트림의 디코드 개시점에 배치된 것이 아닌 경우, 스텝 S211로 되돌아가서, 버퍼(215A)에 기억된 프로그램 스트림 중 다른 private_stream_2의 PES_packet()의 탐색이 행해지고, 이하, 마찬가지의 처리가 반복된다.
한편, 스텝 S212에서, private_stream2_PES_payload()에 기술되어 있는 video_stream_id가, stream_id 레지스터(242)에 기억된 stream_id와 일치한다고 판정된 경우, 즉, 직전의 스텝 S211에서 찾아낸 private_stream_2의 PES_packet()이, 재생 대상의 비디오 스트림의 디코드 개시점에 배치된 것인 경우, 스텝 S213으로 진행하여, 비디오 읽어내기 기능부(233)는, 그 private_stream_2의 PES_packet()의 private_stream2_PES_payload()에 기술되어 있는 au_information()을, 버퍼(215A)로부터 읽어내어, au_information() 레지스터(243)(도 5)에 기억시키고, 스텝 S214로 진행한다.
스텝 S214에서는, 비디오 읽어내기 기능부(233)는, 직전의 스텝 S211에서 찾아낸 private_stream_2의 PES_packet()(video_stream_id(도 26)가, stream_id 레지스터(242)(도 5)에 기억된 stream_id와 일치하는 private_stream_2의 PES_packet())의 사이즈만큼, 데이터 선두 포인터 기억부(231)에 기억된 비디오 읽어내기 포인터를 갱신한다.
즉, 클립 스트림 파일에서는, private_stream_2의 PES_packet()의 직후에, 그 video_stream_id와 일치하는 stream_id의 비디오 스트림(PES_packet())이 배치되어 있고, 따라서, 스텝 S214에서는, 비디오 읽어내기 포인터는, 비디오 스트림의 실제의 디코드 개시 가능점의 위치를 가리키도록 갱신된다.
그 후, 스텝 S214로부터 S215로 진행하여, 비디오 읽어내기 기능부(233)는, 비디오 코더 제어 모듈(216)로부터, 데이터의 요구가 있었는지의 여부를 판정하고, 없다고 판정한 경우, 스텝 S215로 되돌아가서, 마찬가지의 처리를 반복한다.
또한, 스텝 S215에서, 비디오 디코더 제어 모듈(216)로부터, 데이터의 요구가 있었다고 판정된 경우, 스텝 S216으로 진행하여, 비디오 읽어내기 기능부(233)는, 비디오 읽어내기 포인터가 가리키고 있는 버퍼(215A)의 위치로부터의 프로그램 스트림의 구문 해석을 행하면서, au_information() 레지스터(243)에 기억된 au_information()의 AU_length에 기술된 바이트수의 데이터, 즉 1개의 비디오 액세스 유닛을, 버퍼(215A)로부터 읽어내어, 비디오 디코더 제어 모듈(216)에 공급함과 함께, 비디오 읽어내기 포인터를, 버퍼(215A)로부터 읽어낸 1개의 비디오 액세스 유닛의 사이즈분만큼 갱신한다.
즉, au_information()에는, 도 27에서 설명한 바와 같이, 그것을 포함하는 private_stream_2의 PES_packet()부터, 다음 private_stream_2의 PES_packet()까지의 사이에 포함되는 비디오 액세스 유닛(픽쳐)의 수를 나타내는 number_of_access_unit이 기술되어 있다.
또한, au_information()에는, 도 27에서 설명한 바와 같이, 그 number_of_access_unit의 수만큼의 비디오 액세스 유닛 각각에 관한 정보로서의 pic_struct_copy, au_ref_flag, 및 AU_length가 기술되어 있다.
au_information()에 number_of_access_unit의 수만큼 기술되어 있는 AU_length 각각은, 도 27에서 설명한 바와 같이, 그것을 포함하는 private_stream_2의 PES_packet()부터, 다음 private_stream_2의 PES_packet()까지의 사이에 포함되는, number_of_access_unit의 수의 비디오 액세스 유닛 각각의 사이즈를 나타내기 때문에, 비디오 읽어내기 기능부(233)는, 그 AU_length를 이용함으로써, 비디오 스트림의 구문 해석을 행하지 않고, 액세스 유닛의 잘라냄을 행할 수 있다.
즉, 종래, MPEG2-Video나 MPEG4-AVC의 액세스 유닛을 잘라내는 경우에는, 비디오 스트림의 구문을 안 후에, 비디오 스트림의 구문 해석을 행할 필요가 있었지만, 디스크(101)에 기록된 클립 스트림 파일에 저장된 프로그램 스트림은, 비디오 액세스 유닛 단위의 비디오 스트림에서의 1 이상의 실제의 디코드 개시 가능점 각각의 직전에, 비디오 액세스 유닛의 사이즈를 나타내는 AU_length가 기술된 private_stream_2의 PES_packet()을 포함하고 있으므로, 비디오 읽어내기 기능부(233)는, 그 private_stream_2의 PES_packet()에 기술된 AU_length에 기초하여, 비디오 스트림의 구문 해석을 행하지 않고, 버퍼(215A)로부터, 비디오 액세스 유닛(단위의 비디오 스트림)을 읽어내어, 비디오 디코더 제어 모듈(216)에 공급할 수 있다.
또한, 비디오 읽어내기 기능부(233)는, 스텝 S216에서, 비디오 액세스 유닛을, 비디오 디코더 제어 모듈(216)에 공급할 때에, 그 비디오 액세스 유닛에 관한 정보로서 au_information()에 기술되어 있는 pic_struct_copy, au_ref_flag, 및 AU_length와, 비디오 액세스 유닛 단위로 부가되어 있는 타임 스탬프(PTS, DTS)도, 비디오 디코더 제어 모듈(216)에 공급한다.
스텝 S216에서, 버퍼(215A)로부터 1개의 비디오 액세스 유닛이 읽어내어져, 비디오 디코더 제어 모듈(216)에 공급된 후에는, 스텝 S217로 진행하여, 비디오 읽어내기 기능부(233)는, au_information() 레지스터(243)에 기억된 au_information()(도 27)의 number_of_access_unit이 나타내는 수만큼의 액세스 유닛을 처리했는지의 여부를 판정한다.
스텝 S217에서, number_of_access_unit이 나타내는 수만큼의 액세스 유닛을, 아직 처리하지 않았다고 판정된 경우, 즉, number_of_access_unit가 나타내는 수만큼의 액세스 유닛을, 아직, 버퍼(215A)로부터 읽어내어 비디오 디코더 제어 모듈(216)에 공급하지 않은 경우, 스텝 S215로 되돌아가서, 이하, 마찬가지의 처리가 반복된다.
또한, 스텝 S217에서, number_of_access_unit이 나타내는 수만큼의 액세스 유닛을 처리했다고 판정된 경우, 즉, number_of_access_unit이 나타내는 수만큼의 액세스 유닛을, 버퍼(215A)로부터 읽어내어 비디오 디코더 제어 모듈(216)에 공급한 경우, 스텝 S211로 되돌아가서, 다음 private_stream_2의 PES_packet()의 탐색이 행해지고, 이하, 마찬가지의 처리가 반복된다.
「오디오 스트림의 읽어내기」
다음으로, 도 46의 플로우차트를 참조하여, 오디오 읽어내기 기능부(234)(도 5)에 의한, 버퍼(215A)로부터의 오디오 스트림의 읽어내기 처리의 상세에 대해서 설명한다.
오디오 읽어내기 기능부(234)는, 우선 최초로, 스텝 S230에서, 도 34의 스텝 S127에서 stream_id 레지스터(252)(도 5)에 기억된, 재생 대상의 오디오 스트림의 stream_id가, private_stream_1의 PES_packet()을 나타내고 있는지의 여부를 판정한다.
스텝 S230에서, stream_id 레지스터(252)에 기억된 stream_id가, private_stream_1의 PES_packet()을 나타내고 있지 않다고 판정된 경우, 즉, stream_id 레지스터(252)에 기억된 stream_id가, 도 23에서 설명한 바와 같이, MPEG 규격에 따라 부호화된 오디오 스트림에 할당되는 110xxxxxB인 경우, 스텝 S231로 진행하여, 오디오 읽어내기 기능부(234)는, 버퍼(215A)에 기억된 프로그램 스트림으로부터, MPEG Audio에서 정해진 오디오 프레임 선두를 나타내는 동기 코드를 찾는다. 동기 코드의 위치가 오디오 프레임 선두이므로, 오디오 읽어내기 기능부(234)는, 오디오 읽어내기 포인터를, 오디오 프레임 선두의 위치를 나타내도록 갱신하고, 스텝 S231로부터 S232로 진행한다. 스텝 S232에서는, 오디오 읽어내기 기능부(234)는, 버퍼(215A)에 기억된 프로그램 스트림 중, stream_id 레지스터(252)에 기억된 stream_id에 일치하는 PES_packet()을, 오디오 읽어내기 포인터가 나타내는 위치로부터 탐색해서 찾아내고, 스텝 S233으로 진행한다.
스텝 S233에서는, 오디오 읽어내기 기능부(234)는, 오디오 읽어내기 포인터 기억부(251)에 기억된 오디오 읽어내기 포인터를, 직전의 스텝 S232에서 찾아낸 PES_packet()의 PES_packet_data_byte(도 19A 및 도 19B 내지 도 21A 및 도 21B)의 선두를 가리키도록 갱신하고, 스텝 S237로 진행한다.
스텝 S237에서는, 오디오 읽어내기 기능부(234)는, 오디오 디코더 제어 모듈(217)로부터, 데이터의 요구가 있었는지의 여부를 판정하고, 없었다고 판정한 경우, 스텝 S237로 되돌아가서, 마찬가지의 처리를 반복한다.
또한, 스텝 S237에서, 오디오 디코더 제어 모듈(217)로부터, 데이터의 요구가 있었다고 판정된 경우, 스텝 S238로 진행하여, 오디오 읽어내기 기능부(234)는, 오디오 읽어내기 포인터가 가리키고 있는 버퍼(215A)의 위치로부터의 프로그램 스트림의 구문 해석을 행하면서, 기지의 고정 길이의 1개의 오디오 액세스 유닛을, 버퍼(215A)로부터 읽어내고, 그 오디오 액세스 유닛에 부가되어 있는 타임 스탬프(PTS, DTS)와 함께, 오디오 디코더 제어 모듈(217)에 공급한다.
그리고, 오디오 읽어내기 기능부(234)는, 버퍼(215A)로부터 읽어낸 1개의 오디오 액세스 유닛의 사이즈분만큼, 오디오 읽어내기 포인터를 갱신하고, 스텝 S237로 되돌아가서, 이하, 마찬가지의 처리가 반복된다.
한편, 스텝 S230에서, stream_id 레지스터(252)에 기억된 stream_id가, private_stream_1의 PES_packet()을 나타내고 있다고 판정된 경우, 즉, stream_id 레지스터(252)에 기억된 stream_id가, 10111101B(=0xBD)이며, 도 23에서 설명한 바와 같이, private_stream_1의 PES_packet()을 나타내고 있는 경우, 스텝 S234로 진행하여, 오디오 읽어내기 기능부(234)는, 버퍼(215A)에 기억된 프로그램 스트림 중 private_stream_1의 PES_packet()을 탐색하여 찾아낸다. 즉, 오디오 읽어내기 기 능부(234)는, stream_id가 10111101B로 되어 있는 PES_packet()을 탐색해서 찾아낸다.
오디오 읽어내기 기능부(234)는, 스텝 S234에서, private_stream_1의 PES_packet()이 발견되면, 스텝 S235로 진행하여, 그 private_stream_1의 PES_packet()의 PES_packet_data_byte인 private_stream1_PES_payload()(도 24)에 기술되어 있는 private_stream_id를 뽑아내고, 그 private_stream_id가, 도 34의 스텝 S127에서 private_stream_id 레지스터(253)(도 5)에 기억된, 재생 대상의 오디오 스트림의 private_stream_id와 일치하는지의 여부를 판정한다.
스텝 S235에서, private_stream1_PES_payload()에 기술되어 있는 private_stream_id가, private_stream_id 레지스터(253)에 기억된 private_stream_id와 일치하지 않는다고 판정된 경우, 즉, 직전의 스텝 S234에서 찾아내어진 private_stream_1의 PES_packet()이, 재생 대상의 오디오 스트림이 아닌 경우, 스텝 S234로 되돌아가서, 버퍼(215A)에 기억된 프로그램 스트림 중 다른 private_stream_1의 PES_packet()의 탐색이 행해지고, 이하, 마찬가지의 처리가 반복된다.
한편, 스텝 S235에서, private_stream1_PES_payload()에 기술되어 있는 private_stream_id가, private_stream_id 레지스터(253)에 기억된 private_stream_id와 일치한다고 판정된 경우, 즉, 직전의 스텝 S234에서 찾아내어진 private_stream_1의 PES_packet()이, 재생 대상의 오디오 스트림인 경우, 스텝 S236으로 진행하여, 오디오 읽어내기 기능부(234)는, 그 private_stream_1의 PES_packet()의 private_stream1_PES_payload()(도 24)에 기술되어 있는 AU_locator를, 버퍼(215A)로부터 읽어내고, 그 AU_locator 직후의 위치와, 그 AU_locator가 나타내는 값을 가산함으로써, 오디오 액세스 유닛의 선두 위치를 구한다.
즉, AU_locator는, 도 24에서 설명한 바와 같이, 그 AU_locator 직후의 위치를 기준으로 하여, private_stream1_PES_payload()의 private_payload()에 저장되는 오디오 액세스 유닛 혹은 자막 액세스 유닛의 선두 위치를 나타내기 때문에, AU_locator 직후의 위치에, 그 AU_locator가 나타내는 값을 가산함으로써, 오디오 액세스 유닛의 선두 위치를 구할 수 있다.
오디오 읽어내기 기능부(234)는, 또한, 스텝 S236에서, 이상과 같이 하여 구한 오디오 액세스 유닛의 선두 위치를 가리키도록, 오디오 읽어내기 포인터 기억부(251)에 기억된 오디오 읽어내기 포인터를 갱신하고, 스텝 S237로 진행한다.
스텝 S237에서는, 오디오 읽어내기 기능부(234)는, 오디오 디코더 제어 모듈(217)로부터, 데이터의 요구가 있었는지의 여부를 판정하여, 없었다고 판정한 경우, 스텝 S237로 되돌아가서, 마찬가지의 처리를 반복한다.
또한, 스텝 S237에서, 오디오 디코더 제어 모듈(217)로부터, 데이터의 요구가 있었다고 판정된 경우, 스텝 S238로 진행하여, 오디오 읽어내기 기능부(234)는, 오디오 읽어내기 포인터가 가리키고 있는 버퍼(215A)의 위치로부터의 프로그램 스트림의 구문 해석을 행하면서, 기지의 고정 길이의 1개의 오디오 액세스 유닛을, 버퍼(215A)로부터 읽어내고, 그 오디오 액세스 유닛에 부가되어 있는 타임 스탬프 와 함께, 오디오 디코더 제어 모듈(217)에 공급한다.
그리고, 오디오 읽어내기 기능부(234)는, 버퍼(215A)로부터 읽어낸 1개의 오디오 액세스 유닛의 사이즈분만큼, 오디오 읽어내기 포인터를 갱신하고, 스텝 S237로 되돌아가서, 이하, 마찬가지의 처리가 반복된다.
「자막 스트림의 읽어내기」
다음으로, 도 47의 플로우차트를 참조하여, 자막 읽어내기 기능부(235)(도 5)에 의한, 버퍼(215A)로부터의 자막 스트림의 읽어내기 처리의 상세에 대해서 설명한다.
자막 읽어내기 기능부(235)는, 우선 최초로, 스텝 S251에서, 도 34의 스텝 S127에서 자막 읽어내기 기능 플래그 기억부(261)에 기억된 자막 읽어내기 기능 플래그를 판정한다. 스텝 S251에서, 자막 읽어내기 기능 플래그가 0이라고 판정된 경우, 즉, 예를 들면, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일에 자막 스트림이 포함되어 있지 않아, 도 34의 스텝 S127에서 자막 읽어내기 기능 플래그 기억부(261)에, 0이 세트된 경우, 자막 읽어내기 기능부(235)는 특별히 처리를 행하지 않는다.
한편, 스텝 S251에서, 자막 읽어내기 기능 플래그가 1이라고 판정된 경우, 즉, 예를 들면, 재생 대상의 엘리멘터리 스트림이 다중화되어 있는 클립 스트림 파일에 자막 스트림이 포함되어 있어, 도 34의 스텝 S127에서 자막 읽어내기 기능 플래그 기억부(261)에, 1이 세트된 경우, 스텝 S252로 진행하여, 자막 읽어내기 기능부(235)는, stream_id 레지스터(263)(도 5)에 기억된, 재생 대상의 자막 스트림의 stream_id에 일치하는 PES_packet()을, 버퍼(215A)에 기억된 프로그램 스트림으로부터 탐색한다.
여기서, 도 34의 스텝 S127에서 설명한 바와 같이, stream_id 레지스터(263)(도 5)에는, 재생 대상의 자막 스트림의 stream_id가 기억되지만, 자막 스트림의 stream_id는, 도 23에서 설명한 바와 같이, private_stream_1의 PES_packet()을 나타내는 10111101B(=0xBD)이다.
따라서, 스텝 S252에서는, 버퍼(215A)에 기억된 프로그램 스트림 중 private_stream_1의 PES_packet()이 탐색되게 된다.
스텝 S252에서, private_stream_1의 PES_packet()의 탐색이 행해져, private_stream_1의 PES_packet()이 발견되면, 스텝 S253으로 진행하여, 자막 읽어내기 기능부(235)는, 그 private_stream_1의 PES_packet()의 PES_packet_data_byte인 private_stream1_PES_payload()(도 24)에 기술되어 있는 private_stream_id를 뽑아내고, 그 private_stream_id가, 도 34의 스텝 S127에서 private_stream_id 레지스터(264)(도 5)에 기억된, 재생 대상의 자막 스트림의 private_stream_id와 일치하는지의 여부를 판정한다.
스텝 S253에서, private_stream1_PES_payload()에 기술되어 있는 private_stream_id가, private_stream_id 레지스터(264)에 기억된 private_stream_id와 일치하지 않다고 판정된 경우, 즉, 직전의 스텝 S252에서 발견된 private_stream_1의 PES_packet()이, 재생 대상의 자막 스트림이 아닌 경우, 스텝 S252로 되돌아가서, 버퍼(215A)에 기억된 프로그램 스트림 중 다른 private_stream_1의 PES_packet()의 탐색이 행해지고, 이하, 마찬가지의 처리가 반복된다.
한편, 스텝 S253에서, private_stream1_PES_payload()에 기술되어 있는 private_stream_id가, private_stream_id 레지스터(264)에 기억된 private_stream_id와 일치한다고 판정된 경우, 즉, 직전의 스텝 S252에서 발견된 private_stream_1의 PES_packet()이, 재생 대상의 자막 스트림인 경우, 스텝 S254로 진행하여, 자막 읽어내기 기능부(235)는, 그 private_stream_1의 PES_packet()의 private_stream1_PES_payload()(도 24)에 기술되어 있는 AU_locator를, 버퍼(215A)로부터 읽어내고, 그 AU_locator 직후의 위치와, 그 AU_locator가 나타내는 값을 가산함으로써, 자막 액세스 유닛의 선두 위치를 구한다.
즉, AU_locator는, 도 24에서 설명한 바와 같이, 그 AU_locator 직후의 위치를 기준으로 하여, private_stream1_PES_payload()의 private_payload()에 저장되는 자막 액세스 유닛(혹은 오디오 액세스 유닛)의 선두 위치를 나타내기 때문에, AU_locator 직후의 위치에, 그 AU_locator가 나타내는 값을 가산함으로써, 자막 액세스 유닛의 선두 위치를 구할 수 있다.
자막 읽어내기 기능부(235)는, 또한, 스텝 S254에서, 이상과 같이 하여 구한 자막 액세스 유닛의 선두 위치를 가리키도록, 자막 읽어내기 포인터 기억부(262)에 기억된 자막 읽어내기 포인터를 갱신하고, 스텝 S255로 진행한다.
스텝 S255에서는, 자막 읽어내기 기능부(235)는, 자막 디코더 제어 모듈(218)로부터, 데이터의 요구가 있었는지의 여부를 판정하여, 없다고 판정한 경 우, 스텝 S255로 되돌아가서, 마찬가지의 처리를 반복한다.
또한, 스텝 S255에서, 자막 디코더 제어 모듈(218)로부터, 데이터의 요구가 있었다고 판정된 경우, 스텝 S256으로 진행하여, 자막 읽어내기 기능부(235)는, 자막 읽어내기 포인터가 가리키고 있는 버퍼(215A)의 위치로부터의 프로그램 스트림의 구문 해석을 행하면서, 자막 액세스 유닛의 선두에 기술되어 있는 사이즈분의 1개의 자막 액세스 유닛을, 버퍼(215A)로부터 읽어내고, 그 자막 액세스 유닛에 부가되어 있는 타임 스탬프와 함께, 자막 디코더 제어 모듈(218)에 공급한다. 즉, 자막 액세스 유닛의 선두에는, 도 2A 및 도 2B에서 설명한 바와 같이, 그 자막 액세스 유닛의 사이즈가 기술되어 있고, 자막 읽어내기 기능부(235)는, 그 사이즈분의 데이터를, 자막 읽어내기 포인터가 가리키고 있는 버퍼(215A)의 위치로부터 읽어내고, 그 읽어낸 데이터인 자막 액세스 유닛을, 그 자막 액세스 유닛에 부가되어 있는 타임 스탬프와 함께, 자막 디코더 제어 모듈(218)에 공급한다.
그리고, 자막 읽어내기 기능부(235)는, 버퍼(215A)로부터 읽어낸 1개의 자막 액세스 유닛의 사이즈분만큼, 자막 읽어내기 포인터를 갱신하고, 스텝 S255로 되돌아가서, 이하, 마찬가지의 처리가 반복된다.
[재동기 처리]
다음으로, 도 2A 및 도 2B의 디코드 제어 모듈(214)에 의한, 비디오 데이터와 오디오 디코더의 동기 제어에 대해서 설명한다.
도 34의 스텝 S130에서 설명한 바와 같이, 디코드 제어 모듈(214)은, 동기를 확보하기 위해서 필요하면 타이밍을 어긋나게 하여, 디코드 개시를, 비디오 디코더 제어 모듈(216), 오디오 디코더 제어 모듈(217), 및 자막 디코더 제어 모듈(218)에 명령하지만, 예를 들면, 그 후의 비디오 디코더(116)와 오디오 디코더(117)의 디코드 처리의 진행 정도에 따라, 비디오 데이터의 출력과, 그 비디오 데이터와 동기하여 출력될 출력 데이터로서의 오디오 데이터의 출력이 어긋나는 경우가 있다.
따라서, 디코드 제어 모듈(214)에서는, 비디오 데이터의 출력과, 그 비디오 데이터와 동기하여 출력될 오디오 데이터의 출력에 발생한 어긋남을 보정하고, 비디오 데이터와 오디오 데이터가 동기하여 출력되도록 하기 위한 재동기 처리가 행해진다.
도 48의 플로우차트를 참조하여, 재동기 처리에 대해서 설명한다.
재동기 처리에서는, 우선 최초로, 스텝 S271에서, 디코드 제어 모듈(214)은, 비디오 디코더 제어 모듈(216)로부터의 비디오 액세스 유닛의 타임 스탬프와, 오디오 디코더 제어 모듈(217)로부터의 오디오 액세스 유닛의 타임 스탬프와의 어긋남이 큰지의 여부를 판정한다.
즉, 도 34의 스텝 S129에서 설명한 바와 같이, 비디오 디코더 제어 모듈(216)은, 버퍼 제어 모듈(215)로부터 비디오 액세스 유닛을 얻을 때마다, 그 비디오 액세스 유닛의 타임 스탬프를, 디코드 제어 모듈(214)에 공급한다. 마찬가지로, 오디오 디코더 제어 모듈(217)도, 버퍼 제어 모듈(215)로부터 오디오 액세스 유닛을 얻을 때마다, 그 오디오 액세스 유닛의 타임 스탬프를, 디코드 제어 모듈(214)에 공급한다.
스텝 S271에서는, 디코드 제어 모듈(214)은, 비디오 디코더 제어 모듈(216) 과 오디오 디코더 제어 모듈(217)의 각각으로부터, 동일 타이밍으로 간주할 수 있는, 임의의 시간 내에 공급되는 타임 스탬프끼리를 비교하여, 그들의 타임 스탬프의 어긋남이 큰지의 여부를 판정한다.
스텝 S271에서, 비디오 디코더 제어 모듈(216)로부터의 비디오 액세스 유닛의 타임 스탬프와, 오디오 디코더 제어 모듈(217)로부터의 오디오 액세스 유닛의 타임 스탬프의 어긋남이 크지 않다고 판정된 경우, 즉, 비디오 액세스 유닛의 타임 스탬프와, 오디오 액세스 유닛의 타임 스탬프와의 어긋남이, 미리 정해진 동기가 취해져 있다고 간주할 수 있는 범위 내인, 예를 들면, 2비디오 프레임(약66밀리초)인 경우, 스텝 S271로 되돌아가서, 타임 스탬프끼리의 어긋남의 판정이 속행된다.
한편, 스텝 S271에서, 비디오 디코더 제어 모듈(216)로부터의 비디오 액세스 유닛의 타임 스탬프와, 오디오 디코더 제어 모듈(217)로부터의 오디오 액세스 유닛의 타임 스탬프의 어긋남이 크다고 판정된 경우, 즉, 비디오 액세스 유닛의 타임 스탬프와, 오디오 액세스 유닛의 타임 스탬프의 어긋남이, 미리 정해진 동기가 취해져 있다고 간주할 수 있는 범위 밖인 경우, 스텝 S272로 진행하여, 디코드 제어 모듈(214)은, 비디오 디코더 제어 모듈(216)로부터의 비디오 액세스 유닛의 타임 스탬프와, 오디오 디코더 제어 모듈(217)로부터의 오디오 액세스 유닛의 타임 스탬프를 비교함으로써, 비디오 데이터의 출력과, 오디오 데이터의 출력 중 어느 것이 지연되어 있는지를 판정한다.
스텝 S272에서, 비디오 데이터의 출력이, 오디오 데이터의 출력보다도 지연되어 있다고 판정된 경우, 스텝 S273으로 진행하여, 디코드 제어 모듈(214)은, 1비 디오 액세스 유닛만, 비디오 액세스 유닛의 처리를 진행시키기 위해서, 비디오 디코더 제어 모듈(216)에 대하여, 비디오 액세스 유닛의 디코드와 표시를 행하지 않는다는 취지의 지시, 즉, 비디오 액세스 유닛의 처리의 스킵의 지시를 출력하고, 스텝 S274로 진행한다.
스텝 S274에서는, 비디오 디코더 제어 모듈(216)은, 디코드 제어 모듈(214)로부터의 스킵의 지시를 수신하고, 그 스킵의 지시에 따라, 버퍼 제어 모듈(215)로부터의 비디오 액세스 유닛과 함께 공급되는 au_ref_flag(도 27)를 검사한다.
즉, private_stream_2의 PES_packet()의 private_stream2_PES_payload()(도 26)에 배치된 au_information()(도 27)에는, 액세스 유닛에 관한 정보로서의 au_ref_flag가 포함되어 있고, 버퍼 제어 모듈(215)은, 도 34의 스텝 S129나, 도 45의 스텝 S216에서 설명한 바와 같이, 비디오 액세스 유닛과 함께, 그 비디오 액세스 유닛의 au_ref_flag를, 비디오 디코더 제어 모듈(216)에 공급한다.
스텝 S274에서는, 이와 같이, 액세스 유닛과 함께 공급되는, 그 액세스 유닛의 au_ref_flag가 검사된다.
그리고, 스텝 S274로부터 S275로 진행하여, 비디오 디코더 제어 모듈(216)은, 버퍼 제어 모듈(215)로부터 공급된 비디오 액세스 유닛의 au_ref_flag의 검사의 결과에 기초하여, 그 비디오 액세스 유닛이, 다른 픽쳐의 디코드 시에 참조되지 않는 비참조 화상인지의 여부를 판정한다.
여기서, 도 27에서 설명한 바와 같이, 비디오 액세스 유닛의 au_ref_flag는, 그 액세스 유닛이 참조 화상인지의 여부를 나타내고, 참조 화상인 경우에는 1로 되 고, 참조 화상이 아닌 경우, 즉, 비참조 화상인 경우에는 0으로 된다.
스텝 S275에서, 버퍼 제어 모듈(215)로부터 공급된 비디오 액세스 유닛이 비참조 화상의 비디오 액세스 유닛이 아니라고 판정된 경우, 즉, 버퍼 제어 모듈(215)로부터 공급된 비디오 액세스 유닛이 참조 화상인 경우, 스텝 S276으로 진행하여, 비디오 디코더 제어 모듈(216)은, 통상대로, 그 비디오 액세스 유닛을, 비디오 디코더(116)에 처리시키고, 다음 비디오 액세스 유닛이, 버퍼 제어 모듈(215)로부터 공급되는 것을 대기하고, 스텝 S274로 되돌아간다.
또한, 스텝 S275에서, 버퍼 제어 모듈(215)로부터 공급된 비디오 액세스 유닛이 비참조 화상이라고 판정된 경우, 스텝 S277로 진행하여, 비디오 디코더 제어 모듈(216)은, 그 비디오 액세스 유닛의, 비디오 디코더(116)에 의한 처리를 스킵시키고, 다음 비디오 액세스 유닛이, 버퍼 제어 모듈(215)로부터 공급되는 것을 대기하고, 스텝 S271로 되돌아간다.
이와 같이, 비디오 액세스 유닛의 처리가 스킵됨으로써, 비디오 액세스 유닛의 처리가, 거의 1비디오 액세스 유닛분만큼 진행되게 된다. 그 결과, 오디오 데이터의 출력보다도 지연되었던 비디오 데이터의 출력이 빨라지게 된다.
한편, 스텝 S272에서, 비디오 데이터의 출력이, 오디오 데이터의 출력보다도 지연되어 있지 않다고 판정된 경우, 즉, 오디오 데이터의 출력이, 비디오 데이터의 출력보다도 지연되어 있는 경우, 스텝 S278로 진행하여, 디코드 제어 모듈(214)은, 비디오 액세스 유닛의 처리를 대기시키기 위해서, 비디오 디코더 제어 모듈(216)에 대하여, 지금 디코드되고 있는 비디오 액세스 유닛에 대응하는 비디오 데이터를 반 복하여 출력하는 반복 출력의 지시를 출력하고, 스텝 S279로 진행한다.
스텝 S279에서는, 비디오 디코더 제어 모듈(216)은, 디코드 제어 모듈(214)로부터의 반복 출력의 지시를 수신하고, 그 반복 출력의 지시에 따라, 지금 비디오 디코더(116)에서 디코드되고 있는 비디오 액세스 유닛에 대응하는 비디오 데이터를 반복하여, 그래픽 처리 모듈(219)에 출력하고, 다음 비디오 액세스 유닛이, 버퍼 제어 모듈(215)로부터 공급되는 것을 대기하고, 스텝 S271로 되돌아간다.
이상과 같이, 디코드 제어 모듈(214)에서는, 비디오 데이터의 출력이, 오디오 데이터의 출력보다도 지연되어 있는지의 여부를 판정하여, 비디오 데이터의 출력이, 오디오 데이터의 출력보다도 지연되어 있는 경우에는, 1개의 액세스 유닛의 처리의 스킵을, 비디오 디코더 제어 모듈(216)에 지시한다. 그리고, 비디오 디코더 제어 모듈(216)에서는, 스킵이 지시된 액세스 유닛의 au_ref_flag에 기초하여, 그 액세스 유닛이 참조 화상인지, 또는 비참조 화상인지를 판정하여, 비참조 화상인 경우에, 비디오 디코더(116)에, 스킵이 지시된 액세스 유닛의 처리를 스킵시킨다. 따라서, 비디오 데이터의 출력과, 오디오 데이터의 출력의 동기를, 용이하게 취할 수 있다.
즉, 처리를 스킵하는 액세스 유닛이 참조 화상인 경우, 그 액세스 유닛에 대응하는 비디오 데이터는, 그 후에 디코드되는 다른 액세스 유닛의 디코드 시에 참조하기 위해서 디코드할 필요가 있다. 따라서, 비디오 데이터의 출력과, 오디오 데이터의 출력의 동기를 취하기 위한 동기 제어에서, 참조 화상의 액세스 유닛의 처리를 스킵하게 되면, 그 참조 화상을 참조하는 다른 액세스 유닛을 디코드할 수 없고, 그 결과, 비디오 데이터의 표시에서, 동기 제어가 노이즈로서 나타나게 된다.
이 때문에, 처리를 스킵하는 것은, 참조 화상이 아닌 액세스 유닛, 즉, 비참조 화상의 액세스 유닛으로 하는 것이 바람직하다.
한편, 종래의 엘리멘터리 스트림에 대해서, 비참조 화상의 액세스 유닛을 찾기 위해서는, 엘리멘터리 스트림의 구문 해석을 행할 필요가 있지만, 예를 들면, MPEG4-AVC 등에 따른 부호화에 의해 얻어지는 엘리멘터리 스트림은, 구문이 매우 복잡하기 때문에, 구문 해석에, 많은 코스트가 든다.
이에 대하여, 디스크(101)에 기록된 클립 스트림 파일에 저장된 프로그램 스트림에는, 비디오 액세스 유닛이 PES_packet_data_byte에 배치되는 PES_packet()(도 19A 및 도 19B 내지 도 21A 및 도 21B)과는 별도로, PES_packet_data_byte를 확장한 private_stream2_PES_payload()(도 26)가 배치된 private_stream_2의 PES_packet()이 다중화되어 있고, 그 private_stream2_PES_payload()의 au_information()(도 27)에는, 비디오 액세스 유닛마다, 그 비디오 액세스 유닛이 참조 화상인지, 또는 비참조 화상인지를 나타내는 au_ref_flag가 기술되어 있다. 그리고, 그 au_ref_flag는, 대응하는 비디오 액세스 유닛과 함께, 버퍼 제어 모듈(215)로부터 비디오 디코더 제어 모듈(216)에 공급된다. 따라서, 비디오 디코더 제어 모듈(216)은, 비디오 액세스 유닛과 함께 공급되는, 그 비디오 액세스 유닛의 au_ref_flag를 검사함으로써, 코스트를 거의 들이지 않고, 비디오 액세스 유닛이 참조 화상인지, 또는 비참조 화상인지를 인식할 수 있다.
[마크 처리]
다음으로, 도 49의 플로우차트를 참조하여, PlayListMark()(도 9)에 기술된 Mark()에 기초하여 행해지는 마크 처리에 대해서 설명한다.
디코드 제어 모듈(214)은, 내장하는 계시부(214A)에 의해 계시되어 있는 현재 시각을, 항상 확인하고 있고, 스텝 S301에서, 현재 시각이, PlayListMark()(도 9)에 기술된 어느 하나의 Mark()의 mark_time_stamp에 일치하였는지의 여부를 판정한다.
즉, 도 34의 스텝 S124에서 설명한 바와 같이, 플레이어 제어 모듈(212)은, 도 29에 도시한 1번째의 PlayList #0의 1번째의 PlayItem #0을 재생하려고 할 때에, 도 32 상측에 도시한 PlayListMark()에 포함되는 7개의 Mark() 중 1번째부터 4번째까지의 4개의 Mark()가, PlayList #0의 1번째의 PlayItem #0에 속해 있는 것을 인식하고, 그 4개의 Mark()의 mark_time_stamp인 {180,090}, {5,580,090}, {10,980,090}, {16,380,090}을, 그 mark_time_stamp가 나타내는 시각의 속성이 「마크 처리」이다라는 취지와 함께, 디코드 제어 모듈(214)에 건네주고 있다.
스텝 S301에서는, 디코드 제어 모듈(214)에서, 현재 시각이, 전술한 바와 같이 하여 플레이어 제어 모듈(212)로부터 공급된 「마크 처리」의 속성의 시각(mark_time_stamp) 중 어느 하나와 일치하는지의 여부가 판정된다.
스텝 S301에서, 현재 시각이, 「마크 처리」의 속성의 시각 중 어느 것과도 일치하지 않는다고 판정된 경우, 스텝 S301로 되돌아가, 마찬가지의 처리가 반복된 다.
[마크 처리에서의 일치 판정]
여기서, 마크 처리에 관해서, 스텝 S301에서 디코드 제어 모듈(214)은, 현재 시각과 mark_time_stamp 중 어느 하나가 일치하고 있는지의 여부의 판정을 행하고 있다. 그러나, 본 실시예에서는, 도 4에 도시하는 바와 같이, 계시부(214A)가 나타내는 시각이 이산적인 값을 나타내기 때문에, 단순한 일치 판정에서는 문제가 발생하는 경우가 있다.
도 50을 이용하여, 약간 단순화한 예로 설명한다. 도 50의 상부에서 I0, P1, P2, P3은 비디오 액세스 유닛이다. 이들의 pic_struct는 모두 3이며, 즉 표시 duration은 1프레임(90㎑ 환산으로 3003)으로 한다. 또한, 이 예에서는 디코드순과 표시순이 동일한 것으로 하고 있어, 리오더링은 발생하지 않는다. 또한, I0은 「재생 준비 처리」에서 설명한 바와 같이 EP_map()에 등록되어 있는 액세스 유닛이며, 타임 스탬프를 갖고 있고 PTS=180,090인 것으로 한다. P1 , P2, P3의 액세스 유닛은 타임 스탬프를 갖고 있지 않다.
이와 같은 비디오 데이터가 처리되는 경우, 계시부(214A)가 나타내는 시계는 도 50의 하부에서 도시되는 바와 같이 갱신된다. 즉, I0의 출력 시에는, I0의 PTS와 I0의 pic_struct가 주어지고, PTS가 존재하므로 계시부(214A)에 PTS가 대입되어 180,090으로 된다. P1의 출력 시에는, PTS는 존재하지 않고, P1의 pic_struct가 주어지고, I0의 pic_struct가 3이기 때문에, 1프레임분의 시간(90㎑로 3003)이 계시부(214A)에 가산되어, 183,093으로 된다. 마찬가지로 P2의 출력 시에는 P1의 pic_struct가 3이기 때문에 3003이 가산되어서 186,096, P3의 출력 시에도 3003이 가산되어 189,099로 된다.
여기서, PlayListMark()(도 9 및 도 32)에 등록된 것 중 하나의 마크의 mark_time_stamp가 186,000이었을 때의 처리를 생각한다. 전술한 바와 같이 시계(계시부(214A))가 출력하는 값은, 180,090, 183,093, 186,096, 189,099이기 때문에, 마크의 시각과 일치하는 186,000이라고 하는 시각은 출력하지 않는다. 이 때문에, mark_time_stamp와 시각의 단순한 비교, 즉 차분이 0인지의 여부의 확인에서는 문제가 발생한다.
이 때문에, 여기서는 시각의 일치 판정에 대하여 일정한 룰이 적용된다. 즉, 여기서는, 소정의 이벤트의 mark_time_stamp가, 소정의 화상의 표시 duration 중에 포함되는 경우, 그 소정의 이벤트는 해당하는 화상의 표시 개시 시각에 발생한다고 정의한다. 예를 들면 상기의 예에서는, Mark_time_stamp=186,000은, 화상 P1의 표시 duration에 포함되어 있다. 이 때문에, 이 이벤트는 P1의 표시 개시 시각 즉 183,093에 발생하는 것으로 한다.
이와 같은 정의 하에서 일치 판정을 행하기 위한 디코드 제어 모듈(214)의 판정 알고리즘에 대해서 설명한다.
또한, 이 예의 경우, 시각(계시부(214A))의 갱신은 비디오 데이터의 갱신 시에만 발생한다. 즉, 도 49의 스텝 S301은, 시각의 갱신 시에만 행해지게 된다. 소프트웨어로 구성되는 재생 기기에서는, 처리를 대폭 줄일 수 있어 유리하다.
그런데, 시각의 갱신에 따라 도 49의 처리가 호출된다. 디코드 제어 모 듈(214)은, 스텝 S301에서, 현재 시각에 일치로 판정되는 이벤트가 존재하는지의 여부의 확인을 행한다. 즉, 현재 시각과, 표시 중인 화상의 표시 duration으로부터 현재 표시 중인 화상의 표시 duration에 포함되어 있는 이벤트가 존재하는지의 여부의 확인을 행하여, 일치로 판정되는 이벤트가 존재하지 않는 경우, 처리는 스텝 S301로 되돌아간다. 또한, 일치로 판정되는 이벤트가 존재하는 경우, 처리는 스텝 S302로 진행한다. 또한, 이벤트가 존재하지 않는 경우에는, 처리가 종료되도록 하여도 된다.
구체적으로는, 예를 들면 I0을 표시 중인 경우에, 시각은 180,090이며, I0의 pic_struct가 3이기 때문에 I0의 표시 duration은 3003인 것을 알 수 있다. 이 때문에, 180,090≤mark_time_stamp<180,090+3003을 만족시키는 mark_time_stamp를 찾는다. 이 때 예시한 이벤트 시각 186,000은 이 식을 만족시키지 않기 때문에, 일치로 판정되지 않는다.
다음으로, 예를 들면 I1을 표시 중인 경우에, 시각은 183,093이며, I1의 pic_struct가 3이기 때문에 I0의 표시 duration은 3003인 것을 알 수 있다. 이 때문에, 183,093≤mark_time_stamp<183,093+3003을 만족시키는 mark_time_stamp를 찾는다. 이 때 예시한 이벤트 시각 186,000은 이 식을 만족시키므로, 시각이 일치한다고 판정되어, 스텝 S302 이후의 처리가 행해진다.
이 예에서는, 시각의 일치 판정의 하나의 예를 설명하였지만, 다른 정의를 적용하는 것도 가능하다. 예를 들면, 임의의 이벤트의 mark_time_stamp가, "임의의 화상의 표시 개시-α"의 시각 이상, "다음 표시 화상의 표시 개시 시각-α"의 시각 미만에 포함되는 경우, 그 이벤트는 해당하는 화상의 표시 개시 시각에 발생한다고 정의하는 것도 가능하다. 또한 판정 기준은 그대로이고, 이벤트의 발생 시각을 예를 들면 "해당 화상의 표시 개시 시각-α"에 발생한다고 정의하는 것도 가능하다.
또한, 이와 같은 정의를 도입함으로써, 마크의 시각 즉 mark_time_stamp의 설정시에 비디오 스트림의 시각을 알 필요가 없어진다. 이 때문에, 오서링에서의 비디오 인코드와 데이터 베이스 작성의 독립성이 높아져, 작업을 분리하는 것이 가능하게 된다.
또한, 스텝 S301에서, 현재 시각이, 「마크 처리」의 속성의 시각 중 어느 하나와 일치한다고 판정된 경우, 디코드 제어 모듈(214)은, 현재 시각이, 「마크 처리」의 속성의 시각으로 되었다는 취지의 메시지와, 현재 시각과 일치한 「마크 처리」의 속성의 시각을, 플레이어 제어 모듈(212)에 공급하고, 스텝 S302로 진행한다.
스텝 S302에서는, 플레이어 제어 모듈(212)이, 현재 시각이, 「마크 처리」의 속성의 시각으로 되었다는 취지의 메시지와, 현재 시각과 일치한 「마크 처리」의 속성의 시각(mark_time_stamp)을, 디코드 제어 모듈(214)로부터 수신하고, mark_time_stamp가 현재 시각에 일치한 Mark()를, 마크 처리의 처리 대상으로 하는 Mark()(이하, 적절하게, 처리 대상 mark라고 함)로서 인식한다.
즉, 플레이어 제어 모듈(212)은, 현재 재생되고 있는 PlayList()의 PlayItem()을 인식하고 있고, 그 PlayList() 및 PlayItem()과, 디코드 제어 모 듈(214)로부터의, 현재 시각과 일치한 「마크 처리」의 속성의 시각(mark_time_stamp)(이하, 적절하게, 마크 시간이라고 함)으로부터, "PLAYLIST.DAT" 파일(도 7)의 PlayListMark()(도 9)를 참조함으로써, 처리 대상 mark를 인식한다.
구체적으로는, 예를 들면, 지금, 도 29에 도시한 1번째의 PlayList #0의 1번째의 PlayItem #0이 재생되어 있는 것으로 하면, 그것에 의해, 플레이어 제어 모듈(212)은, 마크 시각이, 도 32 상측에 도시한 PlayListMark()에 포함되는 7개의 Mark() 중 1번째부터 4번째까지의 4개의 Mark() 중 어느 하나의 mark_time_stamp인 것을 인식한다.
그리고, 디코드 제어 모듈(214)로부터 플레이어 제어 모듈(212)에 공급된 마크 시각이, 예를 들면, 16,380,090이었던 것으로 하면, 플레이어 제어 모듈(212)은, 도 32 상측에 도시한 PlayListMark()에 포함되는 1번째부터 4번째까지의 4개의 Mark() 중, mark_time_stamp가, 마크 시각인 16,380,090에 일치하는 4번째의 Mark()를, 처리 대상 mark로서 인식한다.
플레이어 제어 모듈(212)은, 이상과 같이 하여, 처리 대상 mark를 인식하면, 스텝 S302로부터 S303으로 진행하여, 처리 대상 mark에서, 엘리멘터리 스트림을 특정하는 entry_ES_stream_id와 entry_ES_private_stream_id(도 9)가 기술되어 있는지의 여부를 판정한다.
스텝 S303에서, 처리 대상 mark에, 엘리멘터리 스트림을 특정하는 entry_ES_stream_id와 entry_ES_private_stream_id(도 9)가 기술되어 있지 않다고 판정된 경우, 즉, entry_ES_stream_id와 entry_ES_private_stream_id가, 모두 0x00인 경우, 스텝 S304를 스킵하고, 스텝 S305로 진행하여, 이하, 처리 대상 mark에 따른 처리가 행해진다.
또한, 스텝 S303에서, 처리 대상 mark에, 엘리멘터리 스트림을 특정하는 entry_ES_stream_id와 entry_ES_private_stream_id(도 9)가 기술되어 있다고 판정된 경우, 스텝 S304로 진행하여, 플레이어 제어 모듈(212)은, 재생 중인 엘리멘터리 스트림에, 그 entry_ES_stream_id, 또한, 필요에 따라서 entry_ES_private_stream_id에 의해 특정되는 엘리멘터리 스트림이 포함되는지의 여부를 판정한다.
스텝 S304에서, 재생 중인 엘리멘터리 스트림에, 처리 대상 mark의 entry_ES_stream_id와 entry_ES_private_stream_id에 의해 특정되는 엘리멘터리 스트림이 포함되지 않는다고 판정된 경우, 스텝 S301로 되돌아간다. 즉, 처리 대상 mark의 entry_ES_stream_id와 entry_ES_private_stream_id에 의해 특정되는 엘리멘터리 스트림이 재생되어 있지 않은 경우, 처리 대상 mark는, 무시된다.
한편, 스텝 S304에서, 재생 중인 엘리멘터리 스트림에, 처리 대상 mark의 entry_ES_stream_id와 entry_ES_private_stream_id에 의해 특정되는 엘리멘터리 스트림이 포함된다고 판정된 경우, 즉, 처리 대상 mark의 entry_ES_stream_id와 entry_ES_private_stream_id에 의해 특정되는 엘리멘터리 스트림이 재생되어 있는 경우, 처리 대상 mark는 유효한 것으로 하고, 스텝 S305로 진행하여, 이하, 그 처리 대상 mark에 따른 처리가 행해진다.
즉, 스텝 S305에서는, 플레이어 제어 모듈(212)은, 처리 대상 mark의 mark_type(도 9)을 참조함으로써, 그 처리 대상 mark를 판정한다.
스텝 S305에서, 처리 대상 mark가, 챕터 마크 또는 인덱스 마크라고 판정된 경우, 즉, 처리 대상 mark의 mark_type이, 'Chapter' 또는 'Index'인 경우, 스텝 S306으로 진행하여, 플레이어 제어 모듈(212)은, 그래픽 처리 모듈(219)에 명하여, 챕터 또는 인덱스의 번호의 표시를, 처리 대상 mark인 챕터 마크 또는 인덱스 마크가 나타내는 챕터 또는 인덱스의 번호로 갱신시키고, 스텝 S301로 되돌아간다.
또한, 스텝 S305에서, 처리 대상 mark가, 이벤트 마크라고 판정된 경우, 즉, 처리 대상 mark의 mark_type이, 'Event'인 경우, 스텝 S307로 진행하여, 플레이어 제어 모듈(212)은, 이벤트의 발생을 나타내는 이벤트 메시지와, 처리 대상 mark의 mark_data를, 스크립트 제어 모듈(211)에 공급하고, 스텝 S308로 진행한다.
스텝 S308에서는, 스크립트 제어 모듈(211)이, 플레이어 제어 모듈(212)로부터의 이벤트 메시지와 mark_data를 수신하고, 이벤트 메시지를 인터럽트 요구로 하여, 미리 "SCRIPT.DAT" 파일에 기술된 일련의 처리를, mark_data를 인수로 하여 행하고, 스텝 S301로 되돌아간다.
즉, 스크립트 제어 모듈(211)에서는, mark_data에 대응한 처리가 행해진다.
구체적으로는, 예를 들면, 도 32 하측에 도시한 PlayList #1의 PlayListMark()에서는, 2번째의 Mark()(Mark #1)와 3번째의 Mark()(Mark #2)는, 모두, mark_type이 'Event'이지만, mark_data는, 각각 1(Mark #1)과 2(Mark #2)에서 상이하다.
스크립트 제어 모듈(211)은, 2번째의 Mark()에 대응하는 이벤트 메시지를 수신한 경우와, 3번째의 Mark()에 대응하는 이벤트 메시지를 수신한 경우의, 모든 경우도, 그 이벤트 메시지에 따라, 동일한 이벤트 핸들러(인터럽트 처리 루틴)로 처리를 행하지만, 이벤트 핸들러 내에서, 이벤트 메시지와 함께 공급되는 mark_data를 검사함으로써, 이벤트 메시지에 대하여, mark_data마다 상이한 처리를 행한다.
구체적으로는, 예를 들면, mark_data가 1인 경우에는, 스크립트 제어 모듈(211)은, 그래픽 처리 모듈(219)을 제어하여, 제1 종류의 아이콘의 표시를 행하게 한다. 또한, 예를 들면, mark_data가 2인 경우, 스크립트 제어 모듈(211)은, 그래픽 처리 모듈(219)을 제어하여, 제2 종류의 아이콘의 표시를 행하게 한다.
또한, mark_data는, 1이나 2로 한정되는 것이 아니며, 또한, mark_data에 대응하여 행해지는 처리도, 전술한 바와 같은, 단순한 아이콘의 표시에 한정되는 것은 아니다.
즉, 예를 들면, mark_data가 3 내지 18의 범위의 값인 경우에는, 스크립트 제어 모듈(211)은, 그래픽 처리 모듈(219)을 제어하여, 제1 종류의 아이콘의 표시를, mark_data로부터 2를 감한 값(1 내지 16의 수치)에 대응하는 밝기로 행하게 한다. 또한, 예를 들면, mark_data가 19 내지 34의 범위의 값인 경우에는, 스크립트 제어 모듈(211)은, 그래픽 처리 모듈(219)을 제어하여, 제2 종류의 아이콘의 표시를, mark_data로부터 18을 감한 값(1 내지 16의 수치)에 대응하는 밝기로 행하게 한다.
그 밖에, 예를 들면, 입력 인터페이스(115)(도 1)에, 유저가 조작하는 컨트 롤러가 접속되어 있고, 그 컨트롤러가, DC(Direct Current) 모터의 축으로 편심시킨 추를 부착한, DC 모터를 동작시키면 진동이 발생하는 진동 모터를 내장하는 경우에는, mark_data가 35 내지 42의 범위의 값일 때에, 그 진동 모터를, mark_data로부터 34를 감한 값(1 내지 8의 수치)에 따른 동작 시간만큼 동작시킬 수 있다.
mark_data는 수치이며, 그 사용법이나 알고리즘은, 스크립트 제어 모듈(211)이 실행하는 스크립트 프로그램에 의해 기술할 수 있다. 따라서, mark_data는, 사전에 정해진 룰로 사용하는 것 외에, 디스크(101)의 제조자, 혹은 디스크(101)에 기록되는 데이터를 제공하는 콘텐츠 프로바이더 등이 독자적으로 설정한 룰에서 사용하는 것이 가능하다.
이상과 같이, 마크 처리에서는, 현재 시각이, 「마크 처리」의 속성의 시각과 일치하면, 그 「마크 처리」의 속성의 시각인 마크 시각부터, 처리 대상 mark가 인식된다. 또한, 처리 대상 mark에서, 엘리멘터리 스트림을 특정하는 entry_ES_stream_id와 entry_ES_private_stream_id가 기술되어 있지 않은 경우에는, 처리 대상 mark의 mark_type에 따른 처리가 행해진다. 또한, 처리 대상 mark에서, 엘리멘터리 스트림을 특정하는 entry_ES_stream_id와 entry_ES_private_stream_id가 기술되어 있는 경우에도, 그 entry_ES_stream_id와 entry_ES_private_stream_id에 의해 특정되는 엘리멘터리 스트림이 재생 중이면, 처리 대상 mark의 mark_type에 따른 처리가 행해진다.
따라서, 예를 들면, 지금, 도 29에 도시한 2번째의 PlayList #1의 재생이 행해지고 있는 것으로 하면, 이하와 같은 마크 처리가 행해진다.
즉, 2번째의 PlayList #1의 PlayListMark()에서는, 도 32 하측에 도시한 바와 같이, Mark_time_stamp가 각각 90,000, 27,090,000, 27,540,000으로 지정되어 있는 1번째의 Mark()(Mark #0), 2번째의 Mark()(Mark #1), 3번째의 Mark()(Mark #2)가 기술되어 있다.
또한, 도 32 하측의 PlayListMark()에서는, 2번째의 Mark()과 3번째의 Mark()의 entry_ES_stream_id에는, 각각, 0xE0과 0xE1이 기술되어 있기 때문에, 2번째의 Mark()과 3번째의 Mark()는, 각각, stream_id가 0xE0과 0xE1로 특정되는 엘리멘터리 스트림이 관련지어져 있다.
여기서, 도 29에서 설명한 바와 같이, 2번째의 PlayList #1에는, 1개의 PlayItem()(PlayItem #0)만이 기술되고, 그 PlayItem #0에 따르면, 클립 스트림 파일 "00003.PS"가 재생된다. 그리고, 클립 스트림 파일 "00003.PS"에는, 그 클립 스트림 파일 "00003.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에서 설명한 바와 같이, 0xE0으로 되어 있는 stream_id로 특정되는 비디오 스트림 stream #0, 0xE1로 되어 있는 stream_id로 특정되는 비디오 스트림 stream #1, 0xBD로 되어 있는 stream_id 및 0x00으로 되어 있는 private_stream_id로 특정되는 오디오 스트림 stream #2의 3개의 엘리멘터리 스트림이 다중화되어 있다.
따라서, 도 32 하측의 PlayListMark()의 2번째의 Mark()에는, 클립 스트림 파일 "00003.PS"에 다중화되어 있는, stream_id가 0xE0으로 되어 있는 비디오 스트림 stream #0이 관련지어져 있고, 3번째의 Mark()에는, 클립 스트림 파일 "00003.PS"에 다중화되어 있는, stream_id가 0xE1로 되어 있는 비디오 스트림 stream #1이 관련지어져 있다.
도 29의 2번째의 PlayList #1의 PlayItem #0의 재생이 개시되는 경우, 도 34의 스텝 S124에서 설명한 바와 같이 하여, 플레이어 제어 모듈(212)은, 도 32 하측에 도시한 PlayListMark()에 포함되는 3개의 Mark()가, PlayList #1의 PlayItem #0에 속해 있는 것을 인식하고, 그 3개의 Mark()의 mark_time_stamp인 {90,000}, {27,090,000}, {27,540,000}을, 그 mark_time_stamp가 나타내는 시각의 속성이 「마크 처리」이다라는 취지와 함께, 디코드 제어 모듈(214)에 건네주고 있다.
마크 처리에서는, 디코드 제어 모듈(214)이, PlayList #1의 PlayItem #0의 재생 중에, 계시부(214A)에 의해 계시되는 현재 시각이, 속성이 「마크 처리」의 시각 {90,000}, {27,090,000}, {27,540,000} 중 어느 하나에 일치하는지를, 항상 확인하고 있고(스텝 S301), 현재 시각이, 속성이 「마크 처리」의 시각에 일치하면, 현재 시각과 일치한 「마크 처리」의 속성의 시각인 마크 시각과, 현재 시각이, 「마크 처리」의 속성의 시각으로 되었다는 취지의 메시지를, 플레이어 제어 모듈(212)에 공급한다.
즉, 예를 들면, 지금, 현재 시각이, 「마크 처리」의 속성의 시각 {90,000}, {27,090,000}, {27,540,000} 중, 27,090,000에 일치한 것으로 하면, 디코드 제어 모듈(214)은, 현재 시각과 일치한 「마크 처리」의 속성의 시각인 마크 시각 27,090,000과, 현재 시각이, 「마크 처리」의 속성의 시각으로 되었다는 취지의 메시지를, 플레이어 제어 모듈(212)에 공급한다.
플레이어 제어 모듈(212)은, PlayList #1의 PlayItem #0이 현재 재생되고 있는 것을 인식하고 있고, 그 PlayList #1의 도 32 하측에 도시한 PlayListMark()에 기술된 Mark() 중, PlayItem #0에 속하는 3개의 Mark()의 mark_time_stamp인 90,000, 27,090,000, 27,540,000 각각과, 디코드 제어 모듈(214)로부터의 마크 시각인 27,090,000을 비교함으로써, 그 마크 시각 27,090,000에, mark_time_stamp가 일치하는 Mark(), 즉, 도 32 하측의 PlayListMark()에 기술된 2번째의 Mark()(Mark #1)를, 처리 대상 mark로서 인식한다(스텝 S302).
처리 대상 mark인, 도 32 하측의 PlayListMark()에 기술된 2번째의 Mark()에서는, entry_ES_stream_id로서, 0xE0이 지정되어 있다. 이 0xE0으로 되어 있는 entry_ES_stream_id는, 전술한 것으로부터, 클립 스트림 파일 "00003.PS"에 다중화되어 있는, stream_id가 0xE0으로 되어 있는 비디오 스트림 stream #0(도 30A 및 도 30B)을 나타내는 것이며, 플레이어 제어 모듈(212)은, 재생 중인 엘리멘터리 스트림 중에, 그 비디오 스트림 stream #0이 포함되는지의 여부를 판정한다(스텝 S303, S304).
그리고, 재생 중인 엘리멘터리 스트림 중에, 비디오 스트림 stream #0이 포함되지 않은 경우에는, 처리 대상 mark는 무시된다(스텝 S304).
한편, 재생 중인 엘리멘터리 스트림 중에, 비디오 스트림 stream #0이 포함되는 경우에는, 처리 대상 mark는 유효한 것으로 하고, 그 처리 대상 mark에 따른 처리가 행해진다(스텝 S305 내지 S308).
즉, 지금의 경우, 처리 대상 mark인, 도 32 하측의 PlayListMark()에 기술된 2번째의 Mark()는, 그 mark_type이 'Event'로 되어 있기 때문에 이벤트 마크이며, 따라서, 플레이어 제어 모듈(212)은, 이벤트의 발생을 나타내는 이벤트 메시지와, 처리 대상 mark의 mark_data를, 스크립트 제어 모듈(211)에 공급한다(스텝 S305, S307). 그리고, 스크립트 제어 모듈(211)에서는, 플레이어 제어 모듈(212)로부터의 이벤트 메시지를 인터럽트 요구로 하여, 미리 "SCRIPT.DAT" 파일에 기술된 일련의 처리를, 그 이벤트 메시지와 함께 공급된 mark_data를 인수로 하여 행한다(스텝 S308).
이상과 같이, 마크 처리에 따르면, PlayList()의 시간축 상의 1개의 재생 시각을 나타내는 mark_time_stamp와, Mark()의 타입을 나타내는 mark_type과, 이벤트 마크의 인수로 되는 mark_data를 포함하는 0 이상의 Mark()를 갖는 PlayListMark()(도 9)를 포함하는 PlayList()(도 7)에 따라 재생되고 있는 클립 스트림 파일의 재생 시각인 현재 시각이, mark_time_stamp에 일치하는지의 여부가 판정되고, 현재 시각이, mark_time_stamp에 일치하는 경우에, 그 일치한 현재 시각인 마크 시각과 동일한 mark_time_stamp를 갖는 Mark()가, 처리 대상 mark로서 인식된다. 또한, 그 처리 대상 mark가 갖는 mark_type이, 이벤트를 발생시키는 타입을 나타내고 있는 경우, 즉, 처리 대상 mark가, 이벤트 마크인 경우, 처리 대상 mark가 갖는 mark_data와 이벤트 메시지가 통지되어, 그 mark_data에 따른 처리가 실행된다. 따라서, 클립 스트림 파일의 재생 시각에 따라, mark_data에 따른 처리를 실행하는 것이 가능하게 된다.
[out_time 처리에서의 일치 판정]
그런데, 전술한 바와 같이, 디코드 제어 모듈(214)은 계시부(214A)가 계시하고 있는 시각이, 플레이어 제어 모듈(212)로부터 공급된 PlayItem의 OUT_time과 동일하게 되면, 디코드 중단 제어가 행해지고, PlayItem의 재생이 종료된다고 하는 제어가 행해진다. 본 실시예에서는, PlayItem #0의 종료에 대해서는, 도 40의 플로우차트에서의 스텝 S151에서 설명되어 있다.
이 경우에도, 시각과 OUT_time의 단순히 비교로의 일치 판정에서는, 문제가 발생할 가능성이 있다. 이 때문에, 시각과 OUT_time의 비교에서도 전술한 일치 판정의 정의를 사용한다.
즉, 도 51에서 도시되는 바와 같이 playListEnd에 대응하는 PlayItem의 OUT_time이, playList에서 마지막에 표시되는 FoCFP(재생 중인 비디오 스트림 내의 frame or complementary field pair)의 PET보다 작은 경우, PlayListEnd의 시각에 상당하는 OUT_time을 표시 duration에 포함하는 FoCFP의 표시 개시 시각(PTS)에 PlayListEnd 이벤트가 발생할 때, 즉, PTSFOCFP [3]≤OUT_time<PETFOCFP [3]일 때, FoCFP[3]의 표시 개시 시각 PTSFOCFP [3]에서, PlayListEnd 이벤트가 발생한다. 여기서 PETFOCFP [k]는 「PTSFOCFP [k]에 pic_struct에 의해 정해지는 표시 duration을 더한 시각」을 나타낸다.
이에 의해, 시각의 일치 판정이 비디오 출력 시로 한정되기 때문에, 처리가 가벼워진다. 또한, 전술한 바와 같이 비디오 스트림의 준비와 데이터 베이스의 준비의 독립성이 높아진다.
또한, PlayItem의 재생 종료가 디코드 제어 모듈(214)로부터 플레이어 제어 모듈(212)에 전달되고, 플레이어 제어 모듈(212)이 그것을 재생 중인 최후의 PlayList의 PlayItem이라고 판단하면, 스크립트 제어 모듈(211)에 대하여 playListEnd의 이벤트를 발생한다.
스크립트 제어 모듈(211)은, playListEnd의 이벤트를 수취함으로써, 재생을 지시한 PlayList의 재생이 종료된 것을 알고, 그 후 프로그래밍되어 있는 동작을 속행한다. 즉, 별도의 playList를 재생하거나, 메뉴를 표시하거나, 동작을 종료하는 등이 실행된다.
또한, 도 52에서 도시되는 바와 같은 경우, 즉, OUT_time이 PlayItem 중에서 마지막으로 표시되는 화상의 표시 종료 시각과 동일한 경우에는, 상기의 일치 판정에서는 처리할 수 없는 경우가 있다. 도 52에서, 예를 들면, FoCFP[2]를 표시하여 pause하고 있을 때, playStop()이 call되면, FoCFP[3]을 표시해서 pause한다. 그 후 다시 playStop()이 call되면 표시되는 화상에는 변경 없이 playListEnd가 발생한다.
즉, 최후의 화상의 표시 개시 시각+pic_struct에 의해 정해지는 duration=OUT_time으로 되기 때문에, 최후의 화상의 표시 개시 시각+pic_struct에 의해 정해지는 duration<OUT_time을 만족하지 않는다.
이와 같은 경우에는, 비디오 디코더 제어 모듈(216)이 최후의 화상을 출력한 후, 해당 화상의 표시 duration 경과 후에 표시 종료를 나타내는 정보를 디코드 제어 모듈(214)에 건네주고, 이에 의해 시계를 "최후의 화상의 표시 개시 시각 +pic_struct에 의해 정해지는 duration"으로 진행시킴으로써, 일치 조건을 만족하도록 할 수 있다.
[자막 디코드]
자막 디코더 제어 모듈(218)은, 버퍼 제어 모듈(215)(도 5)의 자막 읽어내기 기능부(235)로부터, 버퍼(215A)에 기억된 1개의 자막 액세스 유닛과, 그 자막 액세스 유닛에 부가되어 있는 타임 스탬프를 얻을 때마다, 내부에 갖는 자막 디코드 소프트웨어로 디코드를 개시하고, 동시에 타임 스탬프와 duration을 디코드 제어 모듈(214)에 건네준다.
디코드 제어 모듈(214)은, 비디오 디코더 제어 모듈(216)로부터의 정보에 의해 시계(계시부(214A))의 시각을 변경했을 때에, 자막 디코더 제어 모듈(218)로부터 주어진 자막 액세스 유닛의 PTS를 음미한다. 즉, 자막 액세스 유닛의 PTS와 시각이 전술한 일치 판정 기준에 비추어 본 후에 일치라고 판단되면, 디코드 제어 모듈(214)은 그래픽 처리 모듈(219)에 대하여 자막 입력의 지시를 행함과 동시에, 자막 디코더 제어 모듈(218)에 대하여 출력의 지시를 행한다.
디코드 제어 모듈(214)로부터 출력의 지시를 받은 자막 디코더 제어 모듈(218)은, 디코드된 자막 화상 데이터를 그래픽 처리 모듈(219)에 공급한다. 그래픽 처리 모듈(219)은 입력된 자막 데이터를 축적하고, 이후 입력받는 비디오 데이터에 대하여 합성을 행한다.
디코드 제어 모듈(214)은 또한 자막의 표시 duration의 검사를 행한다. 즉, "해당 자막의 표시 개시 시각+표시 duration"의 값과 현재 시각이, 전술한 일치 판 정 기준에 비추어 본 후에 일치라고 판단되면, 디코드 제어 모듈(214)은 그래픽 처리 모듈(219)에 대하여 자막의 소거를 명한다. 그래픽 처리 모듈(219)은 축적하고 있는 입력된 자막 데이터를 소거하고, 이후 입력받는 비디오 데이터에 대한 합성은 행하지 않는다.
[마크 간격의 필연성]
이상에 설명한 일치 판정 기준에서는, 일정한 범위의 시각을 단일 시각으로 양자화하고 있다. 즉, 임의의 비디오 데이터의 표시 개시 시각≤t<표시 종료 시각을 만족시키는 모든 t의 시각은 해당 비디오 데이터의 표시 개시 시각으로 양자화(rounding)가 행해지고 있다.
이 때문에, 인접하는 2개의 이벤트의 위치 관계에 따라서는, 동일한 시각으로 뭉쳐지게 되는 경우가 있다. 예를 들면 도 50의 예에서는, 186,000에 놓여진 이벤트의 직전의 이벤트의 mark_time_stamp가 184,000이었던 경우, 이 2개의 이벤트는 모두 P1의 표시 개시 시각에 발생한다고 정의된다.
이와 같은 상황을 피하기 위해서는, 단일의 비디오에 대해서는 단일의 이벤트만을 설정할 수 있는 것을 보증할 필요가 있다. 이 때문에, 인접한 이벤트의 간격을 3필드 이상(pic_struct에서 설정되는 최대 표시 시간 이상)으로 함으로써, 상기 조건을 보증한다.
도 53은, 상기 조건의 일례를 도시하고 있다. 즉, 도 53에서는, 케이스 A는, 프레임 레이트(frame rate)가 5005/240000(프로그레시브의 23.976㎐)이고, 그 경우, 90㎑로 표현한 최소 이벤트 간격은, 7507로 되고, 케이스 B는, 프레임 레이 트(frame rate)가 4004/240000(인터레이스의 59.94㎐)이며, 그 경우, 90㎑로 표현한 최소 이벤트 간격은, 6006으로 되는 것이 도시되어 있다.
AVC나 MPEG2 Video 등의 비디오 부호화 방식에서는, 2-3 풀다운 화상을 효율적으로 부호화하기 위해서, 1프레임 신호를 3필드의 시간만큼 표시한다고 하는 기능을 갖고 있다. 이 때문에 1프레임의 신호의 최대의 duration은 3필드이다. 즉, 인접한 이벤트의 간격을 3필드 이상의 시간만큼 떨어뜨림으로써, 이 2개의 인접한 이벤트가 단일의 비디오 데이터의 표시 개시 시각에 발생한다고 판단되는 것을 방지한다고 하는 것이다.
또한, 3필드를 초과하는 간격으로 정의하는 경우도 가능하다. 예를 들면 인접한 이벤트의 간격을 2프레임 이상으로 정의하는 것도 가능하다.
또한, 모든 이벤트가 대응하는 비디오 데이터를 조사하고, 그들이 중복되어 있지 않다고 하는 것을 확인함으로써 상기를 보증하는 방법도 생각된다.
[출력 속성의 제어 처리]
다음으로, 도 54의 플로우차트를 참조하여, 도 34의 스텝 S126 등에서 행해지는 출력 속성의 제어 처리의 상세에 대해서 설명한다.
도 34의 스텝 S126에서 설명한 바와 같이, 플레이어 제어 모듈(212)은, 우선, 재생 대상의 1 이상의 엘리멘터리 스트림, 즉, 도 34의 스텝 S125에서 재생한다고 결정한 1 이상의 엘리멘터리 스트림 각각에 대해서, 출력 속성이 기술되는 DynamicInfo()(도 15)의 수를 나타내는 number_of_DynamicInfo(도 12)를 조사한다.
그리고, 재생 대상의 1 이상의 엘리멘터리 스트림의 모두에 대해서, number_of_DynamicInfo가 0으로 되어 있는 경우, 플레이어 제어 모듈(212)은, 특별히 처리를 행하지 않는다.
한편, 재생 대상의 엘리멘터리 스트림에 대한 number_of_DynamicInfo가 0이 아닌 경우, 플레이어 제어 모듈(212)은, 도 54의 플로우차트에 따른 출력 속성의 제어 처리를 행한다.
따라서, 디스크(101)에 기록된 3개의 클립 정보 파일 "00001.CLP", "00002.CLP", "00003.CLP"가, 예를 들면, 도 30A 및 도 30B에 도시한 바와 같이 되어 있는 경우에, 클립 정보 파일 "00001.CLP"에 대응하는 클립 스트림 파일 "00001.PS"를 재생하는 1번째의 PlayList #0의 1번째의 PlayItem #0이 재생될 때에는, 클립 정보 파일 "00001.CLP"(도 30A 및 도 30B)에서는, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 stream #0 내지 stream #3 모두에 대해서, number_of_DynamicInfo가 0으로 되어 있기 때문에, 출력 속성의 제어 처리는 행해지지 않는다.
마찬가지로, 클립 정보 파일 "00002.CLP"에 대응하는 클립 스트림 파일 "00002.PS"를 재생하는 1번째의 PlayList #0의 2번째의 PlayItem #1이 재생될 때에도, 클립 정보 파일 "00002.CLP"(도 30A 및 도 30B)에서는, 클립 스트림 파일 "00002.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 stream #0 내지 stream #3 모두에 대해서, number_of_DynamicInfo가 0으로 되어 있기 때문에, 출력 속성의 제어 처리는 행해지지 않는다.
한편, 클립 정보 파일 "00003.CLP"에 대응하는 클립 스트림 파일 "00003.PS" 를 재생하는 2번째의 PlayList #1의 PlayItem #0이 재생될 때에는, 클립 정보 파일 "00003.CLP"(도 30A 및 도 30B)에서, 클립 스트림 파일 "00003.PS"에 다중화되어 있는 3개의 엘리멘터리 스트림 stream #0 내지 stream #2 중, 1번째의 엘리멘터리 스트림인 비디오 스트림 stream #0과, 3번째의 엘리멘터리 스트림인 오디오 스트림stream #2에 대해서, number_of_DynamicInfo가 0이 아닌 2와 3으로 각각 되어 있기 때문에, 출력 속성의 제어 처리가 행해진다.
즉, 출력 속성의 제어 처리에서는, 우선 최초로, 스텝 S320에서, 플레이어 제어 모듈(212)은, 재생 대상의 클립 스트림 파일에 대응하는 클립 정보 파일 Clip()(도 12)에 기술된 pts_change_point를, 「DynamicInfo() 처리」의 속성의 시각이다라는 취지와 함께, 디코드 제어 모듈(214)에 건네주고, 디코드 제어 모듈(214)은, 플레이어 제어 모듈(212)로부터의 「DynamicInfo() 처리」의 속성의 시각인 pts_change_point를 수신하고, 스텝 S321로 진행한다.
스텝 S321에서는, 디코드 제어 모듈(214)이, 계시부(214A)에 의해 계시되어 있는 현재 시각이, 「DynamicInfo() 처리」의 속성의 시각인 pts_change_point에 일치했는지의 여부를 판정하여, 일치하고 있지 않다고 판정한 경우, 스텝 S321로 되돌아간다.
또한, 스텝 S321에서, 현재 시각이, 「DynamicInfo() 처리」의 속성의 시각에 일치했다고 판정된 경우, 디코드 제어 모듈(214)은, 현재 시각이, 「DynamicInfo() 처리」의 속성의 시각으로 되었다는 취지의 메시지와, 현재 시각과 일치한 「DynamicInfo() 처리」의 속성의 시각(이하, 적절하게, DynamicInfo 시각 이라고 함)을, 플레이어 제어 모듈(212)에 공급하고, 스텝 S322로 진행한다.
스텝 S332에서는, 플레이어 제어 모듈(212)이, 현재 시각이, 「DynamicInfo() 처리」의 속성의 시각으로 되었다는 취지의 메시지와, DynamicInfo 시각을, 디코드 제어 모듈(214)로부터 수신하고, 그 DynamicInfo 시각에 일치하는 pts_change_point(도 12)와 세트로 되어 있는 DynamicInfo()를, 처리 대상의 DynamicInfo()인 처리 대상 DynamicInfo()로서 인식하고, 스텝 S323으로 진행한다.
스텝 S323에서는, 플레이어 제어 모듈(212)은, 처리 대상 DynamicInfo()로 되어 있는 DynamicInfo()(도 15)에 기술된 출력 속성을, 그래픽 처리 모듈(219) 또는 오디오 출력 모듈(221)에 공급하고, 스텝 S324로 진행한다.
스텝 S324에서는, 그래픽 처리 모듈(219) 또는 오디오 출력 모듈(221)이, 직전의 스텝 S323에서 플레이어 제어 모듈(212)로부터 공급된 출력 속성에 따라, 비디오 데이터 또는 오디오 데이터의 출력의 제어를, 각각 개시하고, 스텝 S321로 되돌아간다.
이에 의해, 비디오 데이터가, 출력 방식으로서 기술된, 예를 들면 어스펙트비에 따라 출력되거나, 혹은, 오디오 데이터가, 출력 방식으로서 기술된, 예를 들면, 스테레오 또는 듀얼(2개 국어)에 따라서 출력된다.
다음으로, 도 55를 참조하여, 출력 속성의 제어 처리의 상세에 대해서, 더 설명한다.
즉, 도 55는, 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에 기술되어 있는 pts_change_point와 DynamicInfo()의 세트(도 12)를 도시하고 있다.
여기서, 전술한 바와 같이, 클립 스트림 파일 "00003.PS"에 다중화되어 있는 3개의 엘리멘터리 스트림 stream #0 내지 stream #2 중, 1번째의 엘리멘터리 스트림인 비디오 스트림 stream #0과, 3번째의 엘리멘터리 스트림인 오디오 스트림stream #2에 대해서는, 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에서, number_of_DynamicInfo가, 각각 2와 3으로 되어 있다. 따라서, 클립 정보 파일 "00003.CLP"에서, 클립 스트림 파일 "00003.PS"의 1번째의 비디오 스트림 stream #0에 대해서는, 2세트의 pts_change_point 및 DynamicInfo()가 기술되어 있고, 3번째의 오디오 스트림 stream #2에 대해서는, 3세트의 pts_change_point 및 DynamicInfo()가 기술되어 있다.
도 55 상측은, 클립 스트림 파일 "00003.PS"의 1번째의 비디오 스트림 stream #0에 대해서 기술되어 있는 2세트의 pts_change_point 및 DynamicInfo()를 도시하고 있고, 도 55 하측은, 클립 스트림 파일 "00003.PS"의 3번째의 오디오 스트림 stream #2에 대해서 기술되어 있는 3세트의 pts_change_point 및 DynamicInfo()를 도시하고 있다.
또한, 도 55 상측에서는, 1번째의 비디오 스트림 stream #0에 대해서 기술되어 있는 2세트의 pts_change_point 및 DynamicInfo() 외에, 그 비디오 스트림 stream #0에 대해서, 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에 기술되어 있는 stream_id(=0xE0), private_stream_id(=0x00), number_of_DynamicInfo(=2)도, 도시하고 있다. 마찬가지로, 도 55 하측에서도, 3번째의 오디오 스트림 stream #2에 대해서 기술되어 있는 3세트의 pts_change_point 및 DynamicInfo() 외에, 그 오 디오 스트림 stream #2에 대해서, 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에 기술되어 있는 stream_id(=0xBD), private_stream_id(=0x00), number_of_DynamicInfo(=3)도, 도시하고 있다.
도 55 상측에서, 비디오 스트림 stream #0에 대해서 기술되어 있는 2세트의 pts_change_point 및 DynamicInfo() 중 1세트째에서는, pts_change_point가 90,000으로 되어 있고, DynamicInfo()의 display_aspect_ratio(도 15)가 '4:3'으로 되어 있다. 또한, 그 2세트째에서는, pts_change_point가 54,090,000으로 되어 있고, DynamicInfo()의 display_aspect_ratio가 '16:9'로 되어 있다.
한편, 도 55 하측에서, 오디오 스트림 stream #2에 대해서 기술되어 있는 3세트의 pts_change_point 및 DynamicInfo() 중 1세트째에서는, pts_change_point가 90,000으로 되어 있고, DynamicInfo()의 channel_assignment(도 15)가 'Dual'로 되어 있다. 또한, 그 2세트째에서는, pts_change_point가 27,090,000으로 되어 있고, DynamicInfo()의 channel_assignment가 'Stereo'로 되어 있다. 또한, 그 3세트째에서는, pts_change_point가 32,490,000으로 되어 있고, DynamicInfo()의 channel_assignment가 'Dual'로 되어 있다.
예를 들면, 지금, 도 34의 스텝 S125에서, 클립 스트림 파일 "00003.PS"의, 0xE0으로 되어 있는 stream_id로 특정되는 1번째의 비디오 스트림 stream #0과, 0xBD로 되어 있는 stream_id 및 0x00으로 되어 있는 private_stream_id로 특정되는 3번째의 오디오 스트림 stream #2가, 재생 대상의 스트림으로서 결정된 것으로 한다.
이 경우, 플레이어 제어 모듈(212)은, 0xE0으로 되어 있는 stream_id로 특정되는 비디오 스트림 stream #0에 대해서 기술되어 있는 도 55 상측의 2세트의 pts_change_point 및 DynamicInfo()와, 0xBD로 되어 있는 stream_id 및 0x00으로 되어 있는 private_stream_id로 특정되는 오디오 스트림 stream #2에 대해서 기술되어 있는 도 55 하측의 3세트의 pts_change_point 및 DynamicInfo() 중 pts_change_point를 조사하고, 초기값을 인식한다.
즉, 0xE0으로 되어 있는 stream_id로 특정되는 비디오 스트림 stream #0에 대해서 기술되어 있는 도 55 상측의 2세트의 pts_change_point 및 DynamicInfo() 중 1세트째에서는, pts_change_point가 90,000으로 되어 있다. 그리고, 이 90,000이라고 하는 시각은, 비디오 스트림 stream #0이 다중화되어 있는 클립 스트림 파일 "00003.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에서, 클립 스트림 파일 "00003.PS"의 선두의 시각을 나타내는 presentation_start_time에 기술되어 있는 시각 90,000에 일치한다.
마찬가지로, 0xBD로 되어 있는 stream_id 및 0x00으로 되어 있는 private_stream_id로 특정되는 오디오 스트림 stream #2에 대해서 기술되어 있는 도 55 하측의 3세트의 pts_change_point 및 DynamicInfo() 중 1세트째에서는, pts_change_point가 90,000으로 되어 있다. 그리고, 이 90,000이라고 하는 시각은, 오디오 스트림 stream #2가 다중화되어 있는 클립 스트림 파일 "00003.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에서, 클립 스트림 파일 "00003.PS"의 선두의 시각을 나타내는 presentation_start_time에 기술되어 있는 시각 90,000에 일치한다.
플레이어 제어 모듈(212)은, 클립 스트림 파일 "00003.PS"의 선두의 시각을 나타내는 presentation_start_time에 기술되어 있는 시각 90,000에 일치하는 pts_change_point를, 초기값으로서 인식한다. 따라서, 도 55 상측의 2세트의 pts_change_point 및 DynamicInfo() 중 1세트째의 pts_change_point와, 도 55 하측의 3세트의 pts_change_point 및 DynamicInfo() 중 1세트째의 pts_change_point가, 초기값으로서 인식된다.
그리고, 플레이어 제어 모듈(212)은, 클립 스트림 파일 "00003.PS"의 재생이 개시되기 전에, 도 34의 스텝 S126에서 초기값으로서 인식한 pts_change_point와 세트로 되어 있는 DynamicInfo()에 따라, 대응하는 엘리멘터리 스트림의 출력 속성을 지시한다.
즉, 0xE0으로 되어 있는 stream_id로 특정되는 비디오 스트림 stream #0에 대해서는, 도 55 상측에서, 초기값인 90,000으로 되어 있는 pts_change_point와 세트로 되어 있는 DynamicInfo()에서, display_aspect_ratio가 '4:3'으로 되어 있다. 이 경우, 플레이어 제어 모듈(212)은, display_aspect_ratio가 '4:3'으로 되어 있다는 취지, 즉, 비디오 스트림 stream #0이, 4:3의 어스펙트비의 비디오 데이터이다는 취지의 출력 속성의 정보를, 그래픽 처리 모듈(219)을 제어한다.
또한, 0xBD로 되어 있는 stream_id 및 0x00으로 되어 있는 private_stream_id로 특정되는 오디오 스트림 stream #2에 대해서는, 도 55 하측에서, 초기값인 90,000으로 되어 있는 pts_change_point와 세트로 되어 있는 DynamicInfo()에서, channel_assignment가 'Dual'로 되어 있다. 이 경우, 플레이어 제어 모듈(212)은, channel_assignment가 'Dual'로 되어 있다는 취지, 즉, 오디오 스트림 stream #2가, 듀얼의 오디오 데이터이다는 취지의 출력 속성의 정보를, 오디오 출력 모듈(221)에 공급한다.
여기서, 도 34의 스텝 S126에서는, 이상과 같은 초기값으로서의 pts_change_point를 대상으로 한 출력 속성의 제어 처리가 행해진다.
그 후, 플레이어 제어 모듈(212)은, 비디오 스트림 stream #0에 대한 도 55 상측의 2개의 pts_change_point인 90,000 및 54,090,000과, 오디오 스트림 stream #2에 대한 도 55 하측의 3개의 pts_change_point인 90,000, 27,090,000, 및 32,490,000 중, 초기값 90,000 이외의 시각인 {27,090,000}, {32,490,000}, {54,090,000}을, 「DynamicInfo() 처리」의 속성의 시각이다는 취지와 함께, 디코드 제어 모듈(214)에 건네준다(스텝 S320).
디코드 제어 모듈(214)은, 플레이어 제어 모듈(212)로부터의, 「DynamicInfo() 처리」의 속성의 시각 {27,090,000}, {32,490,000}, {54,090,000}을 수신하고, 또한, 비디오 스트림 stream #0 및 오디오 스트림 stream #2의 재생의 개시 후, 계시부(214A)에 의해 계시되어 있는 현재 시각의 감시를 개시한다.
그리고, 디코드 제어 모듈(214)은, 현재 시각이, 「DynamicInfo() 처리」의 속성의 시각 {27,090,000}, {32,490,000}, {54,090,000} 중 어느 하나에 일치한 경우, 그 현재 시각과 일치한 「DynamicInfo() 처리」의 속성의 시각인 DynamicInfo시각을, 플레이어 제어 모듈(212)에 공급한다(스텝 S321).
즉, 예를 들면, 현재 시각이, 27,090,000으로 된 것으로 하면, 디코드 제어 모듈(214)은, 「DynamicInfo() 처리」의 속성의 시각 중, 현재 시각과 일치하는 27,090,000을, DynamicInfo 시각으로서, 플레이어 제어 모듈(212)에 공급한다.
플레이어 제어 모듈(212)은, 디코드 제어 모듈(214)로부터의 DynamicInfo 시각인 27,090,000을 수신하고, 비디오 스트림 stream #0에 대한 도 55 상측의 2개의 pts_change_point와, 오디오 스트림 stream #2에 대한 도 55 하측의 3개의 pts_change_point 중에서, DynamicInfo 시각인 27,090,000에 일치하는 pts_change_point를 조사하고, 그 27,090,000에 일치하는 pts_change_point와 세트로 되어 있는 DynamicInfo(), 즉, 오디오 스트림 stream #2에 대한 도 55 하측의 2번째의 DynamicInfo()를, 처리 대상 DynamicInfo()로서 인식한다(스텝 S322).
처리 대상 DynamicInfo()가, 비디오 스트림에 대한 DynamicInfo()인 경우, 플레이어 제어 모듈(212)은, 처리 대상 DynamicInfo()에 기술되어 있는 출력 속성을, 그래픽 처리 모듈(219)에 공급한다(스텝 S323). 또한, 처리 대상 DynamicInfo()가, 오디오 스트림에 대한 DynamicInfo()인 경우, 플레이어 제어 모듈(212)은, 처리 대상 DynamicInfo()에 기술되어 있는 출력 속성을, 오디오 출력 모듈(221)에 공급한다(스텝 S323).
그래픽 처리 모듈(219)은, 플레이어 제어 모듈(212)로부터 출력 속성이 공급되면, 그 출력 속성에 따라, 비디오 데이터의 출력의 제어를 개시한다(스텝 S324).
즉, 그래픽 처리 모듈(219)은, 예를 들면, 플레이어 제어 모듈(212)로부터의 출력 속성이 나타내는, 비디오 데이터의 어스펙트비의 지시 (display_aspect_ratio(도 15))와, 도 1의 비디오 출력 단자(120)에 접속된 비디오 출력 장치의 어스펙트비에 기초하여, 비디오 출력 모듈(220)에 출력하는 비디오 데이터의 어스펙트비의 변환을 행한다.
구체적으로는, 예를 들면, 비디오 출력 장치의 어스펙트비가 16:9인 경우에서, 출력 속성으로서의 비디오 데이터의 어스펙트비의 지시가 4:3의 어스펙트비를 나타내고 있을 때에는, 그래픽 처리 모듈(219)은, 비디오 출력 모듈(220)에 출력하는 비디오 데이터를, 가로 방향으로 스퀴즈 처리하고, 좌우로 흑을 표시시키는 데이터를 넣어 출력한다. 또한, 예를 들면, 비디오 출력 장치의 어스펙트비가 4:3인 경우에서, 출력 속성으로서의 비디오 데이터의 어스펙트비의 지시가 16:9의 어스펙트비를 나타내고 있을 때에는, 그래픽 처리 모듈(219)은, 비디오 출력 모듈(220)에 출력하는 비디오 데이터를, 세로 방향으로 스퀴즈 처리하고, 상하로 흑을 표시시키는 데이터를 넣어서 출력한다. 또한, 예를 들면, 비디오 출력 장치의 어스펙트비와, 출력 속성으로서의 비디오 데이터의 어스펙트비의 지시가 나타내는 어스펙트비가, 모두, 4:3이나 16:9로, 동일한 경우, 그래픽 처리 모듈(219)은, 비디오 출력 모듈(220)에 출력하는 비디오 데이터를, 스퀴즈 처리하지 않고, 그대로 출력한다.
여기서, 도 55 상측에서, 0xE0으로 되어 있는 stream_id로 특정되는 비디오 스트림 stream #0에 대해서 기술되어 있는 2세트의 pts_change_point 및 DynamicInfo()에 따르면, 비디오 스트림 stream #0의 재생 개시 시인 시각 90,000부터, 시각 54,090,000 직전까지는, 비디오 스트림 stream #0으로부터, 4:3의 어스펙트비의 비디오 데이터가 얻어진다. 그리고, 시각 54,090,000 이후는, 비디오 스 트림 stream #0으로부터, 16:9의 어스펙트비의 비디오 데이터가 얻어진다.
따라서, 예를 들면, 도 1의 비디오 출력 단자(120)에 접속된 비디오 출력 장치의 어스펙트비가 4:3인 것으로 하면, 그래픽 처리 모듈(219)에서는, 시각 90,000부터 시각 54,090,000 직전까지는, 비디오 스트림 stream #0으로부터 얻어지는 4:3의 어스펙트비의 비디오 데이터가, 그대로 4:3의 어스펙트비의 비디오 출력 장치에 공급되어 표시된다.
그리고, 시각 54,090,000 이후는, 비디오 스트림 stream #0으로부터 얻어지는 16:9의 어스펙트비의 비디오 데이터가, 세로 방향으로 스퀴즈 처리되고, 또한, 상하에 흑을 표시시키는 데이터가 들어간 4:3의 어스펙트비의 비디오 신호로 변환되어, 4:3의 어스펙트비의 비디오 출력 장치에 공급되어 표시된다.
한편, 오디오 출력 모듈(221)은, 플레이어 제어 모듈(212)로부터 출력 속성이 공급되면, 그 출력 속성에 따라, 오디오 데이터의 출력의 제어를 개시한다(스텝 S324).
즉, 오디오 출력 모듈(221)은, 예를 들면, 플레이어 제어 모듈(212)로부터의 출력 속성이 나타내는, 오디오 데이터의 채널 할당의 지시(channel_assignment(도 15))와, 유저가 리모콘을 조작함으로써 입력 인터페이스(115)(도 1)를 통해서 플레이어 제어 모듈(212)로부터 공급되는 음성 출력 모드에 기초하여, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를 처리하고, 오디오 출력 단자(121)(도 1)에 출력한다.
구체적으로는, 예를 들면, 출력 속성이 나타내는 오디오 데이터의 채널 할당 의 지시가, 좌 채널이 「주음성」의 오디오 데이터이고, 우 채널의 「부음성」의 오디오 데이터인 듀얼(Dual)(2개 국어) 모드를 나타내고 있는 경우, 오디오 출력 모듈(221)은, 플레이어 제어 모듈(212)로부터 공급되는 음성 출력 모드에 따라, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를 처리하고, 오디오 출력 단자(121)에 출력한다.
즉, 음성 출력 모드로서, 예를 들면, 「주음성」이 지정되어 있을 때에는, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터 중 좌 채널의 오디오 데이터를, 우 채널의 오디오 데이터로서 카피하고, 그 좌 채널과 우 채널의 오디오 데이터(「주음성」의 오디오 데이터)를, 오디오 출력 단자(121)에 출력한다. 또한, 음성 출력 모드로서, 「부음성」이 지정되어 있을 때에는, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터 중 우 채널의 오디오 데이터를, 좌 채널의 오디오 데이터로서 카피하고, 그 좌 채널과 우 채널의 오디오 데이터(「부음성」의 오디오 데이터)를, 오디오 출력 단자(121)에 출력한다. 또한, 음성 출력 모드로서, 「주·부」가 지정되어 있을 때에는, 오디오 출력 모듈(221)은, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를, 그대로, 오디오 출력 단자(121)에 출력한다.
또한, 예를 들면, 출력 속성이 나타내는 오디오 데이터의 채널 할당의 지시가, 스테레오(Stereo) 모드를 나타내고 있는 경우, 오디오 출력 모듈(221)은, 플레이어 제어 모듈(212)로부터 공급되는 음성 출력 모드에 관계없이, 오디오 디코더 제어 모듈(217)로부터의 오디오 데이터를, 그대로, 오디오 출력 단자(121)에 출력 한다.
여기서, 도 55 하측에서, 0xBD로 되어 있는 stream_id 및 0x00으로 되어 있는 private_stream_id로 특정되는 오디오 스트림 stream #2에 대해서 기술되어 있는 3세트의 pts_change_point 및 DynamicInfo()에 따르면, 오디오 스트림 stream #2의 재생 개시 시인 시각 90,000부터, 시각 27,090,000 직전까지는, 오디오 스트림 stream #2로부터, 듀얼의 오디오 데이터가 얻어진다. 또한, 시각 27,090,000부터, 시각 32,490,000 직전까지는, 오디오 스트림 stream #2로부터, 스테레오의 오디오 데이터가 얻어지고, 시각 32,490,000 이후는, 오디오 스트림 stream #2로부터, 듀얼의 오디오 데이터가 얻어진다.
따라서, 예를 들면, 음성 출력 모드로서, 「주음성」이 지정되어 있는 것으로 하면, 오디오 출력 모듈(221)에서는, 시각 90,000부터, 시각 27,090,000 직전까지는, 오디오 스트림 stream #2로부터 얻어지는 듀얼의 오디오 데이터 중 좌 채널의 오디오 데이터가, 우 채널의 오디오 데이터로서 카피되고, 그 좌 채널과 우 채널의 오디오 데이터가, 오디오 출력 단자(121)에 출력된다.
또한, 시각 27,090,000부터, 시각 32,490,000 직전까지는, 오디오 스트림 stream #2로부터 얻어지는 스테레오의 오디오 데이터가, 그대로, 오디오 출력 단자(121)에 출력된다.
그리고, 시각 32,490,000 이후는, 오디오 스트림 stream #2로부터 얻어지는 듀얼의 오디오 데이터 중 좌 채널의 오디오 데이터가, 우 채널의 오디오 데이터로서 카피되고, 그 좌 채널과 우 채널의 오디오 데이터가, 오디오 출력 단자(121)에 출력된다.
이상과 같이, 출력 속성의 제어 처리에서는, 클립 스트림 파일에 다중화되어 있는 엘리멘터리 스트림마다, 그 엘리멘터리 스트림의 재생 시각을 나타내는 pts_change_point와, 그 엘리멘터리 스트림의 출력 속성을 포함하는 DynamicInfo()의 세트를 0세트 이상 포함하는 클립 정보 파일 Clip()(도 12)의 기술에 기초하여, 재생 중인 엘리멘터리 스트림의 재생 시각이, pts_change_point에 일치하는지의 여부가 판정된다. 그리고, 재생 중인 엘리멘터리 스트림의 재생 시각이, pts_change_point에 일치하는 경우, 그 pts_change_point와 세트로 되어 있는 DynamicInfo()가 인식되고, 그 인식된 DynamicInfo()에 포함되는 출력 속성에 따라, 재생 중인 엘리멘터리 스트림의 출력이 제어된다. 따라서, 엘리멘터리 스트림의 재생 시각과 출력 속성에 따라, 그 엘리멘터리 스트림의 출력을 제어하는 것이 가능하게 된다.
[자막 표시 제어 처리]
다음으로, 도 56의 플로우차트를 참조하여, 자막 스트림에 대응하는 자막 데이터의 표시를 제어하는 자막 표시 제어 처리에 대해서 설명한다.
PlayList()의 재생이 개시되면, 플레이어 제어 모듈(212)은, 스텝 S341에서, 그래픽 처리 모듈(219)에 대한 자막 데이터의 표시 방식의 지시를 초기화한다. 즉, 플레이어 제어 모듈(212)은, 자막 데이터의 표시 방식을 디폴트의 표시 방식으로 하도록, 그래픽 처리 모듈(219)을 제어한다. 또한, 스텝 S341에서 행해지는 표시 방식의 지시의 초기화는, 도 34의 127에서 설명한 표시 방식의 지시의 초기화에 대응한다.
스텝 S341의 처리 후에는, 스텝 S342로 진행하여, 플레이어 제어 모듈(212)은, 유저가 리모콘을 조작함으로써 입력 인터페이스(115)로부터, 자막 데이터의 표시에 대해서, 새로운 표시 방식의 지시가 있었는지의 여부를 판정한다.
스텝 S342에서, 새로운 표시 방식의 지시가 있었다고 판정된 경우, 스텝 S343으로 진행하여, 플레이어 제어 모듈(212)은, 자막 스트림을, 현재 재생하고 있는지의 여부를 판정한다.
스텝 S343에서, 자막 스트림이 재생되고 있지 않다고 판정된 경우, 스텝 S342로 되돌아간다.
또한, 스텝 S343에서, 자막 스트림이 재생되고 있다고 판정된 경우, 스텝 S345로 진행하여, 플레이어 제어 모듈(212)은, 새로운 표시 방식의 지시가, 디폴트의 표시 방식의 지시인지의 여부를 판정한다. 스텝 S343에서, 새로운 표시 방식의 지시가, 디폴트의 표시 방식의 지시이다라고 판정된 경우, 스텝 S341로 되돌아가서, 전술한 바와 같이, 플레이어 제어 모듈(212)은, 자막 데이터의 표시 방식을 디폴트의 표시 방식으로 하도록, 그래픽 처리 모듈(219)을 제어한다.
한편, 스텝 S345에서, 새로운 표시 방식의 지시가, 디폴트의 표시 방식의 지시가 아니라고 판정된 경우, 즉, 새로운 표시 방식의 지시가, 예를 들면, 자막 데이터를 확대나 축소해서 표시하거나, 혹은 밝기를 변화시켜 보기 쉽게 하는 등, 디폴트가 아닌 표시 방식의 지시인 경우, 스텝 S346으로 진행하여, 플레이어 제어 모듈(212)은, 현재 재생하고 있는 자막 스트림이 다중화된 클립 스트림 파일에 대응 하는 클립 정보 파일 Clip()(도 12)의 StaticInfo()(도 14) 중, 현재 재생하고 있는 자막 스트림에 대한 StaticInfo()를 취득하고, 스텝 S347로 진행한다.
스텝 S347에서는, 플레이어 제어 모듈(212)은, 스텝 S346에서 취득한 StaticInfo()의 configurable_flag를 판정한다.
스텝 S347에서, configurable_flag가, 자막 데이터의 표시 방식의 변경을 허가하지 않는다는 취지의 0으로 되어 있다고 판정된 경우, 스텝 S348로 진행하여, 플레이어 제어 모듈(212)은, 그래픽 처리 모듈(219)을 제어함으로써, 출력 비디오 데이터에, 자막 데이터의 표시 방식을 변경할 수 없다는 취지의 에러 메시지를 오버레이시키고, 스텝 S342로 되돌아간다. 이에 의해, 에러 메시지가 표시된다.
한편, 스텝 S347에서, configurable_flag가, 자막 데이터의 표시 방식의 변경을 허가한다는 취지의 1로 되어 있다고 판정된 경우, 스텝 S349로 진행하여, 플레이어 제어 모듈(212)은, 유저가 리모콘을 조작함으로써 입력 인터페이스(115)로부터 공급된 새로운 표시 방식의 지시를, 그래픽 처리 모듈(219)에 공급하고, 스텝 S350으로 진행한다.
스텝 S350에서는, 그래픽 처리 모듈(219)은, 자막 디코더 제어 모듈(218)로부터 공급되는 자막 데이터를, 직전의 스텝 S349에서 플레이어 제어 모듈(212)로부터 공급된 표시 방식의 지시에 따라 확대 또는 축소 등 혹은 밝기를 변화시키는 등의 처리를 개시하고, 스텝 S342로 되돌아간다. 이에 의해, 자막 데이터는, 유저가 리모콘을 조작함으로써 지시한 표시 방식에 따른 표시 사이즈나, 표시 위치, 표시 색등으로 표시된다.
한편, 스텝 S342에서, 새로운 표시 방식의 지시가 없었다고 판정된 경우, 스텝 S351로 진행하여, 플레이어 제어 모듈(212)은, 도 40에서 설명한 PlayItem()의 갈아타기가 행하여졌는지의 여부를 판정하여, 행해져 있지 않다고 판정한 경우, 스텝 S342로 되돌아간다.
또한, 스텝 S351에서, PlayItem()의 갈아타기가 행하여졌다고 판정된 경우, 스텝 S341로 되돌아가서, 전술한 바와 같이, 플레이어 제어 모듈(212)은, 자막 데이터의 표시 방식을 디폴트의 표시 방식으로 하도록, 그래픽 처리 모듈(219)을 제어한다. 즉, 이 경우, PlayItem()의 갈아타기가 행하여졌을 때에는, 자막 데이터의 표시 방식은, 디폴트의 표시 방식으로 되돌려진다.
이상과 같이, 자막 표시 제어 처리에서는, 자막 스트림의 configurable_flag가, 표시 방식의 변경을 허가한다는 취지의 1로 되어 있는 경우에만, 그 자막 스트림에 대응하는 자막 데이터의 표시 방식이, 예를 들면, 유저가 리모콘을 조작함으로써 입력되는 표시 방식의 지시에 따라 변경된다.
따라서, 예를 들면, 도 30A 및 도 30B에 도시한 클립 정보 파일 "00001.CLP"에 따르면, 대응하는 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 중 3개째의 엘리멘터리 스트림인 자막 스트림 stream #2에 대한 configurable_flag는, 표시 방식의 변경을 허가하지 않는다는 취지의 0으로 되어 있으므로, 그 자막 스트림 stream #2가 표시되어 있을 때에, 유저가 자막의 표시를 변경하도록 리모콘을 조작하여도, 그 표시는 변경되지 않는다.
한편, 예를 들면, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘 리멘터리 스트림 중 4개째의 엘리멘터리 스트림인 자막 스트림 stream #3에 대한 configurable_flag는, 표시 방식의 변경을 허가한다는 취지의 1로 되어 있으므로, 그 자막 스트림 stream #3이 표시되어 있을 때에, 유저가 자막의 표시를 변경하도록 리모콘을 조작하면, 그 조작에 따라, 자막의 표시 사이즈 등이 변경된다.
즉, 예를 들면, 지금, 도 29의 1번째의 PlayList #0의 1번째의 PlayItem #0에 따라, 클립 스트림 파일 "00001.PS"가 재생되어 있는 것으로 한다. 또한, 도 30A 및 도 30B에서 클립 정보 파일 "00001.CLP"에 대해서 설명한 바와 같이, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림 중, 3개째와 4개째가 자막 스트림이지만, 그 3개째의 자막 스트림 stream #2와, 4개째의 자막 스트림 stream #3 중, 예를 들면, 3개째의 자막 스트림 stream #2가, 현재 재생되고 있는 것으로 한다.
유저가, 리모콘을 조작함으로써, 자막의 표시 방식의 지시를 입력하면(스텝 S342), 그 표시 방식의 지시는, 입력 인터페이스(115)(도 1)로부터 플레이어 제어 모듈(212)에 공급된다. 플레이어 제어 모듈(212)은, 표시 방식의 지시가 공급되면, 재생 중인 자막 스트림에 대응하는 StaticInfo()(도 12)를, 클립 정보 파일로부터 찾아낸다(스텝 S346).
즉, 지금의 경우, 재생 중인 자막 스트림은, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 3개째의 자막 스트림 stream #2이며, 플레이어 제어 모듈(212)은, 대응하는 클립 정보 파일 "00001.CLP"로부터, 3개째의 자막 스트림 stream #2에 대한 StaticInfo()를 찾아낸다.
또한, 플레이어 제어 모듈(212)은, 도 30A 및 도 30B에서 3개째의 자막 스트림 stream #2에 대한 StaticInfo()에 기술되어 있는, 0으로 되어 있는 configurable_flag를 판정하고(스텝 S347), 이에 의해, 3개째의 자막 스트림 stream #2에 대해서는, 표시 방식의 변경이 허가되어 있지 않은 것을 인식한다.
이 경우, 플레이어 제어 모듈(212)은, 재생 중인 자막 스트림이 확대 축소 등에 대응하고 있지 않다고 판단하고, 그래픽 처리 모듈(219)을 제어함으로써, 그 취지의 에러 메시지를 생성시키고(스텝 S348), 비디오 데이터에 오버레이하여 출력시킨다.
한편, 클립 스트림 파일 "00001.PS"에 다중화되어 있는 4개의 엘리멘터리 스트림의 3개째의 자막 스트림 stream #2와, 4개째의 자막 스트림 stream #3 중, 3개째의 자막 스트림 stream #2가 아니라, 4개째의 자막 스트림 stream #3이, 현재 재생되고 있는 경우에는, 유저가 리모콘을 조작함으로써 표시 방식의 지시의 공급을 받은 플레이어 제어 모듈(212)은, 대응하는 클립 정보 파일 "00001.CLP"로부터, 4개째의 자막 스트림 stream #3에 대한 StaticInfo()를 찾아낸다.
또한, 플레이어 제어 모듈(212)은, 도 30A 및 도 30B에서 4개째의 자막 스트림 stream #3에 대한 StaticInfo()에 기술되어 있는, 1로 되어 있는 configurable_flag를 판정하고(스텝 S347), 이에 의해, 4개째의 자막 스트림 stream #3에 대해서는, 표시 방식의 변경이 허가되어 있는 것을 인식한다.
이 경우, 플레이어 제어 모듈(212)은, 재생 중인 자막 스트림이 확대 축소 등에 대응하고 있다고 판단하고, 유저가 리모콘을 조작함으로써 공급된 표시 방식 의 지시를, 그래픽 처리 모듈(219)에 공급한다(스텝 S349).
이에 의해, 그 후, 그래픽 처리 모듈(219)은, 플레이어 제어 모듈(212)로부터의 표시 방식의 지시에 따라, 자막 디코더 제어 모듈(218)로부터의 자막 데이터를 확대 또는 축소하거나 하여, 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터에 오버레이하여 출력한다.
또한, 플레이어 제어 모듈(212)은, PlayList()의 최초의 PlayItem()의 재생 개시 시에, 그래픽 처리 모듈(219)에 대한 자막 데이터의 표시 방식의 지시를 초기화한다(스텝 S341). 즉, 플레이어 제어 모듈(212)은, 자막 데이터의 표시 방식을 디폴트의 표시 방식으로 하도록, 그래픽 처리 모듈(219)을 제어한다.
또한, 플레이어 제어 모듈(212)은, PlayItem()의 갈아타기 시에도, 그래픽 처리 모듈(219)에 대한 자막 데이터의 표시 방식의 지시를 초기화한다(스텝 S341, S351).
단, PlayItem()의 갈아타기 시에서는, 그 후에 새롭게 재생되는 PlayItem()에 따라 재생되는 새로운 자막 스트림에 대한 configurable_flag를 조사하고, configurable_flag가 0인 경우에는, 그래픽 처리 모듈(219)에 대한 자막 데이터의 표시 방식의 지시를 초기화하고, configurable_flag가 1인 경우에는, 그래픽 처리 모듈(219)에 대한 표시 방식의 지시를, PlayItem()의 갈아타기 전의 그대로 유지하도록 하는 것이 가능하다.
또한, 도 56의 자막 표시 제어 처리에서는, 유저가 리모콘을 조작함으로써, 새로운 표시 방식의 지시가 입력된 경우에, 그 새로운 표시 방식의 지시를, 그래픽 처리 모듈(219)에 공급하도록 했지만(스텝 S349), 표시 방식의 지시는, 예를 들면, 메모리(113)(도 1)를 구성하는 불휘발성 메모리에 기억하고, 그 불휘발성 메모리에 기억된 표시 방식의 지시를, 그래픽 처리 모듈(219)에 공급하도록 하는 것이 가능하다.
즉, 예를 들면, 도 1의 디스크 재생 장치의 초기 설정으로서, 불휘발성 메모리에, 유저 설정의 표시 방식의 지시를 기억시켜 두고, 유저가 리모콘을 조작함으로써, 새로운 표시 방식의 지시가 입력된 경우에는, 불휘발성 메모리에 기억된 표시 방식의 지시를, 새로운 표시 방식의 지시로 갱신하는 한편, 그 불휘발성 메모리에 기억된 표시 방식의 지시를, 그래픽 처리 모듈(219)에 공급하도록 하는 것이 가능하다. 이 경우, 불휘발성 메모리에는, 전회의 재생 종료 시에서의 표시 방식의 지시가 유지되므로, 차회의 PlayList()의 재생 시에, 유저가 리모콘을 조작함으로써, 전회의 재생 종료 시에서의 표시 방식의 지시를 입력하지 않아도, 그 표시 방식으로, 자막 데이터의 표시가 개시된다.
또한, 이 경우, 불휘발성 메모리에 기억시키는 표시 방식의 지시에는, 예를 들면, 자막 데이터를 확대 또는 축소할 때의 확대율 또는 축소율 등이 포함되는 것으로 한다.
이상과 같이, 자막 표시 제어 처리에 따르면, 클립 정보 파일 Clip()(도 12)에 포함되는, 엘리멘터리 스트림마다의, 그 엘리멘터리 스트림의 재생 중에 변화되지 않는 StaticInfo() 중, 자막 데이터의 StaticInfo()가 취득되고, 그 StaticInfo()에 포함되는, 자막 데이터의 표시를 디폴트의 표시 방식으로부터 변경 하는 것을 허가할지의 여부를 나타내는 configurable_flag에 기초하여, 재생 중인 자막 데이터의 표시를 디폴트의 표시 방식으로부터 변경하는 것이 허가되어 있는지의 여부가 판정된다. 그리고, 재생 중인 자막 데이터의 표시를 디폴트의 표시 방식으로부터 변경하는 것이 허가되어 있는 경우에는, 자막 데이터의 표시 방식의 변경의 지시에 따라, 그 자막 데이터의 표시 처리, 즉, 예를 들면, 자막 데이터를 확대 또는 축소, 혹은 표시 색을 변경하거나 하여 표시하는 처리가 행해진다. 따라서, 자막 데이터의 표시 방식의 변경을 제어할 수 있다.
[캡쳐 제어 처리]
다음으로, 도 57의 플로우차트를 참조하여, 비디오 스트림에 대응하는 비디오 데이터의 캡쳐를 제어하는 캡쳐 제어 처리에 대해서 설명한다. 또한, 도 57에는, 캡쳐 제어 처리를 설명하는 플로우차트와 함께, 그 캡쳐 제어 처리에 의해 캡쳐된 비디오 데이터를 2차 이용하는 처리의 예인 백그라운드/스크린 세이버 처리를 설명하는 플로우차트도, 도시하고 있다.
캡쳐 제어 처리는, 예를 들면, 유저가 리모콘을 조작함으로써, 비디오 데이터의 캡쳐를 지시하는 캡쳐 지시가, 입력 인터페이스(115)(도 1)를 통하여, 플레이어 제어 모듈(212)에 공급되면 개시된다.
즉, 캡쳐 제어 처리에서는, 우선 최초로, 스텝 S371에서, 플레이어 제어 모듈(212)이, 비디오 스트림을 재생 중인지의 여부를 판정하여, 재생 중이 아니라고 판정한 경우, 캡쳐 제어 처리는 종료한다.
한편, 스텝 S371에서, 비디오 스트림을 재생 중이라고 판정된 경우, 스텝 S372로 진행하여, 플레이어 제어 모듈(212)은, 재생 중인 비디오 스트림에 대응하는 PlayList()(도 7)로부터, capture_enable_flag_PlayList를 취득함과 함께, 재생 중인 비디오 스트림에 대응하는 클립 정보 파일 Clip()(도 12)으로부터, capture_enable_flag_Clip을 취득한다.
여기서, PlayList()에서의 capture_enable_flag_PlayList는, 도 7에서 설명한 바와 같이, 그 PlayList()에 의해 재생되는 비디오 스트림에 대응하는 비디오 데이터의 2차 이용을 허가할지의 여부를 나타낸다. 또한, 클립 정보 파일 Clip()에서의 capture_enable_flag_Clip은, 도 12에서 설명한 바와 같이, 그 클립 정보 파일 Clip()에 대응하는 클립 스트림 파일에 저장되어 있는 비디오 스트림에 대응하는 비디오 데이터의 2차 이용을 허가할지의 여부를 나타낸다.
스텝 S372의 처리 후에는, 스텝 S373으로 진행하여, 플레이어 제어 모듈(212)은, 직전의 스텝 S373에서 취득된 capture_enable_flag_PlayList와 capture_enable_flag_Clip에 기초하여, 캡쳐 지시가 입력 인터페이스(115)(도 1)로부터 입력되었을 때에 재생되고 있던 비디오 데이터의 픽쳐의 캡쳐의 가부를 판정한다.
스텝 S373에서, 캡쳐 지시가 입력 인터페이스(115)로부터 입력되었을 때에 재생되고 있던 비디오 데이터의 픽쳐의 캡쳐가 불가라고 판정된 경우, 즉, 직전의 스텝 S373에서 취득된 capture_enable_flag_PlayList 또는 capture_enable_flag_Clip 중 적어도 한쪽이, 비디오 데이터의 2차 이용을 허가하지 않는다는 취지의 0으로 되어 있는 경우, 스텝 S374로 진행하여, 플레이어 제어 모듈(212)은, 그래픽 처리 모듈(219)을 제어함으로써, 비디오 데이터의 캡쳐가 불가하다는 취지의 에러 메시지를 오버레이시키고, 캡쳐 제어 처리를 종료한다. 이에 의해, 에러 메시지가 표시된다.
한편, 스텝 S373에서, 캡쳐 지시가 입력 인터페이스(115)로부터 입력되었을 때에 재생되고 있던 비디오 데이터의 픽쳐의 캡쳐가 가능하다고 판정된 경우, 즉, 직전의 스텝 S373에서 취득된 capture_enable_flag_PlayList 및 capture_enable_flag_Clip의 양방이, 비디오 데이터의 2차 이용을 허가한다는 취지의 1로 되어 있는 경우, 스텝 S375로 진행하여, 플레이어 제어 모듈(212)은, 캡쳐 지시가 입력 인터페이스(115)로부터 입력되었을 때에 재생되고 있던 비디오 데이터의 픽쳐의 캡쳐의 지시를, 그래픽 처리 모듈(219)에 공급하고, 스텝 S376으로 진행한다.
스텝 S376에서는, 그래픽 처리 모듈(219)은, 플레이어 제어 모듈(212)로부터의 캡쳐의 지시에 따라, 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터의 픽쳐를 캡쳐하여, 메모리(113)(도 1)에 기억시키고, 캡쳐 제어 처리를 종료한다. 또한, capture_enable_flag가 복수 비트 구성으로 되어 있고, 사용 조건의 제약이 행해져 있는 경우에는 이 시점에서 대응이 행해진다. 즉 캡쳐한 화상의 크기에 제한이 있는 경우에는, 이 시점에서 축소한 화상이 캡쳐된다. 또한 사용하는 어플리케이션에 제약이 있는 경우에는 그 취지를 알리는 플래그가 동시에 기록된다.
이상과 같이, 캡쳐 제어 처리에서는, 유저로부터의 캡쳐 지시가 있었을 때에 재생되고 있는 비디오 스트림에 대응하는 PlayList()(도 7)와 클립 정보 파일 Clip()(도 12) 각각의 capture_enable_flag_PlayList와 capture_enable_flag_Clip의 논리곱을 취하고, 그 논리곱이 1인 경우, 즉, capture_enable_flag_PlayList와 capture_enable_flag_Clip이, 모두, 2차 이용을 허가하는 1로 되어 있는 경우에만, 비디오 데이터의 2차 이용이 가능하다고 판단되어, 캡쳐가 행해진다.
따라서, 예를 들면, 도 29에서의 1번째의 PlayList #0의 1번째의 PlayItem #0에 따라, 비디오 스트림의 재생, 즉, 클립 스트림 파일 "00001.PS"에 다중화된 비디오 스트림의 재생이 행해지고 있는 경우에, 유저로부터의 캡쳐 지시가 있었을 때에는, 1번째의 PlayList #0에서의 capture_enable_flag_PlayList는 1이며, 그 1번째의 PlayItem #0에 의해 재생되는 클립 스트림 파일 "00001.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00001.CLP"에서의 capture_enable_flag_Clip은 1이기 때문에, 재생 중인 비디오 데이터(클립 스트림 파일 "00001.PS"에 다중화된 비디오 스트림에 대응하는 비디오 데이터)의 2차 이용은 가능하다고 판단되어, 캡쳐가 행해진다.
또한, 예를 들면, 도 29에서의 1번째의 PlayList #0의 2번째의 PlayItem #1에 따라, 비디오 스트림의 재생, 즉, 클립 스트림 파일 "00002.PS"에 다중화된 비디오 스트림의 재생이 행해지고 있는 경우에, 유저로부터의 캡쳐 지시가 있었을 때에는, 1번째의 PlayList #0에서의 capture_enable_flag_PlayList는 1이며, 그 2번째의 PlayItem #1에 의해 재생되는 클립 스트림 파일 "00002.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00002.CLP"에서의 capture_enable_flag_Clip은 0이기 때문에, 재생 중인 비디오 데이터(클립 스트림 파일 "00002.PS"에 다중화된 비디오 스트림에 대응하는 비디오 데이터)의 2차 이용은 불가하다고 판단되어, 캡쳐가 행해지지 않는다.
또한, 예를 들면, 도 29에서의 2번째의 PlayList #1의 PlayItem #0에 따라, 비디오 스트림의 재생, 즉, 클립 스트림 파일 "00003.PS"에 다중화된 비디오 스트림의 재생이 행해지고 있는 경우에, 유저로부터의 캡쳐 지시가 있었을 때에는, 2번째의 PlayList #1에서의 capture_enable_flag_PlayList는 0이며, 2번째의 PlayList #1의 PlayItem #0에 의해 재생되는 클립 스트림 파일 "00003.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에서의 capture_enable_flag_Clip은 1이기 때문에, 재생 중인 비디오 데이터(클립 스트림 파일 "00003.PS"에 다중화된 비디오 스트림에 대응하는 비디오 데이터)의 2차 이용은 불가하다고 판단되어, 캡쳐는 행해지지 않는다.
또한, 이 경우, 2번째의 PlayList #1에서의 capture_enable_flag_PlayList가 0인 것이 확인된 시점에서, 비디오 데이터의 2차 이용은 불가하다고 판단할 수 있으므로, 2번째의 PlayList #1의 PlayItem #0에 의해 재생되는 클립 스트림 파일 "00003.PS"에 대응하는 도 30A 및 도 30B의 클립 정보 파일 "00003.CLP"에서의 capture_enable_flag_Clip의 확인은 생략할 수 있다.
캡쳐 제어 처리에 의해 캡쳐되어, 메모리(113)에 기억된 픽쳐는, 백그라운드/스크린 세이버 처리에서 2차 이용할 수 있다.
백그라운드/스크린 세이버 처리는, 예를 들면, 플레이어 제어 모듈(212)이 동작하고 있지만, 엘리멘터리 스트림의 재생이 행해지고 있지 않은 상태, 즉, 디스 크 드라이브(102)(도 1)에 디스크(101)가 삽입되어 있지 않은 상태, 혹은 엘리멘터리 스트림의 재생이 종료된 상태로 되었을 때 등에 행해진다.
즉, 백그라운드/스크린 세이버 처리에서는, 스텝 S380에서, 플레이어 제어 모듈(212)은, 캡쳐 제어 처리에 의해 메모리(113)에 기억된 픽쳐를 표시하도록, 그래픽 처리 모듈(219)을 제어한다. 그래픽 처리 모듈(219)은, 플레이어 제어 모듈(212)로부터의 제어에 따라, 캡쳐 제어 처리에 의해 메모리(113)에 기억된 픽쳐를 표시시킨다.
여기서, 그래픽 처리 모듈(219)에서, 메모리(113)에 기억된 픽쳐를 정지 화상으로 표시시키면, 소위 벽지가 실현되어, 일정 주기로 확대나 축소, 이동하거나 하면서 표시시키면, 스크린 세이버가 실현된다. 또한, 캡쳐 제어 처리에 의해 메모리(113)에 기억된 픽쳐의 표시를 행하는 백그라운드/스크린 세이버 처리는, 플레이어 제어 모듈(212)이 아니라, 다른 독립된 어플리케이션에 의해 행하는 것이 가능하다.
또한, 이 때 메모리(113)에 기억된 픽쳐에 사용 제한을 나타내는 플래그가 부가되어 있는 경우에는 그 제한에 따른다.
이상과 같이, 비디오 액세스 유닛 단위보다 큰 단위의, 예를 들면, PlayList()나 PlayItem()에 대응하는 비디오 데이터의 2차 이용을 허가할지의 여부를 나타내는, 재생 중인 비디오 데이터에 대한 capture_enable_flag_PlayList나 capture_enable_flag_Clip이 취득되고, 그 capture_enable_flag_PlayList나 capture_enable_flag_Clip에 기초하여, 재생 중인 비디오 데이터의 2차 이용이 허 가되어 있는지의 여부가 판정된다. 그리고, 재생 중인 비디오 데이터의 2차 이용이 허가되어 있다고 판정된 경우, 재생 중인 비디오 데이터가 캡쳐되고, 그 캡쳐된 비디오 데이터를 이용한 백그라운드/스크린 세이버 처리가 실행된다. 따라서, 비디오 데이터의 2차 이용의 제어가 가능하게 된다.
또한, 도 57의 캡쳐 제어 처리에서는, PlayList()(도 7)에서, capture_enable_flag_PlayList를 설정함과 함께, PlayItem()에 의해 재생되는 클립 스트림 파일에 대응하는 클립 정보 파일 Clip()(도 12)에서, capture_enable_flag_Clip을 설정하고, 그 capture_enable_flag_PlayList와 capture_enable_flag_Clip의 양방을 이용하여, 2차 이용의 허가를 판정하도록 했지만, PlayList()(도 7)에서, capture_enable_flag_PlayList만을 설정하거나, 또는, PlayItem()에 의해 재생되는 클립 스트림 파일에 대응하는 클립 정보 파일 Clip()(도 12)에서, capture_enable_flag_Clip만을 설정하는 것으로 하여, capture_enable_flag_PlayList 또는 capture_enable_flag_Clip의 한쪽만을 이용하여, 2차 이용의 가부를 판정하도록 하는 것도 가능하다.
또한, 도 57의 캡쳐 제어 처리에서는, 스텝 S376에서, 그래픽 처리 모듈(219)이, 플레이어 제어 모듈(212)로부터의 캡쳐의 지시에 따라, 비디오 디코더 제어 모듈(216)로부터의 비디오 데이터의 픽쳐, 즉, 1개의 픽쳐만을 캡쳐하도록 했지만, 그 밖에, 복수의 픽쳐를 캡쳐하는 것도 가능하다. 즉, 비디오 디코더 제어 모듈(216)이 출력하는 시계열의 복수의 픽쳐를 캡쳐하는 것이 가능하다. 이 경우, 한번에 캡쳐되는 픽쳐의 매수는, 예를 들면, 미리 정해 둘 수 있다. 혹은, capture_enable_flag_PlayList나 capture_enable_flag_Clip의 비트를 확장하여, 그 capture_enable_flag_PlayList나 capture_enable_flag_Clip에, 한번에 캡쳐 가능한 픽쳐의 매수의 정보를 포함시키도록 하여도 된다.
또한, 전술한 경우에는, 비디오 데이터의 2차 이용을 허가할지의 여부의 이용 허가 정보(capture_enable_flag_PlayList, capture_enable_flag_Clip)를, PlayList()나, 클립 정보 파일 Clip()에 기술하고, 그 이용 허가 정보에 의해, PlayList()에 의해 재생되는 비디오 데이터 전체나, 클립 정보 파일 Clip()에 대응하는 클립 스트림 파일에 다중화된 비디오 스트림에 대응하는 비디오 데이터 전체에 대한 2차 이용의 가부를 판정하도록 했지만, 이용 허가 정보는, 그 밖의 임의의 단위의 비디오 데이터에 대해서 기술하고, 그 이용 허가 정보에 의해, 임의의 단위의 비디오 데이터에 대한 2차 이용의 가부를 판정하는 것이 가능하다.
즉, 도 58은, 이용 허가 정보가 배치된 private_stream2_PES_payload()의 신택스를 도시하고 있고, 도 59는, 이용 허가 정보가 배치된 au_information()의 신택스를 도시하고 있다.
또한, 도 58의 private_stream2_PES_payload()는, video_stream_id 직전에, 이용 허가 정보로서의 capture_enable_flag_ps2가 배치되어 있는 것 외에는, 도 26에서의 경우와 마찬가지로 구성되어 있다. 도 59의 au_information()도, pic_struct_copy의 직전에, 이용 허가 정보로서의 capture_enable_flag_AU가 배치되어 있는 것 외에는, 도 27에서의 경우와 마찬가지로 구성되어 있다.
도 58의 private_stream2_PES_payload()에 배치된 capture_enable_flag_ps2 는, 그 private_stream2_PES_payload()를 포함하는 private_stream_2의 PES_packet()부터, 다음 private_stream_2의 PES_packet() 직전까지 배치되는 비디오 스트림에 대응하는 비디오 데이터의 2차 이용을 허가할지의 여부를 나타낸다. 따라서, 도 58의 private_stream2_PES_payload()에 배치된 capture_enable_flag_ps2에 따르면, 임의의 디코드 개시 가능점부터 다음 디코드 개시 가능점까지의 사이의 비디오 데이터에 대해서, 그 2차 이용을 허가할지의 여부를 판정할 수 있다.
또한, 도 59의 au_information()에 배치된 capture_enable_flag_AU는, 그 capture_enable_flag_AU에 대응하는 비디오 액세스 유닛의 비디오 데이터의 2차 이용을 허가할지의 여부를 나타낸다. 따라서, 도 59의 au_information()에 배치된 capture_enable_flag_AU에 따르면, 비디오 액세스 유닛 단위의 비디오 데이터에 대해서, 즉, 픽쳐 단위로, 그 2차 이용을 허가할지의 여부를 판정할 수 있다.
여기서, PlayList()(도 7)에서의 이용 허가 정보로서의 capture_enable_flag_PlayList, 클립 정보 파일 Clip()(도 12)에서의 이용 허가 정보로서의 capture_enable_flag_Clip, private_stream2_PES_payload()(도 58)에서의 이용 허가 정보로서의 capture_enable_flag_ps2, au_information()(도 59)에서의 이용 허가 정보로서의 capture_enable_flag_AU는, 그 중 2 이상을 중복하여 채용하는 것이 가능하고, 이 경우, 임의의 비디오 데이터의 픽쳐의 2차 이용의 가부는, 그 중복하여 채용되는 2 이상의 이용 허가 정보의 논리곱 등에 기초하여 판정할 수 있다.
또한, 도 59의 au_information()이 배치되는 도 26 또는 도 58의 private_stream2_PES_payload()를 포함하는 private_stream_2의 PES_packet()은, 도 45의 스텝 S211에서 설명한 바와 같이, 버퍼 제어 모듈(215)(도 5)의 비디오 읽어내기 기능부(233)가, 버퍼(215A)에 기억된 프로그램 스트림 중에서 탐색한다. 따라서, capture_enable_flag_ps2가 배치된 도 58의 private_stream2_PES_payload()나, capture_enable_flag_AU가 배치된 도 59의 au_information()을 채용하는 경우에는, 플레이어 제어 모듈(212)은, 비디오 데이터의 2차 이용의 가부를 판정할 때에, capture_enable_flag_ps2나 capture_enable_flag_AU를, 비디오 읽어내기 기능부(233)에 조회할 필요가 있다.
다음으로, 도 60을 참조하여, 디스크 기록 장치의 하드웨어의 구성에 대해서 설명한다.
도 60의 디스크 기록 장치는, 예를 들면, 디스크 플레이어나, 게임 장치, 카 네비게이션 시스템 이외에 적용할 수 있다.
도 60의 디스크 기록 장치에서, 디스크(410)는, 예를 들면, DVD 등의 광 디스크, 혹은 광 자기 디스크, 자기 디스크 등이며, 비디오 데이터나, 오디오 데이터, 자막 데이터 등의 콘텐츠 데이터, 또한, 콘텐츠 데이터를 기록할 수 있다. 또한, 디스크(410)는, 각종의 데이터가 기록됨으로써, 도 1의 디스크(101)로서 사용하는 것이 가능하게 된다.
비디오 입력 단자(400A)는, 도시하지 않은 촬상 장치 등의 비디오 입력 장치에 접속되어 있고, 비디오 입력 장치로부터 공급되는 비디오 데이터를 비디오 입력 인터페이스(401)에 공급한다. 오디오 입력 단자(400B)는, 도시하지 않은 마이크로폰이나 앰프(앰플리파이어) 등의 오디오 입력 장치에 접속되어 있고, 입력된 오디오 데이터를, 오디오 입력 인터페이스(402)에 공급한다.
비디오 입력 인터페이스(401)는, 입력되는 비디오 데이터에 필요한 처리를 실시하고, 버스(411)를 통해서 비디오 인코더(403)에 공급한다. 오디오 입력 인터페이스(402)는, 입력되는 오디오 데이터에 소정의 처리를 실시하고, 버스(411)를 통해서 오디오 인코더(404)에 공급한다.
비디오 인코더(403)는, CPU(405)나 비디오 입력 인터페이스(401)로부터 공급되는 비디오 데이터를 인코드하고, 그 결과 얻어지는, 압축 부호화 데이터(부호화 비디오 데이터: 예를 들면, MPEG2 비디오 스트림)를, 버스(411)를 통해서 디스크 드라이브(409)에 의해 디스크(410)에 기록시킨다.
오디오 인코더(404)는, CPU(405)나 오디오 입력 인터페이스(402)로부터 공급되는 오디오 데이터를 인코드하고, 그 결과 얻어지는, 압축 부호화 데이터(부호화 오디오 데이터: 예를 들면, MPEG2 오디오 스트림)를, 버스(411)를 통해서 디스크 드라이브(409)에 의해 디스크(410)에 기록시킨다.
CPU(405) 및 메모리(406)는, 컴퓨터 시스템을 형성하고 있다. 즉, CPU(405)는, 메모리(406)에 기억된 프로그램을 실행하고, 디스크 기록 장치 전체를 제어함과 함께, 후술하는 각종 처리를 행한다. 메모리(406)는, CPU(405)가 실행하는 프로그램을 기억하고 있다. 또한, 메모리(406)는, CPU(405)의 동작상 필요한 데이터를 일시 기억한다. 또한, 메모리(406)는, 불휘발성 메모리만, 또는 휘발성 메모리 와 불휘발성 메모리의 조합으로 구성하는 것이 가능하다. 또한, 도 60의 디스크 기록 장치에, 하드 디스크를 설치하고, 그 하드 디스크에, CPU(405)가 실행하는 프로그램을 기록(인스톨)해 두는 경우에는, 메모리(406)는, 휘발성 메모리만으로 구성하는 것이 가능하다.
여기서, CPU(405)가 실행하는 프로그램은, 디스크 기록 장치에 내장되어 있는 기록 매체로서의 메모리(406)에 미리 저장해 둘 수 있다.
혹은 프로그램은, 또한, 디스크 드라이브(409), 또한, 디스크 드라이브(409) 이외의 플렉시블 디스크, CD-ROM(Compact Disc-Read Only Memory), MO(Magneto Optical) 디스크, 자기 디스크, 메모리 카드 등의 리무버블 기록 매체에, 일시적 혹은 영속적으로 저장해 둘 수 있다. 이러한 리무버블 기록 매체는, 소위 패키지 소프트웨어로서 제공할 수 있다.
또한, 프로그램은, 메모리(406)에 미리 기억시켜 두는 것, 혹은, 전술한 바와 같은 리무버블 기록 매체로부터 디스크 기록 장치에 인스톨할 수 있다. 또한, 프로그램은, 다운로드 사이트로부터, 디지털 위성 방송용의 인공 위성을 통하여, 디스크 재생 장치에 무선으로 전송하거나, LAN(Local Area Network), 인터넷 등의 네트워크를 통하여, 디스크 재생 장치에 유선으로 전송하고, 디스크 재생 장치에서는, 그와 같이 하여 전송되어 오는 프로그램을, 입력 인터페이스(408)에서 수신하여, 내장하는 메모리(406)에 인스톨할 수 있다.
또한, 프로그램은, 하나의 CPU에 의해 처리되는 것이어도 되고, 복수의 CPU에 의해 분산 처리되는 것이어도 된다.
드라이브 인터페이스(407)는, CPU(405)의 제어하, 디스크 드라이브(409)를 제어하고, 이에 의해, 버스(411)를 통하여, CPU(405)나, 메모리(406), 비디오 인코더(403), 오디오 인코더(404)로부터 공급되는 데이터를 디스크 드라이브(409)에 대하여 공급하여, 디스크(410)에 기록시키거나, 또는, 디스크(410)에 기록된 데이터를 읽어내어, 버스(411)를 통하여, CPU(405)나, 메모리(406)에 공급한다.
입력 인터페이스(408)는, 도시하지 않은 키(버튼)나, 리모콘(리모트 컨트롤 커맨더)이 유저에 의해 조작됨으로써 공급되는 신호를 수신하고, 버스(411)를 통하여, CPU(405)에 공급한다. 또한, 입력 인터페이스(408)는, 그 밖에, 예를 들면, 모뎀(ADSL(Asymmetric Digital Subscriber Line) 모뎀을 포함함)이나, NIC(Network Interface Card) 등의 통신 인터페이스로서도 기능한다.
또한, 비디오 입력 장치와 오디오 입력 장치로부터의 디스크 기록 장치에의 비디오 데이터와 오디오 데이터의 공급은, 유선 또는 무선 중 어느 것에 의해서도 행하는 것이 가능하다.
디스크 드라이브(409)에는, 디스크(410)가 착탈 가능하게 되어 있다. 디스크 드라이브(409)는, 도시하지 않은 인터페이스를 내장하고, 그 인터페이스를 통하여, 드라이브 인터페이스(407)에 접속되어 있다. 디스크 드라이브(409)는, 거기에 장착된 디스크(410)를 구동하고, 드라이브 인터페이스(407)로부터의 기록 등의 명령에 따라, 디스크(410)에 데이터를 기록하는 등의 처리를 행한다.
또한, 디스크(410)에 기록되는 데이터(기록 데이터)에는, 필요에 따라, 컴퓨터가 실행 가능한 프로그램도 포함된다. 또한, 본 실시 형태에서는, 기록 매체로 서, 디스크 형상의 기록 매체인 디스크(410)를 채용하지만, 그 밖에, 기록 매체로서는, 예를 들면, 반도체 메모리나, 테이프 형상의 기록 매체이어도 된다.
버스(411)에는, CPU(Central Processing Unit)(405), 메모리(406), 드라이브 인터페이스(407), 입력 인터페이스(408), 비디오 인코더(403), 오디오 인코더(404), 비디오 입력 인터페이스(401), 오디오 입력 인터페이스(402)가 접속되어 있다.
다음으로, 도 61을 참조하여, 본 발명의 데이터 부호화 방법을 구현화한 디스크 기록 장치에 의해 실현되는 기능에 대해서 설명한다. 이 도면에 도시하는 디스크 기록 장치에 의해 실현되는 기능에서, 오디오 인코더(404)는 오디오 입력 단자(400B) 및 오디오 입력 인터페이스(402)를 통해서 입력된 오디오 신호를 압축 부호화하여 다중화기(421)에 출력한다.
또한, 비디오 인코더(403)는 비디오 입력 단자(400A) 및 비디오 입력 인터페이스(401)를 통해서 입력된 비디오 신호를 압축 부호화하여 다중화기(421)에 출력한다.
다중화기(421)는, 입력된 MPEG2 비디오 스트림과 MPEG2 오디오 스트림을 패킷화하여, 전술한 도 18A 및 도 18B 내지 도 27을 이용하여 설명한 바와 같이 시분할 다중화하고 있다. 다중화기(421)는, 스트림 중 인트라 픽쳐를 선택하고, 약 1초에 2회 정도의 빈도로 도 26에 도시하는 private_stream_2의 PES_packet()을 삽입한다.
다중화기(421)는, 다중화 스트림을, FIFO(422)를 경유해서 RAPI 재기입기 (424)에 출력함과 함께, RAPI 정보 추출기(423)에도 동시에 출력한다. RAPI 정보추출기(423)에서는, 다중화 스트림에 다중화된 비디오 스트림 중 private_stream_2의 PES_packet()의 개시 위치와, private_stream_2의 PES_packet() 직후에 놓여져 있는 인트라 픽쳐가 갖는 타임 스탬프(PTS) 값, 및 해당 인트라 픽쳐와, 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치를 검출하고, 기억한다.
또한, 여기서 말하는 RAPI란, private_stream_2의 PES_packet()의 것이다.
RAPI 정보 추출기(423)는 검출한 해당 인트라 픽쳐와, 그것에 계속되는 2매, 3매째, 4매째의 참조 화상의 종료 위치를 RAPI 재기입기(424)에 출력한다. RAPI 재기입기(424)에서는, RAPI의 정보로서 도 26의 1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture의 필드가 덮어쓰기되며, 각각 선두, 2매째, 3매째, 4매째의 참조 화상의 종료 위치가, 섹터 단위의 수치로 기록되어, 출력 서버(426)에 축적된다.
컨트롤러(425)는, 다중화 스트림 전체의 처리가 종료되면, RAPI 정보 추출기(423)에서 추출, 축적된, 다중화 스트림에 다중화된 모든 RAPI의 개시 위치와, RAPI 직후에 놓여져 있는 인트라 픽쳐 및 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치를 취득한다.
컨트롤러(425)는, 입력된 정보를 사용하여, 도 16을 이용하여 설명한 EP_map()을 작성한다.
컨트롤러(425)는, RAPI 정보 추출기(423)로부터 입력된 데이터로부터, RAPI에 대하여, 그 어드레스, 직후의 인트라 픽쳐가 갖는 PTS, 그리고 인트라 픽쳐 및 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치 중 하나를 선출하여, 클립 정보 파일 내의 EP_map()을 작성하고, 출력 서버(426)에 축적한다.
여기서, 도 62의 플로우차트를 참조하여, EP_map() 생성 처리에 대해서 설명한다.
스텝 S381에서, 비디오 인코더(403)는 비디오 입력 단자(400A) 및 비디오 입력 인터페이스(401)를 통해서 입력된 비디오 신호를 압축 부호화하여 다중화기(421)에 출력한다. 또한, 오디오 인코더(404)는 오디오 입력 단자(400B) 및 오디오 입력 인터페이스(402)를 통해서 입력된 오디오 신호를 압축 부호화하여 다중화기(421)에 출력한다. 이 경우, 오디오 인코더(404)로부터 출력되는 스트림은, MPEG2 오디오 스트림으로 되고, 비디오 인코더(403)로부터 출력되는 스트림은, MPEG2 비디오 스트림으로 된다.
스텝 S382에서, 다중화기(421)는, 입력된 MPEG2 비디오 스트림과 MPEG2 오디오 스트림을 패킷화하여, 도 18A 및 도 18B 내지 도 27을 이용하여 설명한 바와 같이 시분할 다중화(패케타이즈)하고, 스트림 중 인트라 픽쳐를 선택하여, 약 1초에 2회 정도의 빈도로 도 26에 도시하는 private_stream_2의 PES_packet()을 삽입한다. 여기서 private_stream_2의 PES_packet()은, 다른 픽쳐를 참조하지 않아도 디코드 가능한 비디오의 인트라 픽쳐가 직후에 놓여져 있는 것을 나타내고 있다. 이 때, 해당 인트라 픽쳐에는 타임 스탬프(PTS/DTS)가 반드시 부여된다.
또한, 이 단계에서는, 도 26에서 설명한 1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture의 필드에는 데이터가 기록되어 있지 않다. 또한, 도시되어 있지 않지만, 서브타이틀 스트림을 다중화기(421)에 입력하여, 비디오 스트림, 오디오 스트림과 함께 다중화하여도 된다.
스텝 S383에서, 다중화기(421)는, 다중화 스트림을, FIFO(422)를 경유해서 RAPI 재기입기(424)에 출력함과 함께, RAPI 정보 추출기(423)에도 동시에 출력한다. RAPI 정보 추출기(423)에서는, 다중화 스트림에 다중화된 비디오 스트림 중 private_stream_2의 PES_packet()의 개시 위치와, private_stream_2의 PES_packet() 직후에 놓여져 있는 인트라 픽쳐가 갖는 타임 스탬프(PTS) 값, 및 해당 인트라 픽쳐와, 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치를 검출하고, 기억한다.
또한, RAPI 정보 추출기(423)는 검출한 해당 인트라 픽쳐와, 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치를 RAPI 재기입기(424)에 출력한다. RAPI 재기입기(424)는, RAPI의 정보 중 도 26의 1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture의 필드를 덮어쓰기하고, 각각 선두, 2매째, 3매째, 4매째의 참조 화상의 종료 위치를, 섹터 단위의 수치로 기록하고, 또한 출력 서버(426)에 축적시킨다.
스텝 S385에서, RAPI 정보 추출기(423)에서 추출, 축적된, 다중화 스트림에 다중화된 모든 RAPI의 개시 위치와, RAPI 직후에 놓여져 있는 인트라 픽쳐 및 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치가, 컨트롤러(425)에 입력된다.
컨트롤러(425)는, 입력된 정보를 사용하여, 도 16을 이용하여 설명한 EP_map()을 작성한다. 여기서 작성하는 EP_map()은 비디오 스트림만의 정보가 포함되어 있는 것으로 한다. 비디오에 관한 EP_map()은, 스트림 중에 놓여진 모든 RAPI, 즉 private_stream_2의 PES_packet()의 위치이며, 이 정보는 RAPI 정보 추출기(423)로부터 컨트롤러(425)에 입력된 정보로 작성된다.
보다 상세하게는, 컨트롤러(425)는, RAPI 정보 추출기(423)로부터 입력된 데이터로부터, RAPI에 대하여, 그 어드레스, 직후의 인트라 픽쳐가 갖는 PTS, 그리고 인트라 픽쳐 및 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치 중 하나를 선출하여, 클립 정보 파일 내의 EP_map()을 작성하고, 출력 서버(426)에 축적한다. 즉, 컨트롤러(425)는, 4점의 참조 화상 종료 위치(1stRef_Picture, 2ndRef_Picture, 3rdRef_Picture, 4thRef_Picture) 중, 소정의 섹터수(인코드 처리에서, 통합하여 읽어내기 가능한 섹터수)에 가까운 값을, N-th_Ref_picture_copy에 카피한다.
스텝 S386에서, 컨트롤러(425)는, N-th_Ref_picture_copy에 기초하여, index_minus1을 결정하여 기록하고, 디스크(410)에 기록시킨다. 여기서는, 출력 서버(426)에 축적된 스트림 데이터와 데이터 베이스계의 파일은, 드라이브 인터페이스(407)로부터 디스크 드라이브(409)에 공급되어, 디스크(410)에 기록된다.
이상의 처리에 의해, 도 31에서 도시되는 바와 같이 EP_map이 생성된다.
[1stRef_Picture, 2ndRef_Picture, 3rdRef_Picture, 4thRef_Picture의 사용 방법]
다음으로, 도 63의 플로우차트를 참조하여, 도 31의 EP_map()을 이용한 앞으 로 감기 재생 처리에 대해서 설명한다.
도시하지 않은 유저가 비디오 콘텐츠 재생 프로그램(210)에 대하여 앞으로 감기를 명령한 것으로 한다. 플레이어 제어 모듈(212)은 재생 중인 스트림의 클립 정보 파일로부터, EP_map()에 등록되어 있는 재생 가능 개시 위치의 하나를 선택하고(스텝 S391), 거기에 기술되어 있는 RPN_EP_start로부터, N-th_Ref_Picture_copy만큼의 크기로부터의 읽어내기 데이터를 결정한다(스텝 S392). 플레이어 제어 모듈(212)은, 이 정보를 콘텐츠 데이터 공급 모듈(213)에 전달하고, 또한 디코드 제어 모듈(214)에 대하여 앞으로 감기 재생을 지시한다.
콘텐츠 데이터 공급 모듈(213)은, 오퍼레이팅 시스템(201)의 기능을 사용하여, 재생 대상의 엘리멘터리 스트림이 다중화된 프로그램 스트림이 저장된 클립 스트림 파일을 읽어내어 버퍼 제어 모듈(215)에 공급시킨다(스텝 S393). 이미 파일명 등은 지시되어 있으므로, 여기서는 반복하지 않는다. 재생 개시 시와는 달리, 읽어들이기 개시의 어드레스와 전송하는 데이터의 크기를 전달하여 읽어들이기를 지시한다.
비디오 읽어내기 기능부(233)는, 버퍼 제어 모듈(215)에 입력된 다중화 데이터를 다중화 분리하여(스텝 S394), 비디오 스트림만을 비디오 디코더 제어 모듈(216)에 공급한다. 이 경우, 앞으로 감기의 처리이기 때문에, 오디오 디코더 제어 모듈(217), 자막 디코더 제어 모듈(218), 오디오 읽어내기 기능부(234), 자막 읽어내기 기능부(233)는 동작하지 않는다.
입력된 데이터에는, 1매 이상 4매 이하의 참조 화상이 포함되어 있다. 여기 서, 앞으로 감기 처리에서는, 도 64의 플로우차트를 참조하여 설명하는 엔트리 포인트 선정 처리(스텝 S395)에 의해 선정된 엔트리 포인트에 기초하여, 참조 화상만이 디코드되어 표시되지만, 디코드 제어 모듈(214)에는 미리 index_N_minus1이 보내어져 있고, 디코드 제어 모듈(214)은 지정된 수만큼의 참조 화상을 디코드하여, 순차적으로 후단으로 보내어 표시시킨다(스텝 S396).
표시가 종료되면, 플레이어 제어 모듈(212)은, 다음에 표시하는 EP_map() 엔트리 포인트를 선택하고, 상기에 설명한 것을 반복함으로써 앞으로 감기 화상을 출력한다(스텝 S397).
이 때, 다음에 표시하는 EP_map() 내의 점프처의 엔트리 포인트를 선택할 때에, index_N_minus1을 사용하는 방법을 설명한다. 이미 설명한 바와 같이 index_N_minus1은 N-th_Ref_Picture_copy까지 읽어들였을 때에, 그 데이터에 포함되는 참조 화상의 매수를 나타내고 있다. 도 31의 데이터예에서는, 1번째, 및 3번째의 엔트리 포인트에서는 index_N_minux1은 0이기 때문에, 인트라 픽쳐 1매이며, 2번째, 및 4번째의 엔트리 포인트에서는, index_N_minus1은 3이기 때문에, 4매의 참조 화상이 포함되어 있다.
앞으로 감기 화상은, 2매 이상의 참조 화상이 출력됨으로써, 그 주관 품질이 높아진다고 하는 성질이 있다. 그러나, 많은 참조 화상을 출력하기 위해서는 데이터 읽어내기량을 많이 할 필요가 있어, 갱신의 빈도가 느려진다고 하는 트레이드 오프의 관계에 있다. 이 때문에, 플레이어 제어 모듈(212)은 다음에 표시하는 EP_map() 내의 엔트리 포인트를 선택할 때, index_N_minus1의 값을 평가한다.
즉, 앞으로 감기의 속도가 빠를 때에는, EP_map() 내의 엔트리 포인트의 씨닝 간격이 커지지만, 그때에 index_N_minus1이 큰 것(즉, 주관 화질이 높아지는 것)을 우선적으로 선택한다. 또한, 앞으로 감기의 속도가 느릴 때에는, index_N_minus1이 작은 것도 선택한다.
상기에 설명한 index_N_minus1 결정의 알고리즘에서는, N-th_Ref_picture_copy의 값이 "30"에 가까운 것을 선택하고 있다. 즉, 이와 같은 알고리즘 하에서 작성된 EP_map()에서는, N-th_Ref_picture_copy와 같이 읽어낼 때에 데이터 읽어내기량이 거의 "30" 섹터로 된다. 데이터 읽어내기 속도가 지배적인 경우에는, 일정한 읽어내기 시간인 것이 중요하기 때문에, 이와 같은 엔트리 포인트를 선택하는 방법도 유효하다.
다음으로, 도 64의 플로우차트를 참조하여, 앞으로 감기 시의 엔트리 포인트의 선택 처리에 대해서 설명한다.
플레이어 제어 모듈(212)은, 스텝 S401에서, 앞으로 감기의 모드가 고속 모드인지 혹은 저속 모드인지의 여부를 판정한다. 앞으로 감기가 고속 모드이다라고 판정된 경우, 처리는, 스텝 S402로 진행하고, 저속 모드이다라고 판정된 경우, 처리는, 스텝 S411로 진행한다.
<저속 모드 앞으로 감기의 경우의 선택의 설명>
스텝 S402에서는, 플레이어 제어 모듈(212)은, 앞으로 감기가 저속 모드이기 때문에, 선택하는 엔트리 포인트의 번호(해당 엔트리(N))를 전회의 해당 엔트리로부터 2만큼 인크리먼트한다(해당 엔트리 번호+=2). 그리고, 스텝 S403에서, 플레 이어 제어 모듈(212)은, 해당 엔트리 N, 하나 전의 엔트리(N-1), 하나 후의 엔트리(N+1)로부터 index_N_minus1을 판독한다.
스텝 S404에서는, 플레이어 제어 모듈(212)은, index_N_minus(N), 즉 N번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 0 혹은 1인지의 여부를 판정한다. 스텝 S404에서, 예를 들면, index_N_minus1의 값이 0 혹은 1이었던 경우, 처리는, 스텝 S405로 진행하여, 플레이어 제어 모듈(212)은, N번째의 엔트리 포인트를 선정하고 처리를 종료한다. 한편, 스텝 S404에서, index_N_minus1의 값이 0도 1도 아닌 경우, 처리는, 스텝 S406으로 진행한다.
스텝 S406에서는, 플레이어 제어 모듈(212)은, index_N_minus(N+1), 즉 (N+1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이, 0 혹은 1인지의 여부를 판정한다. 스텝 S406에서, index_N_minus(N+1)이, 0 혹은 1이었던 경우, 처리는, 스텝 S407로 진행하여, 플레이어 제어 모듈(212)은, (N+1)번째의 엔트리 포인트를 선정하고 처리를 종료한다. 한편, 스텝 S406에서, index_N_minus(N+1)이, 0도 1도 아닌 경우, 처리는, 스텝 S408로 진행한다.
스텝 S408에서는, 플레이어 제어 모듈(212)은, index_N_minus(N-1), 즉 (N-1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 0 혹은 1인지의 여부를 판정한다. 스텝 S408에서, index_N_minus1의 값이 0 혹은 1이었던 경우, 처리는, 스텝 S409로 진행하여, 플레이어 제어 모듈(212)은, (N-1)번째의 엔트리 포인트를 선정하고 처리를 종료한다. 0도 1도 아닌 경우에는 스텝 S410으로 진행한다.
스텝 S410에서는 엔트리 N, (N+1), (N-1)의 모든 엔트리 포인트에서 index_N_minus1이 0도 1도 아닌 것이 판명되게 되므로, 플레이어 제어 모듈(212)은, N번째의 엔트리 포인트를 선정하고 처리를 종료한다.
<고속 모드 앞으로 감기의 경우의 선택의 설명>
스텝 S411에서는, 앞으로 감기가 고속 모드이기 때문에, 플레이어 제어 모듈(212)은, 선택하는 엔트리 포인트의 번호(해당 엔트리)(N)를 전회의 해당 엔트리 포인트로부터 5만큼 인크리먼트한다(해당 엔트리 번호+=5). 그리고 스텝 S412에서, 플레이어 제어 모듈(212)은, 해당 엔트리 N, 하나 전의 엔트리 (N-1), 하나 후의 엔트리 (N+1)로부터 index_N_minus1을 판독한다.
스텝 S413에서는, 플레이어 제어 모듈(212)은, index_N_minus(N), 즉 N번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 3 혹은 2인지의 여부를 판정한다. 스텝 S413에서, N번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 3 혹은 2이었던 경우, 처리는, 스텝 S414로 진행하여, 플레이어 제어 모듈(212)은, N번째의 엔트리 포인트를 선정하고 처리를 종료한다. 스텝 S413에서, N번째의 엔트리가 갖는 index_N_minus1의 값이 3도 2도 아닌 경우, 처리는, 스텝 S415로 진행한다.
스텝 S415에서는, 플레이어 제어 모듈(212)은, index_N_minus(N+1), 즉 (N+1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 3 혹은 2인지의 여부를 판정한다. 스텝 S415에서, (N+1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 3 혹은 2이었던 경우, 처리는, 스텝 S416으로 진행하여, 플레이어 제어 모듈(212)은, (N+1)번째의 엔트리 포인트를 선정하고 처리를 종료한다. 한편, 스텝 S415에서, (N+1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이, 3도 2도 아 닌 경우, 처리는, 스텝 S417로 진행한다.
스텝 S417에서는, 플레이어 제어 모듈(212)은, index_N_minus(N-1), 즉 (N-1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 3 혹은 2인지의 여부를 판정한다. 스텝 S417에서, (N-1)번째의 엔트리 포인트가 갖는 index_N_minus1의 값이 3 혹은 2이었던 경우, 처리는, 스텝 S418로 진행하여, 플레이어 제어 모듈(212)은, (N-1)번째의 엔트리 포인트를 선정하고 처리를 종료한다. 3도 2도 아닌 경우에는 스텝 S419로 진행한다.
스텝 S419에서는 N, (N+1), (N-1)의 모든 엔트리에서 index_N_minus1이 3도 2도 아닌 것이 판명되게 되므로, 플레이어 제어 모듈(212)은, N번째의 엔트리 포인트를 선정하고 처리를 종료한다.
즉, 앞으로 감기의 속도가 빠를 때에는, EP_map() 내의 엔트리 포인트의 씨닝 간격이 커지지만, 그 때에 index_N_minus1이 큰 것(즉, 주관 화질이 높아지는 것)을 우선적으로 선택한다. 또한, 앞으로 감기의 속도가 느릴 때에는, index_N_minus1이 작은 것도 선택한다.
이상의 처리에 의해, 주관 화질을 저하시키지 않고, 고속으로 앞으로 감기 재생을 실현시키도록 하는 것이 가능하게 된다. 또한, 저속의 앞으로 감기 재생에서는, 보다 많은 참조 화상을 이용하여 앞으로 감기 재생시키는 것이 가능해지므로, 재생 화상의 화질의 저감을 억제하는 것이 가능하게 된다.
이상의 예에서는, 재생 처리에서, 읽어내어지는 엔트리 포인트의 정보는, 항상 일정한 것이 전제로 되지만, 이와 같은 경우, 처리 능력이 높은 디스크 재생 장 치에서는, 많은 엔트리 포인트가 읽어내어짐으로써 재생 화상을 향상시키는 것이 가능하게 되지만, 한편, 처리 능력이 낮은 디스크 재생 장치에서 읽어들이는 엔트리 포인트의 정보를 대량으로 하면, 처리 속도가 느려지게 될 우려가 있다. 따라서, 읽어들이는 엔트리 포인트의 정보에 프라이어리티를 설정하고, 높은 처리 능력을 갖는 디스크 재생 장치에서는, 모든 엔트리 포인트의 정보를 이용하도록 하고, 반대로, 처리 능력이 낮은 디스크 재생 장치에서는, 프라이어리티가 높은 엔트리 포인트만을 읽어내어 처리하도록 하여도 된다.
도 65는, 엔트리 포인트에 프라이어리티를 설정하도록 한, 디스크 기록 장치의 기능을 설명하는 기능 블록도이다. 또한, 도 65의 디스크 기록 장치에서, 도 61의 디스크 기록 장치의 기능과 동일한 기능에 대해서는, 동일한 부호를 붙이고 있어, 그 설명은, 적절히 생략하는 것으로 한다.
서브타이틀 인코더(443)는, 자막 소재 서버(442)로부터 자막의 소재를 판독하고, 압축 부호화하여 자막 데이터 서버(444)에 써넣는다. 자막 데이터는 비디오 데이터나 오디오 데이터와는 달리, 시간축 상에 간헐적으로 존재하고 있다. 이 때문에, 자막 소재 서버(442)에 기록된 자막 소재 및 자막 데이터 서버(444)에 기록된 자막 데이터의 각각의 표시 개시 시각 및 표시 duration은 자막 타이밍 정보(445)에 준비된다.
다중화기(441)는, 도 61의 다중화기(421)와 기본적으로는 마찬가지의 기능을 갖지만, 또한, 자막 데이터와 자막 타이밍 정보를 다중화한다. 즉, 다중화기(441)는, 입력된 MPEG2 비디오 스트림과 MPEG2 오디오 스트림, 및 자막 데이터 서 버(444)로부터 공급된 자막 데이터와 자막 타이밍 정보(445)를 읽어들여, 전술한 도 18A 및 도 18B 내지 도 27을 이용하여 설명한 바와 같이 시분할 다중화하고 있다.
다중화기(441)는, 스트림 중의 인트라 픽쳐를 선택하고, 약 1초에 2회 정도의 빈도로 도 23에 도시하는 private_stream_2의 PES_packet()을 삽입한다. 여기서 private_stream_2의 PES_packet()은, 다른 픽쳐를 참조하지 않아도 디코드 가능한 비디오의 인트라 픽쳐가 직후에 놓여져 있는 것을 나타내고 있다. 이 때, 해당 인트라 픽쳐에는 타임 스탬프(PTS/DTS)가 반드시 부여된다.
또한, 자막 데이터의 모든 액세스 유닛에는 타임 스탬프가 반드시 부여되어 있다.
또한, 이 단계에서는, 도 26에서 설명한 1stRef_picture, 2ndRef_picture, 3rdRef_picture, 4thRef_picture의 필드에는 데이터가 기록되어 있지 않다. 또한, 도시되어 있지 않지만, 서브타이틀 스트림을 다중화기(441)에 입력하여, 비디오 스트림, 오디오 스트림과 함께 다중화하여도 된다.
다중화기(441)는, 다중화 스트림을 FIFO(422)를 경유하여 RAPI 재기입기(424)에 공급함과 함께, RAPI 정보 추출기(423)에도 동시에 공급한다. RAPI 정보 추출기(423)는, 다중화 스트림에 다중화된 비디오 스트림의 정보와 자막 스트림의 정보를 추출하여 기억한다. 즉, RAPI 정보 추출기(423)는, 비디오 스트림에 관해서는 private_stream_2의 PES_packet()의 개시 위치와, private_stream_2의 PES_packet() 직후에 놓여져 있는 인트라 픽쳐가 갖는 타임 스탬프(PTS) 값, 및 해 당 인트라 픽쳐와, 그것에 계속되는 2매째, 3매째, 4매째의 참조 화상의 종료 위치를 검출하고, 기억한다. 또한, 자막 스트림에 관해서는, 모든 자막 액세스 유닛의 개시 위치와 타임 스탬프를 검출하고, 기억한다.
컨트롤러(446)는 입력된 정보를 사용하여, 예를 들면, 도 66에서 도시되는 바와 같은 EP_map()을 작성한다. 여기서 작성하는 EP_map()은 비디오 스트림과 자막 스트림에 관한 정보가 포함되어 있는 것으로 한다. 비디오에 관한 EP_map()의 주된 정보는, 스트림 중에 놓여진 모든 RAPI, 즉 private_stream_2의 PES_packet()의 위치와 직후의 인트라 픽쳐의 타임 스탬프이며, 이들 정보는 RAPI 정보 추출기(423)로부터 컨트롤러(446)에 입력한 정보로 작성할 수 있다. 또한, 자막에 관한 EP_map()의 주된 정보는, 자막 액세스 유닛의 위치와 타임 스탬프이며, 이들 정보도 RAPI 정보 추출기(423)로부터 컨트롤러(446)에 입력한 정보로 작성할 수 있다.
컨트롤러(446)는 RAPI 정보 추출기(423)로부터 입력된 데이터로부터, EP_map()의 정보 중, 아직 확정되지 않은 후술하는 priority_flag를 작성한다. 즉, 모든 비디오의 엔트리 포인트(RAPI의 엔트리 포인트) 및 자막 액세스 유닛에 대하여 그 타임 스탬프를 평가하여(후술함) priority_flag를 설정한다. 컨트롤러(446)에는 이를 위해서 챕터·씬 체인지 정보(447)가 입력되어 있다.
[EP_map의 설명]
여기서, 도 66을 참조하여, 파일에 프라이어리티를 설정할 때의 EP_map에 대해서 설명한다. 도 66에서 도시되는 바와 같이, number_of_EP_entries 후에는, 그 직전의 stream_id와 private_stream_id로 특정되는 엘리멘터리 스트림의 디코드 개시 가능점의 정보로서의 priority_flag(2비트)와 reserved_for_future_use(14비트), 또한 PTS_EP_start(32비트)와 RPN_EP_start(32비트)의 세트가, number_of_EP_entries가 나타내는 수만큼 반복하여 배치된다.
priority_flag는, 도 67에서 도시되는 바와 같은 의미를 갖는다. 즉, 비디오 스트림의 엔트리에서는, priority_flag의 값이 3인 경우, 그 엔트리가 챕터 선두에 대응하고 있는 것을 나타낸다. 또한, priority_flag의 값이 2인 경우, 상기 이외에서 1분 간격의 중요한 씬 체인지에 해당하는 엔트리인 것을 나타낸다. 또 priority_flag의 값이 1인 경우에는, 상기 이외에서 씬 체인지에 해당하는 3초 간격의 엔트리인 것을 나타낸다. 또한, 그 이외의 엔트리는 모두 priority_flag의 값이 0인 것으로 한다.
서브타이틀 스트림에 대응하는 엔트리도 마찬가지로, priority_flag의 값이 3인 경우, 그 엔트리가 챕터 선두에 대응하고 있는 것을 나타낸다. 또한, priority_flag의 값이 2인 경우, 상기 이외에서 중요한 씬 체인지에 해당하는 엔트리인 것을 나타낸다. 또한 priority_flag의 값이 1인 경우, 상기 이외에서 씬 체인지에 해당하는 엔트리인 것을 나타낸다. 또한, 그 이외의 엔트리는 모두 priority_flag의 값이 0인 것으로 한다.
예를 들면, 이 클립이 2시간의 영화이며, 1초에 2회의 랜덤 액세스 포인트가 존재하면, 엔트리수는 전체 14400(=2시간×3600초×2회)으로 된다. 또한, 챕터수가, 약 수십인 것으로 한 경우, priority_flag=3의 엔트리는 수십개의 동수로 된 다. 중요한 씬 체인지(priority_flag=2)와 그 밖의 씬 체인지(priority_flag=1)의 수는 콘텐츠에 의존하기 때문에 일률적으로는 말할 수 없지만, priority_flag=3 혹은 2의 엔트리는 약 200, priority_flag=3 혹은 2 혹은 1의 엔트리는 약 2400, 그 밖에 모두를 포함시키면 전부해서 14400으로 된다. 여기서는 예를 들면 prioiry_flag=2인 것과 =1인 것의 총계가 1000인 것으로 한다. 이 경우, priority_flag=3, 2, 1의 엔트리만을 읽어들이는 것으로 하면, 전부를 읽어들인 경우에 비해서 약 1000/14,400=14분의 1의 메모리량으로 된다. 또한 이 예에서는 하나의 엔트리가 10바이트이므로 1개의 비디오 스트림에 대하여, 10바이트×(14400-1000)=120134킬로바이트의 메모리를 절약하는 것이 가능하게 된다.
또한, 자막에 관해서는 2시간의 영화에 대하여 1000부터 2000의 자막이 존재한다고 말해지고 있고, 이에 대하여 챕터는 수십이므로, priority_flag=3의 엔트리만큼을 읽어들이는 것으로 하면 수십을 1000 혹은 2000으로 나누어 수십분의 1의 메모리로 절약하는 것이 가능하게 된다. 자막 스트림은 비디오 스트림에 비해서 개수가 많아지기 때문에, 삭감 효과도 충분하다.
또한, 이 예에서는 플래그를 3, 2, 1, 0의 값으로 나타내고 있지만, 각각을 비트로 표현하고, 대응하는 비트를 1로 세트한다고 하는 방법도 생각된다. 즉, 이 필드를 3비트로 하고, 최상위 비트가 1인 경우에는 챕터 선두인 것을 나타내고, 다음 비트가 1인 경우에는 1분 간격의 엔트리인 것을 나타내고, 최하위 비트가 1인 경우에는 5초 간격의 엔트리인 것을 나타내고, 모든 비트가 0이면, 그들 3개의 카테고리에 포함되지 않는다고 정의하는 것도 생각된다.
서브타이틀 스트림에 대응하는 엔트리에서는, priority_flag의 값이 1인 경우에는 그 엔트리가 챕터 선두에 대응하고 있는 것을 나타낸다. 그 이외의 엔트리에서는 모두 priority_flag의 값이 0인 것으로 한다.
다음으로, 도 68의 플로우차트를 참조하여, priority_flag 설정 처리에 대해서 설명한다.
스텝 S441에서, 컨트롤러(446)는, 비디오의 엔트리에 대하여, 비디오의 챕터의 선두 위치인지의 여부, 즉, 평가 중인 엔트리가 챕터·씬 체인지 정보(447)에 있는 챕터의 시각에 해당하고 있는지의 여부를 판정한다. 여기서 해당하고 있다는 것은 차분이 0으로 정의된다. 예를 들면, 챕터의 시각에 해당하고 있는 경우, 스텝 S442에서, 컨트롤러(446)는, priority_flag=3으로서 설정하고 출력 서버(426)에 기억시킨다.
한편, 스텝 S441에서, 비디오의 챕터의 선두 위치가 아니라고 판정된 경우, 스텝 S443에서, 컨트롤러(446)는, 비디오의 중요한 씬 체인지의 위치인지의 여부, 즉, 다음에 평가 중인 엔트리가 챕터·씬 체인지 정보(447)에 있는 「중요한 씬 체인지」 선두로부터 1분 간격의 위치에 해당하는지의 여부를 판정한다. 스텝 S443에서, 예를 들면, 「중요한 씬 체인지」 선두로부터 1분 간격의 위치에 해당하고 있는 경우, 스텝 S444에서, 컨트롤러(446)는, priority_flag=2로 설정한다.
스텝 S443에서, 중요한 씬 체인지가 아니라고 판정된 경우, 스텝 S445에서, 컨트롤러(446)는, 비디오의 통상의 씬 체인지인지의 여부, 즉, 다음에 평가 중인 엔트리가 챕터·씬 체인지 정보(447)에 있는 「씬 체인지」의 선두로부터 3초 간격 의 위치에 해당하는지의 여부를 판정한다. 스텝 S445에서, 예를 들면, 「씬 체인지」의 선두로부터 3초 간격의 위치에 해당하고 있는 경우, 스텝 S446에서, 컨트롤러(446)는, priority_flag=1로 설정한다.
스텝 S445에서, 통상의 씬 체인지가 아니라고 판정된 경우, 즉, 어느 씬 체인지에도 해당하지 않는다고 판정된 경우, 스텝 S447에서, 컨트롤러(446)는, priority_flag=0으로 설정한다.
스텝 S448에서, 컨트롤러(446)는, 모든 비디오의 모든 엔트리에 대해서 처리가 종료되었는지의 여부를 판정하여, 종료되지 않았다고 판정된 경우, 처리는, 스텝 S441로 되돌아가, 그 이후의 처리가 반복된다. 즉, 비디오의 엔트리에 대해서 모든 priority_flag가 설정될 때까지, 스텝 S441 내지 S448의 처리가 반복된다.
그리고, 스텝 S448에서, 모든 처리가 종료되었다고 판정된 경우, 즉, 비디오의 모든 엔트리에 대한 처리가 종료되었다고 판정된 경우, 그 처리는, 스텝 S449로 진행한다.
스텝 S449에서, 컨트롤러(446)는, 자막에 관해서, 엔트리가 챕터 선두 위치에 해당하는지의 여부, 즉, 평가 중인 엔트리가 챕터·씬 체인지 정보(447)에 있는 챕터의 시각에 해당하고 있는지의 여부를 판정한다. 스텝 S449에서, 엔트리가 챕터의 시각에 해당하고 있는 경우, 스텝 S450에서, 컨트롤러(446)는, priority_flag=3으로 설정한다.
한편, 스텝 S449에서, 자막의 챕터의 선두 위치가 아니라고 판정된 경우, 스텝 S451에서, 컨트롤러(446)는, 자막의 중요한 씬 체인지의 위치인지의 여부, 즉, 다음에 평가 중인 엔트리가 챕터·씬 체인지 정보(447)에 있는 「중요한 씬 체인지」 선두로부터 1분 간격의 위치에 해당하는지의 여부를 판정한다. 스텝 S451에서, 예를 들면, 「중요한 씬 체인지」 선두로부터 1분 간격의 위치에 해당하고 있는 경우, 스텝 S452에서, 컨트롤러(446)는, priority_flag=2로 설정한다.
스텝 S451에서, 중요한 씬 체인지가 아니라고 판정된 경우, 스텝 S453에서, 컨트롤러(446)는, 자막의 통상의 씬 체인지인지의 여부, 즉, 다음에 평가 중인 엔트리가 챕터·씬 체인지 정보(447)에 있는 「씬 체인지」의 선두로부터 3초 간격의 위치에 해당하는지의 여부를 판정한다. 스텝 S453에서, 예를 들면, 「씬 체인지」의 선두로부터 3초 간격의 위치에 해당하고 있는 경우, 스텝 S454에서, 컨트롤러(446)는, priority_flag=1로 설정한다.
스텝 S453에서, 통상의 씬 체인지가 아니라고 판정된 경우, 즉, 어느 씬 체인지에도 해당하지 않는다고 판정된 경우, 스텝 S455에서, 컨트롤러(446)는, priority_flag=0으로 설정한다.
스텝 S456에서, 컨트롤러(446)는, 자막의 모든 엔트리에 대해서 처리가 종료되었는지의 여부를 판정하여, 종료되지 않았다고 판정된 경우, 처리는, 스텝 S449로 되돌아가서, 그 이후의 처리가 반복된다. 즉, 자막의 엔트리에 대해서 모든 priority_flag가 설정될 때까지, 스텝 S449 내지 S456의 처리가 반복되고, 스텝 S456에서, 자막의 모든 엔트리에 대해서 처리가 종료되었다고 판정되면, 컨트롤러(446)는, 도 66의 구문에 따른 EP_map()의 데이터를 출력 서버(426)에 대하여 출력한다.
[재생측의 동작: EP_map()의 씨닝]
이상과 같이 설정된 priority_flag에 기초하여, 디스크 재생 장치는, 메모리(예를 들면, 도 1의 메모리(113))의 크기에 의해, EP_map()을 씨닝한다. 즉, 코스트를 삭감하기 위해서 기능을 줄이고 있는 디스크 재생 장치에서는, 높은 값의 priority_flag를 갖는 엔트리만을 메모리에 남긴다. 물론, 메모리의 용량이, EP_map() 전체를 유지할 수 있을 만큼 확보하고 있는 기기에서는 이러한 작업을 반드시 행할 필요는 없다.
예를 들면, 도 33의 플로우차트에서의 스텝 S106의 처리에서, 비디오에 관해서는 priority_flag=1 이상의 엔트리를 메모리에 유지하고, 자막에 관해서는 priority_flag=1 이상의 엔트리를 메모리에 유지하는 것으로 한다. 이 경우, EP_map()의 읽어내기 시에, stream_id와 private_stream_id의 값에 의해, 플레이어 제어 모듈(212)은 스트림의 종류가 비디오이었을 때, priority_flag의 값이 3, 2, 혹은 1인 엔트리는 메모리에 읽어들이고, priority_flag의 값이 0인 엔트리는 메모리에 읽어들이지 않는다. 또한 스트림의 종류가 자막이었던 경우, prioirty_flag=3 및 2의 엔트리는 읽어들이고, priority_flag의 값이 1, 0인 엔트리는 읽고 나서 내버린다.
이상의 처리를 행함으로써, 1개의 비디오 스트림에 대한 EP_map을 위해서 필요한 메모리의 용량은, 1/6 내지 1/10 정도로 하는 것이 가능하게 된다. 또한, 1개의 자막 스트림에 대한 EP_map을 위해서 필요한 메모리량은 약 수십분의 1 정도로 하는 것이 가능하게 된다. 결과적으로, 저코스트의 디스크 재생 장치에서도, 메모리의 용량에 따라 엔트리를 기억시킬 수 있어, 효율적인 재생 처리를 실현시키는 것이 가능하게 된다.
또한, 여기서는 priority_flag=3을 챕터 선두라고 의미짓고 있지만, 챕터 선두 및 중요한 씬 체인지 포인트 등 임의의 의미로 정의하는 것이 가능하다.
또한, 본 실시 형태에서는, 전술한 일련의 처리를, 소프트웨어에 의해 행하는 것으로 했지만, 전술한 일련의 처리는, 전용의 하드웨어에 의해 행할 수도 있다.
또한, 본 실시 형태에서는, 비디오 디코더(116)(도 1) 및 비디오 인코더(403)(도 60)로서, 하드웨어 디코더를 채용하는 것으로 했지만, 비디오 디코더(116) 및 비디오 인코더(403)(도 60)로서는, 소프트웨어 디코더를 채용하는 것도 가능하다. 오디오 디코더(117)(도 1) 및 오디오 인코더(404)(도 60)에 대해서도, 마찬가지이다.
또한, 본 실시 형태에서는, 자막 디코더로서, 소프트웨어 디코더를 채용하는 것으로 했지만, 자막 디코더로서는, 하드웨어 디코더를 채용하는 것도 가능하다.

Claims (14)

  1. 스트림 데이터의 엔트리 포인트를 인식하도록 구성된 인식부와,
    상기 인식부의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하도록 구성된 설정부와,
    상기 스트림 데이터와 함께, 상기 설정부에 의해 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하도록 구성된 기록부
    를 포함하는 데이터 기록 장치.
  2. 제1항에 있어서,
    상기 스트림 데이터는, 비디오 스트림 데이터, 또는 서브타이틀 스트림 데이터인 데이터 기록 장치.
  3. 제1항에 있어서,
    상기 설정부는, 상기 엔트리 포인트가, 챕터의 선두인지의 여부, 및 씬 체인지의 중요도에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 데이터 기록 장치.
  4. 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝과,
    상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝과,
    상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝
    을 포함하는 데이터 기록 방법.
  5. 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝과,
    상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝과,
    상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝
    을 포함하는 처리를 컴퓨터에 실행시키는 프로그램.
  6. 스트림 데이터의 엔트리 포인트를 인식하는 인식 스텝과,
    상기 인식 스텝의 처리의 인식 결과에 따라, 상기 엔트리 포인트마다 우선 순위를 설정하는 설정 스텝과,
    상기 스트림 데이터와 함께, 상기 설정 스텝의 처리에서 설정된 상기 엔트리 포인트마다의 우선 순위를 데이터 기록 매체에 기록하는 기록 스텝
    을 포함하는 프로그램이 기록되어 있는 프로그램 기록 매체.
  7. 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내도록 구성된 읽어내기부와,
    상기 읽어내기부에 의해 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하도록 구성된 재생부
    를 포함하는 데이터 처리 장치.
  8. 제7항에 있어서,
    상기 스트림 데이터는, 비디오 스트림 데이터, 또는 서브타이틀 스트림 데이터인 데이터 처리 장치.
  9. 제7항에 있어서,
    상기 우선 순위는, 엔트리 포인트가 챕터의 선두인지의 여부, 및 씬 체인지이 중요도에 따라 설정되어 있는 데이터 처리 장치.
  10. 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝과,
    상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝
    을 포함하는 데이터 처리 방법.
  11. 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝과,
    상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝
    을 포함하는 처리를 컴퓨터에 실행시키는 프로그램.
  12. 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터를 데이터 기록 매체로부터 읽어내는 읽어내기 스텝과,
    상기 읽어내기 스텝의 처리에서 읽어내어진 상기 스트림 데이터 중, 소정의 우선 순위 이상의 엔트리 포인트의 스트림 데이터만을 재생하는 재생 스텝
    을 포함하는 프로그램이 기록되어 있는 프로그램 기록 매체.
  13. 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터가 기록되어 있는 데이터 기록 매체.
  14. 스트림 데이터와 함께, 상기 스트림 데이터에서의 엔트리 포인트마다의 우선 순위를 포함하는 데이터 구조.
KR1020077014920A 2004-12-02 2005-11-17 데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체,데이터 기록 매체, 및 데이터 구조 KR20070086808A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2004350488A JP2006164337A (ja) 2004-12-02 2004-12-02 データ処理装置およびデータ処理方法、プログラムおよびプログラム記録媒体、並びにデータ記録媒体
JPJP-P-2004-00350488 2004-12-02

Publications (1)

Publication Number Publication Date
KR20070086808A true KR20070086808A (ko) 2007-08-27

Family

ID=36564953

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077014920A KR20070086808A (ko) 2004-12-02 2005-11-17 데이터 기록 장치 및 데이터 기록 방법, 데이터 처리 장치및 데이터 처리 방법, 프로그램 및 프로그램 기록 매체,데이터 기록 매체, 및 데이터 구조

Country Status (13)

Country Link
US (1) US8160422B2 (ko)
EP (1) EP1818933B1 (ko)
JP (1) JP2006164337A (ko)
KR (1) KR20070086808A (ko)
CN (1) CN101111896B (ko)
AT (1) ATE521066T1 (ko)
BR (1) BRPI0518766A2 (ko)
CA (1) CA2589396C (ko)
HK (1) HK1106608A1 (ko)
MX (1) MX2007006314A (ko)
RU (1) RU2367037C2 (ko)
TW (1) TW200638352A (ko)
WO (1) WO2006059519A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060159432A1 (en) 2005-01-14 2006-07-20 Citrix Systems, Inc. System and methods for automatic time-warped playback in rendering a recorded computer session
US8935316B2 (en) * 2005-01-14 2015-01-13 Citrix Systems, Inc. Methods and systems for in-session playback on a local machine of remotely-stored and real time presentation layer protocol data
JP4162691B2 (ja) * 2006-09-27 2008-10-08 株式会社東芝 番組構造化装置、番組構造化方法およびプログラム
JP4690281B2 (ja) * 2006-09-29 2011-06-01 Necパーソナルプロダクツ株式会社 情報処理装置
KR101336243B1 (ko) * 2007-05-10 2013-12-03 삼성전자주식회사 부가 정보가 삽입된 영상 데이터의 전송 스트림 구조,송수신 방법 및 장치
US8117546B2 (en) * 2007-08-26 2012-02-14 Cyberlink Corp. Method and related display device for displaying pictures in digital picture slide show
JP2011223326A (ja) * 2010-04-09 2011-11-04 Sony Corp コンテンツ処理装置および方法、並びにプログラム
DE102010029030A1 (de) * 2010-05-17 2012-03-01 Bayerische Motoren Werke Aktiengesellschaft Verfahren und Vorrichtung zur Verarbeitung von Daten in einem Fahrzeug
EP2416318B1 (en) * 2010-08-04 2016-10-12 Nero Ag Multi-language buffering during media playback
US8615159B2 (en) * 2011-09-20 2013-12-24 Citrix Systems, Inc. Methods and systems for cataloging text in a recorded session
BR112014016920A8 (pt) * 2012-01-09 2017-07-04 Thomson Licensing criação e gerenciamento de sub-registros
JP2013157061A (ja) * 2012-01-31 2013-08-15 Sony Corp 情報処理装置、情報処理方法、及びプログラム
CN107329156A (zh) * 2017-06-05 2017-11-07 千寻位置网络有限公司 一种卫星数据的处理方法及系统、定位终端、存储器
CN109144444B (zh) * 2018-07-24 2021-11-05 深圳微盐传媒科技有限公司 一种人物信息展示方法和装置
CN113597768A (zh) * 2019-01-28 2021-11-02 Op方案有限责任公司 扩展长期参考图片保留的在线和离线选择
US20220272284A1 (en) * 2021-02-25 2022-08-25 Rovi Guides, Inc. Systems and methods for improved video captions
CN117037433B (zh) * 2023-09-06 2024-03-05 北京诺成新科技有限公司 一种基于云平台的燃气监测控制系统及方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3230858B2 (ja) 1992-11-26 2001-11-19 松下電器産業株式会社 動画像の優先度自動選択方法および動画像ダイジェスト自動表示装置
JPH097350A (ja) 1995-06-20 1997-01-10 Matsushita Electric Ind Co Ltd 再生プレーヤー
US5859821A (en) * 1995-11-02 1999-01-12 Sony Corporation Record medium with managed digest portions of programs, reproducing apparatus thereof, and reproducing method thereof
JP3787912B2 (ja) * 1996-08-26 2006-06-21 ソニー株式会社 再生装置、再生方法および記録方法
JP3585400B2 (ja) * 1999-08-05 2004-11-04 シャープ株式会社 動画像編集拾い見装置
JP4682434B2 (ja) 2000-04-21 2011-05-11 ソニー株式会社 情報処理装置および方法、記録媒体、並びにプログラム
JP4015815B2 (ja) 2001-03-19 2007-11-28 株式会社東芝 プレイリスト編集機能付き情報記録再生方法及び装置
JP2003123445A (ja) 2001-10-05 2003-04-25 Sony Corp 信号処理装置および方法、記録媒体、並びにプログラム
JP3619249B2 (ja) 2004-03-24 2005-02-09 株式会社東芝 デジタル情報媒体、デジタル情報記録方法、デジタル情報再生方法、およびデジタル情報再生装置

Also Published As

Publication number Publication date
WO2006059519A1 (ja) 2006-06-08
EP1818933B1 (en) 2011-08-17
CA2589396C (en) 2013-01-08
EP1818933A4 (en) 2009-07-29
TWI364753B (ko) 2012-05-21
CN101111896B (zh) 2010-12-01
CN101111896A (zh) 2008-01-23
RU2367037C2 (ru) 2009-09-10
BRPI0518766A2 (pt) 2008-12-09
HK1106608A1 (en) 2008-03-14
JP2006164337A (ja) 2006-06-22
TW200638352A (en) 2006-11-01
US20090169183A1 (en) 2009-07-02
MX2007006314A (es) 2007-07-18
CA2589396A1 (en) 2006-06-08
RU2007120507A (ru) 2008-12-10
ATE521066T1 (de) 2011-09-15
US8160422B2 (en) 2012-04-17
EP1818933A1 (en) 2007-08-15

Similar Documents

Publication Publication Date Title
KR101217351B1 (ko) 데이터 처리 장치 및 데이터 처리 방법과 프로그램 기록 매체
EP1818933B1 (en) DVD Recording device for recording for each scene change a priority level as metadata for both subtitles streams and data stream.
KR101104507B1 (ko) 데이터 처리 장치 및 데이터 처리 방법, 프로그램 기록 매체, 데이터 기록 매체
KR101118430B1 (ko) 데이터 처리 장치, 데이터 처리 방법, 프로그램 기록 매체, 및 데이터 기록 매체
CA2569794A1 (en) Data processing apparatus, data processing method, program, program recording medium, data recording medium, and data structure
CA2588198C (en) Data processing apparatus, data processing method, program, program record medium, data record medium, and data structure
KR101118823B1 (ko) 데이터 처리 장치, 데이터 처리 방법 및 기록 매체
KR20070028410A (ko) 데이터 처리 장치 및 데이터 처리 방법, 프로그램 및프로그램 기록 매체, 데이터 기록 매체 및 데이터 구조
KR101154721B1 (ko) 데이터 처리 장치, 데이터 처리 방법 및 기록 매체
JP4586429B2 (ja) データ処理装置およびデータ処理方法、並びに、プログラムおよびプログラム記録媒体
KR101169488B1 (ko) 데이터 처리 장치, 데이터 처리 방법, 프로그램 기록 매체 및 데이터 기록 매체
KR20070020503A (ko) 데이터 처리 장치 및 데이터 처리 방법, 프로그램 및프로그램 기록 매체, 데이터 기록 매체, 및, 데이터 구조

Legal Events

Date Code Title Description
A201 Request for examination
E601 Decision to refuse application