KR20130006524A - 비디오 디코더 에러 핸들링 - Google Patents

비디오 디코더 에러 핸들링 Download PDF

Info

Publication number
KR20130006524A
KR20130006524A KR1020127031318A KR20127031318A KR20130006524A KR 20130006524 A KR20130006524 A KR 20130006524A KR 1020127031318 A KR1020127031318 A KR 1020127031318A KR 20127031318 A KR20127031318 A KR 20127031318A KR 20130006524 A KR20130006524 A KR 20130006524A
Authority
KR
South Korea
Prior art keywords
error
slice
frame
decoding
video
Prior art date
Application number
KR1020127031318A
Other languages
English (en)
Other versions
KR101540506B1 (ko
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 KR20130006524A publication Critical patent/KR20130006524A/ko
Application granted granted Critical
Publication of KR101540506B1 publication Critical patent/KR101540506B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/65Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using error resilience
    • H04N19/68Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using error resilience involving the insertion of resynchronisation markers into the bitstream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/174Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/573Motion compensation with multiple frame prediction using two or more reference frames in a given prediction direction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/89Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving methods or arrangements for detection of transmission errors at the decoder
    • H04N19/895Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving methods or arrangements for detection of transmission errors at the decoder in combination with error concealment

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

비디오 디코더는 순차 에러 핸들링 프로세스를 수행하여 비디오 데이터 유닛의 손상된 데이터 세그먼트 내에 에러를 은닉한다. 디코더는 순차적으로 현재의 데이터 유닛을 디코딩한다. 에러의 검출 시에, 디코더는 에러 플래그를 설정하고 다음의 유닛의 시작에서 디코딩을 재동기화한다. 에러 플래그가 설정되면, 비디오 디코더는 나중의 유닛의 시작에 기초하여 손상된 데이터 세그먼트의 끝을 식별한다. 디코더는 현재 유닛의 시작과 손상된 데이터 세그먼트의 끝 사이에 데이터를 은닉한다. 에러 플래그가 설정되지 않으면, 디코더는 현재 유닛에 대해 에러 핸들링 및 은닉을 수행하지 않고 현재 유닛의 나머지를 디코딩하고 다음의 이용가능한 유닛을 디코딩하는 것을 진행할 수도 있다. 디코더는 또한 손실된 비디오 데이터 유닛에 의해 야기된 참조 유닛 미스매치를 처리할 수도 있다.

Description

비디오 디코더 에러 핸들링{VIDEO DECODER ERROR HANDLING}
본 출원은 2008년 2월 26일에 출원된 미국 가출원 제 61/031,438호의 우선권을 주장하며, 이의 전체 내용은 여기에 참조로서 통합된다.
기술분야
본 개시물은 디지털 비디오 디코딩에 관한 것이고, 더 상세하게는, 비디오 디코딩 에러를 핸들링하는 기술에 관한 것이다.
수개의 비디오 인코딩 및 디코딩 기술이 디지털 비디오 데이터를 인코딩 및 디코딩하기 위해 개발되어 왔다. MPEG (Moving Picture Experts Group), 예를 들어, MPEG-1, MPEG-2, 및 MPEG-4 를 포함하는 수개의 기술이 개발되어 왔다. 다른 예는 ITU (International Telecommunication Union)-T H.263 표준, 및 ITU-T H.264 표준 및 그 대응물, ISO/IEC MPEG-4, 파트 10, 즉, AVC (Advanced Video Coding) 를 포함한다. 이들 비디오 표준은 데이터량을 감소시키는 압축된 방식으로 데이터를 인코딩함으로써 비디오 데이터의 효율적인 송신 및 저장을 지원한다.
소스 디바이스는 상기 비디오 인코딩 기술 중 하나를 채용하여 디지털 비디오 데이터를 인코딩한다. 소스 디바이스는 인코딩된 비디오 데이터를 아카이브하고/하거나 송신 채널을 통해 수신지 디바이스로 인코딩된 비디오 데이터를 송신한다. 수신지 디바이스는 인코딩된 비디오 데이터를 수신하고 수신된 비디오 데이터를 디코딩하여, 재생을 위해 오리지널 디지털 비디오 데이터를 복구한다. 에러 경향이 있는 채널을 통한 송신 중에 비디오 데이터가 손실 또는 손상되어, 디코딩 에러를 초래할 수도 있다. 에러 강건성 (robustness) 는 비디오 방송 및 비디오 텔레포니와 같은 다양한 애플리케이션에 있어서 중요하다.
비디오 디코더는 수신된 비트스트림에서 에러를 검출하여 안정한 비디오 디코더를 지원하여야 한다. 또한, 비디오 디코더는 에러 핸들링도 수행하여 품질에 대한 에러의 영향을 감소시켜야 한다. 디코딩 에러가 검출되는 경우, 비디오 디코더는 디코딩 동기화가 재확립될 수 있을 때까지 손상된 데이터를 은닉할 수도 있다. 적당한 에러 핸들링 없이는, 디코더는 정확한 데이터를 누락하거나 신뢰성 없는 복원된 데이터를 디스플레이할 수도 있는데, 이들 각각은 시각 품질을 열화시킬 수 있다. 그러나, 에러 핸들링은 특히 하드웨어로 구현되는 경우에 계산상 인텐시브하고 과도한 전력을 소비할 수 있다.
개요
본 개시물은, 인코딩된 비디오 데이터를 디지털적으로 디코딩하는 경우에 발생하는 디코딩 에러를 효율적으로 핸들링하는 기술에 관한 것이다. 비디오 데이터는 프레임 또는 슬라이스와 같은 비디오 데이터 유닛으로 조직화될 수도 있다. 비디오 데이터 유닛은 가변 사이즈를 가질 수도 있고, 매크로블록 또는 더 작은 블록과 같은 비디오 블록을 포함할 수도 있다. 비디오 디코더는 순차 에러 핸들링 프로세스를 수행하여, 하나 이상의 비디오 데이터 유닛의 손상된 데이터 세그먼트 내에서 에러를 검출 및 은닉할 수도 있다.
디코더는 프레임 또는 슬라이스와 같은 현재 비디오 데이터 유닛을 비디오 데이터 유닛의 시작부터 순차적으로 디코딩한다. 현재 비디오 데이터 유닛에서 에러의 검출 시에, 디코더는 에러 플래그를 설정하고, 비트스트림에서의 다음의 이용가능한 비디오 데이터 유닛의 시작에서 디코딩을 재동기화할 수도 있다. 에러 플래그는 현재 데이터 유닛에서의 디코딩된 데이터의 적어도 일부가 디코딩 에러를 생성하였고 손상되었다고 표시한다. 에러 플래그가 설정되면, 비디오 디코더는 나중의 비디오 데이터 유닛의 시작에 기초하여 손상된 데이터 세그먼트의 끝을 식별한다.
디코더는 현재 비디오 데이터 유닛의 시작과 손상된 데이터 세그먼트의 끝 사이에 데이터를 은닉한다. 이러한 방식으로, 디코더는 정확한 데이터의 손실 및 에러 있는 데이터의 디스플레이를 피할 수도 있다. 에러 플래그가 설정되지 않으면 (에러 없음을 표시함), 디코더는 현재 비디오 데이터 유닛에 대한 에러 핸들링 및 은닉을 수행하지 않고, 현재 비디오 데이터 유닛의 나머지를 디코딩하고 다음의 이용가능한 비디오 데이터 유닛을 디코딩하는 것을 진행할 수도 있다. 디코더는 또한 손실된 비디오 프레임과 같은 손실된 비디오 데이터 유닛에 의해 야기되는 참조 유닛 미스매치를 처리할 수도 있다.
일 양태에서, 본 개시물은, 인코딩된 비디오 데이터의 현재 유닛의 시작을 결정하는 단계, 현재 유닛의 적어도 일부를 디코딩하는 단계, 현재 유닛에서 디코딩 에러를 검출하는 단계, 디코딩 에러가 검출되면, 인코딩된 비디오 데이터의 다음의 이용가능한 유닛의 시작을 결정하는 단계, 다음의 이용가능한 유닛의 시작에 기초하여 손상된 데이터 세그먼트의 끝을 결정하는 단계, 및 현재 유닛의 시작 및 손상된 데이터 세그먼트의 끝에 기초하여 손상된 데이터 세그먼트를 은닉하는 단계를 포함하는 비디오 디코딩 방법을 제공한다.
다른 양태에서, 본 개시물은, 인코딩된 비디오 데이터의 현재 유닛의 적어도 일부를 디코딩하는 디코딩 엔진, 현재 유닛에서 디코딩 에러를 검출하는 에러 검출 모듈, 현재 유닛의 시작을 결정하고, 인코딩된 비디오 데이터의 다음의 이용가능한 유닛의 시작을 결정하며, 디코딩 에러가 검출되면, 다음의 이용가능한 유닛의 시작에 기초하여 손상된 데이터 세그먼트의 끝을 결정하는 에러 맵핑 모듈, 및 현재 유닛의 시작 및 손상된 데이터 세그먼트의 끝에 기초하여 손상된 데이터 세그먼트를 은닉하는 에러 은닉 모듈을 포함하는 비디오 디코딩 디바이스를 제공한다.
추가적인 양태에서, 본 개시물은, 하나 이상의 프로세서로 하여금 인코딩된 비디오 데이터의 현재 유닛의 시작을 결정하게 하고, 현재 유닛의 적어도 일부를 디코딩하게 하고, 현재 유닛에서 디코딩 에러를 검출하게 하고, 디코딩 에러가 검출되면, 인코딩된 비디오 데이터의 다음의 이용가능한 유닛의 시작을 결정하고, 다음의 이용가능한 유닛의 시작에 기초하여 손상된 데이터 세그먼트의 끝을 결정하게 하며, 현재 유닛의 시작 및 손상된 데이터 세그먼트의 끝에 기초하여 손상된 데이터 세그먼트를 은닉하게 하는 명령을 포함하는 컴퓨터-판독가능 매체를 제공한다.
본 개시물의 하나 이상의 양태의 세부사항은 이하의 상세한 설명 및 첨부 도면에 개시된다. 본 개시물의 다른 특징, 목적, 및 이점은 상세한 설명, 도면, 및 청구범위로부터 명백해질 것이다.
도 1 은 본 개시물에서 설명된 바와 같이 에러 핸들링 및 은닉 기술을 수행하는 비디오 인코딩 및 디코딩 시스템을 도시한 블록도이다.
도 2 는 본 개시물에서 설명된 바와 같이 에러 핸들링 및 은닉 기술을 수행하는 비디오 디코더의 예를 도시한 블록도이다.
도 3 은 예시적인 에러 핸들링 및 은닉 모듈을 도시한 블록도이다.
도 4 는 순차 에러 핸들링 및 은닉 기술을 수행하는데 있어서의 비디오 디코더의 예시적인 동작을 도시한 흐름도이다.
도 5 는 프레임 내의 디코딩 에러에 대해 에러 핸들링 및 은닉을 수행하는데 있어서의 비디오 디코더의 예시적인 동작을 도시한 흐름도이다.
도 6 은 프레임 내에 디코딩 에러를 포함하는 예시적인 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다.
도 7 은 2 개 이상의 프레임에 걸쳐 있는 디코딩 에러에 대해 에러 핸들링 및 은닉을 수행하는데 있어서의 비디오 디코더의 예시적인 동작을 도시한 흐름도이다.
도 8 은 2 개 이상의 프레임에 걸쳐 있는 에러를 포함하는 예시적인 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다.
도 9a, 도 9b 및 도 9c 는 다수의 참조 프레임을 허용하는 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다.
도 10 은 다수의 참조 프레임을 허용하는 비트스르팀에서의 손실된 프레임에 대해 에러 핸들링 및 은닉을 수행하는데 있어서의 비디오 디코더의 예시적인 동작을 도시한 흐름도이다.
도 11a 및 도 11b 는 다수의 참조 프레임을 허용하는 예시적인 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다.
상세한 설명
본 개시물은, 비디오 데이터를 디코딩하는 경우에 발생하는 디코딩 에러를 효율적으로 핸들링하는 순차 에러 핸들링 기술에 관한 것이다. 이 순차 에러 핸들링 기술은 에러 은닉을 지원하지만, 은닉될 데이터를 식별하는 미리보기 (look-ahead) 동작을 요구하지는 않는다. 본 개시물의 몇몇 양태에서, 순차 에러 핸들링 기술은 특히 이동 디바이스와 같은 임베디드 시스템에서 구현되는 경우에 구현 복잡성을 감소시키고, 디코더의 버퍼-사이즈 요건을 감소시키며, 효율적인 전력 소비를 촉진할 수도 있다. 또한, 몇몇 양태에서, 비디오의 비주얼 품질을 향상 또는 유지하는데 있어 순차 에러 핸들링 기술이 효과적일 수도 있다.
에러 핸들링은, 디코딩 에러의 효과를 억제하기 위해 비디오 디코딩 에러가 검출되는 경우에 은닉될 비디오 데이터를 식별하는 것을 수반할 수도 있다. 예를 들어, 비디오 디코더는 하나 이상의 프레임 또는 슬라이스와 같은 하나 이상의 비디오 데이터 유닛 내에, 매크로블록 (MB) 과 같은 비디오 데이터를 은닉할 수도 있다. 예시의 목적으로, 본 개시물은 일반적으로 비디오 슬라이스 형태의 비디오 유닛 및 MB 형태의 블록을 참조할 것이다. 그러나, 본 개시물은 다양한 타입의 비디오 데이터 유닛 및 블록에 손쉽게 적용가능할 수도 있다. 비디오 시퀀스는 다수의 비디오 프레임을 포함한다. 각 프레임은 다수의 비디오 슬라이스를 포함할 수도 있다. 각 비디오 슬라이스는 디코딩 프로세스의 재동기화를 허가하는 재동기화 코드워드를 갖춘 슬라이스 헤더를 포함할 수도 있다.
에러 은닉은 비디오 슬라이스 내의 블록을 대신해 다른 데이터로 치환하는 것을 수반할 수도 있다. 다양한 은닉 기술 중 임의의 기술이 이용될 수도 있다. 일반적으로, 비디오 디코더는 이 데이터를 다른 비디오 데이터 유닛으로부터의 유사한 데이터로 교체함으로써 손상된 데이터를 은닉할 수도 있다. 예로서, 비디오 디코더는 MB 를 상이한 프레임의 슬라이스로부터의 다른 MB 로 교체함으로써 슬라이스에서의 MB 를 은닉할 수도 있다. 특히, 일 슬라이스에서의 MB 는 비디오 시퀀스의 시간상 인접하는 프레임의 대응하는 슬라이스로부터의 공간상 같이 위치하는 MB 로 교체될 수도 있다.
본 개시물은, 단순하고 전력 효율적일 수도 있는 순차 에러 핸들링 기술을 일반적으로 설명한다. 에러 핸들링은, 에러 은닉이 일반적으로 은닉될 MB 의 수에 관한 지식을 요구한다는 의미에서 에러 은닉과 상이하고, 에러 핸들링은 이러한 정보를 제공한다. 이 정보는 에러 범위로 지칭될 수도 있다. 개시된 에러 핸들링 기술과 관련하여 이용되는 특정 에러 은닉 기술은 여러 가지일 수도 있다. 그러나, 순차 에러 핸들링 기술에 의해 생성된 에러 범위와 관련하여 에러 은닉을 설명할 것이다.
동작 시에, 비디오 디코더는 디코딩 에러의 정확한 위치를 알지 못할 수도 있고, 디코딩 에러를 즉시 검출하지 못할 수도 있다. 결과적으로, 2 개의 슬라이스 헤더 사이에 상주하는 MB 는 신뢰성 있게 디코딩될 수도 있다. 비주얼적으로 혼란할 수 있는, 에러가 있게 디코딩된 MB 의 프리젠테이션을 피하기 위해, 비디오 디코더는 디코딩 에러가 검출되는 경우에 2 개의 슬라이스 헤더 사이의 모든 MB 를 은닉하도록 설계될 수도 있다. 이러한 방식으로, 비디오 디코더는 혹시 모든 손상된 MB 를 은닉할 수도 있다. 슬라이스 헤더는, 에러가 다수의 슬라이스에 걸쳐 있는 이벤트에서 비연속적이거나 또는 에러가 하나의 슬라이스 내에 위치하면 연속적일 수도 있다.
어떤 MB 가 은닉될지 그리고 얼마나 많은 MB 가 은닉될지를 결정하기 위해, 디코더의 에러 핸들링 동작은 현재 슬라이스의 시작 (여기서 디코딩 에러가 검출됨) 과 프레임의 끝 또는 나중 슬라이스의 다음 재동기화 코드워드 (비트스트림에서 어떤 것이 따라오든지) 사이에서 연장되는 모든 MB 를 결정할 수도 있다. 다시 말해, 에러 핸들링 동작은 비디오 프레임의 끝 또는 다음 슬라이스 중 어느 하나의 직전에 최종 MB 및 현재 슬라이스에서의 최초 MB 를 식별할 수도 있다. 이 정보는 이후 에러 은닉 동작으로 전달될 수도 있다.
프레임에서의 MB 는 넘버링된다. 최종 MB 는 다음 슬라이스의 최초 MB 직전에 나타난다. 슬라이스와 같은 비디오의 사이즈가 가변적이기 때문에, 나중 슬라이스에서의 최초 MB 의 수는 손쉽게 알려져 있지 않다. 나중 슬라이스에서의 최초 MB 를 식별하는 하나의 접근 방식은, 현재 슬라이스의 디코딩을 완료하기 전에 비스트트림에서 미리보기하고 다음의 슬라이스 헤더와 연관된 재동기화 코드워드를 탐색하는 것이다. 다음의 슬라이스 헤더를 사전-디코딩하고, 재동기화 코드워드를 식별함으로써, 미리보기 동작은 다음의 슬라이스의 최초 MB, 및 이에 따라 이전의 슬라이스의 최종 MB 를 결정할 수 있다. 이러한 방식으로, 에러가 검출되는 이벤트에서 최초 및 최종 MB 가 이용가능하다. 최초 및 최종 MB 는 은닉을 위한 데이터 세그먼트를 정의한다. 데이터 세그먼트는 하나의 슬라이스 또는 다수의 슬라이스를 포함할 수도 있다.
프레임이 수개의 슬라이스로 분할되는 경우, 디코더는 한 번에 하나의 프레임 대신에 보통 한 번에 하나의 슬라이스를 디코딩한다. 이상적으로, 디코더는 미리보기 동작을 적용하여 다음의 슬라이스 헤더를 찾아, 현재 슬라이스에 대해 디코딩할 필요가 있는 MB 의 개수를 결정할 수도 있다. 디코더는, 디코딩 중에 에러가 발견되는 경우, 에러 핸들러가 이러한 에러 은닉을 위한 개수를 제공할 수 있도록 손상된 데이터 세그먼트의 최초 MB 및 최종 MB 를 알 필요가 있다. 이러한 방식으로, 디코더는 손상된 데이터 세그먼트 내의 MB 만을 은닉하고, 다음의 슬라이스 헤더로부터 디코딩을 재개한다. 슬라이스 구조의 도움으로, 디코더는 전체 프레임을 손실하는 대신에 더 많은 MB 를 복원할 수 있다.
미리보기 접근 방식은 몇몇 소프트웨어-기반 디코더 구현예에서 효과적일 수도 있지만, 임베디드 하드웨어 디코더 아키텍처에 매우 바람직하지 않을 수 있다. 많은 경우에, 미리보기 동작은 실질적으로 하드웨어 복잡성을 증가시키고, 프로세서들 사이의 더 많은 간섭 및 계산을 요구하여, 전력 효율을 열화시킬 수 있다. 또한, 미리보기 동작은 디코딩 프로세스가 다음의 슬라이스를 미리보기한 후에 현재 슬라이스로 복귀할 수 있도록 과도한 버퍼링을 요구할 수도 있다. 미리보기 동작은, 현재 슬라이스가 디코딩되기 전에 발생하고, 따라서, 디코딩된 에러가 검출될지 또는 검출되지 않을지 여부가 수행된다. 결과적으로, 각 슬라이스는 버퍼링된 후 디코딩되어야 한다. 이 미리보기 동작은 비트스트림이 에러를 포함하지 않더라도 비트스트림에서의 모든 슬라이스에 대해 적용되어, 대부분의 슬라이스에 대해 소비되는 복잡한 계산을 요구한다.
순차 에러 핸들링 프로세스에 있어서, 본 개시물에서 설명된 바와 같이, 비디오 디코더는 미리보아 나중 슬라이스의 시작을 식별할 필요가 없다. 대신에, 비디오 디코더는 나중 슬라이스로 진행하기 전에 에러가 검출될 때까지 현재 슬라이스를 순차적으로 디코딩한다. 디코딩하기 전에 비스스트림에서 미리보기 전에 차라리, 비디오 디코더는 에러가 검출되지 않으면 나중 슬라이스의 시작을 먼저 식별하지 않고 전체 현재 슬라이스를 디코딩할 수도 있다.
이러한 방식으로, 비디오 디코더는, 디코딩되는 다음의 슬라이스의 슬라이스 헤더가 획득될 때까지 에러 은닉 동작을 지연시킬 수도 있다. 디코더는 현재 슬라이스를 디코딩하기 전에 손상된 데이터의 최종 MB 개수를 알 필요가 없지만, 디코딩 에러가 그 슬라이스에서 발생하였는지 여부를 표시하는 에러 플래그를 유지한다. 따라서, 사실상 디코더는 초기에 현재 슬라이스가 에러를 포함하지 않는다고 가정할 수도 있다. 현재 슬라이스가 에러를 가지면, 디코더와 연관된 에러 핸들러는 다음의 슬라이스 헤더가 디코딩된 후 나중에 에러를 프로세싱할 수 있다. 이 개념은 모든 슬라이스가 에러를 가질 수도 있는 통상적인 미리보기 접근 방식과 반대이다.
순차 에러 핸들링 프로세스에서, 본 개시물에 따르면, 현재 슬라이스의 디코딩 중에 에러의 검출 시에, 비디오 디코더는 예를 들어, 나중의 비디오 슬라이스의 시작에서 동기화 코드워드를 찾고 식별함으로써, 나중의 비디오 슬라이스의 시작에서 에러 플래그를 설정하고 디코딩 동기화를 재확립한다. 나중 슬라이스는 현재 슬라이스를 즉시 뒤따르는 바로 다음의 슬라이스일 수도 있다. 다른 방법으로는, 디코딩 에러가 다수의 비디오 슬라이스, 또는 다수의 슬라이스의 부분의 손상 또는 손실을 초래하면, 나중 슬라이스는 현재 슬라이스를 뒤따르는 바로 다음의 슬라이스가 아닐 수도 있다. 몇몇 예에서, 다음의 이용가능한 슬라이스는 디코딩되는 현재 슬라이스와 동일한 프레임에도 상주하지 않을 수도 있다.
현재의 비디오 유닛을 디코딩하거나 디코딩 에러를 검출하는 때에, 비디오 디코더는 다음의 이용가능한, 즉, 나중 슬라이스로 진행한다. 에러 플래그가 설정되었으면 (에러가 검출되었음을 표시함), 디코더는 나중 슬라이스의 시작에 기초하여 손상된 데이터 세그먼트의 끝을 결정한다. 단 하나의 슬라이스만 손상되었으면, 손상된 데이터 세그먼트의 끝은 현재 슬라이스의 끝에 대응할 수도 있다. 다른 방법으로는, 하나보다 많은 비디오 슬라이스가 손상되었으면, 손상된 데이터 세그먼트의 끝은 나중의 비디오 슬라이스의 끝에 대응할 수도 있다.
에러 핸들링을 수행하여 현재 비디오 슬라이스의 시작 및 손상된 데이터 세그먼트의 끝을 식별하는 때에, 비디오 디코더는 에러 은닉을 수행할 수도 있다. 예를 들어, 비디오 디코더는 현재 슬라이스의 시작과 손상된 데이터 세그먼트의 끝 사이에 데이터를 은닉할 수도 있다. 손상된 데이터 세그먼트는 다음의 이용가능한 슬라이스 헤더 직전에 끝난다. 손상된 데이터를 은닉함으로써, 비디오 디코더는 정확한 데이터의 손실 및/또는 에러 있는 데이터의 디스플레이를 피할 수도 있다. 에러 플래그가 설정되지 않으면 (현재 슬라이스에서 에러가 검출되지 않았음을 표시함), 비디오 디코더는 현재 슬라이스에 대해 에러 은닉을 수행하지 않고, 단순히 다음의 이용가능한 비디오 슬라이스를 디코딩하는 것을 진행할 수 있다.
본 개시물의 다양한 양태에 따르면, 순차 에러 핸들링 기술은 미리보기 동작의 필요 없이 디코딩 및 에러 핸들링을 지원할 수도 있다. 미리보기 동작의 제거는 더 적은 버퍼 공간, 계산 및 전력 자원을 필요로 할 수도 있는 순차 에러 핸들링을 가능하게 한다. 예를 들어, 후속 디코딩에 대한 제 2 패스가 뒤따르는 미리보기에 대한 제 1 패스를 지원하기 위해 버퍼링되는 대신에, 비트스트림은 순차적으로 디코딩될 수도 있다.
일반적으로, 미리보기 동작은 디코딩 에러가 실제로 비디오 시퀀스에 존재하는지 여부와 상관없이 에러 핸들링 동작의 일부로서 잠재적인 디코딩 에러의 내용을 식별하는 시도를 한다. 순차 에러 핸들링 기술은 디코딩 에러가 검출되면 비디오 데이터 유닛을 순차적으로 디코딩하고 에러 핸들링을 인보크한다. 에러가 검출되지 않으면, 비디오 디코딩은 에러 핸들링 및 에러 은닉 없이 진행할 수도 있고, 따라서 보다 효율적인 디코딩 프로세스를 지원할 수도 있다.
도 1 은 본 개시물에서 설명된 바와 같이 에러 핸들링 및 은닉 기술을 수행하는 비디오 인코딩 및 디코딩 시스템을 도시한 블록도이다. 도 1 에 도시된 바와 같이, 시스템 (10) 은 인코딩된 비디오 데이터를 통신 채널 (16) 을 통해 목적지 디바이스 (14) 로 송신하는 소스 디바이스 (12) 를 포함한다. 통신 채널 (16) 은 무선 주파수 (RF) 스펙트럼 또는 하나 이상의 물리적인 송신 라인과 같은 임의의 무선 또는 유선 통신 매체, 또는 무선과 유선 매체의 임의의 조합을 포함할 수도 있다. 통신 채널 (16) 은 근거리 네트워크, 광역 네트워크, 또는 인터넷과 같은 글로벌 네트워크와 같은 패킷-기반 네트워크의 일부를 형성할 수도 있다. 통신 채널 (16) 은 인코딩된 비디오 데이터를 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 송신하기 위한 임의의 적절한 통신 매체, 또는 서로 다른 통신 매체의 집합을 일반적으로 나타낸다.
소스 디바이스 (12) 는 목적지 디바이스 (14) 로의 송신을 위해 코딩된 비디오 데이터를 발생시킨다. 소스 디바이스 (12) 는 비디오 소스 (18), 비디오 인코더 (20), 및 송신기 (22) 를 포함할 수도 있다. 소스 디바이스 (12) 의 비디오 소스 (18) 는 비디오 카메라, 이전에 캡처된 비디오를 포함하는 비디오 아카이브, 또는 비디오 컨텐츠 제공자로부터 공급되는 비디오와 같은 비디오 캡처 디바이스를 포함할 수도 있다. 또 다른 방식으로, 비디오 소스 (18) 는 소스 비디오, 또는 라이브 또는 아카이브된 비디오 및 컴퓨터-발생된 비디오의 조합과 같은 컴퓨터 그래픽스-기반 데이터를 발생시킬 수도 있다. 몇몇 경우에, 비디오 소스 (18) 가 비디오 카메라이면, 소스 디바이스 (12) 는 모바일 텔레폰 또는 다른 디바이스를 포함하는 소위 카메라 폰 또는 비디오 폰, 또는 임의의 다른 타입의 카메라가 구비된 컴퓨팅 또는 통신 디바이스를 형성할 수도 있다. 다른 양태에서, 비디오 소스 (18) 는 소스 디바이스 (12) 에 커플링되거나 이로 집적될 수도 있다. 각 경우에, 캡처, 사전-캡처 및/또는 컴퓨터-발생된 비디오는 송신기 (22) 및 통신 채널 (16) 을 통해 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 송신하기 위해 비디오 인코더 (22) 에 의해 인코딩될 수도 있다.
비디오 인코더 (20) 는 비디오 소스 (18) 로부터 비디오 데이터를 수신한다. 비디오 소스 (18) 로부터 수신된 비디오 데이터는 비디오 프레임과 같이 일련의 비디오 데이터 유닛을 포함하는 비디오 시퀀스로 배열될 수도 있다. 프레임의 전부 또는 일부는 비디오 슬라이스와 같이 보다 작은 비디오 데이터 유닛으로 분할될 수도 있다. 비디오 인코더 (20) 는 비디오 데이터를 인코딩하기 위해 개별 비디오 프레임 또는 슬라이스 내의 픽셀의 블록 (본 명세서에서는 비디오 블록으로 지칭됨) 에 대해 동작할 수도 있다. 프레임 또는 슬라이스는 다수의 비디오 블록을 포함할 수도 있다. 비디오 블록은 고정 또는 가변 사이즈를 가질 수도 있고, 규정된 코딩 표준에 따라 사이즈가 달라질 수도 있다. 보통 매크로블록 (MB) 로 지칭되는 16×16 픽셀 비디오 블록은 서브블록으로 배열될 수도 있다.
일례로서, ITU-T (International Telecommunication Union Standardization Sector) H.264/MPEG-4, 파트 10, AVC (Advanced Video Coding)(이후 "H-264/MPEG-4 AVC" 표준) 는 다양한 블록 사이즈, 예를 들어, 루마 컴포넌트에 대해서는 16×16, 8×8, 또는 4×4, 및 크로마 컴포넌트에 대해서는 8×8 에서 인트라 예측을 지원할 뿐만 아니라, 다양한 블록 사이즈, 예를 들어, 루마 컴포넌트에 대해서는 16×16, 16×8, 8×16, 8×8, 8×4, 4×8 및 4×4 및 크로마 컴포넌트에 대해서는 대응하는 스케일링된 사이즈에서 인터 예측을 지원한다. 일반적으로, MB 및 다양한 서브블록은 비디오 블록인 것으로 간주될 수도 있다. 따라서, MB 는 비디오 블록인 것으로 간주될 수도 있고, MB 는 파티션 또는 서브파티션되면 비디오 블록의 세트를 정의하는 것으로 간주될 수 있다. 몇몇 양태에서, 에러 핸들링 기술은 슬라이스 또는 프레임 내의 MB 개수에 기초하여 에러 은닉을 지시할 수도 있다. 그러나, 다른 양태에서는, 에러 핸들링 기술은 더 크거나 더 작은 비디오 블록 사이즈를 프로세싱할 수도 있다.
이 기술은 비디오 프레임 또는 비디오 슬라이스와 같은 다양한 비디오 데이터 유닛에 대하여 본 개시물에서 설명되었지만, 이 기술은 비디오 데이터의 임의의 인코딩 및 디코딩에 동등하게 적용가능할 수도 있다. 또한, 이 기술은 H.264/MPEG-4 AVC 표준에 따라 인코딩 및 디코딩된 비디오 데이터에 관해 본 개시물에서 설명된다. 그러나, 이 기술은 예시의 목적으로 이 표준을 참조하여 설명된다. 이러한 기술은, MPEG-1, MPEG-2 및 MPEG-4 의 MPEG (Moving Picture Experts Group) 에 의해 정의된 것들, ITU-T H.263 표준, SMPTE (Society of Motion Picture and Television Engineers) 421M 비디오 CODEC 표준 ("VC-1" 로 보통 지칭됨), Video Coding Standard Workgroup of China (보통 "AVC" 로 지칭됨) 에 의해 정의된 표준뿐만 아니라, 표준 단체에 의해 정의되거나 사유 표준으로서 기관에 의해 개발된 임의의 다른 비디오 코딩 표준과 같이, 다양한 다른 비디오 코딩 표준 중 임의의 표준에 손쉽게 적용될 수도 있다.
제한이 아닌 예시를 목적으로, 순차 에러 핸들링의 적용은 H.264/MPEG-4 AVC 코딩을 참조하여 설명될 것이다. 비디오 인코더 (20) 는 인트라-코딩 및 인터-코딩 예측 방식, 예를 들어, H.264/MPEG-4 AVC 표준에서 개시된 바와 같이 각 블록 (예를 들어, 매크로블록 (MB)) 을 인코딩할 수도 있다. 비디오 블록의 인트라- 또는 인터-기반 예측에 이어서, 비디오 인코더 (20) 는 상기의 H.264/MPEG-4 AVC 표준에 따라 비디오 블록에 대해 수개의 다른 동작을 수행할 수도 있다. 이들 추가 동작은 변환 계수를 생성하기 위한 변환 동작 (예를 들어, H.264/AVC 또는 이산 코사인 변환 (DCT) 에 이용되는 4×4 또는 8×8 정수 변환), 양자화 동작, 및 엔트로피 코딩 동작을 포함할 수도 있다. 인코딩된 데이터는 인코딩된 비디오 데이터 비트스트림의 일부를 형성할 수도 있다. 인코딩된 프레임은 하나 이상의 슬라이스를 포함할 수도 있다. 각 슬라이스는, 디코딩 프로세스를 동기화 및/또는 재동기화하기 위해 하나 이상의 코드워드를 포함할 수도 있는 NAL (Network Abstraction Layer) 유닛 헤더와 같은 헤더에 의해 지정될 수도 있다. 각 슬라이스는 MB 또는 더 작은 블록과 같은 하나 이상의 블록을 포함할 수도 있다.
슬라이스는 광범위한 패턴에 따라 선택된 블록을 포함할 수도 있다. 예를 들어, 슬라이스는 프레임의 주어진 수의 행으로 순차적으로 배열된 블록을 포함할 수도 있다. 슬라이스는 다른 방법으로는 한 행으로 순차적으로 배열된 수개의 블록을 포함할 수도 있는데, 여기서 슬라이스는 순차적으로 행 별로 정렬된 블록의 일정한 런 길이를 정의함으로써 비디오 데이터에 적응될 수도 있다. 다른 예로서, 슬라이스는 순차적으로 열 별로 배열된 블록의 런 길이 또는 프레임의 주어진 수의 열로 배열된 블록을 포함할 수도 있다. 따라서, 슬라이스는 임의의 수의 블록, 고정되거나 정적인 수의 블록을 포함할 수도 있지만, 상이한 비디오 데이터를 수용하도록 적응되기 위해 후속 또는 이전의 슬라이스보다 많거나 적은 블록을 포함할 수도 있다.
슬라이스의 코딩 후에, 상기에서 언급한 바와 같이, 비디오 인코더 (20) 는 H.264/MPEG-4 AVC 표준에 의해 정의된 NAL (network abstraction layer) 유닛과 같은 유닛으로서 프레임의 각 슬라이스를 지정하고, H.264/MPEG-4 AVC 에 의해 정의되는 NAL 유닛 헤더와 같은 재동기화 헤더 또는 대응하는 슬라이스로 각 슬라이스를 인코딩하여, 각 유닛의 처음을 마킹할 수도 있다. 이러한 방식으로 비디오 데이터를 인코딩하는 것은 빈번한 재동기화의 기회를 제공하는데, 이는 손실된 비디오 데이터로부터 초래되는 에러의 전파를 감소시킴으로써, 실질적으로 송신 중에 손상 또는 손실된 비디오 데이터의 영향을 감소시키고 디코딩을 개선시킬 수도 있다.
예를 들어, 프레임을 슬라이스로 분할함으로써, 이의 슬라이스 또는 부분은 채널 (16) 을 통한 송신을 위해 단일 패킷 내로 인코딩될 수도 있다. 채널 (16) 을 통한 송신 중에 그 슬라이스가 손실 또는 손상되면, 전체 프레임이 패킷에 인코딩되었다면 필요할 수도 있는 바와 같이, 전체 프레임을 대체, 복원 또는 그렇지 않으면 은닉해야할 필요 없이 이 슬라이스는 복원 또는 대체될 수도 있다. 또한, 디코딩이 과거의 어쩌면 손상된 데이터에 더 이상 의존하지 않도록 각 재동기화 헤더가 디코딩 프로세스를 재시작하는데 이용될 수도 있으므로, 슬라이스 또는 재동기화 헤더는 에러의 전파를 제거할 수도 있다. 따라서, 소스 디바이스 (12) 는 복수의 패킷으로서 송신기 (22) 를 통해 목적지 디바이스 (14) 로 인코딩된 비디오 데이터를 송신할 수도 있는데, 여기서 각 패킷은 별개 슬라이스를 인코딩하여 디코딩 에러의 효율적인 핸들링을 지원할 수도 있다.
수신기 (24) 는 채널 (16) 을 통해 소스 디바이스 (12) 로부터 인코딩된 비디오 데이터를 수신한다. 목적지 디바이스 (14) 는 수신기 (24), 비디오 디코더 (26), 및 디스플레이 디바이스 (28) 를 포함할 수도 있다. 비디오 디코더 (26) 는 디스플레이 디바이스 (28) 상에서의 재생을 위해 인코딩된 비디오 데이터를 디코딩하여 오리지널 비디오 데이터를 획득할 수도 있다. 디스플레이 디바이스 (28) 는 CRT (cathode ray tube), LCD (liquid crystal display), 플라즈마 디스플레이, LED (light emitting diode) 디스플레이, 유기 LED 디스플레이, 또는 다른 타입의 디스플레이 유닛과 같은 다양한 디스플레이 디바이스 중 임의의 디바이스를 포함할 수도 있다.
상술한 바와 같이, 채널 (16) 을 통한 인코딩된 비디오 데이터의 송신 중에, 인코딩된 비디오 데이터의 다양한 슬라이스 또는 MB 는, 예를 들어, 채널 (16) 을 따르는 신호 전파에 영향을 미치는 간섭, 정체, 또는 다른 이상 (anomaly) 으로 인해 손상 또는 손실될 수도 있다. 무선 애플리케이션에 대해, 손실 또는 손상된 비디오 데이터는 에러 경향이 있는 네트워크를 통한 무선 송신으로 인해 생길 수도 있다. 디코딩 에러는 비디오 방송 또는 비디오 텔레포니와 같은 다양한 애플리케이션에 악영향을 줄 수도 있다. 수신기 (24) 는, 손실 또는 손상된 비디오 데이터를 포함할 수도 있는 인코딩된 비디오 데이터를 수신한다. 비디오 디코더 (26) 는, 프레임 또는 슬라이스의 부분, 또는 다수의 프레임 또는 슬라이스에 걸쳐 있을 수도 있는 이들 손실 또는 손상된 데이터의 디코딩을 시도할 수도 있다. 이들 손실 또는 손상된 데이터는 에러 있는 데이터의 프리젠테이션 및/또는 정확한 데이터의 손실을 초래할 수도 있는 디코딩 에러를 생성할 수도 있다.
비디오 디코더 (26) 는 순차 에러 핸들링 동작 및 에러 은닉 동작을 수행하도록 구성될 수도 있다. 에러 핸들링 동작에서, 비디오 디코더 (26) 는 디코딩 에러를 검출하고, 에러에 의해 손상되는 데이터의 일반 정도 (손상된 데이터 세그먼트로 지칭될 수도 있음) 를 결정한다. 손상된 데이터 세그먼트는 일반적으로, 원래 인코딩된 비트스트림에서의 데이터에 관하여 손실, 손상되거나 그렇지 않으면 어떤 중요한 면에서 에러 있는 수신된 비트스트림에서의 데이터의 세그먼트로 지칭될 수도 있다. 슬라이스에서 에러가 검출되면, 슬라이스에서의 모든 MB 가 은닉되는 것이 바람직하다. 그러나, 디코딩 에러에 의해 영향을 받는 최초 및 최종 MB 를 결정하는 것이 필요하다. 현재 슬라이스의 최초 MB 는 슬라이스를 디코딩하는 시작에서 손쉽게 결정될 수 있다. 그러나, 슬라이스의 가변 사이즈로 인해, 슬라이스의 최종 MB 는 손쉽게 알려져 있지 않다. 또한, 디코딩 에러가 다수의 슬라이스에 걸쳐 있으면, 은닉될 손상된 데이터 세그먼트에서의 최종 MB 는 나중의 슬라이스 내에 상주할 수도 있다. 다시 말해, 손상된 데이터 세그먼트는 하나의 슬라이스 또는 다수의 슬라이스를 포함할 수도 있다.
어느 경우에나, 은닉될 최종 MB 는, 예를 들어, 슬라이스와 연관된 헤더에서 연관된 다음의 재동기화 마커의 검출에 기초하여 적당히 수신된 다음의 이용가능한 슬라이스의 최초 MB 를 검출함으로써 식별될 수도 있다. 이후, 잠재적으로 손상된 데이터의 최종 MB 는 다음의 이용가능한 슬라이스의 최초 MB 직전의 MB 로서 식별될 수도 있다. 본 개시물에서 설명된 것과 같은 순차 에러 핸들링 기술은 미리보기 동작의 필요 없이 은닉될 MB 의 식별을 허용할 수도 있다. 이러한 방식으로, 순차 에러 핸들링 기술은 비디오 디코더 (26) 에 의해 수행된 에러 핸들링 및 은닉 동작의 효율을 향상시킬 수도 있다.
일반적으로, 다음의 슬라이스를 버퍼링 및 미리보기하는 대신에, 비디오 디코더 (26) 는 먼저 인코딩된 비디오 데이터의 현재 슬라이스의 시작을 결정하고 현재 슬라이스를 디코딩하는 것을 시작할 수도 있다. 디코딩 에러가 검출되는 경우, 비디오 디코더 (26) 는 수신된 비디오 데이터의 다음의 이용가능한 슬라이스의 시작을 결정함으로써 디코딩을 재동기화하는 것을 진행할 수도 있다. 예를 들어, 디코딩 에러에 응답하여, 비디오 디코더 (26) 는 현재 슬라이스의 디코딩을 정지하고, 비트스트림을 파싱함으로써 식별될 수 있는 다음의 이용가능한 슬라이스를 디코딩하는 것을 진행할 수도 있다. 다음의 이용가능한 슬라이스는 비트스트림에서 나중의 슬라이스이다. 나중의 슬라이스의 시작에 기초하여, 비디오 디코더 (26) 는, 현재 슬라이스와 다음의 이용가능한 슬라이스 사이에 상주하는 다른 슬라이스의 끝 또는 현재 슬라이스의 끝일 수도 있는, 손상된 데이터 세그먼트의 끝을 결정할 수도 있다. 비디오 디코더 (26) 가 검출된 에러를 포함하는 슬라이스를 식별하였다는 것을 고려하면, 비디오 디코더 (26) 는 현재 슬라이스의 시작 및 다음의 이용가능한 슬라이스의 시작에 기초하여 손상된 데이터 세그먼트에서의 에러를 은닉할 수도 있다.
예시로서, 비디오 디코더 (26) 는 프레임을 수신하고 프레임의 제 1 슬라이스의 시작을 결정할 수도 있다. 제 1 슬라이스의 시작은 제 1 슬라이스의 MB 번호, 예를 들어, 슬라이스가 프레임에서 제 1 슬라이스이면, MB 번호 0 을 포함할 수도 있다. 미리보기 동작과 달리, 제 1 슬라이스의 최종 MB 를 결정하지 않고 또한, 제 2 슬라이스 또는 슬라이스 헤더에 액세스하지 않고도 비디오 디코더 (26) 는 다음으로 제 1 슬라이스를 디코딩할 수도 있다. 이러한 방식으로, 비디오 디코더 (26) 는, 디코딩을 위해 다음 슬라이스를 미리보고 현재 슬라이스로 복귀할 필요가 있는 추가 버퍼를 제거할 수도 있다.
제 1 슬라이스에서 에러의 검출 시에, 비디오 디코더 (26) 는 에러 플래그를 설정하여, 디코딩 에러가 발생하였다고 표시할 수도 있다. 에러 플래그는, 디코더와 연관된 레지스터 또는 메모리에 저장될 수도 있는 다른 타입의 에러 표시자, 메시지, 커맨드, 비트 패턴, 코드워드 등, 또는 각각 에러 있음 또는 에러 없음을 표시하기 위해 설정 및 재설정되는 단일 비트와 같은 다양한 형태 중 임의의 형태를 취할 수도 있다. 에러의 검출 시에, 비디오 디코더 (26) 는 다음의 이용가능한 슬라이스를 결정함으로써, 예를 들어, 비트스트림에서 발견될 수 있는 다음 슬라이스 헤더를 참조함으로써 디코딩 프로세스를 재동기화하는 것을 진행할 수도 있다. 게다가 또, 이 다음의 이용가능한 슬라이스는 인코딩된 비트스트림에서 바로 다음의 슬라이스가 아닐 수도 있지만, 대신에 수신된 비트스트림에서 다음의 슬라이스이다. 따라서, 다음의 이용가능한 슬라이스는 다수의 슬라이스 손실의 결과로서 비트스트림에서 제 3, 제 4 또는 제 5 (또는 나중의) 슬라이스일 수 있다. 또한, 이하 더 설명하는 바와 같이, 다음의 이용가능한 슬라이스는 제 1 슬라이스와 동일한 프레임 내에 포함되지 않을 수도 있다. 그러나, 이들 예 각각에 순차 에러 핸들링 기술이 적용되어 단일 슬라이스, 다수의 슬라이스, 또는 그 이상의 다수의 슬라이스에 걸쳐 있는 디코딩 에러를 효율적으로 핸들링할 수도 있다.
얼마나 많은 슬라이스 또는 프레임에 디코딩 에러가 걸쳐 있는지와 상관 없이, 비디오 디코더 (26) 는 다음의 이용가능한 슬라이스의 시작에 기초하여, 디코딩 에러를 포함하는 손상된 데이터 세그먼트의 끝을 결정한다. 예시로서, 제 1 슬라이스의 디코딩 시에, 비디오 디코더 (26) 는 MB 번호 제로 (0) 로서 제 1 슬라이스의 시작을 결정하고, 디코딩 에러를 검출한 후, MB 번호 N 에서 다음의 이용가능한 슬라이스의 시작을 찾을 수도 있다. 이는 손상된 데이터 세그먼트가 하나 이상의 슬라이스에 걸쳐 있지만 단일 프레임 내에 상주한다고 가정한다. MB 번호 N 에 기초하여, 비디오 디코더 (26) 는 디코딩 에러를 포함하는 손상된 데이터 세그먼트의 끝이 MB 번호 N-1 이라고 결정할 수도 있다. 예를 들어, 제 2 슬라이스에서 최초 MB 번호가 55 이면, 손상된 데이터 세그먼트에서의 최종 MB 의 MB 번호는 54 이다. 이 결정으로, 비디오 디코더 (26) 의 에러 핸들링 동작은 MB 0 에서 MB 54 로 연장되는 손상된 데이터 세그먼트가 은닉되어야 한다고 표시할 수도 있다.
비디오 디코더 (26) 는 임의의 수의 은닉 기술에 따라 에러를 은닉할 수도 있다. 비디오 디코더 (26) 는, 예를 들어, 이전에 디코딩된 프레임과 같이, 인접 프레임으로부터의 MB 번호 0 내지 54 로 MB 번호 0 내지 54 를 대체함으로써 에러를 은닉할 수도 있다. 다른 방법으로는, 비디오 디코더 (26) 는 내삽, 외삽, 또는 모셥 보상 보간과 같은 더 많은 정교한 기술을 채용하여, 디코딩 에러에 의해 잠재적으로 영향을 받은 MB 를 대체할 수도 있다. 슬라이스의 디코딩 및 에러 은닉의 수행 시에, 필요하다면, 비디오 디코더 (26) 는 사용자에 대한 프리젠테이션을 위해 디코딩된 비디오 데이터를 디스플레이 디바이스 (28) 로 포워딩할 수도 있다.
미리보기 동작을 피한 결과로서, 비디오 디코더 (26) 는 빈번한 미리보기 동작을 위해 비트스트림의 부분을 버퍼링할 필요 없이 순차적으로 비트스트림을 디코딩하는 것을 진행할 수도 있다. 또한, 비디오 디코더 (26) 는, 에러가 존재하는지 또는 안 하든지 간에 미리보기 동작을 연속적으로 수행하기보다는, 실제 에러의 은닉을 지원할 필요가 있는 경우에 에러 핸들링 동작을 인보크할 수도 있다. 많은 애플리케이션에서, 작은 퍼센트의 비디오 슬라이스에 대해 에러가 발생할 수도 있다. 연속적으로 보다는, 요구되는 대로 에러 핸들링을 적용하고, 이에 의해 연속적인 미리보기 버퍼링을 피함으로써, 비디오 디코더 (26) 는 더 적은 계산 및 전력 자원을 소비하고, 구현을 위한 계산상 복잡성을 감소시킬 수도 있다. 전력 보전은 특히, 모바일 무선 통신 디바이스와 같이, 제한된 전력 자원으로 비디오 디코더 (26) 가 임베디드 시스템의 일부를 형성하는 경우에 중요할 수도 있다.
시스템 (10) 의 가능한 구현예의 추가 세부사항을 이하 설명할 것이다. 몇몇 경우에, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 실질적으로 대칭인 방식으로 동작할 수도 있다. 예를 들어, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 각각 비디오 인코딩 및 디코딩 컴포넌트를 포함할 수도 있다. 따라서, 시스템 (10) 은, 예를 들어, 비디오 스트리밍, 비디오 방송, 또는 비디오 텔레포니를 위해 디바이스들 (12, 14) 사이의 단방향 또는 쌍방향 비디오 송신을 지원할 수도 있다. 본 명세서에서 설명된 순차 에러 핸들링 기술은, 예를 들어, 결합된 CODEC 에서 인코딩 및 디코딩 컴포넌트 양자를 포함하는 디바이스에 적용가능할 수도 있다. 또한, 몇몇 양태에서, 디코딩될 데이터를 인코딩한 인코더가 상주하는 동일한 디바이스에 상주하는 디코더 내에 에러 핸들링 기술이 적용될 수도 있다. 이 경우에, 예를 들어, 인코딩된 데이터는 국부적으로 아카이브된 후, 목적지 디바이스 (14) 와 같은 다른 디바이스로 송신되기보다는 국부 재생을 위해 디코딩될 수도 있다. 본 예에서, 데이터 저장 매체에 관하여 비디오 데이터 기록 및 판독 동작에서 손상되거나, 다른 인자로 인해 손상되는 인코딩된 비디오 데이터에 에러 핸들링 기술이 적용될 수도 있다.
이전에 설명된 바와 같이, 비디오 인코더 (20) 및 비디오 디코더 (26) 는 MPEG (Moving Picture Experts Group)-2, MPEG-4, ITU-T H.263 또는 H.264/MPEG-4 AVC 와 같은 비디오 압축 표준에 따라 동작할 수도 있다. 도 1 에 도시되지 않았지만, 몇몇 양태에서, 비디오 인코더 (20) 및 비디오 디코더 (26) 는 각각 오디오 인코더 및 디코더로 집적될 수도 있고, 적절한 MUX-DEMUX 유닛, 또는 다른 하드웨어 및 소프트웨어를 포함하여, 공통된 데이터 스트림 또는 별개 데이터 스트림에서 오디오와 비디오 둘 다의 인코딩을 핸들링할 수도 있다. 이러한 방식으로, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 오디오 및 비디오 데이터를 포함하는 멀티미디어 데이터에 대해 동작할 수도 있다. 적용가능하다면, MUX-DEMUX 유닛은 ITU H.223 멀티플렉서 프로토콜, 또는 사용자 데이터그램 프로토콜 (UDP) 과 같은 다른 프로토콜에 부합될 수도 있다.
H.264/MPEG-4 AVC 표준은 JVT (Jiont Video Team) 로 알려진 공동 파트너쉽의 제품으로서 ISO/IEC MPEG 과 함께 ITU-T VCEG (Video Coding Experts Group) 에 의해 공식화되었다. 몇몇 양태에서, 본 개시물에서 설명된 기술은, 일반적으로 H.264 표준에 부합되는 디바이스에 적용될 수도 있다. H.264 표준은 2005년 3월 자로 ITU-T 스터디 그룹에 의해 ITU-T Recommendation H.264, Advanced Video Coding for generic audiovisual services (본 명세서에서는 H.264 표준 또는 H.264 규격, 또는 H.264/AVC 표준 또는 규격으로 지칭될 수도 있음) 에서 설명된다.
몇몇 경우에, 비디오 인코더 (20) 및 비디오 디코더 (26) 는 공간, 시간 및/또는 신호 대 잡음 비 (SNR) 확장성을 위해 SVC (scalable video coding) 를 지원하도록 구성될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (26) 는 몇몇 양태에서 SVC 를 위해 FGS (fine granularity SNR scalability) 코딩을 지원하도록 구성될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (26) 는 기본 계층 및 하나 이상의 스케일러블 향상 계층의 인코딩, 송신 및 디코딩을 지원함으로써 다양한 정도의 확장성을 지원할 수도 있다. 스케일러블 비디오 코딩에 있어서, 기본 계층은 품질의 베이스라인 레벨로 비디오 데이터를 반송한다. 하나 이상의 향상 계층은 추가 데이터를 반송하여 더 높은 공간, 시간 및/또는 SNR 레벨을 지원한다.
기본 계층은 향상 계층의 송신보다 더 신뢰성 있는 방식으로 송신될 수도 있다. 예를 들어, 변조된 신호의 가장 신뢰성 있는 부분은 기본 계층을 송신하는데 이용될 수도 있지만, 변조된 신호의 덜 신뢰성 있는 부분은 향상 계층을 송신하는데 이용될 수도 있다. 기본 및 향상 계층은 기본 계층과 향상 계층이 동일한 반송파 또는 부반송파 상에서, 그러나 상이한 패킷 에러 레이트 (PER) 를 초래하는 상이한 송신 특성으로 송신될 수 있도록 물리 계층 상의 계층적 변조를 이용하여 인코딩된다.
몇몇 양태에서, 비디오 방송에 대해, 본 개시물에서 설명된 기술은 또한 기술 표준 TIA-1099 로서 2007년 7월에 발표된 FLO (Forward Link Only) 무선 인터페이스 규격, "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast" 를 이용하는 TM3 (terrestrial mobile multimedia multicast) 시스템에서 실시간 비디오 서비스를 전달하는 진보형 H.264 비디오 코딩에 적용될 수도 있다. 예를 들어, 채널 (16) 은 FLO 규격 등에 따라 무선 비디오 정보를 방송하는데 이용되는 무선 정보 채널을 포함할 수도 있다. FLO 규격은 FLO 무선 인터페이스에 적절한 비트스트림 구문 및 의미 및 디코딩 프로세스를 정의하는 예를 포함한다.
다른 방법으로는, 비디오는 DVB-H (digital video broadcast-handheld), ISDB-T (integrated services digital broadcast - terrestrial), 또는 DMB (digital media broadcast) 와 같은 다른 표준에 따라 방송될 수도 있다. 따라서, 다양한 양태에서, 소스 디바이스 (12) 는 모바일 무선 단말기, 비디오 스트리밍 서버, 또는 비디오 방송 서버일 수도 있다. 그러나, 본 개시물에서 설명된 기술은 임의의 특정 타입의 방송, 멀티캐스트, 또는 포인트-투-포인트 시스템에 제한되지 않는다. 비디오 방송의 경우에, 소스 디바이스 (12) 는 비디오 데이터의 수개의 채널을 다수의 목적지 디바이스로 방송할 수도 있는데, 이들 각각은 도 1 의 목적지 디바이스 (14) 와 유사할 수도 있다. 따라서, 단일 목적지 디바이스 (14) 가 도 1 에 도시되었더라도, 비디오 방송을 위해, 소스 디바이스 (12) 는 많은 목적지 디바이스와 동시에 비디오 컨텐츠를 보다 통상적으로 방송할 수도 있다.
송신기 (22), 통신 채널 (16), 및 수신기 (24) 는 이더넷, 전화 (예를 들어, POTS), 케이블, 전력선, 및 광섬유 시스템 중 하나 이상을 포함하는 임의의 유선 또는 무선 통신 시스템, 및/또는 코드 분할 다중 접속 (CDMA 또는 CDMA2000) 통신 시스템, 주파수 분할 다중 접속 (FDMA) 시스템, 직교 주파수 분할 다중 (OFDM) 접속 시스템, 시분할 다중 접속 (TDMA) 시스템, 예를 들어, GSM (Global System for Mobile Communication), GPRS (General packet Radio Service), 또는 EDGE (enhanced data GSM environment), TETRA (Terrestrial Trunked Radio) 모바일 텔레폰 시스템, 광대역 코드 분할 다중 접속 (WCDMA) 시스템, 고속 레이트 1xEV-DO (First generation Evolution Data Only) 또는 1xEV-DO 골드 멀티캐스트 시스템, IEEE 802.18 시스템, MediaFLOTM 시스템, DMB 시스템, DVB-H 시스템, 또는 2 개 이상의 디바이스 사이의 데이터 통신을 위한 다른 방식 중 하나 이상을 포함하는 무선 시스템에 따라 통신하도록 구성될 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (26) 는 하나 이상의 마이크로프로세서, DSP (digital signal processor), ASIC (application specific integrated circuit), FPGA (field programmable gate array), 이산 로직, 소프트웨어, 하드웨어, 펌웨어 또는 이들의 임의의 조합으로 구현될 수도 있다. 비디오 인코더 (20) 와 비디오 디코더 (26) 각각은 하나 이상의 인코더 또는 디코더에 포함될 수도 있는데, 이들 중 어느 하나는 개개의 모바일 디바이스, 가입자 디바이스, 방송 디바이스, 서버 등에서 결합된 인코더/디코더 (CODEC) 의 일부로서 집적될 수도 있다. 또한, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 각각, 적용가능하다면 무선 통신을 지원하는데 충분한 무선 주파수 (RF) 무선 컴포넌트 및 안테나를 포함하는 (적용가능하다면) 인코딩된 비디오의 송수신을 위한 적절한 변조, 복조, 주파수 변환, 필터링, 및 증폭 컴포넌트를 포함할 수도 있다. 그러나, 예시의 편의를 위해, 이러한 컴포넌트는 일반적으로 도 1 에서 소스 디바이스 (12) 의 송신기 (22) 및 목적지 디바이스 (14) 의 수신기 (24) 로 요약된다.
도 2 는 본 개시물에서 설명된 바와 같이 에러 핸들링 및 은닉 기술을 수행하는 비디오 디코더 (26) 의 예를 도시한 블록도이다. 비디오 디코더 (26) 는 도 1 의 목적지 다바이스 (14) 의 비디오 디코더에 대응할 수도 있다. 도 2 의 예에 도시된 바와 같이, 비디오 디코더 (26) 는 수신 버퍼 (30), 디코딩 엔진 (32), 에러 핸들링 모듈 (34), 에러 은닉 모듈 (36) 및 복원 (RECON) 버퍼 (38) 를 포함한다. 일반적으로, 수신 버퍼 (30) 는 비디오 인코더 (20) 에 의해 인코딩된 데이터와 같이, 인코딩된 비디오 데이터를 수신 및 저장한다. 복원 버퍼 (38) 는 디코딩 엔진 (32) 에 의해 디코딩 및 복원되는 디코딩된 비디오 데이터를 저장한다. 복원 버퍼 (38) 의 디코딩된 비디오 데이터는 수신 버퍼 (30) 로부터 획득된 예측-코딩된 비디오 데이터의 디코딩에 있어서 디코딩 엔진 (32) 에 의해 이용되는 참조 프레임을 제공하는데 이용될 수도 있다. 또한, 복원 버퍼 (38) 로부터 획득되는 디코딩된 비디오 데이터는 디코딩된 비디오 비트스트림에서 에러를 은닉하기 위해 에러 은닉 모듈 (36) 에 의해 이용될 수 있다. 복원 버퍼 (38) 에서 복원된 데이터는 다양한 포스트-프로세싱 동작 중 임의의 동작을 위해 디코딩된 비디오 데이터로서 제공될 수도 있다. 비디오 디코더 (26) 에 의해 생성되고 임의의 적용가능한 포스트-프로세싱되는 디코딩된 비디오 데이터는 디스플레이 디바이스를 통해 사용자에 대한 프리젠테이션을 위해 출력 버퍼에 제공될 수도 있다. 디코딩 엔진 (32), 에러 핸들링 모듈 (34) 및 에러 은닉 모듈 (36) 은 디코딩된 비디오 데이터를 생성하기 위해 협력한다. 디코딩 엔진 (32), 에러 핸들링 모듈 (34) 및 에러 은닉 모듈 (36) 은 본 개시물에서 설명된 바와 같이 순차 에러 핸들링 프로세스를 적용하도록 구성된다.
도 1 및 도 2 에서 포함되게 도시된 다양한 컴포넌트, 유닛 또는 모듈뿐만 아니라, 본 개시물 전체에 걸쳐 설명된 다른 컴포넌트는 하드웨어 및/또는 소프트웨어의 임의의 적절한 조합에 의해 실현될 수도 있다. 도 1 및 도 2 뿐만 아니라, 도 3 에서, 다양한 컴포넌트는 개별 컴포넌트, 유닛 또는 모듈로 도시된다. 그러나, 도 1 내지 도 3 과 관련하여 설명된 다양한 컴포넌트의 전부 또는 몇몇은 공통의 하드웨어 및/또는 소프트웨어 내에서 조합된 유닛 또는 모듈로 집적될 수도 있다. 따라서, 컴포넌트, 유닛 또는 모듈로서의 특징의 표현은 예시의 편의를 위해 특정한 기능상 특징을 강조하도록 의도한 것이고, 반드시 개별 하드웨어 또는 소프트웨어 컴포넌트에 의해 이러한 특징의 실현을 요구하는 것은 아니다.
몇몇 경우에, 하나 이상의 프로세서에 의해 수행된 프로그램가능 프로세스로 다양한 유닛이 구현될 수도 있다. 예를 들어, 본 개시물에서 개별 모듈, 유닛, 엔진 또는 컴포넌트로 다양한 특징이 구현되더라도, 이 특징은 함께 집적 로직 디바이스에서 또는 이산되어 개별적이지만 공동 동작가능한 로직 디바이스에서 구현될 수도 있다. 몇몇 경우에, 집적 회로 칩 또는 칩셋과 같이, 집적 회로 디바이스로 다양한 특징이 구현될 수도 있다. 이 기술이 소프트웨어로 구현되면, 실행되는 경우에 하나 이상의 프로세서로 하여금 본 개시물에서 설명된 방법 중 하나 이상을 수행하게 하는 명령을 포함하는 컴퓨터-판독가능 저장 매체에 의해 이 기술은 적어도 부분적으로 실현될 수도 있다.
도 2 를 더 참조하면, 수신 버퍼 (30) 는 인코딩된 비디오 데이터를 저장하기 위한 DRAM (dynamic random access memory) 과 같은 메모리 모듈에 의해 실현될 수도 있다. 설명된 바와 같이, 인코딩된 비디오 데이터는 하나 이상의 프레임 또는 슬라이스와 같은 비디오 데이터 유닛을 포함할 수도 있다. 프레임 또는 슬라이스는 MB 와 같은 블록 및 더 작은 블록을 포함할 수도 있다. 예시를 목적으로, 인코딩된 비디오 데이터는 다수의 프레임을 포함하고, 각 프레임은 하나 이상의 슬라이스를 포함하며, 각 슬라이스는 다수의 MB 를 포함하는 것으로 가정한다.
디코딩 엔진 (32) 은 수신 버퍼 (30) 로부터 획득되는 인코딩된 비디오 데이터를 파싱하고, 인코딩된 비디오 데이터를 디코딩한다. 디코딩 엔진 (32) 은 본 개시물에서 설명된 비디오 코딩 표준, 또는 다른 비디오 코딩 표준 중 하나에 의해 정의된 바와 같이 디코딩 기술을 구현할 수도 있다. 그러나, 예시를 목적으로, 디코딩 엔진 (32) 은 H.264/MPEG-4 AVC 표준에 따라 디코딩 기술을 수행한다고 가정할 수도 있다. 디코딩 엔진 (32) 은 비트 파싱을 수행하여 들어오는 비트스트림을 파싱함으로써, 디코딩될 인코딩된 정보의 프레임, 슬라이스, 블록 및 다른 유닛을 식별할 수도 있다. 또한, 디코딩 엔진 (32) 은 복원을 수행하여, 인코딩된 정보의 유닛으로 비디오 데이터를 디코딩 및 복원할 수도 있다.
에러 핸들링 모듈 (34) 은 본 개시물에서 설명된 바와 같이 순차 에러 핸들링 기술에 따라 디코딩 에러를 핸들링하도록 구성된다. 도 2 의 예에서, 에러 핸들링 모듈 (34) 은 에러 검출과 에러 핸들링 둘 다를 수행할 수도 있다. 그러나, 몇몇 구현예에서, 별개의 에러 검출 및 에러 핸들링 모듈이 제공될 수도 있다. 동작 시에, 에러 핸들링 모듈 (34) 은 디코딩 엔진 (32) 에 의해 생성되는 디코딩된 비디오 데이터에서 디코딩 에러를 검출하고, 정확한 데이터의 손실 또는 에러 있는 데이터의 디스플레이를 피하기 위해 은닉되어야 하는 MB 와 같은 데이터의 범위를 식별할 수도 있다.
에러 은닉 모듈 (36) 은 에러 핸들링 모듈 (34) 로부터 디코딩 에러 범위 (ERROR RANGE) 를 수신한다. 디코딩 에러 범위는 에러 은닉 모듈 (36) 에 의해 어떤 MB 가 은닉되어야 하는지를 규정할 수도 있다. 예를 들어, 에러 핸들링 모듈 (34) 은 에러 범위로서, 비트스트림에서 다음의 이용가능한 슬라이스의 MB N 을 시작하기 전에 제 1 슬라이스의 최초 MB 0 에서 최종 MB N-1 까지 연장되는 모든 MB 를 규정할 수도 있다. 에러 은닉 모듈 (36) 은 다양한 은닉 기술 중 임의의 기술에 따라 에러를 은닉하여, 디코딩 엔진 (32) 에 의해 발생되는 식별된 MB 를 상이한 MB 로 대체할 수도 있다. 예를 들어, 에러 은닉 모듈 (36) 은 은닉된 비디오 데이터를 디코딩 엔진 (32) 에 제공할 수도 있다. 에러 은닉 모듈 (36) 은 복원 버퍼에 제공되는 디코딩된 비디오 데이터에 은닉된 비디오 데이터를 포함할 수도 있다. 예시로서, 에러 핸들링 모듈 (34) 이 에러 범위로서 MB 0 내지 MB 54 를 규정하면, 에러 은닉 모듈 (36) 은 MB 0 내지 54 를 은닉하고, 은닉된 MB [0, 54] 을 디코딩 엔진 (32) 에 제공한다.
수신 버퍼 (30) 와 유사하게, 복원 버퍼 (38) 는, 디코딩 엔진 (32) 에 의해 발생되는 디코딩된 비디오 데이터를 저장하는 DRAM 과 같은 메모리 모듈을 나타낸다. 또한, 디코딩 엔진 (32) 은 수신 버퍼 (26) 로부터 획득되는 인코딩된 비디오 데이터를 디코딩하는데 이용하기 위해 복원 버퍼로부터 디코딩된 비디오 데이터를 검색할 수도 있다. 특히, 디코딩 엔진 (32) 은 다른 프레임의 디코딩을 위한 참조 프레임으로서 복원 버퍼 (38) 로부터 디코딩된 비디오 데이터를 이용할 수도 있다. 몇몇 구현예에서, 에러 은닉 모듈 (36) 은 에러가 검출된 경우에 복원 버퍼 (38) 내에 규정된 MB 를 겹쳐쓰기 (overwrite) 하여, 디코딩된 MB 를 은닉할 수도 있다. 다른 방법으로는, 도 2 의 예에서와 같이, 에러 은닉 모듈 (36) 은 디코딩 엔진 (32) 이 디코딩된 MB 를 복원 버퍼 (38) 에 전달하기 전에 디코딩 엔진 (32) 과 조정하여 규정된 MB 를 은닉할 수도 있다. 예를 들어, 에러 은닉 모듈 (36) 은 은닉된 MB 와 같이 은닉된 비디오 데이터를 디코딩 엔진 (32) 에 제공할 수도 있다. 디코딩 엔진 (32) 은 이후 에러 은닉 모듈 (36) 로부터의 은닉된 비디오 데이터로 손상된 데이터를 대체하고, 결과로서 생긴 데이터를 디코딩된 비디오 데이터로서 복원 버퍼 (38) 에 기록할 수도 있다.
에러가 검출되는 경우, 디코딩 엔진 (32) 은 다음의 이용가능한 슬라이스 헤더의 포인트까지 MB 를 계속 디코딩하거나, MB 의 디코딩을 정지하고 비트스트림에서 다음의 이용가능한 슬라이스 헤더를 찾을 수도 있다. 에러가 검출되는 경우에 현재 슬라이스의 디코딩을 종료하고, 디코딩될 다음의 슬라이스로 이동하여 에러 은닉을 지원하는 것이 더 효율적일 수도 있다. 이후, 손상된 데이터의 은닉 시에, 디코딩 엔진 (32) 은 현재 슬라이스로서 다음의 슬라이스의 디코딩을 재개할 수도 있다. 따라서, 에러 은닉 모듈 (36) 은 MB 를 기록 또는 겹쳐쓰기하여 손상된 데이터 세그먼트를 은닉하도록 구성될 수도 있다. 어느 경우에나, 복원 버퍼 (38) 에 저장되는 디코딩된 비디오 데이터는, 디코딩 에러를 은닉하기 위해 에러 은닉 모듈 (36) 에 의해 선택 또는 발생된 MB 및 디코딩 엔진 (32) 에 의해 생성된 디코딩된 MB 에 기초한 디코딩된 비디오 데이터를 포함할 수도 있다.
동작 시에, 비디오 디코더 (26) 의 수신 버퍼 (30) 는 도 1 의 수신기 (24) 와 같이, 수신기로부터 인코딩된 비디오 데이터를 초기에 수신하고, 인코딩된 비디오 데이터를 저장할 수도 있다. 디코딩 엔진 (32) 은 수신 버퍼 (30) 에 액세스하여, 프레임의 슬라이스와 같이, 수신 버퍼 (30) 에 저장된 인코딩된 비디오 데이터의 유닛을 검색할 수도 있다. 슬라이스를 검색한 후지만, 슬라이스를 디코딩하기 전에, 디코딩 엔진 (32) 는 먼저, 예를 들어, 디코딩될 현재 슬라이스의 최초 MB 와 연관된 MB 개수를 송신함으로써 슬라이스의 시작을 에러 핸들링 모듈 (34) 에 통지할 수도 있다. 이 최초 MB 는 슬라이스 시작 MB 로 지칭될 수도 있다. 에러 핸들링 모듈 (34) 은 슬라이스의 시작에서 최초 MB 의 개수를 저장할 수도 있다.
디코딩 엔진 (32) 은 슬라이스에서의 MB 를 디코딩하는 것을 진행하고, 복원 버퍼 (38) 에 디코딩된 슬라이스 데이터를 저장한다. 슬라이스를 디코딩하면서, 디코딩 엔진 (32) 은 복원 버퍼 (38) 에 디코딩된 슬라이스를 저장하는 것에 더해, 또한 디코딩된 비디오 데이터를 에러 핸들링 모듈 (34) 로 출력할 수도 있다. 다양한 구현예에서, 에러 핸들링 모듈 (34) 은, 복원 버퍼 (38) 에 저장되는 디코딩된 비디오 데이터, 디코딩 엔진으로부터 직접 제공되는 디코딩된 비디오 데이터, 또는 상이한 버퍼에 저장되는 디코딩된 비디오 데이터를 분석할 수도 있다. 각 경우에, 에러 핸들링 모듈 (34) 은 디코딩된 비디오 데이터를 분석 또는 그렇지 않으면 검사하여, 디코딩된 비디오 데이터에 디코딩 에러가 존재하는지 여부를 판정할 수도 있다. 따라서, 에러 검출 능력은 에러 핸들링 모듈 (34) 내에서 제공될 수도 있다. 다른 방법으로는, 다양한 구현예에서, 비디오 디코더 (26) 내의 디코딩 엔진 (32) 또는 다른 컴포넌트는 디코딩 에러 검출 능력을 포함할 수도 있다.
에러 핸들링 모듈 (34) 은 임의의 개수의 방식으로 디코딩된 비디오 데이터를 분석하여 다양한 디코딩 에러를 검출할 수도 있다. 예를 들어, 에러 핸들링 모듈 (34) 은, 수신 버퍼 (30) 에 의해 수신되고 디코딩 엔진 (32) 에 의해 디코딩되는 인코딩된 슬라이스에서 구문 에러, 의미 에러, 및/또는 다른 코딩 에러를 검출할 수도 있다. 일반적으로, 디코딩 엔진 (32) 은 예를 들어, H.264/MPEG-4 AVC 와 같이, 적용가능한 코딩 기술에 의해 규정된 구문을 이용하여 비트스트림을 디코딩한다. 구문 에러는, 적용가능한 구문에 의해 규정된 예상 비트 패턴으로부터 비트스트림이 벗어나면 검출될 수도 있다. 의미 에러는, 범위 밖 데이터, 무효 정보, 또는 적용불가능한 커맨드와 같이, 비디오 디코더 (26) 에서 디코딩이 부정확한 값 또는 동작을 생성하는 경우에 검출될 수도 있다. 코딩 에러는 엔트로피-코딩된 값이 예를 들어, CAVLC (context-adaptive variable length coding) 테이블과 같은 적용가능한 코딩 테이블의 패턴 또는 값과 매치하지 않으면 검출될 수도 있다. CABAC (context-adaptive binary arithmetic coding) 과 같은 다른 타입의 엔트로피 코딩이 이용될 수도 있다.
따라서, 구문 에러 체크를 수행하기 위해, 에러 핸들링 모듈 (34) 은 적용가능한 구문에 의해 규정된 예상 비트 패턴과 디코딩된 비트스트림의 비트 패턴을 비교할 수도 있다. 비트 패턴이 예상 비트 패턴과 불일치하면, 에러 핸들링 모듈 (34) 은 디코딩 에러가 검출되었다고 표시할 수도 있다. 유사하게, 의미 에러 체크를 수행하기 위해, 에러 핸들링 모듈 (34) 은 하나 이상의 구문 엘리먼트의 값을 분석하여 이들 값이 유효하다는 것을 보장할 수도 있다. 예를 들어, 에러 핸들링 모듈 (34) 은 이 값이 다른 값과 일치하고, 현재 디코딩된 슬라이스와 일치하고/하거나 이전에 디코딩된 프레임, 슬라이스 또는 블록과 일치하는지 여부를 판정할 수도 있다. 구문 엘리먼트 값이 허가 또는 예상 값의 범위 내에 있지 않으면, 에러 핸들링 모듈 (34) 은 디코딩 에러의 검출을 표시할 수도 있다. 코딩 에러를 검출하기 위해, 에러 핸들링 모듈 (34) 은 CAVLC 또는 CABAC 테이블과 같이, 적용가능한 엔트로피 코딩 테이블에서의 코드워드의 리스트와 디코딩된 코드워드를 비교할 수도 있다. 매치가 없으면, 에러 핸들링 모듈 (34) 은 디코딩 에러의 검출을 표시할 수도 있다.
디코딩 에러의 검출 시에, 에러 핸들링 모듈 (34) 은 비디오 디코더 (26) 과 연관된 메모리에 에러 플래그를 설정하고, 디코딩 에러를 디코딩 엔진 (32) 에 통지할 수도 있다. 디코딩 엔진 (32) 은 검출된 디코딩 에러의 통지에 응답하여, 수신 버퍼 (30) 에 저장되는 인코딩된 비디오 데이터의 디코딩을 재동기화할 수도 있다. 특히, 디코딩 엔진 (32) 은 현재 슬라이스의 디코딩을 정지하고, 예를 들어, 다음 식별가능한 슬라이스 또는 NAL 유닛 헤더에 의해 식별되는 바와 같이, 비트스트림으로부터 이용가능한 다음 슬라이스의 검색을 진행할 수도 있다. 다음의 슬라이스는, 비트스트림을 파싱함으로써 디코딩 엔진 (32) 에 의해 분별될 수 있는 다음의 슬라이스인 점에서 "이용가능한" 다음 슬라이스로 지칭될 수도 있다. NAL 헤더 및/또는 프레임 헤더에 걸쳐 디코딩 에러가 전파됨으로써, 슬라이스, 및 프레임 (불가능하지 않다면 어려움) 사이의 구분을 렌더링할 수도 있다. 다시 말해, 디코딩 에러는 단일 슬라이스 (이 경우에 다음의 재동기화 포인트는 수신된 비트스트림에서의 바로 다음의 슬라이스와 연관될 수도 있다), 또는 다수의 슬라이스 (이 경우에 다음의 재동기화 포인트는 비트스트림에서의 나중 슬라이스와 연관될 수도 있다) 에서 MB 의 손상 또는 손실을 초래할 수도 있다. 따라서, 다음의 이용가능한 슬라이스는, 예를 들어, 식별가능한 NAL 유닛 헤더에 의해 손쉽게 분별가능할 수 있는 비트스트림에서의 다음의 슬라이스로 지칭될 수도 있다. NAL 헤더는 손상되고 손쉽게 분별가능하지 않다는 점에서 "식별가능한" 것으로 지칭될 수도 있다.
디코딩 에러가 검출되는 경우, 디코딩 엔진 (32) 은 상술한 바와 같이, 현재 슬라이스의 나머지를 디코딩하지 않고 비트스트림에서 다음의 이용가능한 재동기화 포인트로 진행할 수도 있다. 다른 방법으로는, 디코딩 엔진 (32) 은 에러 플래그가 설정되었더라도 비트스트림을 계속 디코딩할 수도 있다. 다음의 이용가능한 슬라이스가 획득되는 경우, 디코딩 엔진 (32) 은 이후 에러 핸들링 및 에러 은닉을 수행할 수도 있다. 디코딩 엔진 (32) 이 에러 플래그가 설정된 후에 비트스트림을 계속 디코딩하도록 구성될 수도 있더라도, 현재 슬라이스의 디코딩을 정지하고 대신에 다음의 슬라이스로 진행하여, 에러가 검출된 이전의 슬라이스에 대해 에러 핸들링 및 에러 은닉을 지원하는 것이 보통 더 효율적일 것이다. 손상된 데이터 세그먼트가 디코딩되더라도, 이는 에러 은닉 모듈 (36) 에 의해 은닉될 것이다. 그러나, 에러가 검출되는 경우에 디코딩 동작을 중단하고 다음의 이용가능한 슬라이스로 진행하는 것이 더 효율적일 수도 있다. 디코딩 에러가 검출되지 않는 경우, 디코딩 엔진 (32) 은 현재 슬라이스의 나머지를 디코딩하는 것을 진행한다. 어느 경우에나, 디코딩 엔진 (32) 이 다음의 이용가능한 슬라이스의 시작을 표시하는 다음의 재동기화 포인트에 도달하는 경우, 디코딩 엔진 (32) 은 그 슬라이스의 최초 MB 를 결정한다. 또한, 디코딩 엔진 (32) 은 에러 핸들링 모듈 (34) 이 에러 플래그를 설정하였는지 여부를 판정하여 이전의 비디오 슬라이스에서 디코딩 에러의 검출을 표시할 수도 있다.
에러 플래그가 설정되지 않은 경우, 디코딩 엔진 (32) 은 슬라이스의 최초 MB 를 저장하고 그 슬라이스를 디코딩하는 것을 진행한다. 이 포인트에서, 순차 에러 핸들링 접근 방식에 있어서, 이전의 슬라이스는 미리보기 접근 방식의 경우에서와 같이 제 2 패스 상에서 디코딩하기 위해 버퍼링된다기 보다 이미 디코딩되었다. 그러나, 에러 플래그가 설정되면, 디코딩 엔진 (32) 은 에러 핸들링 및 에러 은닉을 인보크한다. 특히, 다음의 이용가능한 슬라이스에 도달하는 경우, 디코딩 엔진 (32) 은 코딩 에러가 없는 이벤트에서 이전의 슬라이스의 디코딩의 완료 시 또는 코딩의 검출 후에 슬라이스로 진행하는 것 사이를 구별하지 않을 수도 있다. 차라리, 다음의 이용가능한 슬라이스에 도달하는 때에, 디코딩 엔진 (32) 및 에러 핸들링 모듈 (34) 은 에러 플래그를 검사하여 통상의 경로에서 단순히 순차 디코딩을 계속할지 여부를 판정하거나, 또는 에러 핸들링 및 에러 은닉을 적용할 수도 있다. 다시 말해, 에러 핸들링 모듈 (34) 은 보통 에러 없는 디코딩의 결과로서 또는 에러의 검출의 결과로서 다음의 이용가능한 슬라이스에 도달하였는지 여부를 알지 못할 수도 있다.
게다가 또, 에러가 검출되는 경우, 디코딩 엔진 (32) 은 현재 슬라이스의 디코딩을 정지하고 다음의 이용가능한 슬라이스를 검색할 수도 있다. 디코딩 엔진 (32) 은 이후, 예를 들어, 슬라이스의 최초 MB 에 대응하는 MB 번호를 포워딩함으로써 그 (다음의 이용가능한) 슬라이스의 시작을 에러 핸들링 모듈 (34) 에 통지할 수도 있다. 에러 핸들링 모듈 (34) 은 이 MB 번호의 수신 시에, 에러 플래그가 설정되는지 여부를 체크함으로써 디코딩 에러가 이전에 발생하였는지 여부를 판정할 수도 있다. 이 플래그가 설정되지 않으면, 에러 핸들링 모듈 (34) 은, 예를 들어, 새롭게 검색된 다음의 이용가능한 슬라이스에서 디코딩 에러가 검출되는 이벤트에서 나중의 이용을 위해 상술한 바와 같이, 이 최초 MB 번호를 저장할 수도 있다.
그러나, 에러 플래그가 설정되면, 에러 핸들링 모듈 (34) 은 에러가 발생한 현재 슬라이스의 끝, 예를 들어, 최종 MB 를 결정할 수도 있다. 예를 들어, 에러 핸들링 모듈 (34) 은 다음의 이용가능한 슬라이스의 최초 MB 에 대응하는 MB 번호에서 1 을 감산할 수도 있다. 디코딩 에러가 다수의 슬라이스 그리고 다수의 프레임에도 걸쳐 있을 수도 있음에 따라, 손상된 데이터 세그먼트는 마찬가지로 하나 이상의 슬라이스 및/또는 하나 이상의 프레임에 걸쳐 있을 수도 있다. 이하 더 상세히 설명되는 바와 같이, 순차 에러 핸들링 기술은 하나 이상의 슬라이스, 또는 하나 이상의 프레임에 걸치는 디코딩 에러를 핸들링할 수도 있다.
에러가 발생되는 손상된 데이터 세그먼트의 시작 및 끝을 결정한 후에, 에러 핸들링 모듈 (34) 은, 디코딩 에러 범위 (ERROR RANGE) 로 지칭될 수도 있는 이 정보를 에러 은닉 모듈 (36) 로 포워딩할 수도 있다. 이 디코딩 에러 범위에 기초하여, 에러 은닉 모듈 (36) 은, 복원 버퍼 (38) 에 저장될 수도 있는 이전에 디코딩된 비디오 데이터로, 복원 버퍼 (38) 에 저장되는 디코딩된 비디오 데이터를 대체함으로써 디코딩 에러 범위로 표시되는 디코딩 에러를 은닉할 수도 있다. 다른 방법으로는, 에러 은닉 모듈 (36) 은 은닉된 비디오 데이터를 디코딩 엔진 (32) 에 제공할 수도 있는데, 이는 디코딩된 데이터 및 은닉된 데이터의 복원 버퍼 (38) 로의 전달을 핸들링할 수도 있다. 몇몇 예에서, 에러 은닉 모듈 (36) 은 디코딩 에러를 은닉하는데 이용하기 위해, 이전에 디코딩된 비디오 데이터, 예를 들어, 이전에 디코딩된 MB, 슬라이스, 또는 프레임을 캐시 또는 국부적으로 저장할 수도 있다. 대안으로서, 손상된 데이터를 은닉하기 위해, 에러 은닉 모듈 (36) 은 예를 들어, 도 2 의 예에서 도시된 바와 같이, 복원 버퍼 (38) 로부터 이전에 디코딩된 비디오 데이터를 획득할 수도 있다.
에러 은닉 모듈 (36) 이 이전에 디코딩된 비디오 데이터에 액세스하는 방식과 상관없이, 에러 은닉 모듈 (36) 은 디코딩 에러 범위에 대응하는 디코딩된 비디오 데이터를 상기 열거한 은닉 기술 중 하나에 따라 이전에 디코딩된 비디오 데이터로 대체할 수도 있다. 에러 핸들링 모듈 (34) 에 의해 식별된 디코딩 에러 범위가 MB 0 에서 MB 54 로 연장되면, 예를 들어, 에러 은닉 모듈 (36) 은 MB 0 에서 MB 54 까지 모든 MB 를 은닉한다. 이 방식으로, 전체 슬라이스가 은닉되어, 모든 가능한 손상 MB 가 은닉되는 것을 보장한다.
에러 은닉 모듈 (36) 은 복원 버퍼 (38) 에 직접 은닉된 비디오 데이터를 기록할 수도 있다. 다른 방법으로는, 도 2 에 도시된 바와 같이, 에러 은닉 모듈 (36) 은 은닉된 비디오 데이터를 디코딩 엔진 (32) 에 제공할 수도 있다. 디코딩 엔진 (32) 은 이후 에러 은닉 모듈 (36) 로부터 은닉된 비디오 데이터로 표시된 적당히 디코딩된 MB 및 은닉된 MB 를 복원 버퍼 (38) 에 기록할 수도 있다. 에러 은닉 모듈 (36) 은 일반적으로 본 명세서에서 설명된 바와 같이, 픽셀 도메인의 에러 은닉을 적용할 수도 있다. 몇몇 구현예에서, 에러 은닉 모듈 (36) 은 에러 은닉을 위해 압축-도메인 프로세스를 적용할 수도 있다. 예를 들어, 에러 은닉 모듈 (36) 은 인코딩 모드 (예를 들어, SKIP 모드) 를 규정하여 손상된 MB 를 은닉하도록 구성될 수도 있다. 따라서, 본 명세서에서 설명된 기술은 픽셀-도메인 은닉 프로세스 또는 압축-도메인 은닉 프로세스를 포함하는 갖가지 상이한 에러 은닉 프로세스와 관련하여 이용될 수도 있다.
일단 손상된 MB 가 은닉되면, 비디오 디코더 (26) 는, 예를 들어, 샤프닝, 스케일링 등과 같이, 디코딩된 비디오 데이터에 적용될 수도 있는 임의의 포스트-프로세싱 동작처리되는, 상술한 바와 같은 디스플레이 또는 재생을 위한 디스플레이 디바이스 (28) 로 복원 버퍼 (38) 를 통해 디코딩된 비디오 데이터를 포워딩할 수도 있다. 디코딩 엔진 (32) 은 이후 상술한 바와 동일한 에러 핸들링 동작을 적용하면서 다음의 이용가능한 슬라이스를 디코딩하는 것을 진행할 수도 있다. 따라서, 이 에러 핸들링 프로세스는 디코딩 엔진 (32) 이 비트스트림에서 후속 슬라이스 및 프레임을 횡단함에 따라 연속적으로 적용될 수도 있다. 특히, 다양한 양태에서, 에러 핸들링 프로세스는 임의의 미리보기 동작의 필요 없이 순차 디코딩을 허락할 수도 있다. 이러한 방식으로, 비디오 디코더 (26) 는 목적지 디바이스 (14) 내에서 계산상 효율 및 전력 보전을 촉진할 수도 있다.
도 3 은 도 2 의 예시적인 에러 핸들링 및 은닉 모듈 (34 및 36) 을 더 상세히 도시한 블록도이다. 도 3 의 예는 예시를 목적으로 제공되어 에러 핸들링 모듈 (34) 및 에러 은닉 모듈 (36) 의 다양한 동작 양태를 강조하며, 본 개시물에서 폭넓게 설명된 순차 에러 핸들링 기술의 제한으로 간주되어서는 안된다. 도 3 의 예에서, 에러 핸들링 모듈 (34) 은 에러 검출 모듈 (40) 및 에러 맵핑 모듈 (42) 을 포함할 수도 있다. 에러 검출 모듈 (40) 은 구문 규칙 (44A), 의미 규칙 (44B) 및 엔트로피 규칙 (44C) 과 같이, 적용가능한 규칙에 따라, 구문, 의미 에러 체크 및 코딩 (예를 들어, CAVLC 또는 CABAC) 과 같은 상술한 에러 체크를 수행할 수도 있다. 에러 검출 모듈 (40) 은 에러 상태 표시자의 일례를 나타내는 에러 플래그 (46) 을 더 포함하고 보유한다. 에러 맵핑 모듈 (42) 은 손상된 데이터 세그먼트를 정의하기 위해 맵핑 (48) 을 보유한다. 에러 은닉 모듈 (42) 은 상술한 은닉 기술 중 하나 이상을 수행하는 은닉 엔진 (50), 및 손상된 데이터를 은닉하는데 있어서 은닉 엔진 (50) 에 의한 이용을 위해 비디오 데이터를 수신하는 비디오 버퍼 (51) 를 포함할 수도 있다.
일례로서, 수신 버퍼 (30) 에 저장되는 인코딩된 비디오 데이터를 디코딩하기 전에, 디코딩 엔진 (32) 은 디코딩될 현재 슬라이스에 대해 에러 핸들링 모듈 (34) 로 슬라이스 표시의 시작 ("슬라이스 시작") 을 송신할 수도 있다. 에러 검출 모듈 (40) 및 에러 핸들링 모듈 (42) 은 슬라이스 시작을 이용하여 디코딩 동작 중에 검출된 에러를 핸들링할 수도 있다. 슬라이스 시작은 슬라이스의 시작이 하나 이상의 슬라이스 또는 부분 슬라이스를 포함하는 손상된 데이터의 더 큰 세그먼트의 시작일 수도 있는 까닭에, 도 3 에 도시된 바와 같이, 보다 일반적으로 "세그먼트 시작"으로 지칭될 수도 있다.
게다가 또, 에러 핸들링 모듈 (34) 의 다양한 기능적인 양태를 강조하기 위해 모듈 및 유닛이 도 3 및 다른 도면에 도시된다. 따라서, 에러 검출 모듈 (40), 에러 맵핑 모듈 (42), 또는 다른 모듈 사이의 정밀한 구조 및 기능상 관계 및 상호작용은 변하게 될 수도 있다. 에러 맵핑 모듈 (42) 은, 상술한 바와 같이 디코딩될 현재 슬라이스의 최초 MB 를 포함할 수도 있는 세그먼트 시작을 저장할 수도 있다. MB 번호는 디코딩된 비트스트림에서의 구문 엘리먼트로부터 결정될 수도 있다. 예를 들어, 에러 맵핑 모듈 (42) 은 시작 MB (48A) 로서 최초 MB 를 저장할 수도 있다. 현재 슬라이스가 프레임에서의 최초 슬라이스이면, 최초 MB 는 MB 0 일 수도 있다. 현재 슬라이스가 프레임에서의 나중 슬라이스이면, 최초 MB 는 더 높은 수를 가질 수도 있다.
세그먼트 시작의 수신 시에, 에러 검출 모듈 (40) 은, 구문 엘리먼트를 가지는 디코딩된 MB 를 포함할 수도 있으며, 디코딩 엔진 (32) 에 의해 생성되는 디코딩된 비디오 데이터를 분석할 수도 있다. 에러 검출 모듈 (40) 은 디코딩된 구문 엘리먼트에 대해 구문 에러, 의미 에러, 및 엔트로피 코딩 에러 체크를 수행할 수도 있다. 특히, 에러 검출 모듈 (40) 은 구문 규칙 (44A), 의미 규칙 (44B) 및 엔트로피 규칙 (44C) 을 적용하여, 디코딩된 비디오 데이터에서 디코딩 에러가 있는지 여부를 판정할 수도 있다. 이들 에러 체크의 결과에 기초하여, 에러 검출 모듈 (40) 은 에러 플래그 (46) 또는 에러 상태를 저장할 수 있는 임의의 에러 표시자의 값을 제어한다. 예시의 목적으로 에러 검출 모듈 (40) 이 디코딩 에러를 검출한다고 가정하면, 에러 검출 모듈 (40) 은 에러 플래그 (46) 를 설정하고 에러의 표시 (도 3 의 "디코딩 에러 (DECODING ERROR)") 를 비디오 디코더 (26) 의 디코딩 엔진 (32) 으로 포워딩한다.
에러 표시에 응답하여, 디코딩 엔진 (32) 은, 예를 들어, 현재 슬라이스의 디코딩을 정지하고 비트스트림에서 다음의 이용가능한 슬라이스를 찾음으로써 디코딩을 중단하고 디코딩을 재동기화할 수도 있다. 다시 말해, 디코딩 에러가 검출되면, 디코딩 엔진 (32) 은 현재 슬라이스의 디코딩을 정지하고, 다음의 이용가능한 슬라이스를 디코딩하는 것을 진행한다. 게다가 또, 다음의 이용가능한 슬라이스는 다음 슬라이스의 NAL 유닛 헤더에서의 재동기화 코드워드에 의해 식별될 수도 있다. 다른 방법으로는, 에러 표시가 없으면, 디코딩 엔진 (32) 은, 슬라이스의 끝에 도달하여 다음의 이용가능한 슬라이스와 마주칠 때까지 현재 슬라이스를 계속 디코딩할 수도 있다. 어느 경우에나, 다음의 이용가능한 슬라이스의 도달 시에, 디코딩 엔진 (32) 은 다른 시작 세그먼트 시작 표시를 에러 검출 모듈 (40) 로 포워딩할 수도 있다. 에러 검출 모듈 (40) 은 새로운 세그먼트 시작, 예를 들어, 슬라이스 시작을 수신하고, 에러 플래그 (46) 의 상태에 기초하여 이전에 디코딩된 슬라이스에 디코딩 에러가 존재하였는지 여부를 판정한다.
에러 플래그 (46) 의 상태에 기초하여, 에러 검출 모듈 (40) 은 디코딩된 비디오를 계속 분석하거나 에러 맵핑 모듈 (42) 을 인보크할 수도 있다. 예를 들어, 에러 플래그 (46) 가 설정되지 않았으면 (에러가 검출되지 않았음을 표시함), 에러 검출 모듈 (40) 은 새롭게 수신된 슬라이스에 대해 에러 검출을 수행하는 것을 진행할 수도 있다. 그러나, 에러 플래그 (46) 가 설정되면 (에러가 검출되었음을 표시함), 에러 맵핑 모듈 (42) 은 에러 검출 모듈 (40) 에 의해 인보크되어 에러 범위, 즉, 은닉되어야 하는 손상된 데이터 세그먼트의 정도를 결정할 수도 있다. 이 경우에, 에러 맵핑 모듈 (42) 은 새롭게 수신된 슬라이스에서의 최초 MB 의 개수를 결정한다. 또한, 에러 맵핑 모듈 (42) 은, 새롭게 수신된 슬라이스에서의 최초 MB 번호에 기초하여 디코딩 에러가 검출되었던 손상된 데이터 세그먼트에서의 최종 또는 끝 MB 를 결정한다.
예를 들어, 끝 MB 번호를 결정하기 위해, 에러 맵핑 모듈 (42) 은 새롭게 수신된 슬라이스의 최초 MB 번호에서 1 을 감산하여, 새로운 슬라이스 시작을 바로 앞서는 최종 MB 의 개수를 획득할 수도 있다. 도 3 의 예에 도시된 바와 같이, 끝 MB 는 끝 MB (48B) 로서 저장될 수도 있다. 예를 들어, 새롭게 수신된 슬라이스에서의 최초 MB 가 55 이면, 손상된 데이터에서의 최종 MB 는 55 - 1 = 54 이다. 따라서, 에러 맵핑 모듈 (42) 은 시작 MB (48A) 와 끝 MB (48B) 를 포함하여 이들 사이에서 연장되는 에러 범위, 예를 들어, 상기의 예에서 MB 0 내지 MB 54 를 정의한다. 에러 범위는 디코딩된 비디오 데이터에 대한 에러의 악영향을 제거 또는 감소시키기 위해 은닉되어야 하는 MB 를 표시한다.
이하 설명되는 바와 같이, 에러 검출 모듈 (40) 은 또한 몇몇 양태에서 시작 MB 번호 (48A) 및 끝 MB 번호 (48B) 에 대응하는 MB 와 연관된 구문 엘리먼트의 값으로부터 시작 및 끝 프레임 번호를 결정할 수도 있다. 즉, 에러 검출 모듈 (40) 은 시작 MB 번호 (48A) 에 대응하는, 수신되어 디코딩된 비디오 데이터에 나타낸 MB 를 검사하고, MB 가 연관된 시작 프레임 번호를 결정할 수도 있다. 에러 검출 모듈 (40) 은 그 시작 프레임 번호를 에러 맵핑 모듈 (42) 로 포워딩할 수도 있는데, 이는 시작 프레임 (48C) 로서 시작 프레임 번호를 저장할 수도 있다. 에러 검출 모듈 (40) 은 또한 끝 MB 번호 (48B) 에 대응하는, 수신되어 디코딩된 비디오 데이터에 나타낸 MB 를 검사하고, MB 가 연관된 끝 프레임 번호를 결정할 수도 있다. 에러 검출 모듈 (40) 은 끝 프레임 번호를 에러 맵핑 모듈 (42) 로 포워딩할 수도 있는데, 이는 끝 프레임 (48D) 으로서 끝 프레임 번호를 저장할 수도 있다.
상술한 바와 같이, 에러 맵핑 모듈 (42) 은 맵핑 (48) 으로부터 에러 범위 또는 다른 에러 디스크립션을 발생시키고, 그 에러 범위를 에러 은닉 모듈 (36) 로 패스할 수도 있다. 몇몇 구현예에서, 에러 범위는 손상된 데이터 세그먼트에 대한 시작 MB (48A) 및 끝 MB (48B) 뿐만 아니라, 시작 프레임 (48C) 및 끝 프레임 (48D) 을 포함할 수도 있다. 예를 들어, 에러 맵핑 모듈 (42) 은 시작 및 끝 프레임 (48C, 48D) 을 비교함으로써 단일 프레임 내에 디코딩 에러 (및 그 결과 손상된 데이터 세그먼트) 가 있는지 여부를 결정하거나, 디코딩 에러가 2 개 이상의 프레임에 걸쳐 있는지 여부를 결정할 수도 있다. MB 넘버링은 보통 각 프레임의 시작에서 0 으로 재설정된다. 따라서, MB 번호만을 제시하는 에러 범위를 제공하는 것은 단일 프레임보다 많이 디코딩 에러가 영향을 미치는 경우에 충분하지 않을 수도 있다. 예를 들어, 시작 MB 가 제 1 프레임에서 MB 74 이면, 끝 MB 는 제 2 프레임에서 MB 56 일 수 있다. 따라서, 은닉 목적을 위해 에러 범위를 정확하게 해결하기 위해 프레임 번호뿐만 아니라 MB 번호를 추적하는 것이 필요할 수도 있다.
일반적으로, 시작 및 끝 프레임 (48C) 으로 나타낸 2 개의 프레임 번호가 동일하면, 에러 맵핑 모듈 (42) 은 시작 프레임 (48C) 과 끝 프레임 (48D) 둘 다에 의해 식별되는 프레임 번호에 대응하는 단일 프레임 내에 디코딩 에러가 있다고 결정할 수도 있다. 그러나, 시작 및 끝 프레임 번호 (48C, 48D) 가 동일하지 않으면, 에러 맵핑 모듈 (42) 은 디코딩 에러가 1 보다 많은 프레임에 걸쳐 있도록 에러 범위를 결정할 수도 있다. 따라서, 에러 맵핑 모듈 (42) 은 시작 및 끝 MB 번호 (48A, 48B) 및 시작 및 끝 프레임 번호 (48C, 48D) 를 이용하여 은닉되어야 하는 MB 의 범위를 식별하도록 구성될 수도 있다.
에러 은닉 모듈 (36) 은 에러 범위를 수신하고 은닉 엔진 (50) 을 채용하여 에러 범위에 의해 식별되는 MB 를 은닉한다. 에러 은닉 엔진 (50) 은 에러 범위에 의해 식별된 MB 를 은닉하는데 이용하기 위해, 이전에 디코딩된 프레임의 이전에 디코딩된 MB 를 검색하여 비디오 버퍼 (51) 에 저장할 수도 있다 (도 3 의 "버퍼링된 비디오 데이터"). 상술한 바와 같이, 몇몇 양태에서, 이전에 디코딩된 MB 는 하나 이상의 인접한 프레임으로부터 획득될 수도 있고, 은닉될 MB 와 공간상 함께 위치할 수도 있다. 이전에 디코딩된 MB 는 대체되어, 에러 범위에서의 잠재적으로 손상된 MB 를 은닉하여 대체 프레임 데이터를 형성할 수도 있다. 몇몇 구현예에서, 에러 은닉 모듈 (36) 은 복원 버퍼 (38) 로부터 디코딩된 비디오 데이터로서 이전에 디코딩된 MB 를 획득할 수도 있다.
은닉 엔진 (50) 은 다양한 다른 은닉 기술 중 임의의 기술을 구현하여, 에러 범위에 의해 식별되는 디코딩 에러를 은닉할 수도 있다. 에러 은닉 엔진 (50) 은 대체 데이터로서 은닉된 비디오 데이터를 비디오 디코딩 엔진 (32) 에 제공할 수도 있다. 비디오 디코딩 엔진 (32) 은 적당히 디코딩된 비디오 데이터 및 은닉된 비디오 데이터를 복원 버퍼 (38) 에 제공할 수도 있다. 다른 방법으로는, 은닉된 프레임 데이터는, 디코딩 엔진 (32) 에 의해 생성되고 복원 버퍼 (38) 에 저장되는 디코딩된 비디오 데이터의 일부를 기록 또는 겹쳐쓰기하는데 이용될 수도 있다. 어느 경우에나, 복원 버퍼 (38) 는 디스플레이 디바이스를 구동하는데 이용하기 위해 디코딩된 비디오 데이터를 제공할 수도 있다.
도 4 는 순차 에러 핸들링 및 은닉 기술을 수행함에 있어서의 비디오 디코더 (26) 와 같은 비디오 디코더의 예시적인 동작을 도시한 흐름도이다. 상술한 바와 같이, 비디오 디코더 (26) 는 도 1 의 수신기 (24) 와 같은 수신기로부터 인코딩된 비디오 데이터를 수신한다 (52). 비디오 디코더 (26) 는 수신 버퍼 (30) 에서 인코딩된 비디오 데이터를 버퍼링할 수도 있다. 디코딩 엔진 (32) 은 인코딩된 비디오 데이터의 현재 슬라이스의 시작을 결정하고 (54), 슬라이스를 디코딩할 수도 있다 (56). 현재 슬라이스의 시작은 설명할 바와 같이, 에러가 검출되면 손상된 데이터 세그먼트에 대한 에러 범위를 식별하도록 에러 핸들링 모듈 (34) 에 의해 이용될 수도 있다. 에러 핸들링 모듈 (34) 이 디코딩 에러를 검출하지 않았고 (58), 현재 슬라이스의 끝에 디코딩이 도달하지 않았으면 (59), 디코딩 엔진 (32) 은 슬라이스를 계속 디코딩할 수도 있다 (56).
디코딩 에러의 검출 없이 슬라이스의 끝에 도달하면 (59), 디코딩 엔진 (32) 은 추가 인코딩된 데이터의 다음의 이용가능한 것의 수신을 진행하고 (52), 그 슬라이스에 대해 동작 (54), (56) 및 (58) 을 반복할 수도 있다. 디코딩 에러가 검출되지 않으면 (58), 비디오 디코더 (26) 는 비트스트림에서 연속적인 슬라이스를 계속 디코딩한다. 그러나, 디코딩 에러가 검출되면 (58), 에러 핸들링 모듈 (34) 은 인코딩된 비디오 데이터의 다음의 이용가능한 슬라이스의 시작을 결정하고 (60), 다음의 이용가능한 슬라이스의 시작에 기초하여 (현재 슬라이스를 포함하는) 손상된 데이터 세그먼트의 끝을 결정할 수도 있다 (62).
게다가 또, 다음의 이용가능한 슬라이스는 비트스트림에서 식별될 수 있는 다음의 이용가능한 세그먼트이다. 따라서, 다음의 이용가능한 슬라이스는, 손상된 데이터가 단일 슬라이스만에 영향을 미치는 이벤트에서, 디코딩 에러가 검출된 슬라이스를 뒤따르는 바로 다음의 슬라이스일 수도 있다. 한편, 에러가 데이터의 2 개 이상의 슬라이스의 손상 또는 손실을 초래하면, 다음의 이용가능한 슬라이스는 원래 인코딩된 비트스트림에서 현재 슬라이스를 바로 뒤따르지 않았던 나중 슬라이스일 수도 있다.
상술한 바와 같이, 다음의 이용가능한 슬라이스의 시작에 기초하여 (60), 에러 핸들링 모듈 (34) 은, 다음의 이용가능한 슬라이스에서 최초 MB 번호에서 1 을 감산함으로써 획득될 수도 있는 손상된 데이터 세그먼트와 연관된 손상된 데이터 세그먼트의 끝을 결정한다. 에러 핸들링 모듈 (34) 은 손상된 데이터 세그먼트의 시작 및 끝을 에러 은닉 모듈 (36) 에 제공하여, 은닉에 대한 에러 범위를 정의한다. 에러 범위는 데이터 손실의 정도에 따라, 오리지널 비트스트림의 단일 슬라이스 또는 다수의 슬라이스를 커버할 수도 있다.
에러 범위에 있어서, 에러 은닉 모듈 (34) 은 손상된 데이터 세그먼트의 시작에서 손상된 데이터 세그먼트의 끝으로 연장되는 비디오 데이터를 은닉한다 (64). 손상된 데이터 세그먼트의 은닉 시에, 비디오 디코더 (26) 는 다음의 이용가능한 슬라이스가 디코딩될 수도 있도록, 즉, 새로운 현재 슬라이스로서 다음의 이용가능한 슬라이스와 연관된 인코딩된 비디오 데이터를 수신하는 것을 진행할 수도 있다 (52). 이 경우에, 비디오 디코더 (26) 가 비디오 비트스트림을 따라 진행함에 따라, 다음의 이용가능한 슬라이스는 이제 도 4 에 도시된 프로세스의 목적을 위해 현재 슬라이스가 되고, 순차 디코딩, 에러 핸들링 및 은닉을 지원하기 위해 도 4 에 개략화된 다양한 동작이 반복된다.
상술한 바와 같이, 에러 핸들링 모듈 (34) 은 디코딩 에러 (58) 가 구문, 의미, 또는 엔트로피 코딩 에러 체크에 기초하여 발생하였는지 여부를 판정할 수도 있다. 에러 핸들링 모듈 (34) 이 에러를 검출하면, 에러 핸들링 모듈 (34) 은 디코딩 엔진 (32) 에 에러를 통지할 수도 있다. 에러 표시에 응답하여, 비디오 디코더 (32) 는 비트스트림을 파싱함으로써 인코딩된 비디오 데이터의 디코딩을 재동기화하여, 수신 버퍼 (30) 에 저장되는 인코딩된 비디오 데이터의 다음의 이용가능한 슬라이스의 시작을 결정할 수도 있다 (60). 특히, 디코딩 엔진 (32) 은, 디코딩 에러가 발생하는 경우에 재동기화를 위해 비트스트림을 파싱하거나, 또는 에러가 검출되지 않은 경우에 현재 슬라이스를 디코딩하는 통상의 경로에서, 다음의 이용가능한 슬라이스에 도달한다. 에러가 검출되면, 에러 핸들링 모듈 (34) 은 이후 에러 범위, 예를 들어, 제 1 세그먼트의 시작 및 끝을 결정하고, 에러 범위를 에러 은닉 모듈 (36) 에 제공한다.
도 5 는 프레임 내의 디코딩 에러에 대한 에러 핸들링 및 은닉을 수행함에 있어서의 비디오 디코더 (26) 와 같은 비디오 디코더의 예시적인 동작을 도시한 흐름도이다. 이 기술은 H.264/MPEG-4 AVC 표준에 따라 공식화된 비트스트림에 관하여 후술되는데, 여기서 인코딩된 비디오 데이터는 복수의 프레임을 포함하고, 각 프레임은 복수의 슬라이스를 포함하며, 각 슬라이스는 복수의 인코딩된 MB 를 포함한다. 슬라이스는 NAL 유닛 헤더에 의해 식별될 수도 있다. H.264 표준에 관하여 설명되더라도, 기술은 또한 이 예시적인 양태에 엄격하게 제한되지 않아야 하지만, 비디오 데이터의 인코딩을 위한 다른 기술에 폭넓게 적용가능할 수도 있다.
도 5 는 도 4 에 일반적으로 부합하지만, 몇몇 추가적인 세부사항을 나타낸다. 도 5 의 예에서, 비디오 디코더 (26) 는 수신 버퍼 (30) 를 통해 인코딩된 비디오 프레임 데이터를 수신할 수도 있다 (66). 비디오 디코더 (26) 의 디코딩 엔진 (32) 은 제 1 프레임의 제 1 슬라이스에 초기에 액세스하는 때에, 제 1 슬라이스와 연관된 시작 MB 번호를 결정할 수도 있다 (68). 제 1 슬라이스는 다른 방법으로는 디코딩 엔진 (32) 에 의해 디코딩되는 현재 슬라이스로 지칭될 수도 있다. 현재 슬라이스가 디코딩 엔진 (32) 에 의해 디코딩되는 동안 (70), 에러 핸들링 모듈 (34) 은 디코딩 에러, 예를 들어, 구문, 의미 또는 엔트로피 코딩 에러를 검출할 수도 있다 (72). 디코딩 에러가 검출되면 (72), 에러 핸들링 모듈 (34) 은 에러 플래그를 설정한다 (74).
디코딩 에러가 검출되지 않고 (72), 디코딩 엔진 (32) 이 현재 슬라이스의 끝에 아직 도달하지 않으면 (76), 디코딩 엔진 (32) 은 현재 슬라이스를 계속 디코딩한다 (70). 디코딩 에러가 검출되거나 (72), 또는 현재 슬라이스의 끝이 도달하지 않았으면 (76), 에러 핸들링 모듈 (34) 은 다음의 이용가능한 슬라이스의 시작 MB 번호를 결정할 것이다 (78). 에러가 검출되는 경우, 디코딩 엔진 (32) 은 현재 슬라이스를 계속 디코딩하거나 디코딩하는 것을 정지하고 비트스트림을 파싱하여 다음의 이용가능한 슬라이스를 위치시킬 수도 있다. 에러가 검출되지 않는 경우 (72), 디코딩 엔진 (32) 은 현재 슬라이스의 디코딩을 완료한 후에 다음의 이용가능한 슬라이스에 도달하는데, 이 경우에 슬라이스의 끝에 도달한다 (76). 따라서, 디코딩 엔진 (32) 은 이전의 슬라이스에서 디코딩 에러의 검출을 뒤따르는 재동기화의 일부로서 또는 이전의 슬라이스의 성공적인 디코딩 시에 다음의 이용가능한 슬라이스에 도달할 수도 있다.
에러 플래그가 설정되지 않으면 (80), 디코딩 엔진 (32) 은 현재 슬라이스로서 다음의 이용가능한 슬라이스를 디코딩하는 것을 진행한다 (70). 따라서, 다음의 이용가능한 슬라이스는 도 5 에 개략화된 동작을 목적으로 현재 슬라이스가 될 수도 있고, 디코딩 프로세스는 반복된다. 그러나, 에러 플래그가 설정되면 (80), 에러 핸들링 모듈 (34) 은 다음의 이용가능한 슬라이스의 시작 MB 번호에 기초하여 현대의 슬라이스를 포함하는 손상된 데이터 세그먼트의 끝 MB 번호를 결정한다 (82). 예를 들어, 에러 핸들링 모듈 (34) 은 다음의 이용가능한 슬라이스의 시작 MB 번호에서 1 을 감산하여, 제 1 슬라이스를 포함하는 세그먼트의 끝 MB 번호를 결정한다 (82).
끝 MB 번호는, 하나의 슬라이스가 손상되었으면 현재 슬라이스의 끝 MB 번호일 수도 있다. 그러나, 1 개보다 많은 슬라이스가 손상되었으면, 끝 MB 번호는 나중 슬라이스의 끝 MB 번호일 수도 있다. 임의의 이벤트에서, 현재 슬라이스의 시작 MB 번호 및 끝 MB 번호를 이용하여, 에러 핸들링 모듈 (34) 은 에러 은닉 모듈 (36) 에 의한 이용을 위해 에러 범위를 정의한다. 에러 은닉 모듈 (36) 은 현재 슬라이스의 시작 MB 번호에서 손상된 데이터 세그먼트의 끝 MB 번호까지의 모든 MB 를 은닉함으로써 디코딩 에러를 은닉하는 것을 진행한다 (84). 에러 은닉의 완료 시에 (84), 비디오 디코더 (26) 는 디코딩될 다음의 슬라이스에 대한 에러 플래그를 재설정, 즉, 디코딩될 다음의 슬라이스와 관련되지 않을 수도 있는 임의의 링거링 저장 상태를 소거할 수도 있다. 또한, 비디오 디코더 (26) 는 현재 슬라이스로서 다음의 이용가능한 슬라이스를 디코딩하는 것을 진행하고 (70), 도 5 에 개략화된 에러 핸들링 동작을 반복한다.
도 6 은 프레임 내에 디코딩 에러를 포함하는 예시적인 비트스트림 (86) 에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다. 비트스트림 (86) 은 일반적으로 H.264/MPEG-4 AVC 표준에 따라 포맷될 수도 있다. 도 6 의 예에서, 디코딩 에러는 비트스트림의 중간에서 발생하고, 하나의 NAL 유닛 헤더를 포함한다. 순차 에러 핸들링 기술은 에러 은닉을 위해 MB 0-54 을 식별하도록 도 6 의 시나리오에 적용될 수도 있다. 도 6 은 2 개의 프레임 (88A, 88B) ("프레임 88") 을 도시하며, 여기서 프레임 (88A) 은 복수의 NAL 헤더 (90A-90D) 를 포함하고, 프레임 (88B) 은 복수의 NAL 헤더 (90E-90H) 를 포함한다. NAL 헤더 (90A 및 90E) 는 각각, 이들 NAL 헤더가 개개의 프레임 (88) 의 시작을 마킹하는 것으로 나타내기 위해 음영 형태로 도시된다. NAL 헤더 (90A-90H)("NAL 헤더 90") 각각은 슬라이스를 포함하는 NAL 유닛의 시작을 마킹한다. 각 프레임 (88) 은 하나 이상의 슬라이스, 그리고 보다 가능한 것은 다수의 슬라이스를 포함할 수도 있다. 각 NAL 유닛은 NAL 헤더 (90) 중 후속하는 NAL 헤더의 시작에서 끝난다.
예를 들어, 제 1 슬라이스는 MB 번호 0-20 에 대응하는 후속하는 복수의 MB 및 NAL 헤더 (90A) 를 포함하는데, 여기서 MB 번호 20 은 후속하는 NAL 헤더 (90B) 이전의 최종 MB 이다. 다음의 슬라이스는 NAL 유닛 헤더 (90B) 및 MB 번호 21 로 개시된다. 예시적인 MB 번호는 프레임 (88) 각각의 상단에 도시된다. 이러한 번호의 간격은 반드시 실제 비트스트림의 비율 또는 스케일을 반영하는 것은 아니고, 예시의 목적으로 제공된다. 상술된 바와 같이 "슬라이스"를 포함하는 NAL 유닛은 독립적으로 디코딩될 수도 있다. 다시 말해, 슬라이스는 다른 NAL 유닛으로부터의 정보 없이 디코딩될 수 있다. 이러한 방식으로, 각 NAL 유닛이 디코딩가능한 MB 의 자기-포함 시퀀스이므로, NAL 유닛의 손실은 반드시 주어진 프레임에 대한 앞선 또는 후속하는 NAL 유닛의 디코딩을 방해하는 것은 아니다.
이전에 설명된 바와 같이, 몇몇 비디오 디코더, 특히 소프트웨어 모듈로 구현된 것들은 미리보기 에러 핸들링 기술을 수행함으로써 디코딩 에러를 핸들링할 수도 있다. 현재 슬라이스를 디코딩하기 위해, 미리보기 기술은 제 1 슬라이스의 최종 블록 또는 MB 를 결정하기 위해 비디오 디코더가 다음의 이용가능한 슬라이스 헤더, 예를 들어, NAL 헤더를 디코딩하는 것을 통상적으로 요구한다. 즉, 비디오 디코더는 다음의 슬라이스 헤더를 미리보고, 현재 디코딩되는 슬라이스의 범위를 결정할 수도 있다. 비디오 디코더는, 현재 슬라이스를 디코딩하는 동안에 디코딩 에러가 검출되는 이벤트에서 은닉할 인코딩된 비디오 데이터의 부분을 식별하도록 현재 슬라이스를 디코딩하기 전에 현재 슬라이스의 최종 MB 를 또한 식별할 수도 있다. 비디오 디코더는 인코딩된 비디오 데이터의 각 슬라이스에 대해 이 미리보기 동작을 수행할 수도 있는데, 이는 비효율, 계산상 복잡성 및 과도한 전력 소비를 초래할 수도 있다.
미리보기 에러 핸들링 기술을 채용하는 비디오 디코더는 비순차 디코딩을 수행하는 것을 특징으로 할 수도 있다. 일례로서, 종래의 비디오 디코더는 먼저 현재 슬라이스의 시작 MB 를 결정한 후, 비트스트림에서 미리보아 다음의 재동기화 코드워드를 검출함으로써, 현재 슬라이스에서의 최종 MB 를 결정할 수도 있다. 특히, 재동기화 코드워드는 다음으로 적당히 수신된 슬라이스를 식별하는데 이용된다. 미리보기 후에, 디코더는 이후 현재 슬라이스의 버퍼 버전을 디코딩하는 것으로 리턴한다. 다음의 슬라이스에 대한 최초 MB 번호 N 을 결정함으로써 비디오 디코더는 이전의 슬라이스에서의 최종 MB 번호, 즉, MB N-1 을 결정할 수 있다. 최종 MB 번호의 식별 시에, 비디오 디코더는 현재의 비디오 슬라이스의 시작 MB 로 다시 리턴하고 이 슬라이스를 디코딩하는 것을 시작한다.
따라서, 미리보기 에러 핸들링 기술의 구현은 2 개의 상이한 디코딩 버퍼가 현재 슬라이스 및 다음의 슬라이스를 버퍼링하는 것을 요구한다. 비디오 디코더는 오리지널 비디오 데이터를 적당히 복원하기 위해 각 버퍼 사이를 앞뒤로 스위칭할 수도 있다. 비디오 디코더가 하나의 슬라이스에 대해 현재의 상태 정보 전부를 저장하고, 다음의 슬라이스로 이동한 후, 최초 슬라이스로 복귀하도록 요구될 수도 있으므로, 기술의 비순차 성질은 더 복잡하거나 복합적인 구현을 초래할 수도 있다. 이 동작은 임베디드 시스템, 특히 전체 디코딩 태스크가 2 개 이상의 프로세서 사이에서 분리되어 있는 경우에 바람직하지 않을 수 있다.
도 6 의 예를 참조하면, 미리보기 동작에 기초한 에러 핸들링 프로세스를 먼저 설명할 것이다. 이 예에서, 프레임 (88A) 은 MB 0 에서 MB 20 으로 연장되는 제 1 슬라이스, MB 21 에서 MB 54 로 연장되는 제 2 슬라이스, MB 55 에서 MB 71 로 연장되는 제 3 슬라이스, 및 MB 72 에서 MB 98 로 연장되는 제 4 슬라이스를 포함한다. 현재 슬라이스를 디코딩하기 위해, 비디오 디코더는 먼저 미리보아 첫번째 이용가능한 재동기화 포인트를 발견한다. MB 15 내지 MB 45 가 손실되거나 그렇지 않으면 손상된다고 가정하면, 비디오 디코더는 NAL 헤더 (90C) 에서 다음의 재동기화 포인트를 발견한다. 그 동안, 비디오 디코더는 디코딩 에러의 실제 지식을 가지지 않지만, 디코딩 에러가 있는 이벤트에서 재동기화 포인트 이전의 최종 MB 가 획득될 수 있도록 미리보기 동작을 통해 다음의 재동기화 포인트를 획득할 필요가 있다.
따라서, 미리보기 동작에 의존하는 에러 핸들링 프로세스에서, 비디오 디코더는 디코딩될 현재 슬라이스의 최초 MB 번호를 얻고, 미리보아 다음의 슬라이스 헤더를 디코딩하여, 슬라이스 헤더 이전의 최종 MB 번호를 얻고, 디코딩될 현재 슬라이스의 시작으로 리턴하고, 디코딩을 재개하고 에러를 검출하고, 최초 MB 및 최종 MB 를 에러 은닉 동작에 패스하며, 디코딩될 다음의 슬라이스에 대한 디코딩 동기화 및 에러 은닉을 재확립한다. 특히, 비디오 디코더는 미리보기 동작을 수행하는 동안에 슬라이스 1 및 2 (MB 0 내지 54) 를 버퍼링한 후, 슬라이스 1 로 리턴하여 디코딩 동작을 시작할 필요가 있다. 일반적으로, 비디오 디코더는 실제 디코딩 에러가 존재하든지 안하든지 간에 비트스트림에서 디코딩될 모든 슬라이스에 대해 이들 미리보기 및 버퍼링 동작을 수행한다. 슬라이스의 실제 디코딩은 미리보기 동작 이후까지는 발생하지도 않는다.
인코딩된 비디오 데이터의 현저한 손실 또는 손상 없이 채널 (16) 을 통한 인코딩된 비디오 데이터의 송신이 종종 발생한다. 예를 들어, 예시를 목적으로 인코딩된 비디오 데이터가 복수의 패킷으로서 채널 (16) 을 통해 송신된다고 가정하면, 통상적인 무선 채널 (16) 에 대한 패킷 손실 레이트는 종종 5% 미만이다. 예시를 목적으로 각 패킷이 하나의 슬라이스에 대응한다고 가정하면, 유효 인코딩된 비디오 데이터의 디코딩 중에 디코딩 에러가 발생하지 않을 것이므로, 미리보기 에러 핸들링 기술에 대한 계산의 95% 가 요구되지 않을 것이다. 따라서, 미리보기 에러 핸들링 기술은 수많은 낭비되는 동작을 초래할 수도 있다.
에러 핸들링이 소프트웨어로 구현되는 경우에 상술한 이들 낭비된 동작 및 다른 이슈들이 덜 중요한 반면, 임베디드 시스템은 특히, 전체 디코딩 태스크가 2 개 이상의 프로세스로 분리되는 경우에 이들 이슈들에 의해 크게 영향을 받을 수도 있다. 특히, 미리보기 기술의 임베디드 구현예, 또는 더 일반적으로는 하드웨어 구현예에서, 낭비된 동작은 보다 가치 있는 동작에 이용될 수 있는 전력을 불필요하게 소비할 수도 있다. 게다가, 전력 소비가 목적지 디바이스 (14) 와 같은 모바일 목적지 디바이스에 공통인 배터리를 방전시키므로, 낭비적인 전력 소비는 배터리가 재충전을 요구하기 전에 더 짧은 동작 시간을 초래할 수도 있다. 또한, 2 개의 프로세스는 이들 전력 이슈들을 악화시킬 수도 있다. 게다가, 다음의 슬라이스를 버퍼링하는데 이용되는 추가 버퍼는 전력을 고갈시키고, 또한 종래의 비디오 디코더의 사이즈 및 비용을 증가시킬 수도 있다.
도 2 의 비디오 디코더 (26) 와 같은 비디오 디코더는 본 개시물에서 설명된 기술에 따라 프레임 (88) 을 수신하고, 순차, 즉, 미리보기 아닌 에러 핸들링 프로세스를 수행할 수도 있다. 순차 에러 핸들링 프로세스에 있어서, 각 슬라이스의 디코딩 순서는 시퀀스로 유지될 수 있다. 하나의 슬라이스를 사전-버퍼링한 후, 미리보기 동작을 수행하여 다음의 슬라이스의 NAL 헤더에 액세스할 필요가 없다. 디코딩 엔진 (32) 은 프레임 (88A) 의 제 1 NAL 유닛 또는 슬라이스, 예를 들어, NAL 헤더 (90A) 및 MB 0-20 에 액세스하고, 최초 MB 번호, 예를 들어, MB 0 을 결정함으로써 현재 슬라이스의 시작을 결정할 수도 있다. 디코딩 엔진 (32) 은 도 3 의 에러 검출 모듈 (40) 과 같이, 에러 핸들링 모듈 (34) 의 에러 검출 모듈로 이 MB 번호 0 을 포워딩할 수도 있다. 상술한 바와 같이, 이전에 재설정된 에러 플래그 (46) 을 가지면, 에러 검출 모듈 (40) 은 0 인 MB 번호를 에러 맵핑 모듈 (42) 로 포워딩하고, 이는 맵핑 (48) 의 0 인 MB 번호 내지 시작 MB (48A) 를 저장한다.
디코딩 엔진 (32) 은 그 동안 인코딩된 MB 0-20 을 디코딩하여, 이 디코딩된 비디오 데이터 또는 디코딩된 MB 를 복원 버퍼 (38) 에 저장한다. 디코딩 엔진 (32) 은 또한 디코딩된 MB 0-20 을 에러 검출 모듈 (40) 로 포워딩하며, 이는 에러 체크의 적용을 통해 디코딩 에러가 발생하였는지 여부를 판정할 수도 있다. 예를 들어, 에러 검출 모듈 (40) 은 각각 구문 및 의미 규칙 (44A, 44B) 에 따라 구문 및 의미 에러 체크뿐만 아니라, 엔트로피 규칙 (44C) 을 따라 엔트로피 코딩을 수행할 수도 있다.
도 6 의 예에서, MB 0-20 중 적어도 일부, NAL 헤더 (90B) 및 MB 21-54 중 일부는 손실 또는 손상되었다. 에러 검출 모듈 (40) 은 이 디코딩 에러를 검출하고 에러 플래그 (46) 을 설정하여 에러를 표시할 수도 있다. 플래그 (46) 를 설정함으로써, 에러 검출 모듈 (40) 은 다음의 식별가능한 슬라이스 헤더, 예를 들어, NAL 헤더 (90C) 가 디코딩될 때까지 에러 은닉을 지연시킬 수도 있다. 그 결과, 비디오 디코더 (26) 는 현재 슬라이스를 디코딩하기 전에 미리 보아 최종 MB 번호를 결정할 필요가 없지만, 플래그 (46) 를 유지하여 이전의 슬라이스가 에러가 있다는 것을 표시한다. 이러한 방식으로, 비디오 디코더 (26) 는, 데이터가 에러를 포함하지 않는다는 가정에서 인코딩된 비디오 데이터의 현재 슬라이스 또는 세그먼트를 디코딩할 수도 있다. 그러나, 에러의 결정 시에, 에러 플래그 (46) 는 에러 핸들링 모듈 (34) 이 나중에, 예를 들어, 다음의 슬라이스 헤더가 디코딩된 후에 에러를 핸들링할 수 있도록 설정된다.
예시를 목적으로 에러 검출 모듈 (40) 이 상술한 디코딩 에러를 검출하였고 에러 플래그 (46) 를 설정하였다고 가정하면, 에러 검출 모듈 (40) 은 디코딩 에러를 디코딩 엔진 (32) 에 통지할 수도 있다. 그 결과, 디코딩 엔진 (32) 은 다음의 식별가능한 NAL 헤더, 즉, 도 6 에 도시된 예의 NAL 헤더 (90C) 를 찾음으로써 디코딩을 중단하고 디코딩 동기화를 재확립하거나 그렇지 않으면 프레임 (88A) 의 디코딩을 재동기화할 수도 있다. 디코딩 동기화를 재확립한 후에, 디코딩 엔진 (32) 은 인코딩된 비디오 데이터의 다음의 이용가능한 슬라이스, 예를 들어, MB 번호 55-72 및 NAL 헤더 (90C) 에 의해 식별된 NAL 유닛 또는 슬라이스에 액세스할 수도 있다. 상술한 바와 같이, 디코딩 엔진 (32) 은 세그먼트의 시작에 대응하는 MB 번호, 예를 들어, MB 번호 55 에 액세스함으로써 인코딩된 비디오 데이터의 이러한 다음의 이용가능한 슬라이스의 시작을 결정할 수도 있다. 디코딩 엔진 (32) 은 이 MB 번호를 에러 검출 모듈 (40) 로 포워딩할 수도 있다.
제 2 세그먼트의 시작, 예를 들어, MB 번호 55 를 수신한 것에 응답하여, 에러 검출 모듈 (40) 은 에러 플래그 (46) 의 상태를 결정한다. 에러 플래그 (46) 가 설정되지 않으면, 에러 검출 모듈 (40) 은 MB 번호를 에러 맵핑 모듈 (42) 로 패스하며, 이는 맵핑 (48) 의 MB 번호 55 내지 시작 MB (48A) 을 저장하여 현재 슬라이스로서 다음의 이용가능한 슬라이스의 디코딩을 지원한다. 다른 방법으로는, 에러 플래그 (46) 가 설정되면, 에러 검출 모듈 (40) 은 MB 넘버 55 마이너스 1 을 에러 맵핑 모듈 (42) 로 패스하여, 에러 맵핑 모듈 (42) 에게 MB 번호 54 를 맵핑 (48) 의 끝 MB (48B) 로서 저장하라고 명령한다. 에러 맵핑 모듈 (42) 은 이후 맵핑 (48) 을 에러 은닉 모듈 (36) 로 포워딩하여 디코딩 에러의 범위를 식별한다. 에러 범위는 슬라이스 헤더 (90A, 90B) 와 연관된 슬라이스를 포함하는 손상된 데이터 세그먼트의 정도를 정의한다. 도 6 의 예에서, 상술한 바와 같이, 에러 맵핑 모듈 (42) 은 시작 MB (48A) 및 끝 MB (48B) 를 포워딩하고, 은닉 엔진 (50) 은 복원 버퍼 (38) 에서의 시작 및 끝 MB (48A, 48B)(MB 0 내지 MB 54) 에 의해 식별된 MB 를 은닉한다.
디코딩 엔진 (32) 은 NAL 헤더 (90D) 에 의해 식별된 다음의 이용가능한 슬라이스 또는 NAL 유닛에 액세스함으로써 프레임 (88A) 을 계속 디코딩할 수도 있다. 일단 프레임 (88A) 이 디코딩되었으면, 디코딩 엔진 (32) 은 프레임 (88B) 을 더 디코딩할 수도 있다. 도 6 의 예에서 프레임 (88B) 에 디코딩 에러가 존재하지 않으므로, 에러 핸들링 모듈 (34) 은 에러를 검출하지 않을 수도 있고, 에러 은닉 모듈 (36) 은 임의의 추가 에러를 은닉하지 않을 수도 있다. 이러한 방식으로, 비디오 디코더 (26) 는 시퀀스로 각 슬라이스를 디코딩할 수도 있고, 그 결과, 비디오 디코더 (26) 는 더 작은 버퍼 (32) 를 포함할 수도 있는데, 그 이유는 미리보기 동작을 지원하기 위해 현재 슬라이스를 버퍼링하는 것이 필요하지 않기 때문이다. 또한, 비디오 디코더 (26) 는 보통의 디코딩 이외에 수반되는 매우 적은 추가적인 계산이 있는 것만큼의 전력을 소비하지 않을 수도 있다. 다시 말해, 에러 핸들링 모듈 (34) 은, 연속적이라기 보다는 디코딩 에러가 검출되는 경우에 인보크됨으로써, 계산을 절약하고 전력 소비를 감소시킨다.
다양한 양태에서, 특히, 2 개 이상의 프로세서에 의해 구현되는 경우, 순차 에러 핸들링 기술은 상술한 디코딩 효율뿐만 아니라 비디오 디코더 (26) 의 아키텍처를 유지할 수도 있다. 즉, 하나의 프로세스는, 예를 들어, 디코딩 엔진 (32) 을 구현할 수도 있고, 다른 프로세서는 에러 핸들링 모듈 (34) 을 구현할 수도 있다. 2 개의 프로세서 사이의 통신은 아키텍처를 복잡하게 할 수도 있다. 이들 통신을 제한함으로써, 이 기술은 구현 복잡성을 감소시킬 수도 있다. 통신이 에러가 발생한 경우에만 일어나므로, 이 기술은 프로세서들 사이의 통신의 수를 제한함으로써, 에러 핸들링 아키텍처의 복잡성을 감소시킬 수도 있다. 아키텍처에 관하여, 모든 슬라이스에 대해 순차적인 순서로 디코딩이 수행되기 때문에, 소프트웨어 및 하드웨어가 현대의 슬라이스 및 다음의 이용가능한 슬라이스에 대해 2중 버퍼를 유지하고 이러한 버퍼들 사이를 앞뒤로 스위칭할 필요가 없다. 또한, 에러 은닉이 필요한 경우에 이전의 슬라이스에 대한 디코딩 상태 정보를 저장할 필요가 없다.
도 7 은 2 개 이상의 프레임에 걸쳐 있는 디코딩 에러에 대한 에러 핸들링 및 은닉을 수행하는데 있어서의 비디오 디코더 (26) 와 같은 비디오 디코더의 예시적인 동작을 도시한 흐름도이다. 상술한 바와 같이, 비디오 디코더 (26) 는, 복수의 인코딩된 비디오 프레임을 포함할 수도 있는 인코딩된 비디오 프레임 데이터를 수신할 수도 있다 (92). 비디오 디코더 (26) 의 디코딩 엔진 (32) 은 프레임의 현재 슬라이스에의 초기 액세스 시에, 에러 핸들링 모듈 (34) 로 하여금 현재 슬라이스의 시작 MB 번호 및 시작 프레임 번호를 결정하게 할 수도 있다 (94). 슬라이스의 시작 MB 번호는 디코딩 에러가 검출될 수도 있는 세그먼트의 시작을 나타낸다. 시작 프레임 번호는 현재 슬라이스가 상주하는 프레임의 수를 표시한다. 시작 MB 및 시작 프레임 번호는, 현재 슬라이스와 연관된 NAL 헤더에 포함될 수도 있는 하나 이상의 구문 엘리먼트로부터 결정될 수도 있다.
시작 MB 및 시작 프레임 번호의 결정 시에, 디코딩 엔진 (32) 은 현재 슬라이스를 디코딩하고 (96), 에러 검출을 위해 현재 슬라이스로부터 에러 핸들링 모듈 (34) 로 디코딩된 MB 를 출력한다. 에러 핸들링 모듈 (34) 의 에러 검출 모듈 (40) 은 구문 규칙 (44A), 의미 규칙 (44B), 또는 엔트로피 규칙 (44C) 에 따라, 예를 들어, 구문, 의미 및/또는 엔트로피 코딩 에러 체크를 수행함으로써 디코딩 에러가 발생하였는지 여부를 판정한다 (98). 디코딩 에러가 검출되지 않고 (98), 슬라이스의 끝에 도달하지 않았으면 (100), 디코딩 엔진 (32) 은 현재 슬라이스를 계속 디코딩한다 (96). 디코딩 에러가 검출되지 않았지만 (98), 현재 슬라이스의 끝에 도달하였으면 (100), 현재 슬라이스는 성공적으로 디코딩되었다. 이 경우에, 디코딩 엔진 (32) 은 현재 슬라이스로서 다음의 이용가능한 슬라이스를 디코딩하는 것을 진행한다. 현재 슬라이스가 비디오 시퀀스에서 제 1 슬라이스이면, 다음의 슬라이스는 제 2 슬라이스이다. 다른 방법으로는, 현재 슬라이스가 제 1 슬라이스가 아니면, 다음의 슬라이스는 비디오 시퀀스에서 나중 슬라이스이다. 나중의 다음의 이용가능한 슬라이스는 현재 슬라이스와 동일한 프레임에 또는 상이한 프레임에 상주할 수도 있다. 임의의 이벤트에서, 디코딩 엔진 (32) 이 다음의 이용가능한 슬라이스로 진행하는 경우, 디코딩 엔진 (32) 은 다음의 이용가능한 슬라이스의 시작 MB 번호 및 시작 프레임 번호를 결정할 수도 있다 (103).
디코딩 에러가 검출되면 (98), 에러 검출 엔진 (40) 은 디코딩 엔진 (32) 에 디코딩 에러를 통지하고 에러 플래그 (46) 를 설정할 수도 있다 (102). 상술한 바와 같이, 디코딩 엔진 (34) 은, 에러를 통지하는 것에 응답하여, 다음의 이용가능하거나 식별가능한 슬라이스로 진행함으로써 디코딩을 재동기화할 수도 있다. 이 경우에, 디코딩 엔진 (32) 은 다음의 이용가능한 슬라이스의 시작 MB 번호 및 시작 프레임 번호를 결정할 수도 있다 (103). 설명할 바와 같이, 디코딩 엔진 (96) 은 현재 슬라이스로서 다음의 이용가능한 슬라이스를 디코딩하는 것으로 진행할 수도 있다 (96). 디코딩 엔진 (32) 은 이전의 슬라이스의 성공적인 디코딩 시나 이전의 슬라이스에서의 디코딩 에러의 검출에 뒤따르는 재동기화의 일부로서나 다음의 이용가능한 슬라이스에 도달할 수도 있다 (103). 각 경우에, 에러 핸들링 모듈 (34) 은 에러 플래그가 설정되는지 여부를 결정할 수도 있다 (104). 에러 플래그가 설정되면 (104), 디코딩 에러의 검출의 결과로서 다음의 이용가능한 슬라이스가 액세스되었다 (98). 에러 플래그가 설정되지 않으면, 이전의 슬라이스의 성공적인 디코딩 및 이전의 슬라이스의 끝의 검출의 결과로서 다음의 이용가능한 슬라이스가 액세스되었다 (100).
에러 플래그가 설정되지 않으면 (104), 디코딩 엔진 (32) 은 현재 슬라이스로서 다음의 이용가능한 슬라이스를 디코딩하는 것으로 진행할 수도 있다 (96). 다시 말해, 디코딩 엔진 (32) 에 의해 획득되는 다음의 이용가능한 슬라이스는 현재 슬라이스가 되고 프로세스가 반복된다. 그러나, 에러 플래그가 설정되면 (104), 에러 핸들링 모듈 (34) 은 은닉될 필요가 있는 손상된 데이터 세그먼트의 정도를 결정한다. 예를 들어, 에러 검출 모듈 (40) 은 다음의 이용가능한 슬라이스의 시작 MB 번호에 기초하여 끝 MB 번호를 결정하고 (106), 다음의 이용가능한 슬라이스의 시작 프레임 번호에 기초하여 끝 프레임 번호를 결정할 수도 있다 (108). 디코딩 에러가 단일 슬라이스만을 수반하면, 끝 MB 번호 및 끝 프레임 번호는 현재 슬라이스의 끝 MB 번호 및 끝 프레임 번호일 수도 있다. 그러나, 다수의 슬라이스가 디코딩 에러에 의해 영향을 받았으면, 끝 MB 번호 및 끝 프레임 번호는, 현재 슬라이스와 다음의 이용가능한 슬라이스 사이에 상주하고 다중-슬라이스, 손상된 데이터 세그먼트의 일부를 형성하는 다른 나중 슬라이스에 대응할 수도 있다. 어느 경우에나, 에러 맵핑 모듈 (42) 은 각각 다음의 이용가능한 슬라이스의 시작 MB 번호 및 시작 프레임 번호에 기초하여 끝 MB 번호 및 끝 프레임 번호를 결정할 수도 있다. 게다가 또, 끝 MB 번호는 다음의 슬라이스의 시작 MB 번호 마이너스 1 일 수도 있다. 에러 은닉 모듈 (36) 은 이후 현재 슬라이스의 시작 MB 에서 손상된 데이터 세그먼트의 끝 MB 까지의 MB 를 은닉함으로써 에러를 은닉할 수도 있다 (110). 은닉에 이어서, 디코딩 엔진 (32) 은 다음의 이용가능한 슬라이스를 디코딩하는 것으로 진행할 수도 있는데, 이는 새로운 현재 슬라이스로서, 끝 MB 및 끝 프레임을 생성하는데 이용되었다 (96).
에러 맵핑 모듈 (42) 은 끝 MB (48B) 및 끝 프레임 (48D) 으로서 맵핑 (48) 에 대한 끝 MB 및 끝 프레임 번호를 저장할 수도 있다. 에러 맵핑 모듈 (48) 은 이후 시작 MB (48A), 끝 MB (48B), 시작 프레임 (48C), 및 끝 프레임 (48D) 에 기초하여 에러 범위를 결정하고, 이 범위를 에러 은닉 모듈 (36) 의 은닉 엔진 (50) 으로 포워딩할 수도 있다. 상술한 바와 같이, 은닉 엔진 (40) 은 다양한 은닉 기술 중 임의의 기술에 따라서, 에러 범위, 예를 들어, 시작 및 끝 MB (48A, 48B) 및 시작 및 끝 프레임 (48C, 48D) 에 기초하여 검출된 디코딩 에러를 은닉한다 (110). 동작 시에, 에러 맵핑 모듈 (48) 은 시작 및 끝 MB 번호뿐만 아니라 프레임 번호를 고려함으로써 에러 범위를 결정할 수도 있다. 디코딩 에러가 프레임 경계를 넘어가면, 끝 MB 번호는 실제로 은닉될 세그먼트의 시작 MB 번호 미만일 수 있다. 프레임 번호를 추적하는 것은 에러 범위가 이 타입의 상황에서 적당히 해결되게 할 수도 있다.
도 8 은 2 개 이상의 프레임에 걸쳐 있는 에러를 포함하는 예시적인 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다. 도 8 은 도 6 과 유사하지만, 에러를 검출한 후의 재동기화를 위한 다음의 이용가능한 슬라이스가 현재 슬라이스와 상이한 프레임에 상주하는 시나리오를 도시한다. 도 8 에 도시된 바와 같이, 순차 에러 핸들링 기술은, 프레임 번호를 추적함으로써 2 개의 프레임에 걸쳐 있는 데이터가 손실되는 경우에 적용될 수 있다. 종래의 시스템에서, 에러가 2 개의 프레임에 걸쳐 있는 경우, 제 2 프레임은 완벽히 폐기될 수도 있다. 그러나, 순차 에러 핸들링 기술에 있어서, 디코더는 슬라이스 헤더의 프레임 번호를 체크하여, 새로운 프레임이 현재의 프레임을 끝내기 전에 시작하였는지 여부를 판정할 수도 있다. 그렇다면, 디코더는 현재의 프레임의 나머지 MB 를 은닉하고 새로운 프레임을 프로세싱할 수도 있다. 제 2 프레임의 처음 수개의 MB 가 다음의 슬라이스 헤더까지 은닉될 수도 있다. 그러나, 제 2 프레임에서의 나머지 MB 는 유지될 수도 있다.
순차 에러 핸들링 기술은 도 8 의 시나리오에 적용되어, 에러 은닉을 위해 제 1 프레임의 MB 73-98 및 제 2 프레임의 MB 0-76 을 식별할 수도 있다. 도 8 은 2 개의 프레임 (116A, 116B)("프레임 116") 을 포함하는 비트스트림 (114) 을 도시하는데, 여기서 프레임 116A 는 개개의 슬라이스를 규정하는 복수의 NAL 헤더 (118A-118D) 를 포함하고, 프레임 116B 는 개개의 슬라이스를 규정하는 복수의 NAL 헤더 (118E-118H) 를 포함한다. NAL 헤더 (118A 및 118E) 는 각각, 이들 NAL 헤더가 개개의 프레임 (116) 의 시작을 마킹하는 것으로 나타내기 위해 음영 형태로 도시된다. 각각의 NAL 헤더 (118A-118H)("NAL 헤더 118") 는 슬라이스를 포함할 수도 있는 NAL 유닛의 시작을 마킹한다.
각 NAL 유닛은 NAL 헤더 (118) 의 후속하는 NAL 헤더의 시작에서 끝난다. 예를 들어, 제 1 NAL 유닛은 MB 번호 0-20 에 대응하는 MB 를 포함하는 슬라이스 및 NAL 헤더 (118A) 를 포함할 수도 있는데, 여기서 MB 번호 20 은 후속하는 NAL 헤더 (118B) 이전의 최종 MB 이다. MB 번호는 프레임 (116) 각각의 상단에 도시된다. 슬라이스를 포함할 수도 있는 NAL 유닛은 독립적으로 디코딩, 즉, 다른 NAL 유닛으로부터의 정보 없이 디코딩될 수도 있다. 이러한 방식으로, 각 NAL 유닛이 디코딩가능한 MB 의 자기-포함 시퀀스이므로, NAL 유닛의 손실은 앞선 또는 후속하는 NAL 유닛의 디코딩을 방해하지 않는다.
도 2 의 비디오 디코더 (26) 와 같은 비디오 디코더는 본 개시물에 설명된 기술에 따라 이들 프레임 (116) 을 수신하고 미리보기 아닌 순차 에러 핸들링 동작을 수행할 수도 있다. 디코딩 엔진 (32) 은 프레임 (116A) 의 제 1 NAL 유닛 또는 슬라이스, 즉, NAL 헤더 (118A) 및 MB 0-20 에 액세스하고, 최초 MB 번호, 예를 들어, MB 0 뿐만 아니라, 프레임 번호를 결정함으로써 제 1 세그먼트의 시작을 결정할 수도 있다. 디코딩 엔진 (32) 은 이 MB 번호 0 을 도 3 의 에러 핸들링 모듈 (40) 과 같은 에러 핸들링 모듈 (34) 의 에러 검출 모듈로 포워딩할 수도 있다. 에러 검출 모듈 (40) 은 0 인 MB 번호 및 프레임 번호를 에러 맵핑 모듈 (42) 로 포워딩하며, 이는 맵핑 (48) 에 대한 0 인 MB 번호 및 프레임 번호를 시작 MB 번호 (48A) 및 시작 프레임 번호 (48C) 로서 저장한다. 이 예에서, 시작 MB 번호는 MB 0 일 수도 있고, 시작 프레임 번호는 프레임 0 일 수도 있다.
디코딩 엔진 (32) 은 인코딩된 MB 0-20 을 디코딩하여, 이 디코딩된 비디오 데이터 (예를 들어, 디코딩된 MB) 를 복원 버퍼 (38) 에 저장한다. 디코딩 엔진 (32) 은 또한 디코딩된 MB 0-20 을 에러 검출 모듈 (40) 에 제공할 수도 있는데, 이는 에러 체크의 적용을 통해 디코딩 에러가 발생하였는지 여부를 결정할 수도 있다. 에러가 검출되지 않으면, 비디오 디코더 (32) 는, 예를 들어, NAL 헤더 (118B) 로 지정된 다음의 슬라이스 및 MB 번호 21-55 에 액세스하고, MB 시작 번호 및 프레임 번호를 에러 검출 모듈 (40) 로 패스하고 이 슬라이스를 디코딩한다. 에러 검출 모듈 (40) 은 에러 플래그 (46) 로부터의 상태를 결정한다. 이 예에서, 이전의 슬라이스 (MB 0-20) 에서 디코딩 에러가 검출되지 않았기 때문에, 에러 플래그 (46) 는 설정되지 않았다. 에러 맵핑 모듈 (42) 은 제 2 슬라이스의 시작 MB 번호 및 프레임 번호 (MB 21-54) 를 수신하고, 시작 MB (48A) 및 시작 프레임 (48C) 으로서 맵핑 (48) 에서의 시작 MB 및 시작 프레임 번호를 저장한다. 디코딩 엔진 (32), 에러 검출 모듈 (40) 및 에러 맵핑 모듈 (42) 은 에러가 검출될 때까지 후속 슬라이스에 대해 이러한 방식으로 계속 동작할 수도 있다.
도 8 의 예에서, 제 1 프레임 (116A) 의 최종 슬라이스 (MB 73-98) 의 일부, 프레임 (116B) 의 NAL 헤더 (118E), 제 2 프레임 (116B) 의 제 1 슬라이스 (MB 0-45) 의 전부, 프레임 (116B) 의 NAL 헤더 (118F) 및 프레임 (116B) 의 제 2 슬라이스 (MB 45-77) 의 일부가 손실 또는 손상 ("손실 (LOST)") 되었다. 이 에러 이전에, 에러 검출 모듈 (42) 은 제 1 프레임 (116A) 에 대응하는 시작 MB 번호 73 및 프레임 번호를 수신할 수도 있다. 상술한 바와 같이, 에러 맵핑 모듈 (42) 은 시작 MB (48A) 및 시작 프레임 (48C) 으로서 맵핑 (48) 에 대한 73 인 이 MB 번호 및 프레임 번호를 저장할 수도 있다. 디코딩 엔진 (32) 에 의한 디코딩의 경로에서, 에러 검출 모듈 (40) 은 이 디코딩 에러를 검출하고 에러 플래그 (46) 를 설정할 수도 있다. 에러 검출 모듈 (40) 은 또한 디코딩 엔진 (32) 에 에러를 통지할 수도 있어서, 그 후에 디코딩 엔진 (32) 은 상술한 방식으로 디코딩 재동기화를 재확립한다. 특히, 디코딩 엔진 (32) 은 다음의 NAL 유닛 헤더를 찾음으로써 다음의 이용가능한 슬라이스에 액세스할 수도 있다.
도 8 의 예에서, 디코딩 엔진 (32) 은 NAL 헤더 (118G) 및 MB 넘버 77-88 FMF 갖는 다음의 이용가능한 NAL 유닛을 식별한다. MB 77-88 를 포함하는 NAL 유닛은 NAL 헤더가 비트스트림을 파싱함으로써 손쉽게 분별될 수 있는 다음의 NAL 유닛이라는 점에서, NAL 헤더 (118G) 는 다음의 이용가능한 NAL 유닛을 표시한다. 상술한 바와 같이, 디코딩 엔진 (32) 은 다음의 이용가능한 슬라이스의 시작 MB 번호, 예를 들어, NAL 헤더 (118G) 로 표시된 슬라이스의 MB 번호 77, 및 다른 인코딩된 비디오 데이터에 관련된 이 세그먼트의 위치, 예를 들어, 프레임 번호 (1) 을 결정할 수도 있다. 디코딩 엔진 (32) 은 프레임 (116B) 에 대응하는 시작 MB 번호 77 및 프레임 번호 (1) 을 에러 검출 모듈 (40) 에 제공할 수도 있다.
에러 검출 모듈 (40) 은 프레임 (116B) 에 대응하는 77 인 MB 번호 및 1 인 프레임 번호의 수신 시에, 에러 플래그 (46) 의 상태를 결정한다. 예시를 목적으로 에러 검출 모듈 (40) 이 에러를 이전에 검출하였고 에러 플래그 (46) 가 설정된다고 가정하면, 에러 검출 모듈 (40) 은 MB 77-88 을 포함하는 슬라이스의 77 인 시작 MB 번호에 기초하여 이전의 세그먼트의 끝을 결정한다. 이 예에서, 에러 검출 모듈 (40) 은 MB 번호 77 에서 1 을 감산함으로써 손상된 데이터 세그먼트의 끝을 계산하여 MB 번호 76 을 획득한다. 에러 검출 모듈 (40) 은 끝 MB 번호 76 및 프레임 번호 1 을 에러 맵핑 모듈 (42) 로 포워딩하는데, 이는 각각 끝 MB (48B) 및 끝 프레임 (48D) 으로서 맵핑 (48) 에 대한 이들 번호를 저장한다. 일단 저장되면, 에러 맵핑 모듈 (42) 은, "에러 범위"로 지칭될 수도 있는 맵핑 (48) 을 에러 은닉 모듈 (36) 로 포워딩한다.
은닉 엔진 (50) 은 시작 및 끝 MB (48A, 48B) 에 기초하여 프레임 (116A) 의 끝 및 프레임 (116B) 의 처음으로부터 MB 가 손실되었고 디코딩 에러가 2 개의 프레임에 걸쳐 있다고 시작 및 끝 프레임 (48C, 48D) 으로부터 결정될 수도 있다. 은닉 엔진 (50) 은 또한 디코딩 엔진 (32), 에러 검출 모듈 (40) 또는 에러 맵핑 모듈 (42) 중 어느 하나로부터 최대 프레임 길이 (이 예에서는 도 8 에서 98 MB 로 도시됨) 를 수신할 수도 있다. 즉, 최대 프레임 길이는 프레임 (116) 의 1 인 최종 MB 번호로서 정의될 수도 있다. 98 MB 인 최대 프레임 길이는 QCIF (quarter common intermediate format) 프레임에서 MB 의 수에 대응한다. 은닉 엔진 (50) 은 시작 프레임 (48C) 으로서 저장된 시작 프레임 번호에서 끝 프레임 (48D) 으로서 저장된 끝 프레임 번호를 감산하여 프레임 번호의 차이를 계산할 수도 있다.
계산된 프레임 차이의 수가 0, 즉, 시작 및 끝이 동일한 프레임 번호 내에 있으면, 은닉 엔진 (50) 은 시작 MB 번호, 예를 들어, MB 번호 73 으로부터 다음의 이용가능한 슬라이스의 시작 MB 번호 직전의 끝 MB 번호까지의 MB 를 대체하거나 그렇지 않으면 은닉할 수도 있다. 게다가 또, 은닉 엔진 (50) 은 은닉 버퍼에 제공된 디코딩된 비디오 MB 를 은닉하는데 이용하기 위해 복원 버퍼 (38) 에서의 MB 를 직접 은닉하고 은닉된 MB 를 디코딩 엔진 (32) 에 제공할 수도 있다. 도 8 을 참조하면, 계산된 프레임 번호 차이가 1 이하이면, 즉 디코딩 에러가 프레임 0 (116A) 및 프레임 1 (116B) 의 부분에 걸쳐 있으면, 은닉 엔진 (50) 은 시작 MB (48A) 로서 저장된 시작 MB 번호에 대응하는 MB, 예를 들어, MB 번호 73 를, 최대 프레임 길이에 대응하는 MB, 예를 들어, MB 번호 98 까지 대체하거나 그렇지 않으면 은닉할 수도 있다. 이러한 방식으로, 에러가 2 개의 프레임에 걸쳐 있는 경우, 에러에 포함된 제 1 슬라이스의 시작에서 프레임의 끝까지의 제 1 프레임의 나머지는 은닉된다.
프레임 차이가 1 보다 크면, 후술되는 바와 같이, 은닉 엔진 (50) 은 추가적인 프레임을 삽입하고, 에러가 발생한 최초 프레임과 동일한 에러가 발생한 최종 프레임 사이의 중간 프레임 각각에 대한 MB 번호 0-98 에 대응하는 MB 를 은닉할 수도 있다. 이 경우에, 시작 프레임 번호와 끝 프레임 번호 사이의 2 이상의 프레임 차이는 적어도 하나의 전체 프레임이 손실되었다는 것을 표시한다. 3 인 프레임 차이는 2 개의 전체 프레임이 손실되었다는 것을 표시하고, 4 인 프레임 차이는 3 개의 전체 프레임이 손실되었다는 것을 표시하는 등이다. 최종 프레임에서, 은닉 엔진 (50) 은 MB 번호 0 내지 끝 MB (48B), 예를 들어, 76 로서 저장된 MB 번호에 대응하는 MB 를 은닉할 수도 있다.
도 8 에 설명된 예에서, 은닉 엔진 (50) 은, 디코딩 에러가 연속적인 프레임 (116A 및 116B) 에 걸쳐 있으므로 1 과 동일한 차이를 결정하고, 시작 MB (48A), 예를 들어, 73 으로서 저장된 MB 번호 내지 최대 프레임 길이, MB 번호 98 에 대응하는 MB 를 은닉한다. 그 차이가 2 이상이 아니기 때문에, 은닉 엔진 (50) 은 최종 프레임에 도달하고 (이에 디코딩 에러가 걸쳐 있음), 0 인 MB 번호 내지 끝 MB (48A), 예를 들어, 76 으로 저장된 MB 번호에 대응하는 MB 를 은닉한다. 요약하면, 프레임 1 의 MB 73-98 및 MB 0-76 이 은닉된다. 프레임 차이가 2 이상이면, 단순히 손실된 참조 프레임을 폐기하는 대신에, 은닉 엔진 (50) 은 손실된 프레임의 수와 동일한 개수의 프레임을 삽입함으로써, 참조 프레임 미스매치를 피할 수도 있다. 종래의 비디오 디코더에 공통인 것과 같은 분실 프레임을 폐기하지 않음으로써, 도 9a, 도 9b 및 도 9c 에 관해 후술하는 바와 같이, 이 기술은 디코딩 성능을 개선할 수도 있다.
도 9a, 도 9b 및 도 9c 는 다수의 참조 프레임을 허용하는 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다. 도 9a 는 "I", "P0", "P1", "P2", "P3" 및 "P4" 로 라벨링된 복수의 프레임을 포함하는 비트스트림 (120) 을 도시한다. I 프레임은 H.264/MPEG-4 AVC 인트라 프레임으로 알려진 프레임을 지칭하고, P 프레임은 H.264/MPEG-4 AVC 인터-예측 프레임을 지칭한다. 일반적으로, 각 P 프레임이 I 프레임에 존재하는 적어도 일부의 비디오 데이터를 참조하도록 P 프레임이 코팅될 수도 있다는 점에서, I 프레임은 하나 이상의 P 프레임에 대한 기준을 형성할 수도 있다. 그 결과, I 프레임은 I 프레임이 임의의 이전 또는 후속 프레임에 종속하지 않는 점에서 인터-예측에 의존하지 않고, 디코딩을 재동기화하는데 이용될 수도 있다. 따라서, 도 9 에 도시되지 않더라도, I 프레임은 NAL 헤더를 뒤따를 수도 있어서, 비디오 디코더 (26) 는 이전에 손실되거나 손상된 MB 로 인한 임의의 에러를 포워딩하지 않고 NAL 헤더에 의해 식별된 다음의 이용가능한 슬라이스를 검색하고 I 프레임을 디코딩할 수도 있다. 또한, P 프레임은 다른 P 프레임을 참조한다.
H.264 프로세스에서, 다수의 참조 프레임을 이용하는 것은 코딩 효율을 개선하기 위한 공통된 특징이다. H.264 프로세스는 참조 프레임으로서 이전의 프레임만의 이용을 제한하지 않고, 모션 보상 예측이 16 개의 과거 프레임만큼 먼 참조 프레임에 기초하게 한다. 이 특징은 코딩 효율을 개선할 수도 있을 뿐만 아니라, 에러 전파를 완화하는데 도움이 될 수도 있고 인코더에서 에러 복구형 툴로서 보통 언급된다.
프레임이 완전히 손실되는 경우, 디코더는 손실된 프레임이 있다고 알 필요 없이 다음 프레임을 계속 디코딩할 수도 있다. 복잡한 에러 은닉 방법이 전체 손실된 프레임을 추정하는데 이용되지 않는 한, 디코더가 일반적으로 임의의 보다 우수한 결과를 제공할 수 없기 때문에, 이 접근 방식은 이전의 프레임만이 참조 프레임으로 이용되는 경우에 효과적일 수도 있다. 그러나, (H.264 에서와 같이) 다수의 참조 프레임이 이용되는 경우, 프레임 손실은 정확히 수신된 프레임이 예측을 위해 잘못된 프레임을 참조하게 할 수도 있는 가능성이 높다. 하나 이상의 손실된 프레임에 의해 야기되는 이 부정확한 참조는 본 개시물에서 참조 프레임 미스매치로 지칭될 수도 있다.
각 프레임의 상단의 화살표는 복수의 P 프레임, 예를 들어, P0, P1, P2, P3 및 P4 및 I 프레임 사이의 참조 프레임 종속성을 지정한다. 비트스트림에서의 구문 엘리먼트는, 예를 들어, 프레임 번호 또는 프레임 번호 오프셋 값에 기초하여 각각 수신된 P 프레임에 대한 참조 프레임을 식별하는 참조 프레임 인덱스 정보를 포함할 수도 있다. 도 8b 에 도시된 바와 같이, 프레임 P0 및 P1 은 인터-예측을 위한 참조 프레임으로서 I 프레임에 의존하고, 프레임 P2 및 P4 는 프레임 P1 에 의존하며, 프레임 P3 는 프레임 P2 에 의존한다. 도 1 의 비디오 인코더 (20) 와 같은 비디오 인코더는 상술한 바와 같이, 상기에서 열거된 의존도에 의해 도시된 방식으로 비트스트림 (120) 을 인코딩하여, 비트스트림을 압축하고 송신 효율을 개선시킬 수도 있다.
또한 상술한 바와 같이, 비트스트림 (120) 은 송신 채널 (16) 을 통한 수신기 (24) 로의 송신 중에 손실 또는 손상되어, 비디오 디코더 (26) 는 하나 이상의 프레임이 손실 또는 손상된 비트스트림 (125) 을 수신할 수도 있다. 도 9a 에 도시된 바와 같이, 비트스트림 (122) 은 I 프레임 및 프레임 P0, P1 및 P4 를 포함한다. 이 예에서, 프레임 P2 및 P3 는 손실되거나 그렇지 않으면 송신 시에 손상된다. 그 결과, 연속적으로 수신된 프레임 P1 과 P4 사이의 프레임 번호 차이는 3 (4 마이너스 1) 이며, 2 개의 전체 프레임의 손실을 표시한다. 연속적으로 수신된 프레임들 사이의 프레임 번호 차이가 2 였으면, 하나의 전체 프레임의 손실이 표시될 것이다.
송신 중에 단일 프레임이 손실될 수도 있다. 다른 방법으로는, 다수의 프레임이 손실될 수도 있다. 각 경우에, 참조 프레임 미스매치는 시각 품질을 열화시키고 에러의 전파를 허용할 수도 있다. 다수의 프레임의 손실은 방송과 같은 애플리케이션에서 일어날 수도 있는데, 여기서 다수의 프레임은 동일한 패킷 내에 위치한다. 결과적으로, 패킷이 손실되는 경우, 다수의 프레임이 손실될 수도 있다. 비트스트림 (124B) 의 프레임의 상단의 화살표는, 에러 은닉이 수행되지 않으면 초래될 수도 있는 가능한 종속성을 도시한다. 특히, 이 화살표는, 프레임 P4 가 P1 대신에 I 프레임에 부적당하게 종속하는 변화된 종속성을 나타낸다.
도 9a 의 예에서, 프레임 P4 는 적용가능한 참조 프레임 인덱스 정보에 의해 표시된 바와 같이, 세번째 앞선 프레임에 종속하도록 의도되는 것으로 가정된다. 그러나, 손실된 프레임으로 인해, 프레임 P4 는 프레임 P1 에 종속하지 않지만, 2 개의 손실된 프레임을 카운팅하지 않고 세번째 앞선 프레임, 즉, I 프레임에 종속한다. 다시 말해, P4 는 3 개의 프레임 뒤를 포인트하지만, 비트스트림으로부터 원래 의도된 참조 프레임 P2 및 P3 가 손실된 경우에 I 프레임을 포인트한다. 이 참조 프레임 미스매치는 주로 손실된 프레임으로 인한 것이다. 디코딩 프로세스가 오직 비트스트림에서 실제로 수신된 프레임 데이터에 기초하여 비디오 프레임을 발생시키기 때문에, 디코더는 프레임 P2 및 P3 를 손실한다는 것을 인식하지 못할 수도 있다.
디코딩 프레임 P1 후에, 디코더는 시퀀스에서 다음 프레임으로서 프레임 P4 를 접수하고, P1 프레임 대신에 I 프레임으로서 비트스트림에서의 참조 프레임 인덱스 (3 개 프레임 이전) 에 따라 그 참조 프레임을 식별할 수도 있다. 따라서, 프레임 P2 및 P3 의 손실은 프레임 P4 에 대한 참조 프레임 미스매치를 생성한다. 이 참조 프레임 미스매치는 비디오 재생 중에 프레임 P4 의 비주얼 품질을 열화시키고, 어쩌면 결과로서 생긴 에러를 후속 비디오 프레임에 전파할 수 있다.
본 개시물에서 설명된 기술에 따르면, 비디오 디코더 (26) 는 상술한 바와 같이 디코딩 에러를 식별하고 손실된 프레임을 대체하여 비트스트림 (124) 을 발생시키도록 구성될 수도 있다. 이러한 방식으로, 비디오 디코더 (26) 는, 송신 중에 하나 이상의 개재된 프레임이 손실되었거나 그렇지 않으면 손상된 경우에 2 개의 프레임 사이의 갭을 식별 및 보상함으로써, 참조 프레임 미스매치를 보정할 수도 있다. 동작 시에, 도 2 의 디코딩 엔진 (32) 은 비트스트림 (122) 을 수신하고, I 프레임의 각 세그먼트의 시작을 결정하며, 이들 세그먼트를 디코딩하여, 디코딩된 데이터를 에러 핸들링 모듈 (32) 로 출력할 수도 있다. 도 3 에 도시된 바와 같이, 에러 핸들링 모듈 (32) 의 에러 검출 모듈 (40) 은 임의의 디코딩 에러가 발생하였는지 여부를 판정하는 것을 진행한다. 이러한 방식으로, 디코딩 엔진 (32) 및 에러 핸들링 모듈 (34) 은 에러 검출 모듈 (40) 이 손실된 P2 및 P3 를 검출할 때까지 프레임 P0 및 P1 을 계속 디코딩한다.
상술한 바와 같이, 이들 에러를 검출하기 전에, 에러 검출 모듈 (40) 은 세그먼트의 시작, 예를 들어, (프레임 P2 의 시작에서 에러가 발생하였으므로) 0 인 MB 번호, 및 인코딩된 비디오 데이터에서의 세그먼트의 상대적인 위치를 식별하는 프레임 번호를 수신할 수도 있다. 프레임 번호는, 예를 들어, 슬라이스 헤더에서의 프레임 번호 구문 엘리먼트에 액세스함으로써 H.264 또는 유사한 구현에서 획득될 수도 있다. 연속적인 프레임 번호의 비교는 개재된 프레임이 손실되었는지 여부를 나타낼 수도 있다. 프레임 번호가 이용되면, 비디오 디코더는 단순히 연속적인 프레임 번호를 추적하고 프레임 참조 차이를 결정할 수 있다. 프레임 번호 차이가 1 보다 크면, 적어도 하나의 전체 프레임이 분실된다. 분실된 프레임의 개수는 일반적으로 프레임 번호 차이를 추적하여야 한다.
프레임 번호가 손상되는 몇몇 예에서, 에러 검출 모듈 (40) 은 시작 프레임 (48C) 또는 끝 프레임 (48D) 과 같은 이전에 저장된 시작 프레임 번호 또는 끝 프레임 번호에 1 을 가산함으로써 시작 프레임 번호를 결정할 수도 있다. 에러 맵핑 모듈 (42) 은 시작 MB (48A) 및 시작 프레임 (48C) 으로서 맵핑 (48) 에 대한 시작 MB 번호 및 시작 프레임 번호를 저장할 수도 있다. 에러 검출 모듈 (40) 은 에러를 디코딩 엔진 (32) 에 통지하고 에러 플래그 (46) 를 설정할 수도 있다.
에러 검출 모듈 (40) 은 다른 방법으로 또는 추가적으로 외부 메커니즘을 채용하여, RTP (real-time protocol) 타이밍 정보와 같은 에러를 검출할 수도 있다. RTP 타이밍 정보에 대해, 에러 검출 모듈 (40) 은 연속적으로 수신된 프레임들 상이의 시간차를 체크하고 일정한 것으로 가정되는 프레임 간격만큼 이 시간차를 나눔으로써 얼마나 많은 프레임이 손실되었는지를 직접 결정할 수도 있다. 일정한 프레임 간격은 방송 애플리케이션과 같은 몇몇 애플리케이션에서 발견된다. 그러나, 비디오 텔레포니와 같이, 프레임 간격이 보통 일정하지 않은 애플리케이션에 있어서, 에러를 결정하는 프레임 번호 방법이 채용될 수도 있다.
디코딩 엔진 (32) 은 다음의 이용가능한 NAL 헤더에 액세스함으로써 에러에 응답하여 디코딩을 재동기화할 수도 있다. 이 예에서, 디코딩 엔진 (32) 은 프레임 P4 의 제 1 NAL 헤더에 액세스하여, 프레임 P4 의 이 세그먼트의 시작, 예를 들어, 시작 MB 번호 및 프레임 P4 에 대응하는 프레임 번호를 에러 검출 모듈 (40) 로 패스할 수도 있다. 에러 검출 모듈 (40) 은 에러 플래그 (46) 의 상태를 결정하고, 이 에러 플래그가 설정되는 것을 발견하면, 프레임 P4 에 대응하는 수신된 MB 번호 및 프레임 번호에 기초하여 이전의 세그먼트의 끝을 결정한다.
예를 들어, 프레임 P4 를 디코딩하는 경우에 시작 MB 번호가 0 이고 시작 프레임 번호가 5 라고 디코딩 엔진 (32) 이 결정한다고 가정하면, 에러 검출 모듈 (40) 은 (에러 검출 모듈 (40) 에 98 MB 인 최대 프레임 길이가 통지된다고 가정하면) 98 인 이전의 프레임에 대해 끝 MB 번호 및 4 인 끝 프레임 번호를 계산할 수도 있다. 에러 맵핑 모듈 (42) 은 끝 MB (48B) 및 끝 프레임 (48D) 로서 맵핑 (48) 에 대한 이들 끝 MB 번호 및 끝 프레임 번호를 저장할 수도 있다. 그 결과, 에러 검출 모듈 (40) 이 디코딩 에러의 끝을 검출하지 않을 수도 있고, 맵핑 (48) 이 완전히 규정될 때까지 에러 맵핑 모듈 (42) 이 맵핑 (48) 을 은닉 엔진 (50) 으로 포워딩하지 않을 수도 있으므로, 에러 은닉 모듈 (36) 은 프레임 P4 에 대한 제 1 슬라이스 헤더가 검출될 때까지 에러를 은닉하지 않을 수도 있다.
에러 맵핑 모듈 (42) 은 이후 맵핑 (48) 을 에러 은닉 모듈 (36) 로 포워딩할 수도 있다. 에러 은닉 모듈 (36) 은 맵핑 (48) 을 평가하고, 예를 들어, 2 인 시작 프레임 번호에서 4 인 끝 프레임 번호를 감산한 것에 기초하여, 2 개의 프레임이 손실되었다고 결정할 수도 있다. 시작 MB 번호가 0 이고 끝 MB 번호가 98 이라고 추가로 고려하면, 에러 은닉 모듈 (36) 은 또한 2 개의 전체 프레임이 손실 또는 손상되었다고 결정할 수도 있다. 따라서, 도 9b 를 참조하면, 은닉 엔진 (50) 은 2 개의 손실된 프레임 밖의 슬라이스에서 MB 은닉을 수행하는 것에 더해, 예를 들어, 직접 또는 디코딩 엔진 (32) 과 관련하여 2 개의 전체 프레임을 비트스트림 (122) 으로 삽입하여, 복원 버퍼 (38) 에서 비트스트림 (124B) 을 발생시킬 수도 있다.
도 9b 에 도시된 바와 같이, 비트스트림 (124B) 은 이전에 손실된 프레임 대신에 2 개의 추가 프레임을 포함한다. 이 프레임 삽입 기술은 프레임 P4 의 비디오 데이터가 수신 및 디코딩된 이후까지는 수행되지 않는다. 이들 추가 프레임은 둘 다 도 9b 의 비트스트림 (124B) 에서 "P1" 으로 지정되어, 은닉 엔진 (50) 이 프레임 P1 을 두 번 반복함으로써 2 개의 손실된 프레임을 은닉하고, 프레임 P4 전에 이들 2 개의 반복 프레임을 복원 버퍼 (38) 에 삽입하는 것을 나타낸다. 손실된 프레임 P2 및 P3 대신에, 반복된 P1 프레임이 존재하면, 프레임 P4 는 여전히 비트스트림에서 3 개 프레임 뒤의 프레임을 참조하지만, 이 경우에 그 프레임은 I 프레임보다는 보다 적당히 반복된 프레임 P1 이다.
대안으로서, 은닉 엔진 (50) 은 프레임을 대체하지 않을 수도 있지만, 대신에 프레임 P4 와 같은 프레임 중 하나의 NAL 헤더 내에 코딩된 참조 프레임 종속성을 변경할 수도 있다. 예를 들어, 은닉 엔진 (50) 은 맵핑 (48) 을 수신하고 끝 프레임 번호 (48D) 에 1 을 가산하여, 복원 버퍼 (38) 에서의 프레임 P4 에 액세스할 수도 있다. 이를 기초로, 은닉 엔진 (50) 은 프레임 P4 가 정확한 프레임을 지칭하도록 비트스트림의 참조 인덱스를 변경할 수도 있다. 예를 들어, 비트스트림 (122) 에 도시된 바와 같이, 프레임 P4 가 I 프레임이 아니라 프레임 P1 에 종속하도록, 은닉 엔진 (50) 은 다음으로 프레임 P4 의 NAL 헤더에 액세스하고 종속성 구문 엘리먼트를 변경할 수도 있다. 참조 프레임 버퍼에 새로운 프레임을 단순히 삽입하는 것이 더 용이할 수도 있다. 어느 이벤트에서나, 프레임 P4 는 예측 코딩에 대한 참조로서 프레임 P1 을 이용하여 디코딩 및 복원됨으로써, 디코딩 에러가 프레임 P4 및 다른 후속 프레임으로 전파하는 것을 방지하고 프레임 P4 의 정확한 복원을 수행할 수 있다.
비트스트림 (124B) 이 반복하는 프레임을 편리한 은닉 메커니즘으로 나타내더라도, 은닉 엔진 (50) 은 다른 은닉 기술을 수행하여 손실된 프레임을 은닉하거나 그렇지 않으면 대체할 수도 있다. 따라서, 본 개시물에서 설명된 효율적인 에러 핸들링 기술은 이에 관해 엄격하게 제한되어서는 안 된다. 예를 들어, 프레임 P1 내지 P4 를 뷰잉하는 경우에 은닉 엔진 (50) 이 보다 복잡한 모션 보상 프레임 보간 방식을 적용하여 보다 평활한 모션을 생성하도록 에러 핸들링 기술이 구현될 수도 있다. 2 개의 손실된 프레임 P2 및 P3 는 프레임 P1 을 두 번 단순히 반복함으로써 복제될 수 있거나, 다른 방법으로는, 손실된 프레임 P2 및 P3 의 근사치를 복제하는데 내삽 또는 다른 더 복잡한 기술이 이용될 수도 있다.
예를 들어, 은닉 엔진 (50) 은 2 개의 프레임을 삽입함으로써, 프레임 P4 가 프레임 P1 에 정확히 종속되도록 종속성을 보정하고 프레임 P4 를 디코딩할 수도 있다. 몇몇 양태에서, 상기 언급한 바와 같이, 은닉 엔진 (50) 은 복원 버퍼 (38) 에서 프레임 P1 및 P4 에 액세스하고, 프레임 내삽 방식을 이용하여 프레임 P1 과 P4 사이에서 결정된 모션에 기초하여 반복된 프레임 P1 을 추정할 수도 있다. 이 방식으로 반복된 프레임 P1 을 추정함으로써, 은닉 엔진 (50) 은 재생 동안에 뷰잉되는 경우에 모션을 평활화하는 근사된 프레임 P2 및 P3 를 생성할 수도 있다. 임의의 이벤트에서, 참조 프레임 미스매치를 보정함으로써, 이 은닉기술은 실질적으로 디코딩 프로세스를 변경하지 않고, 프레임 P4 가 프레임 P1 을 그 예측 참조 프레임으로서 이용하여, 프레임 P4 가 정확히 복원되게 할 수도 있다.
도 9c 는 일반적으로 도 9a 및 도 9b 에서 개략화된 시나리오에 대응하지만, 2 개의 연속적인 프레임 P2 및 P3 보다는 단일 프레임 P2 의 손실을 도시한다. 이 경우에, 프레임 미스매치가 단지 1 이더라도, 프레임 P3 및 P4 는 여전히 잘못된 프레임을 참조할 것이다. 도 9c 는 원래 인코딩된 비트스트림 (120) 및 전체 프레임 P2 가 손실된 수신된 비트스트림 (123) 을 도시한다. 이 경우에, 도 9c 의 비트스트림 (125) 에서 도시된 바와 같이, 은닉 엔진 (50) 은 프레임 P2 대신에 프레임 P1 을 반복하여, 참조 프레임 미스매치를 제거할 수도 있다. 그 결과, 프레임 P4 는 정확한 프레임을 참조할 수도 있다. 게다가 또, 참조 프레임 미스매치는 RTP 정보를 이용하여 프레임 번호를 비교함으로써, 또는 다른 기술에 의해 검출될 수도 있다. 또한, 프레임 P2 를 대체하는 것은 단순히 프레임 P1 과 같은 프레임을 반복함으로써, 또는 프레임을 내삽하여 프레임 P2 를 대체함으로써 달성될 수도 있다.
도 10 은 다수의 참조 프레임을 허용하는 비트스트림에서 손실된 프레임에 대해 에러 핸들링 및 은닉을 수행하는데 있어서의 비디오 디코더의 예시적인 동작을 도시한 흐름도이다. 도 10 의 흐름도는 실질적으로 도 7 의 흐름도에 대응한다. 예를 들어, 도 10 은, 비디오 디코더 (26) 가 인코딩된 비디오 프레임 데이터를 수신하고 (92), 디코딩되는 현재 슬라이스의 시작 MB 번호 및 시작 프레임 번호를 결정하는 (94) 프로세스를 도시한다. 현재 슬라이스를 디코딩하는 경로에서 (96), 디코딩 에러가 검출되면 (98), 에러 검출 모듈 (40) 은 에러 플래그를 설정할 수도 있다 (102). 디코딩 에러가 없고 (98), 슬라이스의 끝에 아직 도달하지 않았으면 (100), 비디오 디코더 (26) 는 현재 슬라이스를 계속 디코딩한다. 슬라이스의 끝에 도달하였거나 (100), 또는 에러가 검출되고 (98) 에러 플래그가 설정되었으면 (102), 비디오 디코더 (26) 는 다음의 이용가능한 슬라이스로 진행하고 그 시작 MB 번호 및 시작 프레임 번호를 결정한다 (103).
에러 플래그가 설정되면 (104), 에러 맵핑 모듈 (42) 은 다음의 이용가능한 슬라이스의 시작 MB 번호에 기초하여 손실 또는 손상된 데이터 세그먼트의 끝 MB 번호를 결정할 수도 있고 (106), 다음의 이용가능한 슬라이스의 시작 프레임 번호에 기초하여 끝 프레임 번호를 결정한다 (108). 또한, 하나 이상의 프레임이 손실되는 경우에 반복된 프레임의 삽입을 허용하기 위해, 에러 맵핑 모듈 (42) 은 시작 프레임 번호와 끝 프레임 번호 사이의 차이가 1 보다 큰지 여부를 판정하도록 구성될 수도 있다 (126). 1 보다 크다면, 비트스트림으로부터 분실된 적어도 하나의 프레임이 있다. 비트스트림으로부터 분실된 프레임의 개수는 보통 프레임 번호 차이 마이너스 1 과 동일할 것이다. 따라서, 프레임 번호 차이가 3 이면, 통상적으로 비트스트림으로부터 2 개의 분실 프레임이 있을 것이다.
프레임 번호 차이, 즉, 시작 프레임 번호와 끝 프레임 번호 차이가 1 보다 크다고 결정하는 때에, 에러 맵핑 모듈 (42) 은 에러 은닉 모듈 (36) 에 지시하여 이전의 프레임을 반복하고 이를 분실 프레임 대신에 삽입하게 할 수도 있다 (128). 상술한 바와 같이, 이전의 프레임을 반복하는 대신에, 은닉 모듈 (36) 은 모션 보상 보간과 같은 다른 기술에 의해 대체 프레임을 생성하도록 구성될 수도 있다. 대안으로서, 대체 프레임 대신에, 은닉 모듈 (36) 은, 예를 들어, 나중의 프레임이 적절한 참조 프레임을 이용하도록 손실된 프레임의 개수 (즉, 프레임 차이 번호 마이너스 1) 을 참조 인덱스에 가산함으로써, 하나 이상의 나중의 프레임에 대한 참조 프레임 인덱스 정보를 조절하도록 구성될 수도 있다.
반복된 또는 내삽된 프레임으로 대체된 손실된 프레임의 수는 프레임 차이에 기초할 수도 있다 (128). 예를 들어, 프레임 번호 차이가 3 이면, 이전의 프레임은 한번 , 즉, 다음의 2 개 프레임 동안 반복될 수도 있다. 프레임 번호 차이가 2 이면, 이전의 프레임은 한번, 즉, 다음의 프레임 동안 반복될 수도 있다. 따라서, 대체된 프레임의 개수는 프레임 번호 차이 마이너스 1 과 동일할 수도 있다. 프레임 번호 차이가 1 이하이면 (126), 또는 충분한 수의 손실된 프레임이 대체되지 않았다면 (128), 에러 은닉 모듈 (36) 은 예를 들어, 도 7 을 참조하여 설명된 바와 같이, 시작 및 끝 MB 번호 및 시작 및 끝 프레임 번호에 기초하여 에러를 은닉하고 (110), 현재 슬라이스로서 다음의 이용가능한 슬라이스 (96) 에 앞서 에러 플래그를 재설정 (110) 할 수도 있다.
이전의 프레임을 반복하는 것 또는 다른 은닉 메커니즘을 적용하는 것과 함께, 에러 은닉 모듈 (36) 은 대체되지 않은 MB 의 은닉을 위한 기술을 적용하는 것으로 진행할 수도 있고 (110), 이후 현재 슬라이스로서 다음의 이용가능한 슬라이스를 디코딩하는 것으로 진행할 수도 있다 (96). 현재의 슬라이스로 이용되는 다음의 이용가능한 슬라이스는, 예를 들어, 시작 MB 및 프레임 번호가 획득되는 슬라이스이다 (103). 손실된 프레임을 반복하는 것에 더해, 에러 은닉 모듈 (36) 은 현재 슬라이스 및 프레임에서 임의의 MB 를 은닉할 수도 있다.
시작 및 끝 프레임 번호로서, 에러가 1 보다 많은 프레임에 걸쳐 있다는 지식에 의해, 에러 은닉 모듈 (36) 은 현재 프레임의 시작 MB 에서 MB 98 (98 MB 가 적용가능한 최대 번호라고 가정할 때) 까지의 MB 를 은닉할 수도 있다. 또한, 에러 은닉 모듈 (36) 은 다음의 이용가능한 슬라이스의 포인트까지, 즉, 끝 MB 번호까지 최종 대체된 프레임을 뒤따르는 MB 를 은닉할 수도 있다. 따라서, 은닉은 최초 프레임에서의 MB 를 은닉하는 것, 하나 이상의 손실된 프레임에 대해 제 1 프레임을 반복하는 것, 및 손실 프레임을 뒤따르는 프레임에서의 MB 를 은닉한 것의 조합을 포함할 수도 있다.
도 11a 및 도 11b 는 다수의 참조 프레임을 허용하는 예시적인 비트스트림에 대한 에러 핸들링 및 은닉 기술의 적용을 도시한 도면이다. 도 11a 의 예에서, 비트스트림은 제 1 I 프레임 및 4 개의 연속적인 P 프레임 (P0, P1, P2, P3) 을 포함한다. 디코딩 에러는 프레임 P0 의 (디코딩 에러가 시작하는 슬라이스의 시작인) MB 88 에서 시작하여 프레임 P1 을 통해 프레임 P2 의 MB 57 까지 연장되는 MB 의 손실을 야기한다. 이 경우에, 시작 MB 및 시작 프레임 번호는 각각 MB 88 및 프레임 P0 이다. 프레임 P2 에서 다음의 이용가능한 슬라이스는 MB 75 에서 시작하면, 끝 MB 및 끝 프레임 번호는 각각 MB 74 및 (프레임 P2 에 대해) 3 이다.
도 11a 의 예에서, 프레임 P2 와 P0 사이의 프레임 번호 차이는 3 - 1 = 2 이며, 하나의 전체 프레임 (프레임 P1) 의 손실을 표시한다. 에러 은닉 모듈 (36) 은 프레임 P0 의 MB 88-98 을 은닉하고, 프레임 P0 을 반복함으로써 프레임 P1 을 은닉하며, 프레임 P2 의 MB 0-74 를 은닉한다. 예를 들어, 에러 맵핑 모듈 (34) 은 디코딩 에러가 프레임 P0 과 P1 에 걸쳐 있다고 표시하여, P0 가 시작 MB 88 에서 MB 98 의 프레임의 끝까지 은닉되어야 한다는 것을 표시한다. 도 10 의 동작 110 에서, 에러 맵핑 모듈 (42) 은 2 개의 에러 범위, (프레임 P0 를 반복함으로써 대체된) 대체된 프레임 P1 이전의 P0 에서의 손실된 MB 에 대해 하나, 그리고 대체된 프레임 P1 이후에 프레임 P2 에서의 손실된 MB 에 대해 다른 하나를 맵핑할 수도 있다. 제 1 에러 범위는 프레임 P0 의 MB 88 로서 시작 MB 및 프레임 P0 의 MB 98 로서 끝 MB 를 규정할 수도 있다. 에러 은닉 모듈 (36) 은 이후 제 1 에러 범위에서의 MB 를 은닉할 수도 있다.
제 2 에러 범위는 대체된 프레임 P1 이후의 다음 MB 로서의 시작 MB, 즉, 프레임 P2 에서의 MB 0 을 규정하고, 종래의 끝 MB, 즉, 프레임 P2 에서의 MB 74 를 유지할 수도 있다. 에러 은닉 모듈 (36) 은 이후 이 제 2 에러 범위에서의 MB 를 은닉할 수도 있다. 따라서, 프레임 P1 을 은닉하기 위해 결과적인 프레임 P0 의 반복으로, 에러 맵핑 모듈 (34) 은 각각 MB 0 및 프레임 P2 로서 새로운 시작 MB 및 시작 프레임 번호를 계산하고, 이전에 계산된 끝 MB 및 끝 프레임 번호를 이용할 수도 있다. 이들 번호를 이용하여, 에러 은닉 모듈 (36) 은 0 인 시작 MB 에서 시작하여 74 인 끝 MB 로 연장되는 프레임 P2 에서의 MB 를 은닉할 수 있는데, 이는 다음의 이용가능한 슬라이스의 시작 MB 마이너스 1 로 계산되었다.
프레임이 반복된 경우의 MB 의 은닉을 핸들링하는 다른 기술이 이용될 수도 있다. 에러 핸들링 모듈 (34) 은 다양한 방식으로 프레임 P1 에서의 손실된 MB 의 은닉을 핸들링할 수도 있다. 따라서, 도 11a 를 참조하여 설명된 프로세스는 예시를 목적으로 제공된다.
도 11b 의 예에서, 디코딩 에러는 프레임 P0 의 일부, 프레임 P1 과 P2 의 전부, 및 프레임 P3 의 일부에 걸쳐 있다. 이 경우에, 시작 MB 는 MB 88 이고, 시작 프레임은 프레임 P0 이다. 다음의 이용가능한 슬라이스가 프레임 P3 의 MB 53 에서 시작한다고 가정하면, 끝 MB 는 MB 52 이다. 끝 프레임은 프레임 P3 이다. 이 경우에, 끝 프레임 P3 및 시작 프레임 P0 에 대한 프레임 번호 차이는 3 - 0 = 3 이다. 따라서, 비트스트림에 2 개의 손실된 프레임 (P1 및 P2) 이 있다.
에러 맵핑 모듈 (42) 은 프레임 P0 에서 에러가 검출된 슬라이스의 시작 MB 88 로부터의 제 1 에러 범위 및 프레임 P3 의 시작에서 끝 MB 52 까지로 연장되는 제 2 에러 범위 (다음의 이용가능한 슬라이스에 대한 시작 MB 마이너스 1) 를 맵핑할 수도 있다. 그러나, 미리보기 동작의 필요는 없다. 대신에, 비디오 디코더 (26) 는, 프레임 P3 에 도달하여 에러 은닉을 트리거하는 경우에 에러 플래그의 상태에 상주할 수도 있다. 에러 은닉 모듈 (36) 은, 예를 들어, 직접, 디코딩 엔진 (32) 을 통해 프레임 P0 에서의 MB [88, 98] 을 은닉하거나, 또는 그렇지 않으면 손실된 프레임 P1 및 P2 에 대해 프레임 P0 을 반복하고 프레임 P3 에서의 MB [0, 52] 을 은닉한다. 비디오 디코더 (26) 는 이후 프레임 P3 에서의 나머지 슬라이스를 디코딩하는 것을 진행할 수도 있다.
상술한 바와 같이, 이 기술은 실제 에러가 검출된 후에 에러 핸들링이 발생하므로 낮은 계산 오버헤드를 제공할 수도 있다. 그 결과, 이 기술은 불필요한 계산을 피할 수도 있으므로 낮은 전력 소비를 제공하고, DSP (digital signal processor) 가 파서 (parser) 를 구현하고 ASIC (application specific integrated circuit) 가 픽셀 복원을 구현하는 경우와 같이, 2 개 이상의 프로세서를 수반하는 기술의 구현에서 통신 및 간섭을 감소시킬 수도 있다. 본 명세서에서 설명된 기술이 비순차 방식 대신에 순차 방식으로 동작하므로, 이 기술은 또한 미리보기 디코딩 기술과 비교하는 경우에 보다 효과적인 하드웨어 아키텍처 및 구현예를 제공할 수도 있다. 이 기술은 은닉을 요구하는 세그먼트의 정확한 식별을 통해 디코딩 에러의 영향을 감소시킴으로써 비디오 품질을 더 개선시킬 수도 있다.
본 명세서에서 설명된 기술은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 모듈, 유닛 또는 컴포넌트로 설명된 임의의 특징은 집적 로직 디바이스에 함께, 또는 이산되어 있지만 상호작용가능한 로직 디바이스로서 별개로 구현될 수도 있다. 몇몇 경우에, 다양한 특징은 집적 회로 칩 또는 칩셋과 같은 집적 회로 디바이스로서 구현될 수도 있다. 소프트웨어로 구현되면, 이 기술은, 실행되는 경우에 프로세서로 하여금 상술한 방법 중 하나 이상을 수행하게 하는 명령을 포함하는 컴퓨터-판독가능 매체에 의해 적어도 부분적으로 실현될 수도 있다.
컴퓨터-판독가능 매체는 패키징 재료를 포함할 수도 있는 컴퓨터 프로그램 제품의 일부를 형성할 수도 있다. 컴퓨터-판독가능 매체는 RAM (random access memory), SDRAM (synchronous dynamic random access memory), ROM (read-only memory), NVRAM (non-volatile random access memory), EEPROM (electrically erasable programmable read-only memory), FLASH 메모리, 자기 또는 광학 데이터 저장 매체 등과 같은 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 이 기술은 추가적으로 또는 다른 방법으로, 컴퓨터에 의해 액세스, 판독, 및/또는 실행될 수 있고 데이터 구조 또는 명령의 형태로 코드를 반송 또는 통신하는 컴퓨터-판독가능 통신 매체에 의해 적어도 부분적으로 실현될 수도 있다.
이 코드 또는 명령은 하나 이상의 DSP, 범용 마이크로프로세서, ASIC, FPGA (field programmable logic array), 다른 등가의 집적 또는 이산 로직 회로와 같은 하나 이상의 프로세서에 의해 실행될 수도 있다. 따라서, 본 명세서에서 이용되는 바와 같이, 용어 "프로세서"는 전술한 구조 또는 본 명세서에서 설명된 기술의 구현에 적절한 임의의 다른 구조 중 임의의 구조를 지칭할 수도 있다. 또한, 몇몇 양태에서, 본 명세서에서 설명된 기능성은 전용 소프트웨어 모듈 또는 하드웨어 모듈 내에서 제공될 수도 있다. 본 개시물은 또한 본 개시물에서 설명된 기술 중 하나 이상을 구현하기 위해 회로를 포함하는 다양한 집적 회로 디바이스 중 임의의 것을 예기한다. 이러한 회로는 단일 집적 회로 칩에서, 또는 소위 칩셋에서 다수의 상호동작가능한 집적 회로 칩에서 제공될 수도 있다. 이러한 집적 회로 디바이스는 다양한 애플리케이션에서 이용될 수도 있는데, 이들 중 몇몇은 모바일 텔레폰 핸드셋과 같은 무선 통신 디바이스에서의 이용을 포함할 수도 있다.
개시된 기술의 다양한 양태를 설명하였다. 이들 양태 및 다른 양태는 다음의 청구범위 내에 있다.

Claims (1)

  1. 본원의 발명의 상세한 설명에 기재된 발명.
KR1020127031318A 2008-02-26 2009-02-24 비디오 디코더 에러 핸들링 KR101540506B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US3143808P 2008-02-26 2008-02-26
US61/031,438 2008-02-26
US12/170,991 2008-07-10
US12/170,991 US9357233B2 (en) 2008-02-26 2008-07-10 Video decoder error handling
PCT/US2009/034948 WO2009108614A1 (en) 2008-02-26 2009-02-24 Video decoder error handling

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020107020951A Division KR101443952B1 (ko) 2008-02-26 2009-02-24 비디오 디코더 에러 핸들링

Publications (2)

Publication Number Publication Date
KR20130006524A true KR20130006524A (ko) 2013-01-16
KR101540506B1 KR101540506B1 (ko) 2015-07-30

Family

ID=40998278

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020107020951A KR101443952B1 (ko) 2008-02-26 2009-02-24 비디오 디코더 에러 핸들링
KR1020127031318A KR101540506B1 (ko) 2008-02-26 2009-02-24 비디오 디코더 에러 핸들링

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020107020951A KR101443952B1 (ko) 2008-02-26 2009-02-24 비디오 디코더 에러 핸들링

Country Status (7)

Country Link
US (1) US9357233B2 (ko)
EP (1) EP2255536A1 (ko)
JP (4) JP2011514076A (ko)
KR (2) KR101443952B1 (ko)
CN (1) CN101960853B (ko)
TW (1) TW200943977A (ko)
WO (1) WO2009108614A1 (ko)

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060062312A1 (en) * 2004-09-22 2006-03-23 Yen-Chi Lee Video demultiplexer and decoder with efficient data recovery
US8379733B2 (en) * 2006-09-26 2013-02-19 Qualcomm Incorporated Efficient video packetization methods for packet-switched video telephony applications
CN101952892B (zh) * 2008-01-31 2013-04-10 汤姆森许可贸易公司 用于外观数据定义和传输的方法和系统
US20100158130A1 (en) * 2008-12-22 2010-06-24 Mediatek Inc. Video decoding method
US20100195742A1 (en) * 2009-02-02 2010-08-05 Mediatek Inc. Error concealment method and apparatus
BR122015017701B1 (pt) * 2009-05-29 2021-06-01 Mitsubishi Electric Corporation Método de decodificação de imagem
KR20110072115A (ko) * 2009-12-22 2011-06-29 삼성전자주식회사 구동 회로 및 이를 갖는 표시 장치
US9185335B2 (en) * 2009-12-28 2015-11-10 Thomson Licensing Method and device for reception of video contents and services broadcast with prior transmission of data
EP2391042B1 (en) * 2010-05-27 2015-07-29 Telefonaktiebolaget L M Ericsson (publ) Efficient error handling on a link using ARQ and multiple NACKs associated with multiple error thresholds
CN102572415B (zh) * 2010-12-17 2013-12-04 清华大学 在可重构处理器上映射和实现的运动补偿算法的方法
US9819968B2 (en) * 2011-01-12 2017-11-14 Texas Instruments Incorporated Method and apparatus for error detection in CABAC
US9681141B2 (en) * 2011-02-08 2017-06-13 Texas Instruments Incorporated Error detection on variable length code decoder
EP2716055B1 (en) * 2011-06-03 2018-05-09 EchoStar Technologies L.L.C. Systems and methods for testing video hardware by evaluating output video frames containing embedded reference characteristics
US20140173677A1 (en) * 2011-08-10 2014-06-19 Telefonaktiebolaget L M Ericsson (Publ) Media stream handling
US9094684B2 (en) * 2011-12-19 2015-07-28 Google Technology Holdings LLC Method for dual pass rate control video encoding
US20130188709A1 (en) * 2012-01-25 2013-07-25 Sachin G. Deshpande Video decoder for tiles with absolute signaling
US20130223524A1 (en) * 2012-02-29 2013-08-29 Microsoft Corporation Dynamic insertion of synchronization predicted video frames
CN103327312B (zh) * 2012-03-20 2016-04-20 腾讯科技(深圳)有限公司 视频帧的解码处理方法和装置
US20130254611A1 (en) * 2012-03-23 2013-09-26 Qualcomm Incorporated Recovering data in multimedia file segments
HUE031183T2 (en) 2012-04-13 2017-06-28 Ge Video Compression Llc Scalable stream and network entity
ES2960089T3 (es) 2012-06-08 2024-02-29 Samsung Electronics Co Ltd Procedimiento y aparato para la ocultación de errores de trama y procedimiento y aparato para la decodificación de audio
US9332309B2 (en) 2012-06-08 2016-05-03 Apple Inc. Sync frame recovery in real time video transmission system
CN110536136B (zh) 2012-06-29 2022-08-05 Ge视频压缩有限责任公司 视频数据流、编码器、编码视频内容的方法以及解码器
US9769501B2 (en) * 2012-07-17 2017-09-19 Thomson Licensing Video quality assessment at a bitstream level
US9118744B2 (en) * 2012-07-29 2015-08-25 Qualcomm Incorporated Replacing lost media data for network streaming
JP6434411B2 (ja) 2012-09-24 2018-12-05 サムスン エレクトロニクス カンパニー リミテッド フレームエラー隠匿方法及びその装置、並びにオーディオ復号化方法及びその装置
US9491487B2 (en) 2012-09-25 2016-11-08 Apple Inc. Error resilient management of picture order count in predictive coding systems
US9264737B2 (en) 2012-10-01 2016-02-16 Apple Inc. Error resilient transmission of random access frames and global coding parameters
US9386326B2 (en) * 2012-10-05 2016-07-05 Nvidia Corporation Video decoding error concealment techniques
US20140119445A1 (en) * 2012-10-26 2014-05-01 Lsi Corporation Method of concealing picture header errors in digital video decoding
CN103813177A (zh) * 2012-11-07 2014-05-21 辉达公司 一种视频解码系统和方法
TWI492049B (zh) * 2013-02-06 2015-07-11 Ibm 記憶體模組狀態指示方法及裝置
US9681155B2 (en) * 2013-03-15 2017-06-13 Sony Interactive Entertainment America Llc Recovery from packet loss during transmission of compressed video streams
US9723305B2 (en) 2013-03-29 2017-08-01 Qualcomm Incorporated RTP payload format designs
US20150326884A1 (en) * 2014-05-12 2015-11-12 Silicon Image, Inc. Error Detection and Mitigation in Video Channels
CN104202611A (zh) * 2014-09-01 2014-12-10 赛特斯信息科技股份有限公司 基于视频解码器实现视频文件中花屏缺陷检测的方法
CN105513619B (zh) * 2014-09-26 2019-02-01 惠州市德赛西威汽车电子股份有限公司 一种车载娱乐系统中错误曲目的处理方法
US9800898B2 (en) * 2014-10-06 2017-10-24 Microsoft Technology Licensing, Llc Syntax structures indicating completion of coded regions
JPWO2016157724A1 (ja) * 2015-03-27 2018-01-18 パナソニックIpマネジメント株式会社 動画像復号装置
JP5940231B1 (ja) * 2016-01-15 2016-06-29 株式会社 ディー・エヌ・エー 情報処理システム、情報処理プログラム及び情報処理方法
JP6617632B2 (ja) 2016-03-24 2019-12-11 ティアック株式会社 オーディオ・ビデオ信号処理装置及びプログラム
JP6658181B2 (ja) * 2016-03-24 2020-03-04 ティアック株式会社 オーディオ装置及びオーディオシステム
JP6672934B2 (ja) 2016-03-24 2020-03-25 ティアック株式会社 オーディオ信号処理装置及びプログラム
US10182248B2 (en) * 2016-11-21 2019-01-15 Cisco Technology, Inc. Keyframe mitigation for video streams with multiple receivers
US10614747B2 (en) * 2017-01-31 2020-04-07 Synaptics Incorporated Device and method for driving display panel in response to image data
US10841621B2 (en) * 2017-03-01 2020-11-17 Wyse Technology L.L.C. Fault recovery of video bitstream in remote sessions
CN108737832A (zh) * 2018-05-28 2018-11-02 安徽维德工业自动化有限公司 一种基于视频解码器的视频缺陷检测系统及其方法
US11039149B2 (en) * 2019-08-01 2021-06-15 Qualcomm Incorporated Dynamic video insertion based on feedback information
US11418813B2 (en) * 2019-09-20 2022-08-16 Tencent America LLC Signaling of inter layer prediction in video bitstream
US10931976B1 (en) * 2019-10-14 2021-02-23 Microsoft Technology Licensing, Llc Face-speech bridging by cycle video/audio reconstruction
US20230403415A1 (en) * 2022-06-13 2023-12-14 Advanced Micro Devices, Inc Adaptive Decoder-Driven Encoder Reconfiguration

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04743A (ja) 1990-04-17 1992-01-06 Mitsubishi Electric Corp 半導体装置
US5247363A (en) 1992-03-02 1993-09-21 Rca Thomson Licensing Corporation Error concealment apparatus for hdtv receivers
KR100396971B1 (ko) * 1994-11-29 2003-11-03 산요덴키가부시키가이샤 인코드된비디오데이터의에러검출및처리기능을구비한비디오디코더
JP3203172B2 (ja) * 1994-11-29 2001-08-27 三洋電機株式会社 Mpegビデオデコーダ
US6304607B1 (en) * 1997-03-18 2001-10-16 Texas Instruments Incorporated Error resilient video coding using reversible variable length codes (RVLCS)
US6529528B1 (en) * 1997-06-27 2003-03-04 Samsung Electronics Co., Ltd. Multimedia multiplexing method
US6768775B1 (en) * 1997-12-01 2004-07-27 Samsung Electronics Co., Ltd. Video CODEC method in error resilient mode and apparatus therefor
JP2000078197A (ja) 1998-09-03 2000-03-14 Toshiba Corp 通信ノード及びパケット転送方法
US6590882B1 (en) * 1998-09-15 2003-07-08 Nortel Networks Limited Multiplexing/demultiplexing schemes between wireless physical layer and link layer
US6754277B1 (en) * 1998-10-06 2004-06-22 Texas Instruments Incorporated Error protection for compressed video
EP1005233A1 (en) * 1998-10-12 2000-05-31 STMicroelectronics S.r.l. Constant bit-rate coding control in a video coder by way of pre-analysis of the slices of the pictures
JP2000175189A (ja) 1998-12-07 2000-06-23 Univ Tokyo 動画符号化方法およびそれに用いる動画符号化装置
US7124429B2 (en) * 1999-03-05 2006-10-17 Kabushiki Kaisha Toshiba Video coding apparatus and video decoding apparatus
KR100483814B1 (ko) * 1999-03-05 2005-04-20 가부시끼가이샤 도시바 동화상 부호화 장치 및 동화상 복호화 장치
JP3411234B2 (ja) * 1999-04-26 2003-05-26 沖電気工業株式会社 符号化情報受信復号装置
US6999673B1 (en) 1999-09-30 2006-02-14 Matsushita Electric Industrial Co., Ltd. Moving picture decoding method, moving picture decoding apparatus and program recording medium
US6490320B1 (en) * 2000-02-02 2002-12-03 Mitsubishi Electric Research Laboratories Inc. Adaptable bitstream video delivery system
US6928057B2 (en) 2000-02-08 2005-08-09 Agere Systems Inc. Translation system and related method for use with a communication device
JP2002016442A (ja) * 2000-06-30 2002-01-18 Toshiba Corp Fm信号発振回路及び変調レベル補正方法
US20030012287A1 (en) * 2001-03-05 2003-01-16 Ioannis Katsavounidis Systems and methods for decoding of systematic forward error correction (FEC) codes of selected data in a video bitstream
JP3931595B2 (ja) * 2001-07-10 2007-06-20 株式会社日立製作所 データ修正装置及びデータ修正方法
JP2003078565A (ja) 2001-08-30 2003-03-14 Matsushita Electric Ind Co Ltd 無線通信装置
US20040190609A1 (en) 2001-11-09 2004-09-30 Yasuhiko Watanabe Moving picture coding method and apparatus
KR100765123B1 (ko) * 2002-02-16 2007-10-11 엘지전자 주식회사 Srns 재할당 방법
US7428684B2 (en) * 2002-04-29 2008-09-23 Fraunhofer-Gesellschaft Zur Forderung Der Angewandten Forschung E.V. Device and method for concealing an error
JP2005526348A (ja) 2002-05-17 2005-09-02 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 特徴点情報制御を備えた情報の記録のための装置及び方法
US7194000B2 (en) * 2002-06-21 2007-03-20 Telefonaktiebolaget L.M. Ericsson Methods and systems for provision of streaming data services in an internet protocol network
CN102291585A (zh) * 2002-07-15 2011-12-21 诺基亚有限公司 用于视频序列中错误隐藏的方法
JP2004056169A (ja) 2002-07-16 2004-02-19 Matsushita Electric Ind Co Ltd 画像データ受信装置、画像データ送信装置
US7027515B2 (en) * 2002-10-15 2006-04-11 Red Rock Semiconductor Ltd. Sum-of-absolute-difference checking of macroblock borders for error detection in a corrupted MPEG-4 bitstream
KR100498347B1 (ko) * 2003-04-01 2005-07-01 엘지전자 주식회사 Amr 코덱을 지원하기 위한 데이터 처리방법
US8311127B2 (en) 2004-03-04 2012-11-13 Nvidia Corporation Method and apparatus to check for wrongly decoded macroblocks in streaming multimedia applications
JP4432582B2 (ja) 2004-03-31 2010-03-17 三菱電機株式会社 動画像情報復元装置、動画像情報復元方法、動画像情報復元プログラム
US7340667B2 (en) * 2004-05-10 2008-03-04 Via Telecom Co., Ltd. Method and/or apparatus implemented in hardware to discard bad logical transmission units (LTUs)
ES2323011T3 (es) * 2004-05-13 2009-07-03 Qualcomm Inc Compresion de cabecera de datos multimedia transmitidos sobre un sistema de comunicacion inalambrico.
JP2006060813A (ja) * 2004-08-20 2006-03-02 Polycom Inc ビデオデコーダにおける誤り隠蔽
US7885337B2 (en) * 2004-08-23 2011-02-08 Qualcomm Incorporated Efficient video slicing
US20060062312A1 (en) * 2004-09-22 2006-03-23 Yen-Chi Lee Video demultiplexer and decoder with efficient data recovery
JP4578326B2 (ja) 2005-05-31 2010-11-10 京セラ株式会社 地上波デジタル放送受信機
JP4523886B2 (ja) 2005-07-08 2010-08-11 富士通株式会社 動画像復号装置、動画像復号方法および動画像復号プログラム
US8358704B2 (en) 2006-04-04 2013-01-22 Qualcomm Incorporated Frame level multimedia decoding with frame information table
US8379733B2 (en) * 2006-09-26 2013-02-19 Qualcomm Incorporated Efficient video packetization methods for packet-switched video telephony applications
US8379734B2 (en) * 2007-03-23 2013-02-19 Qualcomm Incorporated Methods of performing error concealment for digital video

Also Published As

Publication number Publication date
KR20100126410A (ko) 2010-12-01
JP2016106476A (ja) 2016-06-16
WO2009108614A8 (en) 2010-10-14
CN101960853A (zh) 2011-01-26
KR101443952B1 (ko) 2014-09-24
JP2011514076A (ja) 2011-04-28
JP2018085758A (ja) 2018-05-31
JP2014090477A (ja) 2014-05-15
KR101540506B1 (ko) 2015-07-30
US20090213938A1 (en) 2009-08-27
CN101960853B (zh) 2016-03-30
EP2255536A1 (en) 2010-12-01
WO2009108614A1 (en) 2009-09-03
TW200943977A (en) 2009-10-16
US9357233B2 (en) 2016-05-31

Similar Documents

Publication Publication Date Title
KR101540506B1 (ko) 비디오 디코더 에러 핸들링
US8612498B2 (en) Channel switch frame
KR100983169B1 (ko) 프레임 정보 테이블을 이용한 프레임 레벨 멀티미디어 디코딩
JP3923898B2 (ja) 画像符号化方法及び装置
US10425661B2 (en) Method for protecting a video frame sequence against packet loss
KR20110033240A (ko) 스케일러블 비디오 코딩(svc)디코딩에서 향상 계층의 패킷 분실에 기인한 오류 은폐를 위한 방법
US8332736B2 (en) Decoder with resiliency to handle errors in a received data stream
KR100967731B1 (ko) 채널 스위치 프레임
US20040145677A1 (en) System, method, and apparatus for error recovery in coded video signals
JP2002027483A (ja) 画像符号化装置、画像復号化装置および記憶媒体
KR20010108077A (ko) 매크로블럭 기반으로 압축된 비디오 데이터의 헤더 정보를로버스트 디코딩하기 위한 방법 및 장치
Tonoli et al. Error resilience in current distributed video coding architectures
Apostolopoulos Error-resilient video compression
JP2006325095A (ja) 動画像復号装置
JP2007151163A (ja) 画像復号化方法及び装置

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190624

Year of fee payment: 5