KR20220003511A - 낮은 복잡도 향상 비디오 코딩 - Google Patents

낮은 복잡도 향상 비디오 코딩 Download PDF

Info

Publication number
KR20220003511A
KR20220003511A KR1020217033585A KR20217033585A KR20220003511A KR 20220003511 A KR20220003511 A KR 20220003511A KR 1020217033585 A KR1020217033585 A KR 1020217033585A KR 20217033585 A KR20217033585 A KR 20217033585A KR 20220003511 A KR20220003511 A KR 20220003511A
Authority
KR
South Korea
Prior art keywords
temporal
residuals
level
video
encoding
Prior art date
Application number
KR1020217033585A
Other languages
English (en)
Inventor
귀도 메아르디
시몬 페라라
로렌조 시카렐리
이반 댐야노빅
리차드 클루카스
샘 리틀우드
Original Assignee
브이-노바 인터내셔널 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from GBGB1903844.7A external-priority patent/GB201903844D0/en
Priority claimed from GBGB1904014.6A external-priority patent/GB201904014D0/en
Priority claimed from GBGB1904492.4A external-priority patent/GB201904492D0/en
Priority claimed from GBGB1905325.5A external-priority patent/GB201905325D0/en
Priority claimed from GBGB1909701.3A external-priority patent/GB201909701D0/en
Priority claimed from GBGB1909724.5A external-priority patent/GB201909724D0/en
Priority claimed from GBGB1909997.7A external-priority patent/GB201909997D0/en
Priority claimed from GBGB1910674.9A external-priority patent/GB201910674D0/en
Priority claimed from GBGB1911467.7A external-priority patent/GB201911467D0/en
Priority claimed from GBGB1911546.8A external-priority patent/GB201911546D0/en
Priority claimed from GB201914215A external-priority patent/GB201914215D0/en
Priority claimed from GB201914414A external-priority patent/GB201914414D0/en
Priority claimed from GB201914634A external-priority patent/GB201914634D0/en
Priority claimed from GB201915553A external-priority patent/GB201915553D0/en
Priority claimed from GBGB1916090.2A external-priority patent/GB201916090D0/en
Priority claimed from GBGB1918099.1A external-priority patent/GB201918099D0/en
Priority claimed from GBGB2000430.5A external-priority patent/GB202000430D0/en
Priority claimed from GBGB2000483.4A external-priority patent/GB202000483D0/en
Priority claimed from GBGB2000600.3A external-priority patent/GB202000600D0/en
Priority claimed from GBGB2000668.0A external-priority patent/GB202000668D0/en
Priority claimed from GBGB2001408.0A external-priority patent/GB202001408D0/en
Application filed by 브이-노바 인터내셔널 리미티드 filed Critical 브이-노바 인터내셔널 리미티드
Publication of KR20220003511A publication Critical patent/KR20220003511A/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/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length 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/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/107Selection of coding mode or of prediction mode between spatial and temporal predictive coding, e.g. picture refresh
    • 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/124Quantisation
    • 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
    • H04N19/136Incoming video signal characteristics or properties
    • 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/176Methods 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 block, e.g. a macroblock
    • 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/18Methods 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 a set of transform coefficients
    • 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/186Methods 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 a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/33Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • 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/48Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using compressed domain processing techniques other than decoding, e.g. modification of transform coefficients, variable length coding [VLC] data or run-length data
    • 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
    • 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
    • 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/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Color Television Systems (AREA)

Abstract

저 복잡성 개선 비디오 코딩의 예가 설명된다. 인코딩 및 디코딩 방법들뿐만 아니라, 대응하는 인코더 및 디코더가 설명된다. 개선 코딩은 베이스 인코딩 및 디코딩을 제공할 수 있는 베이스 계층 위에서 동작할 수 있다. 공간 스케일링은 상이한 계층에 걸쳐 적용될 수 있다. 베이스 계층만이 전체 비디오를 인코딩하며, 이는 더 낮은 해상도일 수 있다. 대신에, 개선 코딩은 계산된 잔차 세트에 대해 동작한다. 잔차 세트는 하나 이상의 차원에서의 스케일링의 상이한 레벨을 표현할 수 있는 복수의 계층에 대하여 계산된다. 변환, 양자화, 엔트로피 인코딩 및 시간적 버퍼링의 적용을 수반할 수 있는 다수의 인코딩 및 디코딩 컴포넌트 또는 도구가 설명되어 있다. 예시적인 디코더에서, 인코딩된 베이스 스트림 및 하나 이상의 인코딩된 개선 스트림이 독립적으로 디코딩되고 조합되어 원래의 비디오를 재구성할 수 있다.

Description

저 복잡성 개선 비디오 코딩
본 발명은 비디오 코딩 기술에 관한 것이다. 특히, 본 발명은 비디오 데이터를 인코딩 및 디코딩하기 위한 방법 및 시스템에 관한 것이다. 특정 예에서, 방법 및 시스템은 스트리밍 및/또는 저장을 위한 압축된 표현을 생성하는데 사용될 수 있다.
전형적인 비교대상 비디오 코덱은 단일 계층 블록 기반 접근법을 사용하여 동작하며, 여기서, 다수의 코딩 도구를 사용하여 원본 신호가 처리되어 인코딩된 신호를 생성하고, 이 인코딩된 신호는 이후 대응하는 디코딩 프로세스에 의해 재구성될 수 있다. 간결성을 위해, 코딩 및 디코딩 알고리즘 또는 프로세스는 종종 "코덱"으로 지칭되고; "코덱"이라는 용어는 공통 프레임워크에 따라 설계되는 인코딩 및 디코딩 프로세스 중 하나 이상을 포괄하도록 사용된다. 이러한 전형적인 코덱은 MPEG-2, AVC/H.264, HEVC/H.265, VP8, VP9, AV1을 포함하지만, 이로 제한되지 않는다. 또한, MPEG/ISO/ITU와 같은 국제 표준 기구들뿐만 아니라 AoM(Alliance for Open Media)과 같은 산업 컨소시엄이 현재 개발 중인 다른 코덱이 있다.
최근에, 단일 계층 블록 기반 접근법에 대한 적응형들이 제안되었다. 예를 들어, 다중 계층, 블록 기반 접근법을 사용하여 동작하는 코덱의 클래스가 존재한다. 이들 코덱은 종종 비디오 코딩 산업에서 "스케일러블" 코덱이라 알려져 있다. 이들은 전형적으로 다수의 계층에 걸쳐 단일 계층, 블록 기반 접근법에 의해 수행되는 동작을 복제하며, 여기서 계층 세트는 원본 신호를 다운샘플링함으로써 획득된다. 특정 경우에, 단일 계층, 블록 기반 접근법에서의 효율은 상위 계층을 인코딩(및 디코딩)하기 위해 서브 계층으로부터의 정보를 재사용함으로써 달성될 수 있다. 이들 스케일러블 코덱은, 스케일 다운 디코딩된 신호(예를 들어, 더 낮은 해상도 신호)의 품질이 기존 서비스에 대한 품질 요건을 만족시키는 것을 보장할 필요가 있다는 점에서뿐만 아니라, 스케일링되지 않은 디코딩된 신호(예를 들어, 더 높은 해상도 신호)의 품질이 대응하는 단일 계층 코덱에 의해 생성된 것과 비슷한 것을 보장한다는 점에서, 스케일러빌리티 특징을 운영자에게 제공하도록 의도된다.
"스케일러블" 코덱의 예는 스케일러블 비디오 코딩(Scalable Video Coding)-SVC이다(예를 들어, 참조에 의해 본 출원에 참조로 포함되는, "The Scalable Video Coding Extension of the H.264/AVC Standard", H. Schwarz and M. Wien, IEEE Signal Processing Magazine, March 2008 참조). SVC는 AVC(Advanced Video Coding) 표준(AVC는 H.264로도 알려짐)의 스케일러블 버전이다. SVC에서, 각각의 스케일러블 계층은 동일한 AVC 기반 단일 계층 프로세스를 사용하여 처리되고, 상위 계층은 상위 계층에서 인코딩된 정보를 감소시키기 위해 상위 계층의 인코딩에 사용되는 정보를 서브 계층으로부터 수신한다(예를 들어, 잔차 정보 및 모션 정보를 포함하는 계층간 예측). 반대로, 디코딩을 위해, SVC 디코더는 상위 계층을 디코딩할 수 있도록 서브 계층을 디코딩할 뿐만 아니라 다양한 오버헤드 정보를 수신할 필요가 있다.
스케일러블 코덱의 다른 예는 고효율 비디오 코딩 표준(HEVC)의 스케일러블 확장이다- SHVC(예를 들어, 본 출원에 참조로 포함되는, "Overview of SHVC: Scalable Extensions of the High Efficiency Video Coding Standard", J. Boyce, Y. Ye, J. Chen and A. Ramasubramonian, IEEE Trans. On Circuits and Systems for Video Technology, Vol. 26, No. 1, 2016년 1월, 참조). SVC와 유사하게, SHVC는 또한 각각의 스케일러블 계층에 대해 동일한 HEVC 기반 프로세스를 사용하지만, 서브 계층이 AVC 또는 HEVC 중 어느 하나를 사용하는 것을 허용한다. SHVC에서, 상위 계층은 또한 상위 계층에서의 인코딩된 정보를 감소시키기 위해 상위 계층의 인코딩시 서브 계층으로부터의 정보(예를 들어, 모션 정보를 포함하는 계층간 처리 및/또는 상위 계층 코딩을 위한 추가의 참조 픽처로서 업샘플링된 서브 계층)를 수신한다. 역시, SVC와 유사하게, SHVC 디코더는 상위 계층을 디코딩할 수 있도록 서브 계층을 디코딩할 뿐만 아니라 다양한 오버헤드 정보를 수신할 필요가 있다.
SVC 및 SHVC 양자 모두는 상이한 품질 레벨에서 다수의 스트림 내의 데이터를 인코딩하는 데 사용될 수 있다. 예를 들어, SVC 및 SHVC는 예를 들어 SD(표준 화질) 및 HD(고화질) 스트림 또는 HD 및 UHD(초고화질) 스트림을 인코딩하는 데 사용될 수 있다. (최저 품질 레벨의) 베이스 스트림은 전형적으로, 베이스 스트림의 품질이, 임의의 상위 레벨 스트림과는 별개로, 베이스 스트림이 단일 스트림으로서 인코딩된 것과 동일하도록 인코딩된다. SVC 및 SHVC 양자 모두는 주로 공통 인코더 및 디코더 구조의 병렬 사본의 세트로 고려될 수 있고, 여기서, 이러한 병렬 사본의 출력은 각각 다중화 및 역다중화된다.
더 상세하게는, 예시적인 SVC 인코딩 내에서, UHD 스트림(예를 들어, 일련의 이미지들)이 다운샘플링되어 HD 스트림을 생성할 수 있다. 그 후, UHD 스트림 및 HD 스트림은 각각 AVC 인코더를 사용하여 개별적으로 인코딩된다. 이 예는 (UHD 스트림 및 HD 스트림의 2개의 스트림을 인코딩하기 위한) 2-계층 인코더를 설명하지만, SVC 인코더는 n개의 계층(n > 2)을 가질 수 있으며, 각각의 계층은 독립적인 AVC 인코더로서 동작한다.
표준 AVC 인코딩에 따라, 각각의 SVC 계층의 AVC 인코더는 (상이한 프레임이 현재 프레임에 대한 값을 추정하는 데 사용되는) 프레임간 예측 또는 (프레임 내의 다른 블록이 그 동일한 프레임의 주어진 블록에 대한 값을 추정하는 데 사용되는) 프레임내 예측 중 어느 하나를 사용하여 이미지 데이터의 각각의 픽셀 블록을 인코딩한다. 이러한 픽셀의 블록은 전형적으로 "매크로블록"이라 지칭된다. 프레임간 예측은 이전 프레임의 픽셀 블록과 현재 프레임에 대한 대응 픽셀 블록 사이의 모션을 결정하는 것을 수반하는 모션 보상을 수행하는 것을 수반한다. 계층 내에서의 프레임간 및 프레임내 예측 양자 모두는 소위 "잔차(residual)"를 계산하는 것을 수반한다. 이 "잔차"는 주어진 계층의 데이터 스트림의 픽셀 블록과 프레임간 예측 또는 프레임내 예측 중 어느 하나를 사용하여 결정되는 동일한 계층 내의 대응 픽셀 블록 사이의 차이이다. 이와 같이, 이러한 "잔차"는 계층 내의 현재 픽셀 블록과 1) 프레임 내의 현재 픽셀 블록이 아닌 하나 이상의 픽셀 블록(예를 들어, 전형적으로 동일한 계층 내의 이웃 픽셀 블록)에 기초하는 현재 픽셀 블록의 예측; 또는 2) (예를 들어, 모션 벡터를 사용하는) 계층 내의 다른 프레임으로부터의 정보에 기초하는 계층 내의 현재 픽셀 블록의 예측 사이의 차이 중 어느 하나이다.
SVC에서, AVC 인코더의 병렬 세트로서의 구현에도 불구하고, (UHD 스트림과 같은) 더 높은 품질의 스트림의 인코딩을 위해 (HD 스트림과 같은) 더 낮은 품질의 스트림에 대해 획득된 정보를 재사용함으로써 일부 효율이 얻어질 수 있다. 이러한 정보의 재사용은 "계층간 시그널링"으로 지칭되는 것을 수반한다. 이는 "프레임간" 및 "프레임내" 예측과 구별되어야 하며, 후자는 "계층 내" 코딩 접근법이라는 점에 유의해야 한다. 예를 들어, 계층간 시그널링 없이, SVC 스트림에 대한 총 대역폭
Figure pct00001
Figure pct00002
로서 표현될 수 있고, 여기서
Figure pct00003
는 인코딩된 HD 스트림을 개별적으로 전송하는 것과 관련된 대역폭이고,
Figure pct00004
는 인코딩된 UHD 스트림을 개별적으로 전송하는 것과 관련된 대역폭이다(상이한 스트림 사이의 정보의 공유가 없다고 가정함). 그러나, 계층간 시그널링을 사용함으로써, UHD 스트림
Figure pct00005
에 대한 대역폭은 UHD 스트림이 HD 스트림과 별개로 전송되는 경우에 비교하여 감소될 수 있다. 전형적으로, 계층간 시그널링을 사용함으로써, 총 대역폭은
Figure pct00006
이 되도록 감소될 수 있다.
SVC에서, 계층간 시그널링은 3가지 타입의 정보 중 하나를 포함할 수 있다: (HD 스트림으로부터의 업샘플링된 픽셀 블록이 UHD 스트림에 대한 인트라 예측에서 사용되는) 계층간 인트라 예측, (업샘플링 후에 HD 스트림에 대해 계산된 잔차와 주어진 픽셀 블록에 대해 UHD 스트림에 대해 계산된 잔차 사이의 잔차를 계산하는 것을 수반하는) 계층간 잔차 예측 및 (HD 스트림에 대해 결정된 모션 보상 파라미터를 사용하여 UHD 스트림에 대한 모션 보상을 수행하는 것을 수반하는) 계층간 모션 보상.
SVC가 AVC의 스케일러블 확장인 것과 유사하게, SHVC는 HEVC의 스케일러블 확장이다. AVC는 프레임을 매크로블록(보통 16x16 픽셀 크기)으로 분할하는 것을 수반한다. 주어진 매크로블록은 프레임 내의 다른 매크로블록으로부터 (프레임내 예측) 또는 이전 프레임의 매크로블록(들)으로부터 (프레임간 예측) 예측될 수 있다. HEVC에 대한 매크로블록과 유사한 구조는 코딩 트리 유닛(CTU)이고, 이는 매크로블록들보다 클 수 있고(예를 들어, 최대 64x64 픽셀 크기), 코딩 유닛(CU들)으로 추가 분할된다. HEVC는 AVC와 비교할 때 개선된 데이터 압축을 허용할 수 있는, 개선된 모션 벡터 결정, 모션 보상 및 프레임내 예측을 포함하는, AVC에 비한 일부 개선을 제공한다. 그러나, HEVC의 "스케일러블(scalable)" 양태는 AVC의 "스케일러블" 양태와 매우 유사하고; 즉, 양자 모두가 병렬 인코딩 스트림의 개념을 사용하며, 따라서 계층간 정보 교환을 통해 일부 효율이 얻어질 수 있다. 예를 들어, SHVC는 또한 계층간 인트라 예측, 계층간 잔차 예측, 및 계층간 모션 보상을 포함하는 계층간 시그널링을 제공한다. SVC와 같이, 상이한 품질 레벨, 예를 들어, HD 및 UHD는 병렬 계층에 의해 인코딩되고, 이후 디코딩을 위해 스트림에서 조합된다.
SVC 및 SHVC의 가용성에도 불구하고, 스케일러블 코덱의 점유율(take up)은 예상보다 낮았다. 이에 대한 한 가지 이유는 이러한 방식의 복잡성 및 대단치 않은 대역폭 절약이다. 비디오 전달 분야에서, 많은 선도적인 산업 전문가는 현재의 이용가능한 솔루션이 21세기의 비디오 전달 과제를 해결하지 못한다고 믿었다. 이들 산업 전문가는 벤더로부터 전통적인 방송사들까지의, 그리고 위성 제공자로부터 소셜 미디어 회사와 같은 오버-더-톱(over-the-top)(OTT) 서비스 제공자들까지의 큰 범위의 엔티티를 포함한다.
일반적으로, 비디오 서비스 제공자는 복잡한 생태계에서 작업할 필요가 있다. 비디오 코덱의 선택은 종종, 그 기존의 생태계와의 최대 호환성 및 기술을 배치하는 비용(예를 들어, 자원 및 금전적 비용 양자 모두)을 포함한, 많은 다양한 요인에 기초한다. 일단 선택이 이루어지면, 장비 및 시간의 형태의 추가적인 엄청난 투자 없이 코덱을 변경하기가 어렵다. 현재, 생태계를 완전히 교체하지 않고 생태계를 업그레이드하는 것은 어렵다. 또한, 때때로 소위 "클라우드(cloud)" 구성과 같은 분산 기반 구조를 사용하여, 점점 더 많은 수의 서비스를 전달하는 자원 비용 및 복잡성이 크고 작은 서비스 운영자 모두에게 주요 관심사가 되고 있다. 이는 저-자원 배터리 급전 에지 디바이스(예를 들어, 소위 사물 인터넷에서의 노드)의 증가에 의해 악화된다. 이러한 모든 요인은 예를 들어 더 환경 친화적이도록 자원 사용을 감소시킬 필요성, 및 예를 들어 사용자 및 제공된 서비스의 수를 증가시키도록 스케일링할 필요성성과 균형화될 필요가 있다.
또한, 다수의 비교대상 코덱이 대규모 상용 하드웨어가 이용가능하지 않은 시기에 개발되었다는 문제가 있다. 오늘날에는 그렇지 않다. 대규모 데이터 센터는 저렴한 일반 데이터 처리 하드웨어를 제공한다. 이는 효율적으로 동작하기 위해 맞춤 하드웨어(bespoke hardware)를 요구하는 전통적인 비디오 코딩 솔루션과는 상충된다.
본 발명의 양태는 첨부된 독립항에 설명된다. 그 다음, 본 발명의 특정 변형이 첨부된 종속항에 설명된다.
이제, 본 발명의 예를 첨부 도면을 참조하여 단지 예로서 설명할 것이다.
도 1은 제1 예에 따른 인코더의 개략도이다.
도 2는 제1 예에 따른 디코더의 개략도이다.
도 3a는 제2 예의 제1 변형에 따른 인코더의 개략도이다.
도 3b는 제2 예의 제2 변형에 따른 인코더의 개략도이다.
도 4는 제3 예에 따른 인코더의 개략도이다.
도 5a는 제2 예에 따른 디코더의 개략도이다.
도 5b는 제3 예에 따른 디코더의 제1 변형의 개략도이다.
도 5c는 제3 예에 따른 디코더의 제2 변형의 개략도이다.
도 6a는 잔차의 4x4 코딩 유닛의 예를 도시하는 개략도이다.
도 6b는 코딩 유닛이 타일로 배열될 수 있는 방법을 도시하는 개략도이다.
도 7a 내지 7c는 가능한 컬러 평면 배열을 도시하는 개략도이다.
도 8은 비트 스트림을 구성하는 방법을 도시하는 흐름도이다.
도 9a는 컬러 평면이 복수의 계층으로 분해될 수 있는 방법을 도시하는 개략도이다.
도 9b 내지 도 9j는 업샘플링의 다양한 방법을 도시하는 개략도이다.
도 10a 내지 도 10i는 양자화된 데이터를 엔트로피 인코딩하는 다양한 방법을 도시하는 개략도이다.
도 11a 내지 11c는 상이한 시간적 모드의 양태를 도시하는 개략도이다.
도 12a 및 12b는 예에 따라 시간적 예측을 적용하기 위한 컴포넌트를 도시하는 개략도이다.
도 12c 및 도 12d는 시간적 시그널링이 코딩 유닛 및 타일과 어떻게 관련되어 있는지를 도시하는 개략도이다.
도 12e는 런-렝스 인코딩(run-length encoding)을 위한 예시적인 상태 기계를 도시하는 개략도이다.
도 13a 및 도 13b는 일 예에 따른, 시간적 처리를 적용하는 방법을 도시하는 흐름도의 2개의 절반이다.
도 14a 내지 도 14c는 클라우드 제어의 예시적인 양태를 도시하는 개략도이다.
도 15는 일 예에 따른 잔차 가중을 도시하는 개략도이다.
도 16a 내지 도 16d는 다양한 예에 따른 예측 평균 요소의 계산을 도시하는 개략도이다.
도 17a 및 도 17b는 제1 및 제2 레벨 개선 인코딩 중 하나 이상에 적용될 수 있는 레이트 제어기를 도시하는 개략도이다.
도 18은 제1 예에 따른 레이트 제어기를 도시하는 개략도이다.
도 19는 제2 예에 따른 레이트 제어기를 도시하는 개략도이다.
도 20a 내지 도 20d는 예에서 사용될 수 있는 양자화의 다양한 양태를 도시하는 개략도이다.
도 21a 및 21b는 상이한 비트스트림 구성을 도시하는 개략도이다.
도 22a 내지 22d는 예시적인 신경망 업샘플러의 상이한 양태를 도시하는 개략도이다.
도 23은 프레임이 인코딩될 수 있는 방법의 예를 도시하는 개략도이다.
도 24는 제4 예에 따른 디코더의 개략도이다.
도 25는 제5 예에 따른 인코더의 개략도이다.
도 26은 제5 예에 따른 디코더의 개략도이다.
도 27은 일 예에 따른 디코딩 프로세스를 나타내는 흐름도이다.
도 28a 내지 도 28e는 프리픽스 코딩 예에 대한 파싱 트리를 도시한다.
도 29a는 디코더의 적합성을 검사하는 데 사용될 수 있는 2가지 타입의 비트스트림을 도시한다.
도 29b는 예시적인 조합된 디코더를 도시한다.
도 30은 예시적인 프레임의 상단 및 하단 필드에 대한 크로마 샘플의 예시적인 위치를 도시한다.
서론
본 출원에 설명된 특정 예는 유연하고, 적응 가능하며, 매우 효율적이고, 계산적으로 저렴한 코딩인 새로운 비디오 코딩 기술을 위한 프레임워크에 관한 것이다. 이는 선택 가능한 베이스 코덱(예를 들어, AVC, HEVC, 또는 임의의 다른 현재 또는 미래의 코덱)을 코딩된 데이터의 적어도 2개의 개선 레벨과 조합한다. 프레임워크는 복잡성이 낮지만 비디오 데이터의 유연한 개선을 또한 제공하는 접근법을 제공한다.
본 출원에 설명된 특정 예는 개발된 새로운 다중 계층 접근법을 기반으로 구축된다. 이 접근법의 세부사항은 예를 들어, 미국 특허 US8,977,065, US8,948,248, US8,711,943, US9,129,411, US8,531,321, US9,510,018, US9,300,980, 및 US9,626,772, 및 PCT 출원 PCT/EP2013/059833, PCT/EP2013/059847, PCT/EP2013/059880, PCT/EP2013/059853, PCT/EP2013/059885, PCT/EP2013/059886, 및 PCT/IB2014/060716에서 설명되고, 이 출원들은 참조로 본 출원에 모두 포함된다. 이 새로운 다중 계층 접근법은 계층들로 이루어진 계층구조를 사용하고, 여기서 각각의 계층은 상이한 비디오 해상도와 같은 상이한 품질 레벨에 관련될 수 있다.
저 복잡성 개선 비디오 코딩의 예가 설명된다. 인코딩 및 디코딩 방법들뿐만 아니라, 대응하는 인코더 및 디코더가 설명된다. 개선 코딩은 베이스 인코딩 및 디코딩을 제공할 수 있는 베이스 계층 위에서 동작할 수 있다. 공간 스케일링은 상이한 계층에 걸쳐 적용될 수 있다. 베이스 계층만이 전체 비디오를 인코딩하며, 이는 더 낮은 해상도일 수 있다. 대신에, 개선 코딩은 계산된 잔차 세트에 대해 동작한다. 잔차 세트는 하나 이상의 차원에서의 스케일링의 상이한 레벨을 표현할 수 있는 복수의 계층에 대하여 계산된다. 변환, 양자화, 엔트로피 인코딩 및 시간적 버퍼링의 적용을 수반할 수 있는 다수의 인코딩 및 디코딩 컴포넌트 또는 도구가 설명되어 있다. 예시적인 디코더에서, 인코딩된 베이스 스트림 및 하나 이상의 인코딩된 개선 스트림이 독립적으로 디코딩되고 조합되어 원래의 비디오를 재구성할 수 있다.
본 출원에 제시된 예시적인 인코딩 방식의 일반적인 구조는 베이스 코덱으로 인코딩된 다운샘플링된 소스 신호를 사용하고, 보정된 픽처를 생성하기 위해 베이스 코덱의 디코딩된 출력에 제1 레벨의 보정 데이터를 추가하고, 그 후 보정된 픽처의 업샘플링된 버전에 추가 개선 레벨 데이터를 추가한다.
본 출원에 설명된 인코딩된 스트림은 베이스 스트림 및 개선 스트림을 포함하는 것으로 고려될 수 있다. 개선 스트림은 다수의 계층을 가질 수 있다(예를 들어, 예에서 2개가 설명된다). 베이스 스트림은 하드웨어 디코더에 의해 디코딩될 수 있는 반면, 개선 스트림은 적절한 전력 소비를 갖는 소프트웨어 처리 구현에 적합할 수 있다.
본 출원에 설명된 특정 예는 복수의 자유도를 제공하는 구조를 가지며, 이는 결국 많은 상황에 대해 큰 유연성 및 적응성을 허용한다. 이는 이 코딩 형식이 OTT 송신, 라이브 스트리밍, 라이브 UHD 브로드캐스트 등을 포함하는 많은 사용 사례에 적합하다는 것을 의미한다.
베이스 코덱의 디코딩된 출력이 시청을 위해 의도된 것은 아니지만, 이는 더 낮은 해상도의 완전히 디코딩된 비디오이고, 출력을 기존의 디코더와 호환가능하게 하고, 적절하다고 고려되는 경우, 또한 더 낮은 해상도의 출력으로서 사용가능하게 한다.
다음 설명에서, 비디오 인코딩 및 디코딩을 위한 특정 예시적인 아키텍처가 설명된다. 이 아키텍처는 복잡성을 감소시키기 위해 소수의 간단한 코딩 도구를 사용한다. 상승적으로 조합될 때, 이들은 베이스 코덱으로 인코딩된 전체 해상도 픽처와 비교할 때 시각적 품질 개선을 제공하면서 동시에 그것이 사용될 수 있는 방식에 있어서의 유연성을 생성할 수 있다.
본 설명된 예는 점점 더 적은 전력을 사용하려는 최근의 소망에 대한 솔루션을 제공하고, 성능을 증가시키면서 인코딩 및 디코딩의 계산 비용을 감소시키는 데 기여한다. 본 설명된 예는 기존의 기반 구조 위에서 소프트웨어 계층으로서 동작하고 원하는 성능을 전달할 수 있다. 본 예는 달리 단순한 업그레이드(tout-court upgrade)로 가능한 것보다 낮은 계산 비용으로 비디오 코딩을 전달하면서 기존의(및 미래의) 비디오 스트리밍 및 전달 생태계와 호환되는 솔루션을 제공한다. 최신 코덱의 코딩 효율을 설명된 예의 처리 전력 감소와 조합하는 것은 차세대 코덱의 채택을 위한 기술적 사례를 개선할 수 있다.
본 출원에 설명된 특정 예는 잔차에 대해 동작한다. 잔차는 2개의 이미지 또는 비디오 신호를 비교함으로써 계산될 수 있다. 일 경우에, 잔차는 입력 비디오 스트림으로부터의 프레임을 재구성된 비디오 스트림의 프레임과 비교함으로써 계산된다. 본 출원에 설명되는 바와 같은 레벨 1 개선 스트림의 경우, 잔차는 다운샘플링된 입력 비디오 스트림을 베이스 인코더에 의해 인코딩되고 그 후 베이스 디코더에 의해 디코딩된 제1 비디오 스트림과 비교함으로써 계산될 수 있다(예를 들어, 제1 비디오 스트림은 디코더에서 다운샘플링된 입력 비디오 스트림의 디코딩 및 재구성을 모사한다). 본 출원에 설명되는 바와 같은 레벨 2 개선 스트림의 경우, 잔차는 (예를 들어, 다운샘플링된 또는 베이스 비디오 스트림보다 높은 품질 레벨 또는 해상도에서의) 입력 비디오 스트림을 제1 비디오 스트림의 업샘플링된 버전에 디코딩된 레벨 1 잔차 세트를 더한 것으로부터 재구성되는 제2 비디오 스트림과 비교함으로써 계산될 수 있다(예를 들어, 제2 비디오 스트림은 베이스 스트림 및 레벨 1 개선 스트림 양자 모두를 디코딩하고, 더 낮은 또는 다운샘플링된 품질 레벨에서 비디오 스트림을 재구성한 후에 이 재구성된 비디오 스트림을 업샘플링한 것을 모사한다). 이는 예를 들어 도 1 내지 5c에 도시된다.
따라서, 특정 예에서, 잔차는 특정 품질 레벨 또는 해상도에서의 오차 또는 차이인 것으로 고려될 수 있다. 설명된 예에서, 2개의 품질 레벨 또는 해상도, 따라서 2개의 잔차 세트(레벨 1 및 2)가 존재한다. 본 출원에 설명된 각각의 잔차 세트는 상이한 형태의 오차 또는 차이를 모델링한다. 레벨 1 잔차는, 예를 들어, 전형적으로 베이스 인코더의 특성을 보정하고, 예를 들어, 인코딩 프로세스의 일부로서 베이스 인코더에 의해 도입되는 아티팩트를 보정한다. 대조적으로, 레벨 2 잔차는, 예를 들어, 전형적으로 품질 레벨의 이동에 의해 도입되는 복잡한 효과 및 레벨 1 보정에 의해 도입되는 차이(예를 들어, 레벨 1 인코딩 파이프라인에 의해 4 또는 16 픽셀의 영역과 같은 보다 넓은 공간 스케일에 걸쳐 생성되는 아티팩트)를 보정한다. 이는 하나의 잔차 세트에 대해 수행된 동작이 또 다른 잔차 세트에 대하여 동일한 효과를 반드시 제공할 것이라는 것이 분명하지 않다는 것을 의미한다(예를 들어, 각각의 잔차 세트가 상이한 통계적 패턴 및 상관 관계의 세트를 가질 수 있음).
본 출원에 설명된 예에서, 잔차는 인코딩 파이프라인에 의해 인코딩된다. 이는 변환, 양자화 및 엔트로피 인코딩 동작을 포함할 수 있다. 이는 또한 잔차 순위화, 가중 및 필터링, 및 시간적 처리(temporal processing)를 포함할 수 있다. 이러한 파이프라인은 도 1, 도 3a 및 도 3b에 도시된다. 그 다음, 잔차는, 예를 들어, 레벨 1 및 레벨 2 개선 스트림으로서 디코더에 송신되고, 디코더는 하이브리드 스트림으로서 베이스 스트림과 조합될 수 있다(또는 별개로 송신될 수 있다). 일 경우에, 비트 레이트가 베이스 스트림 및 양자 모두의 개선 스트림을 포함하는 하이브리드 데이터 스트림에 대해 설정되고, 그 후, 상이한 적응적 비트 레이트가 설정된 비트 레이트를 만족시키도록 처리되고 있는 데이터에 기초하여 개별 스트림에 적용된다(예를 들어, 낮은 레벨의 아티팩트로 지각되는 고품질 비디오는, 제약된 데이터가 이미지 데이터가 변화함에 따라 변화할 수 있는 가장 지각적으로 영향력 있는 개별 스트림에 의해 사용될 수 있도록, 심지어 프레임별 레벨에서, 상이한 개별 스트림에 비트 레이트를 적응적으로 할당함으로써 구성될 수 있다).
본 출원에 설명된 바와 같은 잔차 세트는 희소 데이터(sparse data)로서 볼 수 있는데, 예를 들어 많은 경우에 주어진 픽셀 또는 영역에 대해 차이가 없고 결과적인 잔차 값은 0이다. 잔차의 분포를 볼 때, 많은 확률 질량이 0 근방에 위치된 작은 잔차 값에 할당된다- 예를 들어, 특정 비디오에 대하여, -2, -1, 0, 1, 2 등의 값이, 가장 빈번히 발생한다. 특정 경우에, 잔차 값의 분포는 0에 대해 대칭 또는 거의 대칭이다. 특정 테스트 비디오 사례에서, 잔차 값의 분포는 0에 대해 로그 또는 지수 분포와 유사한 형상을 취하는 것(예를 들어, 대칭 또는 거의 대칭적인 것)으로 밝혀졌다. 잔차 값의 정확한 분포는 입력 비디오 스트림의 콘텐츠에 따라 달라질 수 있다.
잔차는 자체적으로 2차원 이미지, 예를 들어 차이의 델타 이미지로서 처리될 수 있다. 이러한 방식으로 볼 때, 데이터의 희소성은 잔차 이미지에서 볼 수 있는 "점", 작은 "라인", "에지", "코너" 등과 같은 특징을 관련시키는 것으로 보일 수 있다. 이러한 특징은 전형적으로(예를 들어, 공간에서 그리고/또는 시간에서) 완전히 상관되지 않는 것으로 밝혀졌다. 이는 이들이 유도되는 이미지 데이터의 특성(예를 들어, 원래의 비디오 신호의 픽셀 특성들)과 다른 특성을 갖는다.
계수의 형태로 변환된 잔차를 포함하는 현재 잔차의 특성은 그것이 유도되는 이미지 데이터의 특성과 상이하므로, 예를 들어, 전통적인 동영상 전문가 그룹(Moving Picture Experts Group)(MPEG) 인코딩 및 디코딩 표준에서 발견되는 것과 같은 표준 인코딩 접근법을 적용하는 것이 일반적으로 불가능하다. 예를 들어, 많은 비교대상 방식은 큰 변환(예를 들어, 보통의 비디오 프레임에서의 큰 픽셀 영역의 변환)을 사용한다. 예를 들어, 본 출원에 설명된 바와 같은 잔차의 특성으로 인해, 잔차 이미지에 대해 이러한 비교적 큰 변환을 사용하는 것은 매우 비효율적일 것이다. 예를 들어, 보통 이미지의 영역에 대해 설계된 큰 블록을 사용하여 잔차 이미지에 작은 점을 인코딩하는 것은 매우 어려울 것이다.
본 출원에 설명된 특정 예는 작고 간단한 변환 커널(예를 들어, 본 출원에 제시된 바와 같은 2x2 또는 4x4 커널- 방향 분해 및 방향 분해 제곱 -)을 대신 사용하여 이러한 문제를 해결한다. 이는 비교대상 비디오 코딩 접근법과 다른 방향으로 이동한다. 이러한 새로운 접근법을 잔차의 블록에 적용하는 것은 압축 효율을 생성한다. 예를 들어, 특정 변환은 효율적으로 압축될 수 있는 상관되지 않은 계수(예를 들어, 공간에서)를 생성한다. 계수 사이의 상관 관계가 예를 들어, 잔차 이미지 내의 라인에 대해 활용될 수 있지만, 이는 인코딩 복잡성을 초래할 수 있으며, 이는 레거시 및 저-자원 디바이스 상에서 구현하기 어렵고, 종종 보정될 필요가 있는 다른 복잡한 아티팩트를 생성한다. 본 예에서, 비교대상 접근법과는 상이한 변환이 보정 데이터 및 잔차를 인코딩하기 위해 사용된다(아다마르(Hadamard)). 예를 들어, 본 출원에 제시된 변환은 DCT(Discrete Cosine Transform)를 사용하여 보다 큰 데이터 블록을 변환하는 것보다 훨씬 더 효율적일 수 있고, 이는 SVC/SHVC에서 사용되는 변환이다.
본 출원에 설명된 특정 예는 또한 잔차의 시간적 특성, 예를 들어, 그 뿐만 아니라 공간적 특성을 고려한다. 예를 들어, 잔차 이미지에서, 잔차 "이미지"에서 관찰될 수 있는 "에지" 및 "점"과 같은 세부사항은 시간적 상관 관계를 거의 나타내지 않는다. 이는 잔차 이미지에서의 "에지"가 보통의 비디오 스트림에서 지각되는 에지와 같이 종종 병진하거나 회전하지 않기 때문이다. 예를 들어, 잔차 이미지 내에서, "에지"는 실제로 시간 경과에 따라 형상을 변경할 수 있으며, 예를 들어, 다수의 잔차 이미지 "에지" 내에서 헤드 터닝(head turning)이 캡처될 수 있지만 표준 방식으로 이동하지 않을 수 있다("에지"는 조명, 스케일 인자, 인코딩 인자 등과 같은 인자에 의존하는 복잡한 차이를 반영하기 때문임). 잔차 이미지의 이러한 시간적 양태, 예를 들어, 순차적인 잔차 "프레임" 또는 "픽처(picture)"를 포함하는 잔차 "비디오"는 전형적으로 종래의 이미지, 예를 들어, 보통 비디오 프레임의 시간적 양태와 상이하다(예를 들어, Y, U 또는 V 평면에서). 따라서, 종래의 인코딩 접근법을 잔차 이미지에 적용하는 방법은 명백하지 않으며; 실제로, 비교대상 비디오 인코딩 방식 및 표준으로부터의 모션 보상 접근법은 잔차 데이터를 (예를 들어, 유용한 방식으로) 인코딩할 수 없는 것으로 밝혀졌다.
SVC 내의 AVC 계층은 그 비교대상 표준에서 "잔차"라 지칭되는 데이터의 계산을 수반할 수 있다. 그러나, 이러한 비교대상 "잔차"는 그 계층의 데이터 스트림의 픽셀 블록과 프레임간 예측 또는 프레임내 예측 중 어느 하나를 사용하여 결정된 대응 픽셀 블록 사이의 차이이다. 그러나, 이러한 비교대상 "잔차"는 본 예에서 인코딩된 잔차와 매우 상이하다. SVC에서, "잔차"는 프레임의 픽셀 블록과 프레임에 대한 예측 픽셀 블록(프레임간 예측 또는 프레임내 예측 중 어느 하나를 사용하여 예측됨) 사이의 차이이다. 대조적으로, 본 예는 코딩 블록과 재구성된 코딩 블록 사이의 차이로서 잔차를 계산하는 것을 수반한다(예를 들어, 다운샘플링 및 후속 업샘플링이 적용되고, 인코딩/디코딩 에러에 대해 보정됨).
또한, 많은 비교대상 비디오 인코딩 접근법은 종래의 비디오 데이터에 대해 디폴트로서 시간적 예측 및 모션 보상을 제공하려고 시도한다. 이 "내장형(built-in)" 접근법은 순차적인 잔차 이미지에 적용될 때 실패할 수 있을 뿐만 아니라, 불필요한 처리 자원를 점유할 수 있다(예를 들어, 비디오 인코딩을 실제로 손상시키면서 이 자원가 사용될 수 있다). 이는 또한 할당된 비트 레이트를 점유하는 불필요한 비트를 생성할 수 있다. 이러한 문제를 해결하는 방법은 종래의 접근법에서는 명백하지 않다.
예를 들어, "시간적 양태" 섹션 및 다른 곳에서 설명된 바와 같은 본 출원에 설명된 특정 예는 잔차 이미지 내의 시간적 특징을 예측하는 효율적인 방식을 제공한다. 특정 예는 잔차 내에서의 시간적 양태 및 움직임을 효율적으로 예측하기 위하여 제로-모션 벡터 예측을 사용한다. 이는 비교적 정적인 특징에 대한 움직임을 예측하고(예를 들어, 제2 시간적 모드- 인터 예측 -를 시간 경과에 따라 지속되는 잔차 특징에 적용함), 그 후 다른 모든 것에 대해 제1 시간적 모드(예를 들어, 인트라 예측)를 사용하는 것으로 보일 수 있다. 따라서, 본 출원에 설명된 특정 예는 잔차 "비디오"에서 일시적인 상관되지 않은 시간적 특징을 예측하는 비트 레이트 및 희소한 자원를 낭비하려 하지 않는다.
본 출원에 설명된 특정 예는 레거시, 기존 및 미래의 코덱이 개선되는 것을 허용한다. 따라서, 예는 이러한 코드의 능력을 베이스 계층의 일부로서 활용할 수 있으며, 개선 계층의 형태의 개선을 제공할 수 있다.
본 출원에 설명된 특정 예는 복잡성이 낮다. 이는 베이스 코덱이 낮은 계산 복잡성으로 및/또는 광범위한 병렬화를 가능하게 하는 방식으로 개선될 수 있게 한다. 다운샘플링이 베이스 코덱(예를 들어, 공간 스케일러빌리티(spatial scalability)의 적용) 이전에 사용되는 경우, 이때, 원래 입력 해상도에서의 비디오 신호는 원래 입력 해상도에서 베이스 코덱을 사용하는 것과 비교하여 감소된 계산 복잡성을 제공받을 수 있다. 이는 초고해상도 비디오의 광범위한 채택을 허용한다. 예를 들어, 단일 계층의 기존 코덱을 사용하여 더 낮은 해상도로 입력 비디오를 처리하고, 처리된 비디오의 업샘플링된 버전에 세부사항을 추가하기 위해 고도로 전문화된 도구의 간단하고 작은 세트를 사용하는 것의 조합에 의해, 많은 이점이 실현될 수 있다.
본 출원에 설명된 특정 예는 다수의 모듈식이지만 전문화된 비디오 코딩 도구를 구현한다. (2개의 상이한 지점에서의 2개의 개선 레벨을 포함하는) 개선 계층을 구성하는 도구가 특정 타입의 데이터에 대해 설계된다: 잔차 데이터. 본 출원에 설명되는 바와 같은 잔차 데이터는 원래 데이터 신호와 재구성된 데이터 신호의 비교로부터 초래된다. 재구성된 데이터 신호는 비교대상 비디오 코딩 방식과 상이한 방식으로 생성된다. 예를 들어, 재구성된 데이터 신호는 입력 비디오 프레임-코딩 유닛-의 특정 작은 공간 부분과 관련된다. 프레임에 대한 코딩 유닛의 세트는 비교대상 비디오 코딩 기술에서의 인터 및 인트라 예측과 달리, 잔차 데이터가 프레임에 대해 다른 코딩 유닛들 또는 다른 프레임들에 대해 다른 코딩 유닛들을 사용하여 생성되지 않으므로 병렬로 처리될 수 있다. 시간적 처리가 적용될 수 있지만, 이는 현재 코딩 유닛에 대한 이전 데이터를 사용하여 코딩 유닛 레벨에서 적용된다. 코딩 유닛 사이에는 상호 의존성이 없다.
본 출원에 설명되는 특정 전문화된 비디오 코딩 도구는 특히 희소 잔차 데이터 처리를 위해 적응된다. 상이한 생성 방법으로 인해, 본 출원에서 사용되는 잔차 데이터는 비교대상 비디오 코딩 기술의 속성과 상이한 속성을 갖는다. 도면에 도시된 바와 같이, 본 출원에 설명된 특정 예는 잔차 데이터의 1개 또는 2개의 계층을 처리하는 개선 계층을 제공한다. 잔차 데이터는 참조 비디오 프레임(예를 들어, 소스 비디오)과 (예를 들어, 계층에 따라 업샘플링이 있거나 없는) 비디오의 베이스-디코딩된 버전 사이의 차이를 취함으로써 생성된다. 결과적인 잔차 데이터는 희소 정보, 전형적으로, 희소 정보를 다루도록 설계되는 작은 변환을 사용하여 이후에 처리되는, 에지, 점, 및 디테일이다. 이러한 작은 변환은 스케일 불변성일 수 있으며, 예를 들어 {-1, 1}의 범위 내의 정수 값을 가질 수 있다.
본 출원에 설명된 특정 예는 기존의 코덱의 효율적인 사용을 허용한다. 예를 들어, 베이스 인코더는 전형적으로 (예를 들어, 원래 입력 신호보다) 더 낮은 해상도로 적용된다. 그 후, 베이스 디코더는 더 낮은 해상도에서 베이스 인코더의 출력을 디코딩하는데 사용되고, 결과적인 디코딩된 신호가 디코딩된 데이터를 생성하는데 사용된다. 이 때문에, 베이스 코덱은 더 적은 수의 픽셀에서 동작하므로, 코덱이 더 높은 품질 레벨(예를 들어, 더 작은 양자화 단계 크기)에서 동작하고 더 효율적인 방식으로 자체 내부 코딩 도구를 사용하는 것을 허용한다. 이는 또한 더 적은 전력을 소비할 수 있다.
본 출원에 설명된 특정 예는 탄력적이고 적응적인 코딩 프로세스를 제공한다. 예를 들어, 개선 계층의 구성은 전체 코딩 프로세스가 베이스 계층에서 사용될 수 있는 전통적인 DCT(Discrete Cosine Transform) 블록 기반 코덱에 의해 도입되는 전형적인 코딩 아티팩트에 탄력적이게 한다. 제1 개선 계층(레벨 1 잔차들)은 베이스 코덱에 의해 도입된 아티팩트의 보정을 가능하게 하는 반면, 제2 개선 계층(레벨 2 잔차들)은 신호의 보정된 업샘플링된 버전에 대한 디테일 및 선명도의 추가를 가능하게 한다. 보정의 레벨은 최대 충실도 및 무손실 인코딩을 제공하는 버전까지 비트 레이트를 제어함으로써 조절될 수 있다. 전형적으로, 베이스 재구성이 열악할수록, 제1 개선 계층은 (예를 들어, 그 계층에 의해 출력되는 인코딩된 잔차 데이터의 형태의) 보정에 더 많이 기여할 수 있다. 반대로, 베이스 재구성이 양호할수록, 더 많은 비트 레이트가 제2 개선 계층(레벨 2 잔차들)에 할당되어 비디오를 선명화하고 미세 디테일을 추가할 수 있다.
본 출원에 설명되는 특정 예는 애그노스틱 베이스 계층 개선을 제공한다. 예를 들어, 예는 임의의 베이스 코덱을, MPEG-2, VP8, AVC, HEVC, VP9, AV1 등과 같은 기존의 코덱으로부터, EVC 및 VVC와 같은 개발 중인 것을 포함하는 미래의 코덱으로 개선하기 위해 사용될 수 있다. 이는 개선 계층이 베이스 코덱의 디코딩된 버전에서 동작하고, 따라서 베이스 계층이 어떻게 인코딩 및/또는 디코딩되었는지에 대한 어떠한 정보도 요구하지 않고 임의의 형식에서 사용될 수 있기 때문에 가능하다.
아래에 설명되는 바와 같이, 본 출원에 설명되는 특정 예는 개선 계층 인코딩의 병렬화를 허용한다. 예를 들어, 개선 계층은 임의의 형태의 블록간(즉, 블록들 사이의) 예측을 구현하지 않는다. 이미지는 잔차 데이터의 계층에 걸쳐 작은 (2x2 또는 4x4) 독립적 변환 커널을 적용하여 처리된다. 블록 사이에서 예측이 이루어지지 않기 때문에, 각각의 2x2 또는 4x4 블록은 독립적으로 그리고 병렬 방식으로 처리될 수 있다. 또한, 각각의 계층은 개별적으로 처리되며, 따라서 블록의 디코딩 및 계층의 디코딩이 대규모 병렬 방식으로 수행되는 것을 가능하게 한다.
현재 설명된 예에서, 인코딩/디코딩 프로세스 및 다운샘플링/업샘플링 프로세스에 의해 도입되는 에러는 디코더 측에서 원래의 비디오를 재생성하기 위해 개별적으로 보정될 수 있다. 따라서, 인코딩된 잔차 및 인코딩된 보정 데이터는 입력 비디오 자체보다 크기가 더 작으며, 따라서 입력 비디오보다 더 효율적으로(따라서, SVC 및 SHVC 접근법의 비교대상 UHD 스트림보다 더 효율적으로) 디코더로 전송될 수 있다.
SVC 및 SHVC와 더 비교하면, 특정 설명된 예는 인코딩된 UHD 스트림 자체를 전송하지 않고, 인코딩된 잔차 및 보정 데이터를 디코더에 전송하는 것을 수반한다. 대조적으로, SVC 및 SHVC에서, HD 및 UHD 이미지 양자 모두는 별개의 비디오 스트림으로서 인코딩되어 디코더에 전송된다. 현재 설명된 예는, 예를 들어
Figure pct00007
가 되도록, 인코딩된 데이터를 디코더에 전송하기 위한 전체 비트 레이트의 상당한 감소를 허용할 수 있다. 이러한 경우에, HD 스트림 및 UHD 스트림 양자 모두를 전송하기 위한 총 대역폭은 단지 UHD 스트림만을 전송하기 위해 비교대상 표준에서 요구되는 대역폭 미만일 수 있다.
현재 설명된 예는 추가로 코딩 유닛 또는 블록이 순차적으로보다는 병렬로 처리되는 것을 허용한다. 이는 현재 설명된 예가 인트라 예측을 적용하지 않고; 상이한 블록의 공간 계수 사이에 매우 제한된 공간 상관 관계가 있는 반면, SVC/SHVC는 인트라 예측을 제공하기 때문이다. 이는 (예를 들어, UHD 스트림이 HD 스트림의 다양한 픽셀로부터의 예측에 의존하므로) 블록을 순차적으로 처리하는 것을 수반하는 SVC/SHVC의 비교대상 접근법들보다 더 효율적이다.
본 출원의 예에서 설명된 개선 코딩은 잔차 데이터의 스트림을 인코딩 및 디코딩하는 개선 코덱으로 고려될 수 있다. 이는 인코더가 각각의 공간 해상도 레벨에서 입력으로서 비디오 데이터를 수신하고 디코더가 각각의 공간 해상도 레벨에서 비디오 데이터를 출력하는 비교대상 SVC 및 SHVC 구현과 상이하다. 이와 같이, 비교대상 SVC 및 SHVC는 코덱의 세트의 병렬 구현으로서 볼 수 있으며, 각각의 코덱은 비디오-인/비디오-아웃 코딩 구조를 갖는다. 다른 한편으로 본 출원에 설명된 개선 코덱은 각각의 공간 해상도 레벨에서 잔차 데이터를 수신하고 또한 잔차 데이터를 출력한다. 예를 들어, SVC 및 SHVC에서, 각각의 공간 해상도 레벨의 출력은 출력 비디오를 생성하기 위해 합산되지 않으며, 이는 의미가 없을 것이다.
예에서, 레벨 1 및 2에 대한 참조는 개선 서브 계층의 임의적 표지로서 취해진다는 점에 유의해야 한다. 이들은 대안적으로 상이한 이름으로 지칭될 수 있다(예를 들어, 레벨 1 및 2가 레벨 1 및 레벨 0으로서 각각 라벨링되는 반전된 번호매김 체계를 갖고, 아래의 "레벨 0" 베이스 계층은 레벨 2임).
정의 및 용어
본 출원에 설명된 특정 예에서, 다음의 용어가 사용된다.
"액세스 유닛"- 이는 지정된 분류 규칙에 따라 서로 관련되는 네트워크 추상화 계층(NAL) 유닛의 세트를 지칭한다. 이는 디코딩 순서에서 연속적일 수 있고 비디오의 코딩된 픽처(즉, 프레임)(특정 경우에는 정확히 하나)을 포함할 수 있다.
"베이스 계층"- 이는 코딩된 베이스 픽처에 관련한 계층이고, 여기서 "베이스"는 처리된 입력 비디오 데이터를 수신하는 코덱을 지칭한다. 이는 베이스와 관련된 비트스트림의 일부와 관련될 수 있다.
"비트스트림" - 이는 NAL 유닛 스트림 또는 바이트 스트림의 형태로 공급될 수 있는 비트의 시퀀스이다. 이는 하나 이상의 코딩된 비디오 시퀀스(CVS)를 형성하는 코딩된 픽처 및 관련된 데이터의 표현을 형성할 수 있다.
"블록"- 샘플의 MxN(M-열 x N-행) 어레이, 또는 변환 계수의 MxN 어레이. 용어 "코딩 유닛" 또는 "코딩 블록"은 또한 샘플의 MxN 어레이를 지칭하기 위해 사용된다. 이러한 용어는 화소의 세트(예를 들어, 특정 컬러 채널의 픽셀에 대한 값들), 잔차 요소의 세트, 처리된 잔차 요소를 표현하는 값의 세트 및/또는 인코딩된 값의 세트를 지칭하는 데 사용될 수 있다. 용어 "코딩 유닛"은 때때로 3개의 샘플 어레이를 갖는 픽처의 루마 샘플의 코딩 블록 또는 크로마 샘플의 코딩 블록, 또는 샘플을 코딩하기 위해 사용되는 3개의 개별 컬러 평면 및 신택스 구조를 사용하여 코딩되는 픽처 또는 단색 픽처의 샘플의 코딩 블록을 지칭하기 위해 사용된다.
"바이트"- 8 비트의 시퀀스로서, 비트 값의 시퀀스로서 기록되거나 판독될 때, 최좌측 및 최우측 비트는 각각 최상위 및 최하위 비트를 표현한다.
"바이트 정렬됨"- 비트스트림 내의 위치는 그 위치가 비트스트림 내의 첫 번째 비트의 위치로부터 8 비트의 정수배일 때 바이트 정렬되고, 비트 또는 바이트 또는 신택스 요소는 비트스트림에서 나타나는 위치가 바이트 정렬될 때 바이트 정렬된다고 말한다.
"바이트 스트림"- 이는 시작 코드 프리픽스 및 NAL 유닛을 포함하는 NAL 유닛 스트림의 캡슐화를 지칭하는데 사용될 수 있다.
"크로마(chroma)"- 이는 샘플 어레이 또는 단일 샘플이 컬러 신호를 표현하고 있음을 지정하기 위한 형용사로서 사용된다. 이는 예를 들어, 심볼 Cb 및 Cr에 의해 표현되는 바와 같은, 원색에 관련된 2개의 컬러 차이 신호 중 하나일 수 있다. 이는 또한 픽처의 컬러링에 대한 정보를 제공하는 컬러 채널의 세트 내의 채널을 지칭하기 위해 사용될 수 있다. 용어 색차와 종종 관련되는 선형 광 전달 특성의 사용을 암시하는 것을 피하기 위해 용어 색차보다는 용어 크로마를 사용한다.
"청크"- 이는 계수 그룹에 속하는 양자화된 변환 계수를 포함하는 데이터의 엔트로피 인코딩된 부분을 지칭하기 위해 사용된다.
"코딩된 픽처"- 이는 픽처의 코딩된 표현을 표현하는 코딩 유닛의 세트를 지칭하는데 사용된다.
"코딩된 베이스 픽처"- 이는 개선 인코딩 프로세스와 별개인(그리고 종종 상이한) 베이스 인코딩 프로세스를 사용하여 인코딩된 픽처의 코딩된 표현을 지칭할 수 있다.
"코딩된 표현"- 그 코딩된 형태로 표현된 데이터 요소
"계수 그룹(CG)"은 변환 계수의 특정 세트(즉, 변환된 잔차 값의 세트)에 관련된 인코딩된 데이터를 포함하는 신택스 구조를 지칭하는데 사용된다.
"성분" 또는 "컬러 성분"- 이는 컬러 성분 어레이의 세트 중 하나로부터의 어레이 또는 단일 샘플을 지칭하기 위해 사용된다. 컬러 성분은 하나의 루마 및 2개의 크로마 성분 및/또는 적색, 녹색, 청색(RGB) 성분을 포함할 수 있다. 컬러 성분은 일대일 샘플링 주파수를 갖지 않을 수 있으며, 예를 들어 성분은 4:2:0, 4:2:2, 또는 4:4:4 컬러 형식으로 픽처를 구성할 수 있다. 본 출원에 설명된 특정 예는 또한 단지 단일 단색(예를 들어, 루마 또는 그레이스케일) 픽처를 지칭할 수 있으며, 여기서 단색 형식으로 픽처를 구성하는 어레이의 단일 어레이 또는 단일 샘플이 존재한다.
"데이터 블록"- 이는 데이터의 타입에 대응하는 바이트를 포함하는 신택스 구조를 지칭하기 위하여 사용된다.
"디코딩된 베이스 픽처"- 이는 코딩된 베이스 픽처를 디코딩함으로써 유도된 디코딩된 픽처를 지칭하는데 사용된다.
"디코딩된 픽처"- 디코딩된 픽처는 코딩된 픽처를 디코딩함으로써 유도될 수 있다. 디코딩된 픽처는 디코딩된 프레임 또는 디코딩된 필드 중 어느 하나일 수 있다. 디코딩된 필드는 디코딩된 상단 필드 또는 디코딩된 하단 필드 중 어느 하나일 수 있다.
"디코딩된 픽처 버퍼(DPB)"- 이는 참조 또는 출력 재순서화를 위해 디코딩된 픽처를 보유하는 버퍼를 지칭하는데 사용된다.
"디코더"- 디코딩 프로세스를 구현하는 장비 또는 디바이스.
"디코딩 순서"- 이는 신택스 요소가 디코딩 프로세스에 의해 처리되는 순서를 지칭할 수 있다.
"디코딩 프로세스"- 이는 비트스트림을 판독하고 이로부터 디코딩된 픽처를 유도하는 프로세스를 지칭하는데 사용된다.
"에뮬레이션 방지 바이트(emulation prevention byte)"- 이는 특정 예에서 NAL 유닛 내에 존재할 수 있는 0x03과 동일한 바이트를 지칭하는 데 사용된다. 에뮬레이션 방지 바이트는 NAL 유닛 내의 연속적인 바이트 정렬된 바이트의 시퀀스가 시작 코드 프리픽스를 포함하지 않음을 보장하기 위해 사용될 수 있다.
"인코더"- 인코딩 프로세스를 구현하는 장비 또는 디바이스.
"인코딩 프로세스"- 이는 비트스트림(즉, 인코딩된 비트스트림)을 생성하는 프로세스를 지칭하는데 사용된다.
"개선 계층"- 이는 코딩된 개선 데이터에 관련한 계층이고, 여기서, 개선 데이터는 "베이스 계층"(때때로 "베이스"라고 지칭됨)을 개선시키는 데 사용된다. 이는 잔차 데이터의 평면을 포함하는 비트스트림의 일부에 관련될 수 있다. 단수형 용어는 "베이스" 인코딩 및/또는 디코딩 프로세스와 구별되는 인코딩 및/또는 디코딩 프로세스를 지칭하기 위해 사용된다.
"개선 서브 계층"- 특정 예에서, 개선 계층은 다수의 서브 계층을 포함한다. 예를 들어, 아래에 설명되는 제1 및 제2 레벨은 개선 계층의 계층으로서 보여지는 "개선 서브 계층"이다.
"필드"- 이 용어는 특정 예에서 프레임의 교번적 행들의 모임을 지칭하기 위해 사용된다. 프레임은 2개의 필드, 즉 상단 필드 및 하단 필드로 구성되어 있다. 용어 필드는 인터레이스형 비디오 프레임과 관련하여 사용될 수 있다.
"비디오 프레임"- 특정 예에서, 비디오 프레임은 단색 형식의 루마 샘플의 어레이 또는 루마 샘플의 어레이 및 크로마 샘플의 2개의 대응하는 어레이로 구성된 프레임을 포함할 수 있다. 루마 및 크로마 샘플은 (특히) 4:2:0, 4:2:2, 및 4:4:4 컬러 형식으로 공급될 수 있다. 프레임은 2개의 필드, 즉 상단 필드 및 하단 필드로 구성되어 있을 수 있다(예를 들어, 이 용어는 인터레이스형 비디오와 관련하여 사용될 수 있다).
"픽처 그룹(GOP)"- 이 용어는 인트라 픽처로 시작하는 연속적인 코딩된 베이스 픽처의 모음을 지칭하는데 사용된다. 코딩된 베이스 픽처는 이 픽처에 대한 개선 데이터에 대한 참조 순서화를 제공할 수 있다.
"순간 디코딩 리프레시(IDR) 픽처"- 이는 NAL 유닛이 전역 구성 데이터 블록을 포함하는 픽처를 지칭하는데 사용된다.
"역변환"- 이는 변환 계수 세트를 잔차로 변환하는 디코딩 프로세스의 일부를 지칭하는데 사용된다.
"계층"- 이 용어는 특정 예에서, 예를 들어, "베이스" 및 "개선" 계층, 또는 개선 계층의 2개의 (서브) "계층"을 언급할 때 사용되는 바와 같이, 비-분기 계층 관계(non-branching hierarchical relationship)에서 신택스 구조의 세트 중 하나를 언급하기 위해 사용된다.
"루마"- 이 용어는, 예를 들어, 원색에 관련한 바와 같이, 밝기 또는 단색 신호를 표현하는 샘플 어레이 또는 단일 샘플을 지정하기 위한 형용사로서 사용된다. 루마 샘플은 심볼 또는 하첨자 Y 또는 L에 의해 표현될 수 있다. 용어 "루마"는 용어 휘도와 종종 관련되는 선형 광 전달 특성의 사용의 암시를 회피하기 위해 용어 휘도 대신 사용된다. 심볼 L은 때때로 수직 위치에 사용되는 심볼 y와의 혼동을 피하기 위해 심볼 Y 대신에 사용된다.
"네트워크 추상화 계층(NAL) 유닛(NALU)"- 이는 뒤따르는 데이터의 타입의 표시 및 원시 바이트 시퀀스 페이로드(RBSP-아래의 정의 참조)의 형태로 그 데이터를 포함하는 바이트를 포함하는 신택스 구조이다.
"네트워크 추상화 계층(NAL) 유닛 스트림"- NAL 유닛의 시퀀스.
"출력 순서"- 이는 특정 예에서(디코딩된 픽처 버퍼로부터 출력될 디코딩된 픽처에 대해) 디코딩된 픽처가 디코딩된 픽처 버퍼로부터 출력되는 순서를 지칭하기 위해 사용된다.
"파티셔닝"- 이 용어는 특정 예에서 세트를 서브세트로 분할하는 것을 지칭하기 위해 사용된다. 이는 세트의 각각의 요소가 서브세트 중 정확히 하나에 있는 경우를 언급하기 위해 사용될 수 있다.
"평면"- 이 용어는 컬러 성분에 관련된 데이터의 모음을 지칭하기 위해 사용된다. 예를 들어, 평면은 Y(루마) 또는 Cx(크로마) 평면을 포함할 수 있다. 특정 경우에, 단색 비디오는 단 하나의 컬러 성분만을 가질 수 있고, 그래서 픽처 또는 프레임은 하나 이상의 평면을 포함할 수 있다.
"픽처"- 이는 필드 또는 프레임에 대한 집합적 용어로서 사용된다. 특정 경우에, 프레임 및 픽처라는 용어는 상호 교환적으로 사용된다.
"랜덤 액세스"- 이는 특정 예에서 스트림의 시작 이외의 지점에서 비트스트림에 대한 디코딩 프로세스를 시작하는 작용을 지칭하기 위해 사용된다.
"원시 바이트 시퀀스 페이로드(RBSP)"- RBSP는 NAL 유닛에 캡슐화되는 정수 바이트를 포함하는 신택스 구조이다. RBSP는 비어 있거나, 또는 RBSP 정지 비트가 뒤따르고 0과 동일한 0개 이상의 후속 비트가 뒤따르는 신택스 요소를 포함하는 데이터 비트의 스트링의 형태를 갖는다. RBSP에는 에뮬레이션 방지 바이트가 필요에 따라 산재될 수 있다.
"원시 바이트 시퀀스 페이로드(RBSP) 정지 비트"- 이는 1로 설정될 수 있고 데이터 비트의 스트링 후에 원시 바이트 시퀀스 페이로드(RBSP) 내에 포함될 수 있는 비트이다. RBSP 내의 데이터 비트 스트링의 끝의 위치는 RBSP의 끝으로부터, RBSP에서 마지막 비-제로 비트인 RBSP 정지 비트를 검색함으로써 식별될 수 있다.
"예비(reserved)"- 이 용어는 본 출원에 설명된 비트스트림에서 사용되지 않지만 향후 사용 또는 확장을 위해 예비된 신택스 요소의 값을 지칭할 수 있다. "예비 제로"라는 용어는 예에서 0으로 설정되는 예비 비트 값을 지칭할 수 있다.
"잔차"- 이 용어는 아래의 추가 예에서 정의된다. 이는 일반적으로 샘플 또는 데이터 요소의 재구성된 버전과 그 동일한 샘플 또는 데이터 요소의 참조 사이의 차이를 지칭한다.
"잔차 평면"- 이 용어는, 예를 들어, 컬러 성분 평면과 유사한 평면 구조로 조직되는 잔차의 모음을 지칭하는데 사용된다. 잔차 평면은 값(예를 들어, 정수 값)을 갖는 어레이 요소들일 수 있는 복수의 잔차(즉, 잔차 화소)를 포함할 수 있다.
"런-렝스 인코딩"- 이는 동일한 값의 연속적인 출현이 그의 출현 횟수와 함께 단일 값으로서 표현되는 값의 시퀀스를 인코딩하는 방법이다.
"소스"- 이 용어는 인코딩 이전의 비디오 자료 또는 그의 속성 중 일부를 설명하기 위해 특정 예에서 사용된다.
"시작 코드 프리픽스"- 이는 각각의 NAL 유닛에 대한 프리픽스로서 바이트 스트림에 임베딩된 0x000001과 같은 3 바이트의 고유한 시퀀스를 지칭하기 위해 사용된다. 시작 코드 프리픽스의 위치는 디코더가 새로운 NAL 유닛의 시작과 이전 NAL 유닛의 끝을 식별하는데 사용될 수 있다. 시작 코드 프리픽스의 에뮬레이션은 에뮬레이션 방지 바이트의 포함에 의해 NAL 유닛 내에서 방지될 수 있다.
"데이터 비트의 스트링(SODB)"- 이 용어는 원시 바이트 시퀀스 페이로드 정지 비트 이전에 원시 바이트 시퀀스 페이로드 내에 존재하는 신택스 요소를 나타내는 소정 수의 비트의 시퀀스를 지칭한다. SODB 내에서, 최좌측 비트는 첫 번째 및 최상위 비트인 것으로 고려되고, 최우측 비트는 마지막 및 최하위 비트인 것으로 고려된다.
"신택스 요소"- 이 용어는 비트스트림에서 표현되는 데이터의 요소를 지칭하는데 사용될 수 있다.
"신택스 구조"- 이 용어는 지정된 순서로 비트스트림에 함께 존재하는 0개 이상의 신택스 요소를 지칭하는데 사용될 수 있다.
"타일"- 이 용어는 특정 예에서 특정 픽처 내의 블록 또는 코딩 유닛의 직사각형 영역을 지칭하기 위해 사용되며, 예를 들어, 코딩 유닛의 크기가 적용된 변환에 기초하여 설정되는 복수의 코딩 유닛을 포함하는 프레임의 영역을 지칭할 수 있다.
"변환 계수" (또는 단지 "계수")- 이 용어는 변환이 잔차 또는 잔차로부터 유도된 데이터(예를 들어, 처리된 잔차)에 적용될 때 생성되는 값을 지칭하는 데 사용된다. 이는 변환된 도메인에 있는 것으로 고려되는 스칼라 양일 수 있다. 일 경우에, MxN 코딩 유닛은 M*N 1차원 어레이로 평탄화될 수 있다. 이 경우에, 변환은 1차원 어레이와 MxN 변환 행렬의 승산을 포함할 수 있다. 이 경우, 출력은 다른 (평탄화된) M*N 1차원 어레이를 포함할 수 있다. 이 출력에서, 각각의 요소는 상이한 "계수"와 관련될 수 있는데, 예를 들어 2x2 코딩 유닛에 대해 4개의 상이한 타입의 계수가 존재할 수 있다. 이와 같이, "계수"라는 용어는 또한 디코딩 프로세스의 역변환 부분에서의 특정 인덱스, 예를 들어 변환된 잔차를 표현한 앞서 언급한 1차원 어레이에서의 특정 인덱스와 관련될 수 있다.
"비디오 코딩 계층(VCL) NAL 유닛"- 이는,NalUnitType의 예비 값을 가지며 특정 예에서 VCL NAL 유닛으로서 분류되는 NAL 유닛에 대한 집합적 용어이다.
위의 용어들뿐만 아니라, 다음의 약어가 때때로 사용된다:
CG-계수 그룹; CPB-코딩된 픽처 버퍼; CPBB- 베이스의 코딩된 픽처 버퍼; CPBL-개선의 코딩된 픽처 버퍼; CU - 코딩 유닛; CVS - 코딩된 비디오 시퀀스; DPB - 디코딩된 픽처 버퍼; DPBB - 베이스의 디코딩된 픽처 버퍼; DUT - 테스트 중인 디코더; HBD - 가상 베이스 디코더; HD - 가상 디먹서; HRD - 가상 참조 디코더; HSS - 가상 스트림 스케줄러; I - 인트라; IDR - 순간 디코딩 리프레시; LSB - 최하위 비트; MSB - 최상위 비트; NAL - 네트워크 추상화 계층; P - 예측; RBSP - 원시 바이트 시퀀스 페이로드; RGB- 적색, 녹색 청색(또한, GBR-녹색, 청색, 적색-, 즉, 재순서화된 RGB로서 사용될 수 있음); RLE - 런-렝스 인코딩; SEI - 보충 개선 정보; SODB- 데이터 비트의 스트링; SPS - 시퀀스 파라미터 세트; 및 VCL- 비디오 코딩 계층.
예시적인 인코더 및 디코더
제1 예시적인 인코더- 일반적 아키텍처
도 1은 제1 예시적인 인코더(100)를 도시한다. 예시된 컴포넌트는 또한 대응하는 인코딩 프로세스의 단계로서 구현될 수 있다.
인코더(100)에서, 입력 전체 해상도 비디오(102)가 수신되고 처리되어 다양한 인코딩된 스트림을 생성한다. 다운샘플링 컴포넌트(104)에서, 입력 비디오(102)는 다운샘플링된다. 다운샘플링 컴포넌트(104)의 출력은 베이스 인코더(102) 및 베이스 디코더(104)를 포함하는 베이스 코덱에 의해 수신된다. 베이스 코덱(예를 들어, AVC, HEVC 또는 임의의 다른 코덱)에 입력 비디오(102)의 다운샘플링된 버전을 공급함으로써 제1 인코딩된 스트림(인코딩된 베이스 스트림)(116)이 생성된다. 제1 감산 컴포넌트(120)에서, 베이스 디코더(104)에 의해 출력된 재구성된 베이스 코덱 비디오와 입력 비디오의 다운샘플링된 버전(즉, 다운샘플링 컴포넌트(104)에 의해 출력된) 사이의 차이를 취함으로써 제1 잔차 세트가 획득된다. 레벨 1 인코딩 성분(122)은 제1 감산 컴포넌트(120)에 의해 출력되는 제1 잔차 세트에 적용되어 제2 인코딩된 스트림(인코딩된 레벨 1 스트림)(126)을 생성한다.
도 1의 예에서, 레벨 1 인코딩 컴포넌트(122)는 선택적 레벨 1 시간적 버퍼(124)와 함께 동작한다. 이는 아래에서 후술하는 바와 같이 시간적 처리를 적용하는 데 사용될 수 있다. 레벨 1 인코딩 컴포넌트(122)에 의한 제1 레벨의 인코딩 이후에, 제1 인코딩된 스트림(126)은 레벨 1 디코딩 컴포넌트(128)에 의해 디코딩될 수 있다. 디블로킹 필터(130)는 레벨 1 디코딩 컴포넌트(128)의 출력에 적용될 수 있다. 도 1에서, 디블로킹 필터(130)의 출력은 합산 컴포넌트(132)에 의해 베이스 디코더(114)의 출력에 추가되어(즉, 재구성된 베이스 코덱 비디오에 추가되어) 재구성된 베이스 코딩된 비디오의 보정된 버전을 생성한다. 이어서, 합산 컴포넌트(132)의 출력을 업샘플링 컴포넌트(134)에 의해 업샘플링하여, 재구성된 베이스 코딩된 비디오의 보정된 버전의 업샘플링된 버전을 생성한다.
제2 감산 컴포넌트(136)에서, 재구성된 베이스 코딩된 비디오의 보정된 버전의 업샘플링된 버전(즉, 업샘플링 컴포넌트(134)의 출력)과 입력 비디오(102) 사이의 차이가 취해진다. 이는 제2 잔차 세트를 생성한다. 제2 감산 컴포넌트(136)에 의해 출력된 제2 잔차 세트는 레벨 2 인코딩 컴포넌트(142)로 전달된다. 레벨 2 인코딩 컴포넌트(142)는 제2 잔차 세트를 인코딩함으로써 제3 인코딩된 스트림(인코딩된 레벨 2 스트림)(146)을 생성한다. 레벨 2 인코딩 컴포넌트(142)는 시간적 처리를 적용하기 위해 레벨 2 시간적 버퍼(144)와 함께 동작할 수 있다. 레벨 1 인코딩 컴포넌트(122) 및 레벨 2 인코딩 컴포넌트(142) 중 하나 이상은 아래에서 설명되는 바와 같이 잔차 선택을 적용할 수 있다. 이는 잔차 모드 선택 컴포넌트(150)에 의해 제어되는 것으로 도시된다. 잔차 모드 선택 컴포넌트(150)는 입력 비디오(102)를 수신하고, 입력 비디오(102)의 분석에 기초하여 잔차 모드 선택을 적용할 수 있다. 유사하게, 레벨 1 시간적 버퍼(124) 및 레벨 2 시간적 버퍼(144)는 시간적 선택 컴포넌트(152)의 제어 하에서 동작할 수 있다. 시간적 선택 컴포넌트(152)는 입력 비디오(102) 및 다운샘플링 컴포넌트(104)의 출력 중 하나 이상을 수신하여 시간적 모드를 선택할 수 있다. 이는 이후의 예에서 더 자세히 설명된다.
제1 예시적인 디코더- 일반적 아키텍처
도 2는 제1 예의 디코더(200)를 도시한다. 예시된 컴포넌트는 또한 대응하는 디코딩 프로세스의 단계로서 구현될 수 있다. 디코더(200)는 3개의 인코딩된 스트림을 수신한다: 인코딩된 베이스 스트림(216), 인코딩된 레벨 1 스트림(226) 및 인코딩된 레벨 2 스트림(246). 이 3개의 인코딩된 스트림은 도 1의 인코더(100)에 의해 생성된 3개의 스트림에 대응한다. 도 2의 예에서, 3개의 인코딩된 스트림은 추가 디코딩 정보를 포함하는 헤더(256)와 함께 수신된다.
인코딩된 베이스 스트림(216)은 인코더(100)에서 사용되는 베이스 코덱에 대응하는 (예를 들어, 도 1의 베이스 디코더(114)에 대응하는) 베이스 디코더(218)에 의해 디코딩된다. 제1 합산 컴포넌트(220)에서, 베이스 디코더(218)의 출력은 인코딩된 레벨 1 스트림(226)으로부터 획득되는 디코딩된 제1 잔차 세트와 조합된다. 특히, 레벨 1 디코딩 컴포넌트(228)는 인코딩된 레벨 1 스트림(226)을 수신하고 스트림을 디코딩하여 디코딩된 제1 잔차 세트를 생성한다. 레벨 1 디코딩 컴포넌트(228)는 레벨 1 시간적 버퍼(230)를 사용하여 인코딩된 레벨 1 스트림(226)을 디코딩할 수 있다. 도 2의 예에서, 레벨 1 디코딩 컴포넌트(228)의 출력은 디블로킹 필터(232)로 전달된다. 레벨 1 디코딩 컴포넌트(228)는 도 1의 인코더(100)에 의해 사용되는 레벨 1 디코딩 컴포넌트(128)와 유사할 수 있다. 디블로킹 필터(232)는 또한 인코더(100)에 의해 사용되는 디블로킹 필터(130)와 유사할 수 있다. 도 2에서, 디블로킹 필터(232)의 출력은 제1 합산 컴포넌트(220)에 의해 베이스 디코더(218)의 출력과 조합되는 디코딩된 제1 잔차 세트를 형성한다. 제1 합산 컴포넌트(220)의 출력은 보정된 레벨 1 재구성으로 볼 수 있으며, 디코딩된 제1 잔차 세트는 제1 해상도에서 베이스 디코더(218)의 출력을 보정한다.
업샘플링 컴포넌트(234)에서, 조합된 비디오가 업샘플링된다. 업샘플링 컴포넌트(234)는 이후의 예와 관련하여 설명된 바와 같이 수정된 업샘플링의 형태를 구현할 수 있다. 업샘플링 컴포넌트(234)의 출력은 또한 인코딩된 레벨 2 스트림(246)으로부터 획득되는 디코딩된 제2 잔차 세트와 조합된다. 특히, 레벨 2 디코딩 컴포넌트(248)는 인코딩된 레벨 2 스트림(246)을 수신하고 스트림을 디코딩하여 디코딩된 제2 잔차 세트를 생성한다. 레벨 2 디코딩 컴포넌트(248)에 의해 출력되는 바와 같은 디코딩된 제2 잔차 세트는 합산 컴포넌트(258)에 의해 업샘플링 컴포넌트(234)의 출력과 조합되어 디코딩된 비디오(260)를 생성한다. 디코딩된 비디오(260)는 도 1의 입력 비디오(102)의 디코딩된 표현을 포함한다. 레벨 2 디코딩 컴포넌트(248)는 또한 레벨 2 시간적 버퍼(250)를 사용하여 시간적 처리를 적용할 수 있다. 레벨 1 시간적 버퍼(230) 및 레벨 2 시간적 버퍼(250) 중 하나 이상은 시간적 선택 컴포넌트(252)의 제어 하에서 동작할 수 있다. 헤더(256)로부터 데이터를 수신하는 시간적 선택 컴포넌트(252)가 도시되어 있다. 이 데이터는 레벨 1 시간적 버퍼(230) 및 레벨 2 시간적 버퍼(250) 중 하나 이상에서 시간적 처리를 구현하는 데이터를 포함할 수 있다. 데이터는 이후의 예를 참조하여 설명되는 바와 같이 시간적 선택 컴포넌트(252)에 의해 적용되는 시간적 모드를 나타낼 수 있다.
제2 예시적인 인코더- 인코딩 서브 처리 및 시간적 예측
도 3a 및 도 3b는 제2 예시적인 인코더(300, 360)의 상이한 변형을 도시한다. 제2 예시적인 인코더(300, 360)는 도 1의 제1 예시적인 인코더(100)의 구현을 포함할 수 있다. 도 3a 및 3b의 예에서, 스트림의 인코딩 단계는 단계가 수행될 수 있는 방법의 예를 제공하기 위해 더 상세히 확장된다. 도 3a는 개선 프로세스의 제2 레벨에서만, 즉 레벨 2 인코딩에 관련하여 제공된 시간적 예측을 갖는 제1 변형을 예시한다. 도 3b는 양자 모두의 개선 레벨(즉, 레벨 1 및 2)의 프로세스에서 수행되는 시간적 예측을 갖는 제2 변형을 예시한다.
도 3a에서, 인코딩된 베이스 스트림(316)은 실질적으로 위에서 도 1과 관련하여 설명된 프로세스에 의해 생성된다. 즉, 입력 비디오(302)가 다운샘플링된다(즉, 다운샘플링 동작이 다운샘플링 컴포넌트(304)에 의해 입력 비디오(102)에 적용되어 다운샘플링된 입력 비디오를 생성한다). 이어서, 다운샘플링된 비디오는 베이스 코덱을 사용하여, 특히 베이스 코덱의 베이스 인코더(312)에 의해 인코딩된다. 베이스 인코더(312)에 의해 다운샘플링된 입력 비디오에 적용된 인코딩 동작은 인코딩된 베이스 스트림(316)을 생성한다. 베이스 코덱은 개선 스트림(즉, 인코딩된 레벨 1 스트림(326) 및 인코딩된 레벨 2 스트림(346))을 생성하는데 사용되는 제2 코덱과 상이할 수 있기 때문에 제1 코덱이라고도 지칭될 수 있다. 바람직하게는, 제1 또는 베이스 코덱은 하드웨어 디코딩에 적합한 코덱이다. 도 1에 따르면, 베이스 인코더(312)의 출력(즉, 인코딩된 베이스 스트림(316))은 인코딩된 베이스 스트림의 디코딩된 버전을 출력하는 (예를 들어, 베이스 코덱의 일부를 형성하거나, 베이스 코덱에 대한 디코딩 동작을 제공하는) 베이스 디코더(314)에 의해 수신된다. 베이스 인코더(312) 및 베이스 디코더(314)에 의해 수행되는 동작은 베이스 계층 또는 베이스 레벨이라고 지칭될 수 있다. 베이스 계층 또는 레벨은 개선 또는 제2 계층 또는 레벨과 별도로 구현될 수 있고, 개선 계층 또는 레벨은 베이스 계층 또는 레벨(예를 들어, 베이스 인코더(312) 및 베이스 디코더(314))을 명령 및/또는 제어한다.
도 1과 관련하여 언급한 바와 같이, 개선 계층 또는 레벨은 2개의 대응하는 스트림을 생성하는 2개의 레벨을 포함할 수 있다. 이와 관련하여, 제1 개선 레벨("레벨 1"로서 본 출원에 설명됨)은 베이스 스트림의 디코딩된 버전과 조합되어 보정된 픽처를 생성할 수 있는 보정 데이터의 세트를 제공한다. 이 제1 개선 스트림은 도 1 및 도 3에서 인코딩된 레벨 1 스트림(326)으로서 예시되어 있다.
인코딩된 레벨 1 스트림을 생성하기 위해, 인코딩된 베이스 스트림이 디코딩되는데, 즉, 베이스 디코더(314)의 출력은 디코딩된 베이스 스트림을 제공한다. 도 1에서와 같이, 제1 감산 컴포넌트에서, 디코딩된 베이스 스트림과 다운샘플링된 입력 비디오(즉, 다운샘플링 컴포넌트(304)의 출력) 사이의 차이가 그 후 생성된다(즉, 감산 동작이 다운샘플링된 입력 비디오 및 디코딩된 베이스 스트림에 적용되어 제1 잔차 세트를 생성한다). 여기서, "잔차"이라는 용어는 본 기술 분야에 알려진 것과 동일한 방식으로, 즉 참조 프레임과 원하는 프레임 사이의 오차로서 사용된다. 여기서, 참조 프레임은 디코딩된 베이스 스트림이고 원하는 프레임은 다운샘플링된 입력 비디오이다. 따라서, 제1 개선 레벨에서 사용되는 잔차는 디코딩된 베이스 스트림을 베이스 인코딩 동작에서 사용된 다운샘플링된 입력 비디오로 '보정'하기 때문에 보정된 비디오로서 고려될 수 있다.
일반적으로, 본 출원에서 사용되는 바와 같은 "잔차"이라는 용어는 참조 어레이 또는 참조 프레임의 값과 데이터의 실제 어레이 또는 프레임 사이의 차이를 지칭한다. 어레이는 코딩 유닛을 나타내는 1차원 또는 2차원 어레이일 수 있다. 예를 들어, 코딩 유닛은 입력 비디오 프레임의 유사한 크기의 영역에 대응하는 잔차 값의 2x2 또는 4x4 세트일 수 있다. 이러한 일반화된 예는 수행되는 인코딩 동작 및 입력 신호의 특성에 대해 애그노스틱하다는 점에 유의해야 한다. 본 출원에서 사용되는 바와 같은 "잔차 데이터"에 대한 참조는 잔차 세트, 예를 들어 잔차 세트 자체 또는 잔차 세트에 대해 수행되는 데이터 처리 동작 세트의 출력으로부터 유도된 데이터를 지칭한다. 본 설명 전체에 걸쳐, 일반적으로 잔차 세트는 복수의 잔차 또는 잔차 요소를 포함하고, 각각의 잔차 또는 잔차 요소는 신호 요소, 즉, 신호 또는 원래의 데이터의 요소에 대응한다. 신호는 이미지 또는 비디오일 수 있다. 이러한 예에서, 잔차 세트는 비디오의 이미지 또는 프레임에 대응하고, 각각의 잔차는 신호의 픽셀과 관련되고, 픽셀은 신호 요소이다.
그러나, 본 출원에 설명되는 "잔차"는 SVC 및 SHVC와 같은 비교대상 기술에서 생성되는 "잔차"와 매우 상이하다는 점에 유의해야 한다. SVC에서, 용어 "잔차"는 프레임의 픽셀 블록과 프레임에 대한 예측 픽셀 블록 사이의 차이를 지칭하는 데 사용되고, 여기서 예측 픽셀 블록은 프레임간 예측 또는 프레임내 예측 중 어느 하나를 사용하여 예측된다. 대조적으로, 본 예는 코딩 유닛과 재구성된 코딩 유닛, 예를 들어, 다운샘플링 및 후속 업샘플링이 적용되고 인코딩/디코딩 에러에 대해 보정된 요소의 코딩 유닛 사이의 차이로서 잔차를 계산하는 것을 수반한다. 설명된 예에서, 베이스 코덱(즉, 베이스 인코더(312) 및 베이스 디코더(314))은 개선 코덱과는 상이한 코덱을 포함할 수 있는데, 예를 들어, 베이스 및 개선 스트림은 상이한 세트의 처리 단계에 의해 생성된다. 일 경우에, 베이스 인코더(312)는 AVC 또는 HEVC 인코더를 포함할 수 있고, 따라서 내부적으로 인코딩된 베이스 스트림(316)을 생성하는 데 사용되는 잔차 데이터를 생성한다. 그러나, AVC 또는 HEVC 인코더에 의해 사용되는 프로세스는 인코딩된 레벨 1 및 레벨 2 스트림(326, 346)을 생성하는 데 사용되는 프로세스와 상이하다.
도 3a 및 도 3b를 참조하면, 그 후, 감산 컴포넌트(320)의 출력, 즉, 제1 잔차 세트에 대응하는 차이가 인코딩되어 인코딩된 레벨 1 스트림(326)을 생성한다(즉, 인코딩 동작이 제1 잔차 세트에 적용되어 제1 개선 스트림을 생성한다). 도 3a 및 도 3b의 예시적인 구현에서, 인코딩 동작은 여러 서브 동작을 포함하며, 그 각각은 선택적이고 선호되며, 특정 이점을 제공한다. 도 3a 및 도 3b에서, 이 서브 동작을 구현하는 일련의 컴포넌트가 도시되어 있고, 이는 도 1에 도시된 바와 같은 레벨 1 및 레벨 2 인코딩(122 및 142)을 구현하는 것으로 고려될 수 있다. 도 3a 및 3b에서, 서브 동작은, 일반적으로, 잔차 순위화 모드 단계, 변환 단계, 양자화 단계 및 엔트로피 인코딩 단계를 포함한다.
레벨 1 인코딩의 경우, 레벨 1 잔차 선택 또는 순위화 컴포넌트(321)는 제1 감산 컴포넌트(320)의 출력을 수신한다. 레벨 1 잔차 선택 또는 순위화 컴포넌트(321)는 (예를 들어, 도 1의 구성과 유사한 방식으로) 잔차 모드 순위화 또는 선택 컴포넌트(350)에 의해 제어되는 것으로 도시되어 있다. 도 3a에서, 순위화는 잔차 모드 순위화 컴포넌트(350)에 의해 수행되고 레벨 1 선택 컴포넌트(321)에 의해 적용되며, 후자는 잔차 모드 순위화 컴포넌트(350)에 의해 수행된 순위화에 기초하여(예를 들어, 입력 비디오(102) 또는 다른 데이터의 분석에 기초하여) 제1 잔차 세트를 선택 또는 필터링한다. 도 3b에서 이러한 배열은 반대이며, 그래서, 일반적인 잔차 모드 선택 제어는 잔차 모드 선택 컴포넌트(350)에 의해 수행되지만, 순위화는 (예를 들어, 입력 비디오(102)에 기초하는 순위화와 달리) 각각의 개선 레벨에서 수행된다. 도 3b의 예에서, 순위화는 제1 감산 컴포넌트(320)에 의해 출력되는 바와 같은 제1 잔차 세트의 분석에 기초하여 레벨 1 잔차 모드 순위화 컴포넌트(321)에 의해 수행될 수 있다. 일반적으로, 제2 예시적인 인코더(300, 360)는 잔차 순위화 모드가 선택되는지를 식별한다. 이는 잔차 모드 순위화 또는 선택 컴포넌트(350)에 의해 수행될 수 있다. 잔차 순위화 모드가 선택되면, 그 후, 이는 잔차 모드 순위화 또는 선택 컴포넌트(350)에 의해 레벨 1 잔차 선택 또는 순위화 컴포넌트(321)에 표시되어, 잔차 순위화 단계를 수행할 수 있다. 순위화된 잔차 세트를 생성하기 위해 잔차의 제1 단계에 대해 잔차 순위화 동작이 수행될 수 있다. 순위화된 잔차 세트는 모든 잔차가 제1 개선 스트림(326)(또는 보정 스트림)으로 인코딩되지는 않도록 필터링될 수 있다. 잔차 선택은 추가 인코딩을 위해 통과할 수신된 잔차의 서브세트를 선택하는 것을 포함할 수 있다. 본 예는 "순위화" 동작을 설명하지만, 이는 제1 잔차 세트(예를 들어, 제1 감산 컴포넌트(320)의 출력)에 대해 수행되는 일반 필터링 동작으로 볼 수 있는데, 즉 레벨 1 잔차 선택 또는 순위화 컴포넌트(321)는 제1 잔차 세트를 수정할 수 있는 일반 필터링 컴포넌트의 구현이다. 필터링은 특정 잔차 값을 0으로 설정하는 것으로, 즉 입력 잔차 값이 필터링 아웃되고 인코딩된 레벨 1 스트림(326)의 일부를 형성하지 않도록 하는 것으로 볼 수 있다.
도 3a 및 도 3b에서, 레벨 1 잔차 선택 또는 순위화 컴포넌트(321)의 출력은 이어서 레벨 1 변환 컴포넌트(322)에 의해 수신된다. 레벨 1 변환 컴포넌트(322)는 제1 잔차 세트 또는 순위화되거나 필터링된 제1 잔차 세트에 변환을 적용하여, 변환된 잔차 세트를 생성한다. 변환 동작은 변환된 잔차 세트를 생성하기 위해 순위화 모드가 선택되는지 여부에 따라 제1 잔차 세트 또는 필터링된 제1 잔차 세트에 적용될 수 있다. 그 다음, 레벨 1 양자화 컴포넌트(323)는 레벨 1 변환 컴포넌트(322)의 출력(즉, 잔차의 변환된 세트)에 적용되어 양자화된 잔차 세트를 생성한다. 엔트로피 인코딩은 레벨 1 엔트로피 인코딩 컴포넌트(325)에 의해 적용되며, 이 컴포넌트는 양자화된 잔차 세트(또는 이 세트로부터 유도된 데이터)에 엔트로피 인코딩 동작을 적용하여 제1 개선 레벨 스트림, 즉 인코딩된 레벨 1 스트림(326)을 생성한다. 따라서, 레벨 1 계층에서, 제1 잔차 세트가 변환, 양자화 및 엔트로피 인코딩되어, 인코딩된 레벨 1 스트림(326)을 생성한다. 변환, 양자화 및 엔트로피 인코딩의 가능한 구현의 추가 상세가 이후의 예와 관련하여 설명된다. 바람직하게는, 엔트로피 인코딩 동작은 허프만 인코딩 동작 또는 런-렝스 인코딩 동작 또는 양자 모두일 수 있다. 선택적으로, 순위화 동작의 효과를 보정하기 위해 양자화된 잔차 세트에 제어 동작이 적용될 수 있다. 이는 잔차 모드 순위화 또는 선택 컴포넌트(350)의 제어 하에서 동작할 수 있는 레벨 1 잔차 모드 제어 컴포넌트(324)에 의해 적용될 수 있다.
앞서 언급한 바와 같이, 개선 스트림은 제1 개선 레벨 및 제2 개선 레벨(즉, 레벨 1 및 2)을 포함할 수 있다. 제1 개선 레벨은 보정된 스트림인 것으로 고려될 수 있다. 제2 개선 레벨은 보정된 스트림을 원래의 입력 비디오로 변환하는 추가의 개선 레벨인 것으로 고려될 수 있다. 추가 또는 제2 개선 레벨은 합산 컴포넌트(332)에 의해 출력된 재구성된 레벨 1 비디오의 업샘플링된 버전과 입력 비디오(302) 사이의 차이인 추가 또는 제2 잔차 세트를 인코딩함으로써 생성된다. 업샘플링은 업샘플링 컴포넌트(334)에 의해 수행된다. 제2 잔차 세트는 입력 비디오(302) 및 업샘플링 컴포넌트(334)의 출력을 입력으로서 취하는 제2 감산 컴포넌트(336)에 의해 적용된 감산으로부터 얻어진다.
도 3a 및 3b에서, 제1 잔차 세트는 레벨 1 인코딩 프로세스에 의해 인코딩된다. 도 3a 및 도 3b의 예에서, 이 프로세스는 레벨 1 변환 컴포넌트(322) 및 레벨 1 양자화 컴포넌트(323)를 포함한다. 업샘플링 전에, 인코딩된 제1 잔차 세트는 역양자화 컴포넌트(327) 및 역변환 컴포넌트(328)를 사용하여 디코딩된다. 이러한 컴포넌트는 디코더에서 구현될 수 있는 (레벨 1) 디코딩 컴포넌트를 모사하도록 작용한다. 이와 같이, 레벨 1 변환 컴포넌트(322) 및 레벨 1 양자화 컴포넌트(323)의 적용으로부터 유도되는 양자화된(또는 제어된) 잔차 세트는 디블로킹 필터(330)가 디코딩된 제1 잔차 세트를 생성하도록 적용되기 전에 역양자화되고 역변환되고(즉, 역양자화 연산이 탈양자화된 제1 잔차 세트를 생성하기 위해 양자화된 제1 잔차 세트에 적용됨); 역변환 동작이 상기 탈양자화된 제1 잔차 세트에 적용되어 탈변환된 제1 잔차 세트를 생성하고; 디블로킹 필터 동작이 탈변환된 제1 잔차 세트에 적용되어 디코딩된 제1 잔차 세트를 생성한다. 디블로킹 필터(330)는 적용된 변환에 따라 선택적이며, 탈변환된 제1 잔차 세트의 각각의 블록에 가중된 마스크를 적용하는 단계를 포함할 수 있다.
합산 컴포넌트(332)에서, 베이스 디코더(314)에 의해 출력된 디코딩된 베이스 스트림은 디블로킹 필터(330)로부터 수신된 디코딩된 제1 잔차 세트와 조합된다(즉, 재생성된 제1 스트림을 생성하기 위해 디코딩된 베이스 스트림 및 디코딩된 제1 잔차 세트에 대해 합산 동작이 수행된다). 도 3a 및 3b에 예시된 바와 같이, 그 후, 그 조합은 업샘플링 컴포넌트(334)에 의해 업샘플링된다(즉, 업샘플링 동작이 재생성된 제1 스트림에 적용되어, 업샘플링된 재생성된 스트림이 생성된다). 이어서, 업샘플링된 스트림은 제2 합산 컴포넌트(336)에서 입력 비디오와 비교되어, 제2 잔차 세트를 생성한다(즉, 차연산이 업샘플링된 재생성 스트림에 적용되어, 추가 잔차 세트를 생성한다). 이어서, 제2 잔차 세트는 인코딩된 레벨 2 개선 스트림(346)으로서 인코딩된다(즉, 이어서 인코딩된 추가 또는 제2 개선 스트림을 생성하기 위해 추가 또는 제2 잔차 세트에 인코딩 동작이 적용된다).
인코딩된 레벨 1 스트림에서와 같이, 제2(레벨 2) 잔차 세트에 적용되는 인코딩은 여러 동작을 포함할 수 있다. 도 3a는 레벨 2 잔차 선택 컴포넌트(340), 레벨 2 변환 컴포넌트(341), 레벨 2 양자화 컴포넌트(343) 및 레벨 2 엔트로피 인코딩 컴포넌트(345)를 도시한다. 도 3b는 유사한 컴포넌트 세트를 도시하지만, 이 변형에서, 레벨 2 잔차 선택 컴포넌트(340)는 레벨 2 잔차 순위화 컴포넌트(340)로서 구현되고, 이는 잔차 모드 선택 컴포넌트(350)의 제어 하에 있다. 앞서 설명한 바와 같이, 순위화 및 선택은 입력 비디오(102) 및 개별 제1 및 제2 잔차 세트 중 하나 이상에 기초하여 수행될 수 있다. 도 3a에서, 레벨 2 시간적 버퍼(345)가 또한 제공되고, 그 콘텐츠가 레벨 2 변환 컴포넌트(341)의 출력으로부터 제3 감산 컴포넌트(342)에 의해 감산된다. 다른 예에서, 제3 감산 컴포넌트(342)는 레벨 2 양자화 컴포넌트(343) 이후를 포함하여 다른 위치에 위치할 수 있다. 이와 같이, 도 3a 및 3b에 도시된 레벨 2 인코딩은 순위화, 시간적 예측, 변환, 양자화 및 엔트로피 인코딩의 단계를 갖는다. 특히, 제2 예시적인 인코더(200)는 잔차 순위화 모드가 선택되는지를 식별할 수 있다. 이는 잔차 순위화 또는 선택 컴포넌트(350) 및 개별 레벨 2 선택 및 순위화 컴포넌트(340) 중 하나 이상에 의해 수행될 수 있다. 잔차 순위화 또는 필터링 모드가 선택되면, 잔차 순위화 단계는 잔차 순위화 또는 선택 컴포넌트(350) 및 개별 레벨 2 선택 및 순위화 컴포넌트(340) 중 하나 이상에 의해 수행될 수 있다(즉, 잔차 순위화 동작이 제2 잔차 세트에 대해 수행되어 제2 순위화된 잔차 세트를 생성할 수 있다). 제2 순위화된 잔차 세트는 모든 잔차가 제2 개선 스트림(즉, 인코딩된 레벨 2 스트림(346))으로 인코딩되지는 않도록 필터링될 수 있다. 제2 잔차 세트 또는 제2 순위화된 잔차 세트는 후속하여 레벨 2 변환 컴포넌트(341)에 의해 변환된다(즉, 제2 변환된 잔차 세트를 생성하기 위해 제2 순위화된 잔차 세트에 대해 변환 동작이 수행된다). 합산 컴포넌트(332)의 출력과 레벨 2 변환 컴포넌트(341) 사이의 결합에 의해 예시된 바와 같이, 변환 동작은 업샘플링 전에, 재생성된 제1 스트림으로부터 유도된 예측 계수 또는 예측 평균을 이용할 수 있다. 이러한 예측 평균 계산의 다른 예는 다른 예를 참조하여 설명되며; 추가 정보는 본 문서의 다른 곳에서 발견될 수 있다. 레벨 2에서, 변환된 잔차(시간적으로 예측되거나 달리 예측됨)는 그 후 다른 곳에서 설명된 방식으로 양자화되고 엔트로피 인코딩된다(즉, 양자화 연산이 변환된 잔차 세트에 적용되어 양자화된 제2 잔차 세트를 생성하고; 양자화된 제2 잔차 세트에 엔트로피 인코딩 동작을 적용하여 제2 개선 레벨 스트림을 생성한다).
도 3a는 레벨 2 인코딩 프로세스의 일부로서 시간적 예측이 수행되는 제2 예시적인 인코더(200)의 변형을 도시한다. 시간적 예측은 시간적 선택 컴포넌트(352) 및 레벨 2 시간적 버퍼(345)를 사용하여 수행된다. 시간적 선택 컴포넌트(352)는 아래에 더 상세히 설명되는 바와 같이 시간적 처리 모드를 결정하고, 그에 따라 레벨 2 시간적 버퍼(345)의 사용을 제어할 수 있다. 예를 들어, 시간적 처리가 수행되지 않으면, 시간적 선택 컴포넌트(352)는 레벨 2 시간적 버퍼(345)의 콘텐츠가 0으로 설정되어야 함을 나타낼 수 있다.
도 3b는 레벨 1 및 레벨 2 인코딩 프로세스 양자 모두의 일부로서 시간적 예측이 수행되는 제2 예시적인 인코더(200)의 변형을 도시한다. 도 3b에서, 레벨 2 시간적 버퍼(345)에 추가하여 레벨 1 시간적 버퍼(361)가 제공된다. 비록 도시되어 있지는 않지만, 레벨 2가 아니라 레벨 1에서 시간적 처리가 수행되는 추가의 변형이 또한 가능하다.
시간적 예측이 선택될 때, 제2 예시적인 인코더(200)는 적절한 시간적 버퍼로부터 유도된 계수의 대응하는 세트를 감산함으로써 계수(즉, 변환 컴포넌트에 의해 출력된 변환된 잔차들)를 추가로 수정할 수 있다. 계수의 대응하는 세트는 이전 프레임으로부터 유도된 동일한 공간 영역(예를 들어, 프레임 내에 위치한 것과 동일한 코딩 유닛)에 대한 계수 세트(예를 들어, 이전 프레임의 동일한 영역에 대한 계수들)를 포함할 수 있다. 감산은 (각각의 레벨 2 및 1에 대한) 제3 감산 컴포넌트(346 및 362)와 같은 감산 컴포넌트에 의해 적용될 수 있다. 이 시간적 예측 단계는 이후의 예와 관련하여 더 설명될 것이다. 요약하면, 시간적 예측이 적용될 때, 인코딩된 계수는 프레임과 스트림의 다른 프레임 사이의 차이에 대응한다. 다른 프레임은 스트림 내의 이전 또는 이후 프레임(또는 프레임 내의 블록)일 수 있다. 따라서, 업샘플링된 재생성된 스트림과 입력 비디오 사이의 잔차를 인코딩하는 대신에, 인코딩 프로세스는 스트림 내의 변환된 프레임과 프레임의 변환된 잔차 사이의 차이를 인코딩할 수 있다. 따라서, 엔트로피가 감소될 수 있다. 시간적 예측은 제어 정보에 기초하여 코딩 유닛의 그룹(본 출원에서 "타일"이라고 지칭됨)에 대해 선택적으로 적용될 수 있고, 디코더에서의 시간적 예측의 적용은 인코딩된 스트림과 함께 추가의 제어 정보를 전송하는 것에 의해 (예를 들어, 이후의 예를 참조하여 설명되는 바와 같이 헤더 내에서 또는 추가의 표면으로서) 적용될 수 있다.
도 3a 및 3b에 도시된 바와 같이, 시간적 예측이 활성일 때, 각각의 변환된 계수는 다음과 같을 수 있다:
Figure pct00008
여기서, 시간적 버퍼는 이전 프레임과 관련된 데이터를 저장할 수 있다. 시간적 예측은 하나의 컬러 평면 또는 다수의 컬러 평면에 대해 수행될 수 있다. 일반적으로, 감산은 비디오의 "프레임"에 대한 요소별 감산으로서 적용될 수 있으며, 프레임의 요소는 변환된 계수를 나타내고, 여기서, 변환은 특정 n x n 코딩 유닛 크기(예를 들어, 2x2 또는 4x4)에 대해 적용된다. 시간적 예측으로부터 초래되는 차이(예를 들어, 위의 델타)는 후속 프레임에 대한 사용을 위해 버퍼에 저장될 수 있다. 따라서, 사실상, 시간적 예측에 대한 결과인 잔차는 버퍼에 관련한 계수 잔차이다. 도 3a 및 3b는 변환 동작 후에 수행되는 시간적 예측을 도시하지만, 이는 양자화 연산 후에도 수행될 수 있다. 이는 레벨 2 역양자화 컴포넌트(372) 및/또는 레벨 1 역양자화 컴포넌트(364)를 적용할 필요성을 피할 수 있다.
따라서, 도 3a 및 3b에 예시되고 앞서 설명한 바와 같이, 인코딩 프로세스를 수행한 후의 제2 예시적인 인코더(200)의 출력은 인코딩된 베이스 스트림(316) 및 바람직하게는 제1 개선 레벨을 위한 인코딩된 레벨 1 스트림(326) 및 추가 또는 제2 개선 레벨을 위한 인코딩된 레벨 2 스트림(346)을 포함하는 하나 이상의 개선 스트림이다.
제3 예시적인 인코더 및 제2 예시적인 디코더 - 예측된 잔차
도 4는 도 1의 제1 예의 인코더(100)의 변형인 제3 예의 인코더(400)를 도시한다. 대응하는 참조 번호는 도 1로부터의 대응하는 특징을 참조하는 데 사용된다(즉, 특징 1xx는 도 4의 특징 4xx와 관련된다). 도 4의 예는 예측된 잔차, 예를 들어 예측 평균이 업샘플링 동작의 일부로서 어떻게 적용될 수 있는지를 더 상세히 나타낸다. 또한, 도 4에서, 디블로킹 필터(130)는 더 일반적인 구성가능한 필터(430)로 대체된다.
도 4에서, 예측된 잔차 컴포넌트(460)는 제1 합산 컴포넌트(432)의 출력의 형태로 레벨 1 공간 해상도에서 입력을 수신한다. 이 입력은 제1 합산 컴포넌트(432)에 의해 출력된 레벨 1의 재구성된 비디오의 적어도 일부를 포함한다. 예측된 잔차 컴포넌트(460)는 또한 업샘플링 컴포넌트(434)로부터 레벨 2 공간 해상도의 입력을 수신한다. 입력은 복수의 더 높은 해상도 요소를 생성하는 데 사용되는 더 낮은 해상도 요소(예를 들어, 2x2 블록에서 4개의 픽셀을 생성하기 위해 그 후 업샘플링되는 픽셀)를 포함할 수 있다. 예측된 잔차 컴포넌트(460)는 제2 합산 컴포넌트(462)를 통해 상기 출력에 추가되는 업샘플링 컴포넌트(434)의 출력에 대한 수정자를 계산하도록 구성된다. 수정자는 이후의 예에서 상세히 설명된 예측 평균 처리를 적용하도록 계산될 수 있다. 특히, 평균 델타(예를 들어, 계산된 평균 계수와 하위 레벨로부터 예측되는 평균 사이의 차이)가 결정되는 경우에, 도 4의 컴포넌트는 레벨 2 인코딩 프로세스(442) 외부의 평균 성분을 복원하는데 사용될 수 있다. 이어서, 제2 합산 컴포넌트(462)의 출력은 제2 감산 컴포넌트(436)에 대한 업샘플링된 입력으로서 사용된다.
도 5a는 예측된 잔차 동작이 제2 예시적인 디코더(500)에서 어떻게 적용될 수 있는지를 도시한다. 도 4와 같이, 제2 예시적인 디코더(500)는 도 2의 제1 예시적인 디코더(200)의 변형인 것으로 고려될 수 있다. 대응하는 참조 번호는 도 2로부터의 대응하는 특징을 참조하는 데 사용된다(즉, 특징 2xx는 도 5의 특징 5xx와 관련된다). 도 5a의 예는 예측된 잔차, 예를 들어 예측 평균이 업샘플링 동작의 일부로서 디코더에서 어떻게 적용될 수 있는지를 더 상세히 나타낸다. 또한, 도 5a에서, 디블로킹 필터(232)는 더 일반적인 구성가능한 필터(532)로 대체된다. 예측 잔차 처리는 인코더와 디코더에서 비대칭적으로 적용될 수 있다는 점, 예를 들어, 인코더는 도 5a에 설명된 디코딩을 허용하도록 도 4에 따라 구성될 필요가 없다는 점에 유의해야 한다. 예를 들어, 인코더는 본 출원에 참고로 포함되는 미국 특허 제9,509,990호에 설명된 바와 같은 예측 평균 계산을 적용할 수 있다.
제2 예시적인 디코더(500)의 구성은 도 4의 제3 예시적인 인코더(400)와 유사하다. 예측된 잔차 컴포넌트(564)는 레벨 1 프레임을 나타내는 제1 합산 컴포넌트(530)로부터의 제1 입력 및 레벨 1 프레임의 업샘플링된 버전을 나타내는 업샘플링 컴포넌트(534)로부터의 제2 입력을 수신한다. 입력은 하위 레벨 요소 및 대응하는 상위 레벨 요소의 세트로서 수신될 수 있다. 예측된 잔차 컴포넌트(564)는 입력을 사용하여, 제2 합산 컴포넌트(562)에 의해 업샘플링 컴포넌트(534)의 출력에 추가되는 수정자를 계산한다. 수정자는, 예를 들어, 미국 특허 제9,509,990호에 설명되어 있거나 제3 예시적인 인코더(400)에 의해 계산되는 바와 같이, 예측 평균의 사용을 보정할 수 있다. 이어서, 수정된 업샘플링된 출력이 이전 예에 따라 레벨 2 보정 또는 개선을 수행하는 제3 합산 컴포넌트(558)에 의해 수신된다.
예측된 잔차 컴포넌트(460 및 564) 중 하나 이상의 예측된 잔차 컴포넌트의 사용은 다른 예의 "수정된 업샘플링"을 구현할 수 있고, 여기서, 컴포넌트에 의해 계산되고 각각의 합산 컴포넌트에 의해 적용된 수정자가 "수정"을 수행한다. 이러한 예는, 변환된 잔차를 표현하는 계수 공간으로의 변환을 요구하는 것과는 대조적으로, 수정자가 재구성된 비디오 공간에 추가됨에 따라, 예측 평균의 더 빠른 계산을 제공할 수 있다(예를 들어, 수정자는 변환된 잔차의 A, H, V 및 D 계수 공간에 적용되기보다는 재구성된 비디오의 픽셀에 적용된다).
제3 예시적인 디코더 - 서브 동작 및 시간적 예측
도 5b 및 도 5c는 제3 예시적인 디코더(580, 590)의 각각의 변형을 예시한다. 제3 예시적인 디코더(580, 590)의 변형은 도 3a 및 도 3b에 도시된 제3 예시적인 인코더(300, 360)의 변형에 대응하도록 각각 구현될 수 있다. 제3 예시적인 디코더(580, 590)는 도 2 및 도 4로부터의 제1 및 제2 예시적인 인코더(200, 400) 중 하나 이상의 인코더의 구현으로서 볼 수 있다. 앞서와 같이, 이전의 예에서 특징에 대응하는 특징을 참조하는 것이 가능한 경우 유사한 참조 번호가 사용된다.
도 5b 및 도 5c는 앞서 간략히 설명되고 도 2에 예시된 디코딩 프로세스의 구현예를 도시한다. 명확하게 식별할 수 있는 바와 같이, 디코딩 단계 및 컴포넌트는 각각의 레벨에서 디코딩이 어떻게 수행될 수 있는지의 예를 제공하기 위해 더 상세히 확장된다. 도 3a 및 도 3b에서와 같이, 도 5b는 시간적 예측이 제2 레벨(즉, 레벨 2)에 대해서만 사용되는 변형을 예시하고, 도 5c는 시간적 예측이 양자 모두의 레벨(즉, 레벨 1 및 2)에서 사용되는 변형을 예시한다. 이전과 같이, 구성의 형태가 시그널링 정보를 사용하여 제어될 수 있는 추가의 변형이 예상된다(예를 들어, 레벨 1이지만 레벨 2는 아님).
도 5a 및 도 5c의 예에 도시된 바와 같이, 디코딩 프로세스에서, 디코더는 헤더(556)를 파싱하여 이 헤더에 기초하여 디코더를 구성할 수 있다. 헤더는 전역 구성 데이터, 픽처(즉, 프레임) 구성 데이터, 및 (예를 들어, 픽처 내의 요소 또는 요소의 그룹과 관련된) 분류된 데이터 블록 중 하나 이상을 포함할 수 있다. 입력 비디오(예를 들어, 이전 예에서 입력 비디오(102, 302 또는 402))를 재생성하기 위해, 제3 예시적인 디코더와 같은 예시적인 디코더는 인코딩된 베이스 스트림(516), 제1 개선 또는 인코딩된 레벨 1 스트림(526) 및 제2 개선 또는 인코딩된 레벨 2 스트림(546) 각각을 디코딩할 수 있다. 스트림의 프레임은 동기화되고 그 후 조합되어 디코딩된 비디오(560)를 유도할 수 있다.
도 5b에 도시된 바와 같이, 레벨 1 디코딩 컴포넌트(528)는 레벨 1 엔트로피 디코딩 컴포넌트(571), 레벨 1 역양자화 컴포넌트(572), 및 레벨 1 역변환 컴포넌트(573)를 포함할 수 있다. 이는 도 3a 및 도 3b에서의 각각의 레벨 1 인코딩 컴포넌트(325, 323, 322)의 디코딩 버전을 포함할 수 있다. 레벨 2 디코딩 컴포넌트(548)는 레벨 2 엔트로피 디코딩 컴포넌트(581), 레벨 2 역양자화 컴포넌트(582), 및 레벨 2 역변환 컴포넌트(583)를 포함할 수 있다. 이는 도 3a 및 도 3b에서 각각의 레벨 2 인코딩 컴포넌트(344, 343, 341)의 디코딩 버전을 포함할 수 있다. 각각의 디코딩 프로세스에서, 개선 스트림은 앞서 언급한 컴포넌트 또는 동작을 사용하여 엔트로피 디코딩, 역양자화 및 역변환의 단계가 적용되어 잔차 세트를 재생성할 수 있다.
특히, 도 5b에서, 인코딩된 베이스 스트림(516)은 베이스 코덱(584)의 일부로서 구현되는 베이스 디코더(518)에 의해 디코딩된다. 유의할 점은, 베이스 스트림 및 개선 스트림이 전형적으로 상이한 코덱을 사용하여 인코딩되고 디코딩된다는 것이고, 여기서, 개선 코덱은 잔차에 대해 동작하고(즉, 레벨 1 및 레벨 2 인코딩 및 디코딩 컴포넌트를 구현할 수 있음), 베이스 코덱은 레벨 1 해상도에서 비디오에 대해 동작한다. 레벨 1 해상도에서의 비디오는 베이스 코덱이 일반적으로 동작하는 것보다 낮은 해상도를 나타낼 수 있고(예를 들어, 2개의 차원에서 다운샘플링된 신호는 크기의 1/4일 수 있음), 이는 베이스 코덱이 고속으로 동작하는 것을 허용한다. 이는 또한 각각의 계층이 공통 코덱(AVC)을 적용하고, 잔차 데이터가 아니라 비디오 데이터에 대해 동작하는 SVC와의 차이를 나타낸다. 심지어 SHVC에서도, 모든 공간 계층은 비디오 인/비디오 아웃 방식으로 동작하도록 구성되며, 여기서, 각각의 비디오 아웃은 상이한 재생 가능 비디오를 나타낸다. 본 예에서, 개선 스트림은 종래의 의미에서 재생 가능한 비디오를 나타내지 않는다- (예를 들어, 제1 합산 컴포넌트(530) 및 제2 합산 컴포넌트(558)에 의해 수신되는 바와 같은) 레벨 1 및 레벨 2 디코딩 컴포넌트(528 및 548)의 출력은 "잔차 비디오", 즉, 컬러 평면 자체가 아니라 다수의 컬러 평면에 대한 잔차의 연속 프레임이다. 이때, 이는 SVC 및 SHVC에 비교해 훨씬 더 큰 비트 레이트 절약을 가능하게 하며, 이는 개선 스트림이 종종 0이 되고(양자화된 차이가 종종 0이기 때문임), 0 값은 런-렝스 코딩을 사용하여 효율적으로 압축될 수 있기 때문이다. 본 예에서, nxn 요소(예를 들어, 1차원 어레이로 평탄화될 수 있는 픽셀의 2x2 또는 4x4 블록들)의 각각의 코딩 유닛은 SVC 및 SHVC에서의 표준 인트라-처리에 따라 프레임 내의 다른 코딩 유닛을 수반하는 예측에 의존하지 않는다는 점에 또한 유의해야 한다. 이와 같이, 개선 스트림 내의 인코딩 및 디코딩 컴포넌트는 상이한 코딩 유닛에 병렬로 적용될 수 있고(예를 들어, 프레임의 상이한 영역이 병렬로 효과적으로 처리될 수 있다), 이는 SVC 및 SHVC와 달리, 후속 코딩 유닛을 계산하기 위해 다른 코딩 유닛의 디코딩된 결과를 기다릴 필요가 없기 때문이다. 이는 개선 코덱이 컴퓨팅 디바이스(모바일 컴퓨팅 디바이스를 포함함) 내의 일반적 그래픽 처리 유닛과 같은 병렬 프로세서 상에서 매우 효율적으로 구현될 수 있다는 것을 의미한다. 이러한 병렬성은 SVC 및 SHVC의 높은 복잡성 처리에서는 가능하지 않다.
도 5b를 참조하면, 이전 예에서와 같이, 디블로킹 필터(532)와 같은 선택적인 필터가 레벨 1 디코딩 컴포넌트(528)의 출력에 적용되어 블로킹 또는 다른 아티팩트를 제거할 수 있고, 필터의 출력은 제1 합산 컴포넌트(530)에 의해 수신되어 베이스 코덱의 출력(즉, 디코딩된 베이스 스트림)에 추가된다. 베이스 코덱의 출력은 종래의 코덱에 의해 디코딩된 저해상도 비디오와 유사할 수 있지만, 레벨 1 디코딩 출력은 (필터링된) 제1 잔차 세트라는 점에 유의한다. 이는 SVC 및 SHVC와 상이하며, 이들에서는 이러한 형태의 합산은 각각의 계층이 각각의 공간 해상도에서 전체 비디오를 출력하므로 의미가 없다.
도 2에서와 같이, 수정된 업샘플링 컴포넌트(587)는 제1 합산 컴포넌트(530)에 의해 출력되는 레벨 1의 비디오의 보정된 재구성을 수신하고, 이를 업샘플링하여 업샘플링된 재구성을 생성한다. 수정된 업샘플링 컴포넌트(587)는 도 4에 예시된 수정된 업샘플링을 적용할 수 있다. 다른 예에서, 업샘플링은 예를 들어 예측 평균이 사용되지 않거나 미국 특허 제9,509,990호에 설명된 방식으로 적용되는 경우에 수정되지 않을 수 있다.
도 5b에서, 레벨 2 디코딩 동안에 시간적 예측이 적용된다. 도 5b의 예에서, 시간적 예측은 시간적 예측 컴포넌트(585)에 의해 제어된다. 이 변형에서, 시간적 예측에 대한 제어 정보는, 스트림으로부터 시간적 예측 컴포넌트(585)로의 화살표로 나타낸 바와 같이, 인코딩된 레벨 2 스트림(546)으로부터 추출된다. 도 5a 및 5c에 도시된 것과 같은 다른 구현에서, 시간적 예측을 위한 제어 정보는 인코딩된 레벨 2 스트림(546)과 별도로, 예를 들어, 헤더(556)에서 전송될 수 있다. 시간적 예측 컴포넌트(585)는 레벨 2 시간적 버퍼(550)의 사용을 제어하며, 예를 들어, 이후의 예를 참조하여 설명된 바와 같이 시간적 모드를 결정하고 시간적 리프레시를 제어할 수 있다. 시간적 버퍼(550)의 콘텐츠는 잔차의 이전 프레임에 대한 데이터에 기초하여 업데이트될 수 있다. 시간적 버퍼(550)가 적용될 때, 버퍼의 콘텐츠는 제2 잔차 세트에 추가된다. 도 5b에서, 시간적 버퍼(550)의 콘텐츠는 제3 합산 컴포넌트(594)에서 레벨 2 디코딩 컴포넌트(548)의 출력에 추가된다. 다른 예에서, 시간적 버퍼의 콘텐츠는 중간 디코딩 데이터의 임의의 세트를 나타낼 수 있고, 이와 같이 제3 합산 컴포넌트(586)는 적절한 스테이지에서(예를 들어, 시간적 버퍼가 탈양자화된 계수 스테이지에서 적용되는 경우, 제3 합산 컴포넌트(586)는 역변환 컴포넌트(583) 이전에 위치됨) 버퍼의 콘텐츠를 적용하도록 적절하게 이동될 수 있다. 이어서, 시간적 보정된 제2 잔차 세트를 제2 합산 컴포넌트(558)에 의해 업샘플링 컴포넌트(587)의 출력과 조합하여, 디코딩된 비디오(560)를 생성한다. 디코딩된 비디오는 레벨 2 공간 해상도에 있고, 이는 레벨 1 공간 해상도보다 높을 수 있다. 제2 잔차 세트는 (시청가능한) 업샘플링된 재구성된 비디오에 보정을 적용하고, 여기서 보정은 미세 디테일에 다시 추가되고 라인 및 특징의 선명도를 개선한다.
도 5c는 제3 예시적인 디코더의 변형(590)을 도시한다. 이 경우, 시간적 예측 제어 데이터는 헤더(556)로부터 시간적 예측 컴포넌트(585)에 의해 수신된다. 시간적 예측 컴포넌트(585)는 레벨 1 및 레벨 2 시간적 예측 양자 모두를 제어하지만, 다른 예에서, 원하는 경우, 레벨 양자 모두에 대해 개별 제어 컴포넌트가 제공될 수 있다. 도 5c는 제2 합산 컴포넌트(558)에 입력되는 재구성된 제2 잔차 세트가 어떻게 다음 프레임에 대한 레벨 2 시간적 버퍼에 저장되도록 피드백될 수 있는지를 도시한다(명료성을 위해 피드백은 도 5b에서 생략됨). 앞서 설명한 레벨 2 시간적 버퍼(550)와 유사한 방식으로 동작하는 레벨 1 시간적 버퍼(591)도 도시되어 있으며, 버퍼에 대한 피드백 루프가 이 도면에 도시되어 있다. 레벨 1 시간적 버퍼(591)의 콘텐츠는 제4 합산 컴포넌트(595)를 통해 레벨 1 잔차 처리 파이프라인에 추가된다. 다시, 이 제4 합산 컴포넌트(595)의 위치는 시간적 예측이 적용되는 곳(예를 들어, 변환된 계수 공간에서 적용되는 경우)에 따라 레벨 1 잔차 처리 파이프라인을 따라 변할 수 있고, 이는 레벨 1 역변환 컴포넌트(573) 이전에 위치할 수 있다.
도 5c는 시간적 제어 정보가 디코더로 시그널링될 수 있는 2가지 방식을 도시한다. 제1 방식은 앞서 설명한 바와 같이 헤더(556)를 통한 것이다. 대안적인 또는 추가적인 시그널링 경로로서 사용될 수 있는 제2 방식은 잔차 자체 내의 인코딩된 데이터를 통한 것이다. 도 5c는 데이터(592)가 HH 변환된 계수로 인코딩되어 엔트로피 디코딩 컴포넌트(581)에 의한 엔트로피 디코딩 이후에 추출될 수 있는 경우를 도시한다. 이 데이터는 레벨 2 잔차 처리 파이프라인으로부터 추출되어 시간적 예측 컴포넌트(585)로 전달될 수 있다.
일반적으로, 본 출원에 설명되는 개선 인코딩 및/또는 디코딩 컴포넌트는 (예를 들어, SVC 및 SHVC와 같은 방식에 비교하여) 복잡성이 낮으며, 유연한 모듈 방식으로 구현될 수 있다. 요구된 구현에 의해 결정되는 바에 따라 추가의 필터링 및 다른 컴포넌트가 처리 파이프라인에 삽입될 수 있다. 레벨 1 및 레벨 2 컴포넌트는 공통 동작의 사본들 또는 상이한 버전들로서 구현될 수 있으며, 이는 복잡성을 더 감소시킨다. 베이스 코덱은 별개의 모듈식 블랙 박스로서 동작될 수 있고, 따라서, 구현에 따라 상이한 코덱이 사용될 수 있다.
본 출원에 설명된 데이터 처리 파이프라인은 데이터의 차원에 걸쳐 일련의 중첩 루프(nested loops)로서 구현될 수 있다. 감산 및 가산은 평면 레벨에서(예를 들어, 프레임에 대한 컬러 평면의 세트 각각에 대해) 또는 다차원 어레이(예를 들어, X x Y x C 어레이, 여기서 C는 YUV 또는 RGB와 같은 컬러 채널의 수임)를 사용하여 수행될 수 있다. 특정 경우에, 컴포넌트는 n x n 코딩 유닛(예를 들어, 2x2 또는 4x4)에 대해 동작하도록 구성될 수 있고, 이와 같이 프레임에 대한 코딩 유닛에 대해 병렬로 적용될 수 있다. 예를 들어, 입력 비디오의 프레임의 컬러 평면은 프레임의 영역을 커버하는 복수의 코딩 유닛으로 분해될 수 있다. 이는 다수의 작은 1차원 또는 2차원 어레이(예를 들어, 2x2 또는 4x1 어레이 또는 4x4 또는 16x1 어레이들)를 생성할 수 있고, 여기서 컴포넌트가 이들 어레이에 적용된다. 이와 같이, 잔차 세트에 대한 참조는 각각의 어레이가 구성된 비트 깊이의 정수 요소 값을 포함하는 작은 1차원 또는 2차원 어레이의 세트에 대한 참조를 포함할 수 있다.
각각의 개선 스트림 또는 양자 모두의 개선 스트림은 네트워크 추상화 계층 유닛(NALU)의 세트를 사용하여 하나 이상의 개선 비트스트림 내에 캡슐화될 수 있다. NALU는 개선을 올바른 베이스 재구성된 프레임에 적용하기 위해 개선 비트스트림을 캡슐화하도록 의도된다. NALU는, 예를 들어, 개선이 적용되어야만 하는 베이스 디코더 재구성된 프레임 비트스트림을 포함하는 NALU에 대한 참조 인덱스를 포함할 수 있다. 이러한 방식으로, 개선은 베이스 스트림에 동기화되고, 각각의 비트스트림의 프레임이 조합되어, 디코딩된 출력 비디오가 생성될 수 있다(즉, 개선 레벨의 각각의 프레임의 잔차가 베이스 디코딩된 스트림의 프레임과 조합된다). 픽처 그룹은 다수의 NALU를 나타낼 수 있다.
처리 컴포넌트에 대한 추가 설명
처리 컴포넌트 또는 도구의 세트가 인코딩 및/또는 디코딩 전체에 걸쳐 개선 스트림(또는 입력 비디오) 각각에 어떻게 적용될 수 있는지를 앞서 언급하였다. 이러한 처리 컴포넌트는 모듈식 컴포넌트로서 적용될 수 있다. 이는, 컴퓨터 프로그램 코드로, 즉, 하나 이상의 프로세서에 의해 실행되는 바와 같이 구현될 수 있고, 및/또는 전용 하드웨어 회로로서, 예를 들어, 별개의 또는 조합된 필드 프로그래머블 게이트 어레이(FPGA) 또는 주문형 집적 회로(ASIC)로서 구성될 수 있다. 컴퓨터 프로그램 코드는 비디오 렌더링 서비스를 제공하기 위해 운영 체제에 의해 사용되는 임베디드 디바이스를 위한 펌웨어 또는 코덱의 일부를 포함할 수 있다. 다음은 도 1 내지 도 5c에 예시된 바와 같은 전체 프로세스 내의 도구 및 그의 기능 각각의 간략한 요약을 제공한다.
다운샘플링: 다운샘플링 프로세스는 예에서 다운샘플링 컴포넌트(예를 들어, 104, 304, 404)에 의해 적용된다. 다운샘플링 프로세스는 입력 비디오에 적용되어 베이스 코덱에 의해 인코딩될 다운샘플링된 비디오를 생성한다. 다운샘플링은 수직 및 수평 방향 양자 모두에서, 또는 대안적으로 수평 방향에서만 행해질 수 있다. 다운샘플링 컴포넌트는 다운-스케일러로서 더 설명될 수 있다.
레벨-1(L-1) 인코딩: 도 1에서 122로 도시된 이 컴포넌트에 대한 입력은 베이스 코덱의 디코딩된 출력과 다운샘플링된 비디오 사이의 차이를 취함으로써 얻어지는 제1 잔차 세트를 포함한다. 그 후, 제1 잔차 세트는 아래에 더 설명되는 바와 같이 변환되고, 양자화되고 인코딩된다.
변환: 특정 예에서, 변환 컴포넌트(예를 들어, 변환 컴포넌트(122, 322 및/또는 341))에 의해 사용될 수 있는 2가지 타입의 변환이 존재한다. 변환은 방향 분해일 수 있다. 변환은 코딩 유닛(예를 들어, 작은 n x n 블록의 요소)에서 잔차 값을 탈상관시키도록 작용할 수 있다. 변환은 행렬 변환, 예를 들어 코딩 유닛을 나타내는 평탄화된 어레이에 적용되는 행렬 승산으로서 적용될 수 있다.
일 경우에, 2가지 타입의 변환은 2개의 상이한 크기의 변환 커널에 대응할 수 있다. 따라서, 코딩 유닛의 크기는 변환 커널의 크기에 기초하여 설정될 수 있다. 제1 변환은 잔차의 2x2 블록에 적용되는 2x2 커널을 갖는다. 결과적인 계수는 다음과 같다:
Figure pct00009
제2 변환은 4x4 잔차 블록에 적용되는 4x4 커널을 갖는다. 결과적인 계수는 다음과 같다:
Figure pct00010
Figure pct00011
이러한 변환 행렬은 다음 범위 내의 정수 값을 포함할 수 있다:
{-1, 1} 또는 {-1, 0, 1}. 이는 계산을 단순화하고 가산 및 감산을 사용하는 고속 하드웨어 구현을 허용할 수 있다. 변환 행렬은, 직교 행 및 자기-역(self-inverse)(즉, 역방향 변환은 순방향 변환과 동일함)과 같은, 유리한 속성을 갖는 아다마르 행렬을 포함할 수 있다. 아다마르 행렬이 사용되는 경우, 동일 행렬이 순방향 변환 및 역방향 변환 양자 모두에 대해 사용될 수 있기 때문에, 역변환은 변환이라고 지칭될 수 있다.
특정 경우에, 변환은 예측된 잔차 계산의 적용(즉, 이후의 예를 참조하여 더 상세히 설명되는 바와 같은 예측 평균의 사용)을 포함할 수 있다.
양자화: 변환된 잔차 세트(본 출원에서 "계수"로 지칭됨)는 컴포넌트(323 또는 343)와 같은 양자화 컴포넌트를 사용하여 양자화된다. 컴포넌트(327, 364, 372, 572 및 582)와 같은 역양자화 컴포넌트는 양자화된 값에 정의된 양자화 인자를 승산함으로써 값 사전 양자화의 버전을 재구성할 수 있다. 계수는 선형 양자화기를 사용하여 양자화될 수 있다. 선형 양자화기는 가변 크기의 데드 존을 사용할 수 있다. 선형 양자화기는 상이한 크기의 데드 존 대 양자화 단계 및 비중앙 탈양자화 오프셋을 사용할 수 있다. 이러한 변형은 이후의 예를 참조하여 더 상세히 설명된다.
엔트로피 코딩: 양자화된 계수 세트는 컴포넌트(325 또는 344)와 같은 엔트로피 코더를 사용하여 인코딩될 수 있다. 엔트로피 코딩의 2가지 방식이 있다. 제1 방식에서, 양자화된 계수는 RLE(Run-Length-Encoder)를 사용하여 인코딩된다. 제2 방식에서, 양자화된 계수는 먼저 RLE를 사용하여 인코딩되고, 그 후, 인코딩된 출력은 허프만 인코더를 사용하여 처리된다.
잔차 모드(RM) 선택: 잔차(필터링) 모드(RM)가 선택되었다면, 제1 잔차 세트(즉, 레벨 1)는 어느 잔차가 변환, 양자화 및 인코딩되어야 하는지를 결정하기 위해 추가로 순위화 및 선택될 수 있다. 잔차 필터링은 예를 들어 150 또는 350과 같은 제어 컴포넌트의 제어 하에, 컴포넌트(321 또는 340) 중 하나 이상에 의해 수행될 수 있다. 잔차의 필터링은 잔차 처리 파이프라인의 어디에서나 수행될 수 있지만, 바람직하게는 엔트로피 인코딩 이전에 수행된다.
시간적 선택 모드: 시간적 선택 모드가 예를 들어 152 또는 352와 같은 컴포넌트에 의해 선택되는 경우, 인코더는 345 또는 361과 같은 시간적 버퍼로부터 유도된 대응하는 계수를 감산함으로써 계수(즉, 변환된 잔차 또는 이로부터 유도된 데이터)를 수정할 수 있다. 이는 아래에 설명되는 바와 같이 시간적 예측을 구현할 수 있다. 이어서, 디코더는 컴포넌트(230, 250, 530, 550 또는 591) 중 하나와 같은 시간적 버퍼로부터 유도된 대응하는 계수를 추가함으로써 계수를 수정할 수 있다.
레벨-1(L-1) 디코딩: 이는 컴포넌트(228 및 528)로서 도시되어 있다. 이 도구로의 입력은, (571과 같은) 엔트로피 디코더, (572와 같은) 역양자화기 및 (573과 같은) 역변환 모듈을 통과하는, 인코딩된 레벨 1 스트림(226 또는 526)(즉, L-1 인코딩된 잔차)을 포함한다. 이러한 모듈에 의해 수행되는 동작은 앞서 설명한 모듈에 의해 수행되는 역동작이다. 시간적 선택 모드가 선택된 경우, 잔차는 시간적 버퍼로부터의 병치된 잔차로부터 부분적으로 예측될 수 있다.
디블로킹 및 잔차 필터: 특정 경우에, 4x4 변환이 사용되는 경우, 디코딩된 잔차는 130, 232, 330 또는 535와 같은 필터 모듈 또는 디블로킹 필터에 공급될 수 있다. 디블로킹은 가중치가 지정될 수 있는 마스크를 적용함으로써 역변환된 잔차의 각각의 블록에 대해 동작한다. 마스크의 일반적인 구조는 다음과 같다:
Figure pct00012
여기서
Figure pct00013
Figure pct00014
이다. 가중치는 비트스트림과 관련된 제어 시그널링 내에서 지정될 수 있거나 로컬 메모리로부터 검색될 수 있다.
업샘플링: 디코딩된(그리고 적용 가능한 경우, 필터링된 또는 디블로킹된) 제1(L-1) 잔차 세트 및 베이스 디코딩된 비디오의 조합은 업샘플링되어, 업샘플링된 재구성된 비디오를 생성한다. 업샘플링은 업샘플링 컴포넌트(134, 234, 334, 434, 534 또는 587)와 관련하여 설명된 바와 같이 수행될 수 있다. 가능한 업샘플링 동작의 예가 아래에 더 상세히 설명된다. 업샘플링 방법은 비트스트림에서 선택 가능하고 시그널링될 수 있다. 본 출원의 예에서, "바이트스트림"이라는 용어 또는 스트림, 비트스트림 또는 NALU 스트림과 같은 대안적인 용어가 적절하게 사용될 수 있다는 점에 유의해야 한다.
레벨-2(L-2) 인코딩: 이는 컴포넌트(142, 442 및 548)로서 표현된다. 이 인코딩 동작에 대한 입력은 업샘플링된 재구성된 비디오와 입력 비디오 사이의 차이를 취함으로써 얻어진 제2(L-2) 잔차 세트를 포함한다. 그 후, 제2(L-2) 잔차 세트가 본 출원에 더 설명된 바와 같이 변환, 양자화 및 인코딩된다. 변환, 양자화 및 인코딩은 L-1 인코딩과 관련하여 설명된 것과 동일한 방식으로 수행된다. 잔차 필터링 모드가 선택된 경우, 어느 잔차가 변환되고 인코딩되어야 하는지를 결정하기 위해 제2 잔차 세트가 추가로 순위화 및 선택된다.
예측 계수(또는 예측 평균) 모드: 예측 계수 모드가 선택되면, 인코더는 변환된 계수(C00)를 수정할 수 있는데, 이 변환된 계수(C00)는 본 출원에서 A, 즉 평균 값(아래에 더 상세히 설명되는 바와 같이 4x4 변환에 대해 Ax일 수 있음)이라고도 지칭된다. 2x2 변환이 사용되는 경우, C00은 잔차의 변환된 블록이 예측되는 업샘플링된 잔차의 값을 감산함으로써 수정될 수 있다. 4x4 변환이 사용되는 경우, C00은 잔차의 변환된 블록이 예측되는 4개의 업샘플링된 잔차의 평균 값을 감산함으로써 수정될 수 있다. 예측 계수 모드는 본 출원에 설명된 바와 같이 수정된 업샘플링을 사용하여 디코더에서 구현될 수 있다.
레벨-2(L-2) 디코딩: 이는 컴포넌트(248 및 548)로서 도시되어 있다. 이 디코딩에 대한 입력은 (L-2)개의 잔차의 인코딩된 제2 세트를 포함한다. 제2 잔차 세트의 디코딩 프로세스는 엔트로피 디코더(예를 들어, 581), 역양자화기(예를 들어, 582) 및 역변환 모듈(예를 들어, 583)을 수반한다. 이러한 컴포넌트에 의해 수행되는 동작은 앞서 설명한 바와 같은 인코딩 컴포넌트에 의해 수행되는 역동작이다. 시간적 선택 모드가 선택된 경우, 잔차는 시간적 버퍼로부터의 병치된 잔차로부터 부분적으로 예측될 수 있다.
수정된 업샘플링: 수정된 업샘플링 프로세스는 2개의 단계를 포함하며, 제2 단계는 디코더에 의해 수신된 시그널링에 의존한다. 제1 단계에서, 디코딩된(그리고 적용 가능한 경우에 디블로킹된)(L-1)개의 제1 잔차 세트 및 베이스 디코딩된 비디오(L-1개의 재구성된 비디오)의 조합을 업샘플링하여, 업샘플링된 재구성된 비디오를 생성한다. 예측 계수 모드가 선택되었다면, 이때, 제2 단계가 구현된다. 특히, 업샘플링된 재구성 비디오의 상기 2x2 블록이 유도된 L-1 재구성 값의 요소의 값이 업샘플링된 재구성 비디오의 2x2 블록에 추가된다. 일반적으로, 수정된 업샘플링은 도 4를 참조하여 설명한 바와 같이 업샘플링된 재구성된 비디오 및 프리-업샘플링 재구성된 저해상도 비디오에 기초할 수 있다.
디더링: 특정 예에서, 디더링의 최종 스테이지가 도 2 및 5a-5c의 디코딩된 비디오(260 또는 560)에 선택적으로 적용될 수 있다. 디더링은 작은 레벨의 노이즈를 디코딩된 비디오에 적용하는 것을 포함할 수 있다. 디더링은 정의된 범위 내의 난수 또는 의사 난수를 디코딩된 비디오에 추가함으로써 적용될 수 있다. 정의된 범위는 로컬 및/또는 시그널링된 파라미터에 기초하여 구성될 수 있다. 정의된 범위는 정의된 최소 및 최대값, 및/또는 (예를 들어, 특정 범위 내의 난수 발생기의 출력에 대한) 정의된 스케일링 인자에 기초할 수 있다. 디더링은 본 기술 분야에 공지된 바와 같은 양자화 아티팩트의 시각적 외관을 감소시킬 수 있다.
4x4 잔차 코딩 유닛 및 타일의 예
도 6a는 4x4 코딩 유닛(620)에 배열된 잔차(610)의 세트의 예(600)를 도시한다. 따라서, 16개의 잔차 요소가 존재한다. 코딩 유닛(620)은 요소 R[x][y]를 갖는 잔차의 NxN 어레이 R을 포함할 수 있다. 2x2 코딩 유닛의 경우, 4개의 잔차 요소가 있을 수 있다. 변환은 도시된 바와 같이 코딩 유닛에 적용될 수 있다.
도 6b는 복수의 코딩 유닛(640)이 어떻게 타일(650)의 세트로 배열될 수 있는지를 도시한다. 타일의 세트는 픽처 또는 프레임의 전체 영역을 집합적으로 커버할 수 있다. 도 6b의 예에서, 타일은 코딩 유닛의 8x8 어레이로 구성된다. 코딩 유닛이 4x4인 경우, 이는 각각의 타일이 32x32 요소를 가짐을 의미하고; 코딩 유닛이 2x2인 경우, 이는 각각의 타일이 16x16 요소를 가짐을 의미한다.
예시적인 픽처 형식들
도 7a 내지 도 7c는 비디오 내의 픽처 또는 프레임을 형성하기 위해 컬러 성분이 조직될 수 있는 다수의 방식을 도시한다. 예에서, 입력 비디오(102, 302, 402)의 프레임은 소스 픽처로서 지칭될 수 있고, 디코딩된 출력 비디오(260, 560)는 디코딩된 픽처로서 지칭될 수 있다. 인코더에 의해 구현되는 인코딩 프로세스는, 디코더에 의해 구현되는 디코딩 프로세스에 송신되고 디코딩 프로세스에 의해 수신되는 본 출원의 예에서 설명된 일반적 비트스트림을 생성할 수 있다. 비트스트림은 적어도 인코딩된 베이스 스트림, 인코딩된 레벨 1 스트림, 인코딩된 레벨 2 스트림 및 헤더로부터 생성되는 조합된 비트스트림을 포함할 수 있다(예를 들어, 본 출원의 예에서 설명된 바와 같음). 따라서, 비트스트림에 의해 표현되는 비디오 소스는 디코딩 순서에서 픽처의 시퀀스로서 볼 수 있다.
특정 예에서, 소스 및 디코딩된 픽처는 각각 하나 이상의 샘플 어레이로 구성된다. 이러한 어레이는, 루마 단독(단색) 성분(예를 들어, Y); 루마 및 2개의 크로마 성분(예를 들어, YCbCr 또는 YCgCo); 녹색, 청색, 및 적색 성분(예를 들어, GBR 또는 RGB); 또는 다른 지정되지 않은 단색 또는 3자극 컬러 샘플링을 나타내는 다른 어레이 (예를 들어, YZX, XYZ라고도 알려짐)를 포함할 수 있다. 본 출원에 설명된 특정 예는 루마 및 크로마 어레이(예를 들어, Y, Cb 및 Cr 어레이들)를 참조하여 제시되지만, 그러나, 본 기술 분야의 통상의 기술자는 이러한 예가 임의의 공지된 또는 미래의 컬러 표현 방법으로 동작하도록 적합하게 구성될 수 있다는 것을 이해할 것이다.
특정 예에서, 크로마 형식 샘플링 구조는 chroma_sampling_type를 통해 지정될 수 있다(예를 들어, 이는 디코더에 시그널링될 수 있다). 상이한 샘플링 형식은 상이한 컬러 성분 사이에 상이한 관계를 가질 수 있다. 예를 들어: 4:2:0 샘플링에서, 2개의 크로마 어레이 각각은 루마 어레이의 절반의 높이 및 절반의 폭을 갖고; 4:2:2 샘플링에서, 2개의 크로마 어레이 각각은 루마 어레이의 동일한 높이 및 절반의 폭을 갖고; 4:4:4 샘플링에서, 2개의 크로마 어레이 각각은 루마 어레이와 동일한 높이 및 폭을 갖는다. 단색 샘플링에서, 단 하나의 샘플 어레이가 있으며, 이는 명목상 루마 어레이로 고려된다. 비디오 시퀀스 내의 루마 및 크로마 어레이 내의 샘플 각각의 표현에 필요한 비트의 수는 8 내지 16 (경계값 포함)의 범위일 수 있으며, 루마 어레이에서 사용되는 비트의 수는 크로마 어레이에서 사용되는 비트의 수와 다를 수 있다.
도 7a 내지 도 7c는 변수 chroma_sampling_type의 상이한 값에 의해 표현될 수 있는 상이한 샘플링 타입을 도시한다. chroma_sampling_type의 값이 0과 같을 때, 픽처 내의 루마 샘플(710) 및 크로마 샘플(720)의 공칭 수직 및 수평 상대 위치가 도 7a에 도시된다. chroma_sampling_type의 값이 1과 같을 때, 크로마 샘플(720)은 대응하는 루마 샘플(710)과 공존하며, 픽처 내의 공칭 위치는 도 7b에 도시된 바와 같다. chroma_sampling_type의 값이 2와 같을 때, 모든 어레이 샘플(710, 720)은 픽처의 모든 경우에 대해 공존하며, 픽처 내의 공칭 위치는 도 7c에 도시된 바와 같다. 이러한 경우에, 변수 SubWidthC 및 SubHeightC는 크로마 샘플이 어떻게 시프트되는지를 나타낼 수 있다:
Figure pct00015
예시적인 비트스트림 처리
도 8은 본 출원에 설명된 예시적인 인코더 또는 인코딩 프로세스를 사용하여 인코딩된 비트스트림을 처리하는 데 사용될 수 있는 예시적인 방법(800)을 나타낸다. 방법(800)은 도 2 및 5의 200 또는 500과 같은 예시적인 디코더에 의해 구현될 수 있다. 방법(800)은 개선 비트스트림의 분리를 용이하게 하는 예시적인 흐름을 도시한다.
블록 802에서, 방법(800)은 입력 비트스트림(802)을 수신하는 단계를 포함한다. 블록 804에서, 수신된 비트스트림 내에서 NALU 시작이 식별된다. 그 다음, 이는 블록 806에서 진입점의 식별을 허용한다. 진입점은 비트스트림을 디코딩하기 위해 디코딩 프로세스의 어느 버전이 사용되어야 하는지를 나타낼 수 있다. 다음으로, 블록 808에서, 페이로드 개선 구성이 결정된다. 페이로드 개선 구성은 페이로드의 특정 파라미터를 나타낼 수 있다. 페이로드 개선 구성은 스트림마다 한 번 시그널링될 수 있다. 선택적으로, 페이로드 개선 구성은 픽처 그룹마다 또는 각각의 NALU에 대해 다수회 시그널링될 수 있다. 페이로드 개선 구성은 블록 810에서 페이로드 메타데이터를 추출하는 데 사용될 수 있다.
블록 812에서, 픽처 그룹(GOP)의 시작이 식별된다. 픽처 그룹이라는 용어가 사용되지만, 이 용어는 베이스 스트림의 것에 대응하는 구조를 지칭하기 위해 사용되며 개선 스트림 상의 특정 구조를 정의하기 위해 사용되는 것은 아니라는 것을 이해할 것이다. 즉, 개선 스트림은 엄격한 의미에서 GOP 구조를 갖지 않을 수 있으며, 이 분야의 GOP 구조를 엄격히 준수할 필요는 없다. 페이로드 메타데이터가 포함되는 경우, 이는 페이로드 개선 구성 이후에 그리고 픽처 그룹의 세트 이전에 포함될 수 있다. 페이로드 메타데이터는 예를 들어 HDR 정보를 포함할 수 있다. 블록 812에 이어서, GOP가 검색될 수 있다. 블록 814에서, NALU가 제1 비트스트림 프레임과 관련되면, 방법은 블록 816에서 페이로드 전역 구성을 검색하는 단계를 더 포함할 수 있다. 페이로드 전역 구성은 디코딩 프로세스의 파라미터를 나타낼 수 있고, 예를 들어, 페이로드 전역 구성은 예측된 잔차 모드 또는 시간적 예측 모드가 인코더에서 인에이블되었는지(그리고 디코더에서 인에이블되어야 하는지)를 나타낼 수 있고, 따라서, 페이로드 전역 구성은 모드가 디코딩 방법에서 사용되어야 하는지를 나타낼 수 있다. 페이로드 전역 구성은 각각의 GOP에 대해 한 번 검색될 수 있다. 블록 818에서, 방법(800)은 디더링 또는 업샘플링 파라미터와 같은, 디코딩 동안 인에이블될 파라미터를 디코더에 나타내는 페이로드 디코더 제어 파라미터의 세트를 검색하는 것을 더 포함할 수 있다. 페이로드 디코더 제어 파라미터는 각각의 GOP에 대해 검색될 수 있다. 블록 820에서, 방법(800)은 비트스트림으로부터 페이로드 픽처 구성을 검색하는 단계를 포함한다. 페이로드 픽처 구성은 각각의 픽처 또는 프레임에 관한 파라미터, 예를 들어, 단계 폭과 같은 양자화 파라미터를 포함할 수 있다. 페이로드 픽처 구성은 각각의 NALU에 대해 한 번(즉, 각각의 픽처 또는 프레임에 대해 한 번) 검색될 수 있다. 블록 822에서, 그 후, 방법(800)은 각각의 프레임의 인코딩된 데이터를 포함할 수 있는 인코딩된 데이터의 페이로드를 검색하는 단계를 더 포함할 수 있다. 인코딩된 데이터의 페이로드는 각각의 NALU에 대해 한 번(즉, 각각의 픽처 또는 프레임에 대해 한 번) 시그널링될 수 있다. 인코딩된 데이터의 페이로드는, 도 9a 뿐만 아니라 도 21a 및 도 21b의 예를 참조하여 설명된 바와 같이, 청크로 분리될 수 있는 데이터의 표면, 평면 또는 계층을 포함할 수 있다. 인코딩된 데이터의 페이로드가 검색된 후에, NALU는 블록 824에서 종료할 수 있다.
GOP가 또한 종료되면, 방법은 새로운 GOP에 대한 새로운 NALU를 계속 검색할 수 있다. NALU가 (본 경우에와 같이) 제1 비트스트림 프레임이 아니라면, 이 때, NALU는, 그 후, 선택적으로, 진입점(즉, 디코딩에 사용될 소프트웨어 버전의 표시)을 검색할 수 있다. 그 다음, 방법은 페이로드 전역 구성, 페이로드 디코더 제어 파라미터 및 페이로드 픽처 구성을 검색할 수 있다. 그 다음, 방법은 인코딩된 데이터의 페이로드를 검색할 수 있다. 그 후, NALU는 종료할 것이다.
블록 814에서 NALU가 제1 비트스트림 프레임과 관련되지 않으면, 블록(828 내지 838)이 수행될 수 있다. 선택적 블록(828)은 블록(806)과 유사할 수 있다. 블록 830 내지 838은 블록 816 내지 824와 유사한 방식으로 수행될 수 있다.
블록 840 및 842에서, 각각의 NALU가 종료된 후에, GOP가 종료되지 않았다면, 방법(800)은 블록 844에서 스트림으로부터 새로운 NALU를 검색하는 단계를 포함할 수 있다. 각각의 GOP의 각각의 제2 및 후속 NALU에 대해, 방법(800)은 블록 806 및 828과 유사한 방식으로 블록 846에서 진입점 표시를 선택적으로 검색할 수 있다. 그 다음, 방법(800)은 블록 848에서 페이로드 픽처 구성 파라미터를 검색하는 단계 및 블록 850에서 NALU에 대한 인코딩된 데이터의 페이로드를 검색하는 단계를 포함할 수 있다. 따라서, 블록 848 내지 852가 블록 820 내지 824 및 블록 834 내지 838과 유사한 방식으로 수행될 수 있다. 페이로드 인코딩된 데이터는 타일 데이터를 포함할 수 있다.
위에서와 같이, NALU가 GOP에 대한 마지막 NALU가 아닌 경우, 이 방법은 추가 NALU를 검색하는 단계(예를 들어, 블록 844으로의 루프 어라운드)를 포함할 수 있다. NALU가 GOP 내의 마지막 NALU이면, 방법(800)은 블록 854로 진행할 수 있다. 추가 GOP가 있는 경우, 방법은 블록 812로 루프 어라운드할 수 있고, 앞서 설명된 바와 같이 추가의 GOP를 검색하고 블록 814를 계속 수행하는 것을 포함한다. 모든 GOP가 검색되면, 비트스트림은 블록 856에서 종료된다.
인코딩된 페이로드 데이터의 예시적인 형태
도 9a는 인코딩된 비트스트림 내의 인코딩된 데이터(900)가 어떻게 청크로 분리될 수 있는지를 도시한다. 보다 상세하게는, 도 9a는 개선 인코더에 의해 발생된 비트스트림에 대한 예시적인 데이터 구조(예를 들어, 레벨 1 및 레벨 2 인코딩된 데이터)를 도시한다. 복수의 평면(910)(nPlanes의 수)이 도시된다. 각각의 평면은 특정 컬러 성분과 관련된다. 도 9a에는, YUV 컬러 평면을 갖는 예가 도시되어 있다(예를 들어, 입력 비디오의 프레임이 3개의 컬러 채널, 즉, 모든 픽셀에 대해 3개의 값을 가짐). 예에서, 평면은 개별적으로 인코딩된다.
각각의 평면에 대한 데이터는 다수의 레벨(nLevels)로 추가로 조직된다. 도 9a에는, 개선 레벨 1 및 2 각각에 관한 2개의 레벨이 있다. 이어서, 각각의 레벨에 대한 데이터는 계층의 수(nLayers)로서 더 조직된다. 이러한 계층은 베이스 및 개선 계층과 별개이고; 이 경우에, 이들은 변환으로부터 초래되는 계수 그룹 각각에 대한 데이터를 지칭한다. 예를 들어, 2x2 변환은 4개의 상이한 계수를 초래하고, 이는 이후 양자화되고 엔트로피 인코딩되고, 4x4 변환은 16개의 상이한 계수를 초래하고, 이는 이후 마찬가지로 양자화되고 엔트로피 인코딩된다. 이 경우에, 따라서 각각 4 및 16개의 계층이 있고, 여기서 각각의 계층은 각각의 상이한 계수와 관련된 데이터를 나타낸다. 계수가 A, H, V 및 D 계수로 지칭되는 경우에, 이때, 계층은 A, H, V 및 D 계층으로 보일 수 있다. 특정 예에서, 이러한 "계층"은 "표면"이라고도 지칭되며, 이는 컬러 성분의 세트에 대한 2차원 어레이의 세트와 유사한 방식으로 계수의 "프레임"으로서 볼 수 있기 때문이다.
계층의 세트에 대한 데이터는 "청크"로서 고려될 수 있다. 이와 같이, 각각의 페이로드는 계층적으로 청크로 순서화된 것으로 볼 수 있다. 즉, 각각의 페이로드는 평면으로 그룹화되고, 그 후, 각각의 평면 내에서, 각각의 레벨은 계층으로 그룹화되고, 각각의 계층은 그 계층에 대한 청크의 세트를 포함한다. 레벨은 각각의 개선 레벨(제1 또는 추가)을 나타내고, 계층은 변환 계수 세트를 나타낸다. 임의의 디코딩 프로세스에서, 이 방법은 각각의 평면에 대한 2 개선 레벨을 위해 청크를 검색하는 단계를 포함할 수 있다. 이 방법은 사용되는 변환의 크기에 따라 각각의 레벨에 대해 4개 또는 16개의 계층을 검색하는 단계를 포함할 수 있다. 따라서, 각각의 페이로드는 각각의 레벨 내의 모든 계층에 대한 청크의 세트로 정렬되고, 이어서 평면의 다음 레벨 내의 모든 계층에 대한 청크의 세트로 순서화된다. 그 다음, 페이로드는 다음 평면의 제1 레벨의 계층에 대한 청크의 세트를 포함하는 등이다.
이와 같이, 본 출원에 설명된 인코딩 및 디코딩 방법에서, 비디오의 픽처는, 예를 들어, 지정된 조직을 갖는 계층적 구조로 파티셔닝될 수 있다. 각각의 픽처는 계층적 구조로 조직된 3개의 상이한 평면으로 구성될 수 있다. 디코딩 프로세스는 디코딩된 베이스 픽처 평면의 세트 및 잔차 평면의 세트를 획득하려고 시도할 수 있다. 디코딩된 베이스 픽처는 베이스 디코더의 디코딩된 출력에 대응한다. 베이스 디코더는 공지된 또는 레거시 디코더일 수 있고, 이와 같이, 베이스 디코더에 대한 비트스트림 신택스 및 디코딩 프로세스는 사용되는 베이스 디코더에 기초하여 결정될 수 있다. 대조적으로, 잔차 평면은 개선 계층에 새로운 것이며, 본 출원에 설명된 바와 같이 파티셔닝될 수 있다. "잔차 평면"은 특정 컬러 성분과 관련된 잔차 세트를 포함할 수 있다. 예를 들어, 평면(910)이 입력 비디오의 YUV 평면과 관련되는 것으로 도시되지만, 유의할 점은, 데이터(920)가, 예를 들어, 비교대상 코딩 기술에 대해서와 같이, YUV 값을 포함하지 않는다는 것이다. 오히려, 데이터(920)는 YUV 평면 각각으로부터의 데이터로부터 유도된 인코딩된 잔차를 포함한다.
특정 예에서, 잔차 평면은 사용되는 변환의 크기에 의존하는 크기를 갖는 코딩 유닛으로 분할될 수 있다. 예를 들어, 코딩 유닛은 2x2 방향 분해 변환이 사용되는 경우 2x2의 차원을 가질 수 있거나 또는 4x4 방향 분해 변환이 사용되는 경우 4x4의 차원을 가질 수 있다. 디코딩 프로세스는 잔차 표면의 하나 이상의 세트, 즉, 잔차의 모음의 하나 이상의 세트를 출력하는 단계를 포함할 수 있. 예를 들어, 이는 도 2의 레벨 1 디코딩 컴포넌트(228) 및 레벨 2 디코딩 컴포넌트(248)에 의해 출력될 수 있다. 제1 잔차 세트 표면은 제1 개선 레벨을 제공할 수 있다. 제2 잔차 세트 표면은 추가 개선 레벨일 수 있다. 잔차 표면의 각각의 세트는, 예를 들어, 도 2의 예시적인 디코더(200)에 도시된 바와 같이, 베이스 디코더로부터 유도되는 재구성된 픽처와, 개별적으로 또는 집합적으로, 조합될 수 있다.
예시적인 업샘플링 접근법
도 9b 내지 9j 및 아래의 설명은, 본 출원의 예에서 설명된 업샘플링 컴포넌트, 예를 들어, 도 1 내지 5c의 업샘플링 컴포넌트(134, 234, 334, 434, 534 또는 587)를 구현할 때 사용될 수 있는 가능한 업샘플링 접근법에 관한 것이다.
도 9b 및 9c는 업샘플링될 프레임이 분할될 수 있는 방법의 2개의 예를 나타낸다. 프레임에 대한 참조는, 예를 들어, YUV 형식의 데이터의 하나 이상의 평면에 대한 참조로서 취해질 수 있다. 소스 프레임(910)이라 지칭되는 업샘플링될 각각의 프레임은 2개의 주요 부분, 즉 중앙 영역(910C) 및 경계 영역(910B)으로 분할된다. 도 9b는 쌍선형(bilinear) 및 쌍삼차(bicubic) 업샘플링 방법에 대한 예시적인 배열을 도시한다. 도 9b에서, 경계 영역(910B)은 4개의 세그먼트, 즉 상단 세그먼트(910BT), 좌측 세그먼트(910BL), 우측 세그먼트(910BR) 및 하단 세그먼트(910BB)로 구성된다. 도 9c는 최근접 업샘플링 방법에 대한 예시적인 배열을 나타낸다. 도 9c에서, 경계 영역(910B)은 2개의 세그먼트로 구성되고; 이는 우측 세그먼트(910BR) 및 하단 세그먼트(910BB)이다. 양자 모두의 예에서, 세그먼트는 예를 들어 세그먼트의 폭(즉, 세그먼트가 프레임의 에지로부터 소스 프레임 내로 연장하는 길이)을 설정하는 경계 크기 파라미터(BS)에 의해 정의될 수 있다. 경계 크기는 쌍선형 및 쌍삼차 업샘플링 방법에 대해 2개의 픽셀 또는 최근접 방법에 대해 1개의 픽셀로 설정될 수 있다.
사용시에, 소스 프레임 픽셀이 특정 세그먼트 내에 위치하는지를 결정하는 것은 (예를 들어, x 및 y 방향에서의) 정의된 픽셀 인덱스의 세트에 기초하여 수행될 수 있다. 소스 프레임 픽셀이 중앙 영역(910C) 내에 있는지 또는 경계 영역(910B) 내에 있는지에 기초하여 차동 업샘플링을 수행하는 것은 소스 프레임 에지에서의 불연속성으로 인해 도입될 수 있는 경계 효과를 회피하는 것을 도울 수 있다.
최근접 업샘플링
도 9c는 최근접 업샘플링 방법을 사용하여 프레임이 업샘플링되는 방법의 개요를 제공한다. 도 9c에서, 소스 프레임(920)은 목적지 프레임(922)이 되도록 업샘플링된다. 최근접 업샘플링 방법은 예를 들어 화살표(925)에 의해 지시되는 바와 같이 현재 소스 픽셀(928)을 목적지 픽셀의 2x2 목적지 그리드(924) 상에 복사함으로써 업샘플링한다. 중앙 및 에지 픽셀은 각각 926 및 927로서 도시된다. 목적지 픽셀 위치는 도 9c의 우측에 도시된 바와 같이 4개의 픽셀을 커버하도록 범위를 확장하기 위해 양 축 상에서 소스 픽셀(928)의 인덱스를 배가시키고 각각의 축에 +1을 점진적으로 추가함으로써 계산된다. 예를 들어, 인덱스 위치(x=6, y=6)를 갖는 소스 픽셀(928)의 값은 인덱스 위치(12, 12), (13, 12), (12, 13) 및 (13, 13)을 갖는 픽셀을 포함하는 목적지 그리드(924)에 복사된다. 목적지 그리드(924) 내의 각각의 픽셀은 소스 픽셀(928)의 값을 취한다.
최근접 업샘플링 방법은 제한된 프로세서 자원를 갖는 임베디드 디바이스에 대해 바람직할 수 있는 빠른 구현을 가능하게 한다. 그러나, 최근접 방법은 블로킹 또는 "픽실레이션(pixilation)" 아티팩트가 레벨 2 잔차에 의해 보정될 필요가 있을 수 있다는 (예를 들어, 엔트로피 인코딩 이후에 송신을 위해 더 많은 비트를 요구하는 더 많은 비-제로 잔차 값을 야기하는) 단점을 갖는다. 아래에 설명되는 특정 예에서, 쌍선형 및 쌍삼차 업샘플링은 더 효율적으로 인코딩될 수 있는, 예를 들어, 양자화 및 엔트로피 인코딩 이후에 더 적은 비트를 요구하는 레벨 2 잔차 세트를 초래할 수 있다. 예를 들어, 쌍선형 및 쌍삼차 업샘플링은 입력 신호와 더 정확하게 일치되는 업샘플링된 출력을 생성하여, 더 작은 레벨 2 잔차 값을 초래할 수 있다.
쌍선형 업샘플링
도 9e, 9f 및 9g는 쌍선형 업샘플링 방법을 예시한다. 쌍선형 업샘플링 방법은 3개의 주요 단계로 분할될 수 있다. 제1 단계는 소스 프레임 내의 소스 픽셀(932)의 2x2 소스 그리드(930)를 구성하는 단계를 수반한다. 제2 단계는 쌍선형 보간을 수행하는 단계를 수반한다. 제3 단계는 보간 결과를 목적지 프레임 내의 목적지 픽셀(936)에 기록하는 것을 수반한다.
쌍선형 업샘플링 - 단계 1: 소스 픽셀 그리드
도 9e는 2x2 소스 그리드(930)(쌍선형 그리드라고도 지칭될 수 있음)의 구성 예를 예시하는 것이다. 2x2 소스 그리드(930)가 소스 픽셀(932) 대신에 사용되는데, 그 이유는 쌍선형 업샘플링 방법이 베이스 픽셀(932B)에 최근접 3개 픽셀, 즉 2x2 소스 그리드(930) 내에 속하는 최근접 3개 픽셀의 값을 고려함으로써 업샘플링을 수행하기 때문이다. 이 예에서, 베이스 픽셀(932B)은 2x2 소스 그리드(930)의 우하단에 있지만, 그러나 다른 위치가 가능하다. 쌍선형 업 방법 동안, 2x2 소스 그리드(930)는 다수의 소스 프레임 픽셀에 대해 결정되어, 전체 목적지 프레임에 대한 목적지 프레임 픽셀 값을 반복적으로 결정할 수 있다. 베이스 픽셀(932B) 위치는 목적지 프레임 픽셀의 어드레스를 결정하는 데 사용된다.
쌍선형 업샘플링 - 단계 2: 쌍선형 보간
도 9f는 쌍선형 계수 유도를 예시한다. 이 예에서, 쌍선형 보간은 2x2 소스 그리드(930) 내의 4개의 픽셀의 값의 가중 합산이다. 가중 합산은 계산되는 목적지 픽셀(936)의 픽셀 값으로서 사용된다. 이용되는 특정 가중치는 2x2 목적지 그리드(935) 내의 특정 목적지 픽셀(936)의 위치에 의존한다. 이 예에서, 쌍선형 보간은, 2x2 목적지 그리드(935)에서의 목적지 픽셀(936)의 위치를 사용하여, 2x2 소스 그리드(930)에서의 각각의 소스 픽셀(932)에 가중치를 적용한다. 예를 들어, (도 9f에서 936/936B로 도시된) 좌상단 목적지 픽셀에 대한 값을 계산한다면, 이때, 좌상단 소스 픽셀 값은 가장 큰 가중 계수(934)(예를 들어, 가중 인자 9)가 적용되는 반면, 우하단 픽셀 값(대각선으로 반대)은 가장 작은 가중 계수(예를 들어, 가중 인자 1)가 적용될 것이고, 나머지 2개의 픽셀 값은 중간 가중 계수(예를 들어, 가중 인자 3)가 적용될 것이다. 이는 도 9f에서 2x2 소스 그리드(930)에 도시된 가중으로 시각화된다.
2x2 목적지 그리드(935) 내의 936/936B의 우측에 있는 픽셀에 대해, 가중 합산에 적용되는 가중치는 다음과 같이 변할 것이다: 우상단 소스 픽셀 값은 가장 큰 가중 계수(예를 들어, 가중 인자 9)가 적용될 것인 반면, 좌하단 픽셀 값(대각선으로 반대)은 가장 작은 가중 계수(예를 들어, 가중 인자 1)가 적용될 것이고, 나머지 2개의 픽셀 값은 중간 가중 계수(예를 들어, 가중 인자 3)가 적용될 것이다.
도 9f에서, 2x2 소스 그리드(930)에 기초하여 베이스 픽셀(932B)에 대해 4개의 목적지 픽셀이 계산되지만, 각각의 목적지 픽셀은 상이한 가중치 세트를 사용하여 결정된다. 이러한 가중치는 업샘플링 커널로서 고려될 수 있다. 이러한 방식으로, 2x2 소스 그리드(930) 내의 원래 픽셀 값에 적용되어 베이스 픽셀(932B)에 대한 2x2 목적지 그리드(935)를 생성하는 4개의 상이한 세트의 4개의 가중된 값이 존재할 수 있다. 4개의 목적지 픽셀 값이 결정된 후에, 상이한 소스 그리드를 갖는 다른 베이스 픽셀이 선택되고, 프로세스는 다음 4개의 목적지 픽셀 값을 다시 결정하기 시작한다. 이는 전체 목적지(예를 들어, 업샘플링된) 프레임에 대한 픽셀 값이 결정될 때까지 반복적으로 반복될 수 있다. 다음 섹션은 소스 프레임으로부터 목적지 프레임으로의 이 보간된 픽셀 값의 맵핑을 더 상세히 설명한다.
쌍선형 업샘플링 - 단계 3: 목적지 픽셀들
도 9g는 소스 프레임(940), 목적지 프레임(942), 보간 모듈(944), 복수의 2x2 소스 그리드(930)(a,b,c,d,h,j) 및 복수의 2x2 목적지 그리드(935)(d,e,h,k)를 포함하는 쌍선형 업샘플링 방법의 개요를 나타낸다. 소스 프레임(940) 및 목적지 프레임(942)은 픽셀 어드레싱을 위해 각각의 열 및 행 상의 0으로부터 시작하는 인덱스를 갖는다(그러나 다른 인덱싱 방식이 사용될 수 있다).
일반적으로, 각각의 2x2 소스 그리드(930)로부터 생성된 가중 평균 각각은 대응하는 2x2 목적지 그리드(935) 내의 대응하는 목적지 픽셀(936)에 맵핑된다. 맵핑은 최근접 샘플링 방법과 달리, 각각의 2x2 소스 그리드(930)의 소스 베이스 픽셀(932B)을 사용하여 대응하는 2x2 목적지 그리드(942)의 대응하는 목적지 베이스 픽셀(936B)에 맵핑한다. 목적지 베이스 픽셀(936B) 어드레스는 (양 축에 대해 적용되는) 수학식으로부터 계산된다:
Dst_base_addr = (Src_base_address x 2)-1
또한, 목적지 픽셀은 다음의 수학식으로부터 계산된 3개의 대응하는 목적지 서브픽셀(721S)을 갖는다:
Dst_sub_addr= Dst_base_addr+1(양 축에 대해)
그래서, 각각의 2x2 목적지 그리드(935)는 일반적으로 각각 목적지 베이스 픽셀의 우측, 아래, 그리고 대각선으로 우측 아래 각각의 3개의 목적지 서브픽셀(936S)과 함께 목적지 베이스 픽셀(936B)을 포함한다. 이는 도 9f에 도시되어 있다. 그러나, 목적지 그리드 및 베이스 픽셀의 다른 구성들도 가능하다.
목적지 픽셀(936B 및 936S) 각각에 대한 계산된 목적지 베이스 및 서브 어드레스는 목적지 프레임(942) 상의 범위 밖에 있을 수 있다. 예를 들어, 소스 프레임(940) 상의 픽셀 A(0, 0)는 2x2 목적지 그리드(935)에 대한 목적지 베이스 픽셀 어드레스(-1,-1)를 생성한다. 목적지 어드레스(-1,-1)는 목적지 프레임(942) 상에 존재하지 않는다. 이러한 상황이 발생할 때, 목적지 프레임(942)에의 기록은 이 범위외 값에 대해서는 무시된다. 이는 경계 소스 프레임을 업샘플링할 때 발생할 것으로 예상된다. 그러나, 이 특정한 예에서 목적지 서브픽셀 어드레스 중 하나(0, 0)는 목적지 프레임(942) 상의 범위 내에 있다는 점에 유의해야 한다. 2x2 소스 그리드(930)의 가중 평균 값(즉, 가장 높은 가중을 취하는 좌하측 픽셀 값에 기초함)은 목적지 프레임(942) 상의 어드레스(0, 0)에 기록될 것이다. 유사하게, 소스 프레임(940) 상의 픽셀 B(1, 0)는 -1 행이 없기 때문에 범위외에 있는 목적지 베이스 픽셀 어드레스(1,-1)를 생성한다. 그러나, 목적지 서브픽셀 어드레스(1, 0) 및 (2, 0)은 범위 내에 있고, 대응하는 가중 합이 각각 대응하는 어드레스 내에 입력된다. 픽셀 C에 대해서도 유사하지만, 그러나, 열 0 상의 2개의 값(즉, 어드레스(0, 1) 및 (0, 2))만이 입력된다. 소스 프레임의 어드레스(1, 1)에 있는 픽셀 D는 픽셀 E, H 및 K와 같이 소스 그리드(930d)의 가중 평균에 기초하여 전체 2x2 목적지 그리드(935d)에 기여하며, 도 9g에 예시된 2x2 목적지 그리드(935e, 935h, 935k) 및 대응하는 소스 그리드(930e, 930h, 930k)를 갖는다.
이해하듯이, 이러한 수학식은 경계 영역(910B) 및 그와 관련된 세그먼트를 유용하게 다루며, 중앙(910C) 세그먼트가 업샘플링될 때, 목적지 프레임(942)의 중앙에 유지되는 것을 보장한다. 예를 들어, 목적지 서브픽셀이 결정되는 방식으로 인해, 이 접근법을 사용하여 두 번 결정되는 임의의 픽셀 값은 무시되거나 오버라이트될 수 있다.
또한, 경계 세그먼트(910BR 및 910BB)에 대한 범위는 목적지 프레임 내의 모든 픽셀을 채우기 위해 +1만큼 확장된다. 즉, 소스 프레임(940)은 경계 세그먼트(910BR) 내의 픽셀의 새로운 열(도 9g에서 인덱스 열 번호 8로 도시됨), 및 경계 세그먼트(910BB) 내의 픽셀의 새로운 행(도 9g에서 인덱스 행 번호 8로 도시됨)을 제공하도록 외삽된다.
삼차 업샘플링(cubic up-sampling)
도 9h, 9i 및 9j는 함께 삼차 업샘플링 방법, 특히, 쌍삼차 방법을 예시한다. 본 예의 삼차 업샘플링 방법은 3개의 주요 단계로 분할될 수 있다. 제1 단계는 4x4 소스 그리드(815) 내의 로컬 인덱스(2,2)에 위치된 베이스 픽셀(964B)을 갖는 소스 픽셀의 4x4 소스 그리드(962)를 구성하는 단계를 수반한다. 제2 단계는 쌍삼차 보간을 수행하는 단계를 수반한다. 제3 단계는 보간 결과를 목적지 픽셀에 기록하는 단계를 수반한다.
삼차 업샘플링 - 단계 1: 소스 픽셀 그리드
도 9h는 경계내 그리드(962i) 및 개별적으로 경계외 그리드(962o)에 대한 소스 프레임(960) 상의 4x4 소스 그리드(962) 구성을 나타낸다. 이 예에서, "경계내"는 그리드가 소스 프레임, 예를 들어, 중앙 영역(910C) 및 경계 영역(910B) 내에 있는 소스 픽셀을 커버한다는 사실을 지칭하고; "경계외(out-of-bound)"는 그리드가 소스 프레임의 외부에 있는 위치를 포함한다는 사실을 지칭한다. 삼차 업샘플링 방법은 4x4 커널에 의해 후속하여 승산되는 4x4 소스 그리드(962)를 사용함으로써 수행된다. 이 커널은 업샘플링 커널이라고 지칭될 수 있다. 4x4 소스 그리드(962)의 생성 동안, 소스 프레임(960)의 프레임 한계 외부에 속하는 임의의 픽셀(예를 들어, 경계외 그리드(962o)에 도시된 픽셀들)은 소스 프레임(960)의 경계에서 소스 픽셀(964)의 값으로 대체된다.
삼차 업샘플링-단계 2: 쌍삼차 보간
쌍삼차 업샘플링 프로세스에 사용되는 커널은 전형적으로 4x4 계수 그리드를 갖는다. 그러나, 소스 픽셀과 관련된 목적지 픽셀의 상대 위치는 상이한 계수 세트를 산출할 것이며, 이 예에서는 업샘플링이 2의 배수이므로, 업샘플링 프로세스에서 4 세트의 4x4 커널이 사용될 것이다. 이러한 세트는 계수의 4차원 그리드(2 x 2 x 4 x 4)에 의해 표현된다. 예를 들어, 단일 업샘플링된 소스 픽셀(964B)을 나타내는 2x2 목적지 그리드 내의 각각의 목적지 픽셀에 대해 하나의 4x4 커널이 존재할 것이다.
일 경우에, 쌍삼차 계수는 파라미터의 고정된 세트로부터 계산될 수 있다. 일 경우에, 이는 코어 파라미터(쌍삼차 파라미터) 및 스플라인 생성 파라미터의 세트를 포함한다. 일 예에서, -0.6의 코어 파라미터 및 [1.25, 0.25,-0.75&-1.75]의 4개의 스플라인 생성 파라미터가 사용될 수 있다. 필터의 구현은 하드웨어 디바이스 내에서 고정 소수점 계산을 사용할 수 있다.
삼차 업샘플링 - 단계 3: 목적지 픽셀들
도 9j는, 소스 프레임(972), 목적지 프레임(980), 보간 모듈(982), 4x4 소스 그리드(970), 및 2x2 목적지 그리드(984)를 포함하는 삼차 업샘플링 방법의 개요를 도시한다. 소스 프레임(972) 및 목적지 프레임(980)은 픽셀 어드레싱(그러나 다른 어드레싱 방식이 사용될 수 있음)을 위해 각각의 열 및 행에서 0부터 시작하는 인덱스를 가진다.
쌍선형 방법과 유사하게, 쌍삼차 목적지 픽셀은 양 축에 대한 다음 수학식으로부터 계산된 베이스 어드레스를 갖는다:
Dst_base_addr = (Src_base_address x 2)-1
또한, 목적지 어드레스는 다음으로부터 계산된다:
Dst_sub_addr= Dst_base_addr+1(양 축에 대해)
그리고 그래서, 쌍선형 방법에 관하여, 각각의 2x2 목적지 그리드(984)는 일반적으로 각각 목적지 베이스 픽셀의 우측, 아래, 그리고 대각선으로 우측 아래 각각의 3개의 목적지 서브픽셀과 함께 목적지 베이스 픽셀을 포함한다. 그러나, 목적지 그리드 및 베이스 픽셀의 다른 구성들도 가능하다.
다시, 이러한 수학식은 중앙 세그먼트가 업샘플링될 때 이것이 목적지 프레임의 중앙에 남아 있을 것임을 보장한다. 또한, 경계 세그먼트(510BR, 510BB)에 대한 범위는 쌍선형 방법에 대해 설명된 것과 동일한 방식으로 목적지 프레임(980) 내의 모든 픽셀을 채우기 위해 +1만큼 확장된다. 예를 들어, 목적지 서브픽셀이 결정되는 방식으로 인해, 이 접근법을 사용하여 두 번 결정되는 임의의 픽셀 값은 무시되거나 오버라이트될 수 있다. 계산된 목적지 베이스 및 서브 어드레스는 범위 밖에 있을 수 있다. 이러한 상황이 발생할 때, 목적지 프레임에의 기록은 이 범위외 값에 대해 무시된다. 이는 경계 영역을 업샘플링할 때 발생할 것으로 예상된다.
예시적인 엔트로피 인코딩
도 10a 내지 도 10i는 엔트로피 인코딩의 상이한 양태를 예시한다. 이러한 양태는 예를 들어 도 3a 및 3b의 엔트로피 인코딩 컴포넌트(325, 344)에 의해 수행되는 엔트로피 인코딩 및/또는 예를 들어 도 5b 및 5c의 엔트로피 디코딩 컴포넌트(571, 581)에 의해 수행되는 엔트로피 디코딩과 관련될 수 있다.
도 10a는 예시적인 엔트로피 디코딩 컴포넌트(1003)(예를 들어, 도 5b 및 5c의 엔트로피 디코딩 컴포넌트(571, 581) 중 하나 이상)의 일 구현(1000)을 도시한다. 엔트로피 디코딩 컴포넌트(1003)는 엔트로피 인코딩된 잔차(Ae, He, Ve, De)(1002)의 세트(1001)를 입력으로서 취하고 양자화된 계수(1007)(예를 들어, 이 예시된 예에서 양자화된 변환된 잔차들)의 세트(1006)를 출력한다. 엔트로피 인코딩된 잔차(1002)는 수신된 인코딩된 레벨 1 또는 레벨 2 스트림(예를 들어, 도 2에 도시된 226 또는 246)을 포함할 수 있다. 엔트로피 디코딩 컴포넌트(1003)는 런-렝스 디코더(1005)가 뒤따르는 허프만 디코더(1004)를 포함한다. 허프만 디코더(1004)는 허프만 인코딩을 사용하여 인코딩되는 인코딩된 개선 스트림을 수신하고 이것을 디코딩하여 런-렝스 인코딩된 스트림을 생성한다. 그 후, 런-렝스 인코딩된 스트림은 런-렝스 디코더(1005)에 의해 수신되고, 런-렝스 디코딩을 적용하여 양자화된 계수(1007)를 생성한다. 도 10a에서, 2x2 변환 예가 도시되어 있고, 따라서 계수는 2x2 방향 분해로부터 A, H, V 및 D 계수로서 도시되어 있다.
엔트로피 인코딩 컴포넌트는 구현(1000)과 반대 방식으로 배열될 수 있다. 예를 들어, 엔트로피 인코딩 컴포넌트의 입력은 표면(예를 들어, 변환된 양자화된 잔차 세트로부터 유도된 잔차 데이터)을 포함할 수 있고, 잔차 데이터, 예를 들어, (2x2 예에 대해, Ae, He, Ve, De 인코딩되고 양자화된 계수를 갖는) 인코딩된 스트림 데이터(1001) 형태의 데이터의 엔트로피 인코딩된 버전으로 구성될 수 있다.
예시적인 엔트로피 인코딩 - 헤더 형식들
도 10b 내지 도 10e는 헤더 형식의 특정 구현 및 비-제로 코드의 양에 따라 코드 길이가 스트림 헤더에 어떻게 기록될 수 있는지를 예시한다.
도 10b는 31개 초과의 비-제로 코드가 있는 경우에 대한 프리픽스 코딩(즉, 허프만) 디코더 스트림 헤더(1010)를 도시한다. 처음 5 비트는 프리픽스 코드에 대한 최소 길이를 나타낸다. 두 번째 5 비트는 프리픽스 코드에 대한 최대 길이를 나타낸다. 이어서, 제3 비트는 압축이 적용되고 있는지를 나타내는 압축 플래그(1011)를 제공한다. 그 다음, 도 10b의 예에서 3개의 심볼이 뒤따른다: 제1 비-제로 심볼(1014), 제2 제로 심볼(1015) 및 제3 비-제로 심볼(1016). 비-제로 길이 플래그(1017)는 각각의 심볼이 비-제로인지를 나타내는 1 비트 플래그를 포함하고; 제1 및 제3 심볼(1014, 1016)에 대한 플래그는 1인 반면, 제2 심볼(1015)에 대한 플래그는 0이다. 각각의 비-제로 심볼은 (예를 들어, 처음 5 비트로 전송되는 바와 같은) 코드 길이에서 최소 길이를 뺀 것과 동일한 프리픽스 코딩을 위한 코드 길이를 나타낸다. 코드 길이는 도 10a의 1004와 같은 프리픽스(즉, 허프만) 디코더를 초기화하는 데 사용될 수 있다. 이 예에서, 코드 길이 비트의 수는 다음과 같을 수 있다: log2(max_length - min_length+1).
따라서, 도 10a의 예에서, 데이터에 31개 초과의 비-제로 값이 있고 헤더는 최소 코드 길이 및 최대 코드 길이를 포함한다. 각각의 심볼에 대한 코드 길이가 이어서 순차적으로 전송된다. 플래그는 심볼의 길이가 비-제로임을 나타낸다. 그 다음, 코드 길이의 비트는 코드 길이와 최소 시그널링된 길이 사이의 차이로서 전송된다. 이는 헤더의 전체 크기를 감소시킨다.
도 10c는 도 10b와 유사하지만 31개 미만의 비-제로 코드가 있는 경우에 사용되는 헤더(1020)를 예시하는 것이다. 이는 보통의 경우를 포함할 수 있다. 헤더(1020)는 다시, 최소 길이를 나타내는 처음 5 비트, 최대 길이를 나타내는 후속 5 비트, 및 (예를 들어, 본 출원의 다른 곳에서 설명된 압축을 나타내는 0 또는 1일 수 있는) 압축 플래그(1021)를 가진다. 이어서, 헤더(1020)는 데이터 내의 심볼의 수, 이어서 연속 심볼(1024, 1025)의 세트를 더 포함한다. 각각의 심볼은 심볼 값에 뒤따르는 그 심볼에 대한 코드워드의 길이를 나타내는 8 비트를 포함할 수 있고, 이는 다시 도 10a와 관련하여 설명된 바와 같이 길이와 최소 길이 사이의 차이로서 전송된다.
양자 모두의 경우에, 헤더(1010 또는 1020)는 헤더로부터 코드 길이를 판독함으로써 엔트로피 디코딩 컴포넌트(특히, 허프만 또는 프리픽스 코딩 디코더)를 초기화하는 데 사용된다.
도 10d 및 도 10e는 특이 경우(outlying cases)에 전송될 수 있는 추가의 헤더(1030, 1040)를 예시한다. 예를 들어, 빈도가 모두 0인 경우, 스트림 헤더는 도 10d에 예시된 바와 같은 헤더(1030)를 포함할 수 있으며, 5 비트 최소 및 최대 길이(1031, 1032)는 양자 모두 특수 상황을 나타내기 위해 31로(즉, 최대값으로) 설정된다. 도 10e는 허프만 트리에 단 하나의 코드만이 있는 경우에 사용될 수 있는 헤더(1040)를 도시한다. 이 경우에, 최소 및 최대 길이 필드(1041 및 1042)에서의 0 (즉, 최소) 값은 원-코드 특수 상황을 나타내고, 이어서 이 필드값 다음에 사용될 심볼 값(1043)이 온다. 이 후자의 예에서, 단 하나의 심볼 값만이 있고, 이는 양자화된 계수 데이터의 세트 내에 단 하나의 데이터 값만이 존재한다는 것을 나타낼 수 있다.
예시적인 엔트로피 인코딩 - RLE 상태 기계
도 10f는 도 10a의 런-렝스 디코더(1005)와 같은 런-렝스 디코더에 사용될 수 있는 상태 기계(1050)를 도시한다. 런-렝스 디코더는 런-렝스 인코딩된 데이터의 세트를 바이트별로 판독하도록 구성된다. 상태 기계(1050)는 3개의 상태를 갖는다: 런-렝스 코딩(RLC) 잔차 최하위 비트(LSB) 경우(1051); 런-렝스 코딩(RLC) 잔차 최상위 비트(MSB) 경우(1052); 및 런-렝스 코딩(RLC) 0 런 경우(1053). 상이한 타입의 데이터에 대해 상이한 런-렝스 인코더 및 디코더가 사용될 수 있다. 예를 들어, 상이한 런-렝스 인코딩 및 디코딩 구성이 다음의 각각에 대해 사용될 수 있다: 계수 그룹, 시간적 신호 계수 그룹, 및 데이터의 엔트로피 인코딩된 타일.
특정 예에서, 프리픽스 또는 허프만 코딩은 (예를 들어, rle_only 플래그를 사용하여) 선택적으로 헤더에서 시그널링될 수 있다. RLE 디코더의 입력은 허프만 코딩이 사용되는 경우(예를 들어, rle_only 플래그가 0과 같은 경우) 허프만 디코딩된 데이터의 바이트 스트림을 포함할 수 있거나, 허프만 코딩이 사용되지 않는 경우(예를 들어, 플래그 rle_only가 1과 같은 경우) 원시 데이터의 바이트 스트림을 포함할 수 있다. RLE 디코더의 출력은 양자화된 변환 계수의 스트림을 포함할 수 있다. 일 경우에, 이 계수는 도 9a에 나타난 청크에 속하거나(예를 들어, 평면, 레벨 및 계층에 의해 인덱싱됨 - 이후의 예에서 설명되는 변수 planeIdx, levelIndex 및 layerIndex가 가리키는 바와 같음), 시간적 신호의 스트림(시간적 예측을 구현하는데 사용되는 시간적 계층의 부분을 형성하는 시간적 청크 - 이는 이후의 예를 참조하여 설명됨)을 포함할 수 있다.
도 10f의 상태 기계(1050)는 계수 그룹에 대한 RLE 디코더를 구현하는 데 사용될 수 있다. 런-렝스 상태 기계(1050)는 현재 심볼 또는 코드 워드에 대해 어느 허프만 코드를 사용할지를 알기 위해 처리되는 허프만 인코딩 및 디코딩에 의해 사용될 수 있다. RLE 디코더는 0의 시퀀스를 디코딩하기 위해 런-렝스 상태 기계(1050)를 사용한다. 이는 또한 허프만 디코딩을 위한 허프만 트리를 구축하는 데 사용되는 빈도 테이블을 디코딩한다.
구성에 의해, 데이터의 제1 바이트의 상태는 제1 상태(1051)(즉, RLC 잔차 LSB 상태)에 있는 것이 보장된다. RLE 디코더는 수신된 스트림의 콘텐츠에 기초하여 데이터의 다음 바이트의 상태를 결정하기 위해 상태 기계(1050)를 사용한다. 현재 상태는 디코더에게 데이터의 현재 바이트를 해석하는 방법을 알려준다. 도 10g, 도 10h 및 도 10i는 본 예의 RLE 디코더가 바이트를 해석하도록 어떻게 구성되는지를 도시한다.
도 10f에 도시된 바와 같이, 상태 기계(1050)는 3개의 상태를 갖는다:
RLC 잔차 LSB 상태(1051): 이는 상태 기계(1050)가 시작하는 상태이다. 수신된 스트림 내의 바이트에 대해, 이 상태(1051)는 비-제로 요소 값을 인코딩하기 위해 6개의 하위 비트(비트 6 내지 비트 1)를 예상한다. 이 상태에 의해 예상되는 바와 같이 분할된 바이트(1070)의 예가 도 10g에 도시되어 있다. 런 비트(1071)는 다음 바이트가 0의 런의 카운트를 인코딩하고 있음을 나타낸다. 이는 데이터 부분(1072)에서 인코딩된다. 이 예에서 바이트의 최하위 비트인 오버플로우 비트(1073)는 요소 값이 6 비트의 데이터 내에 맞지 않는 경우에 설정된다(예를 들어, 오버플로우가 존재하지 않는 경우에 0으로 설정되고, 오버플로우가 존재하는 경우에 1로 설정된다). 런 비트(1071)가 0이고 오버플로우 비트(1073)가 0이면, 상태 기계(1050)는 RLC 잔차 LSB 상태(1051)로 유지된다. 화살표(1074)에 의해 도시된 바와 같이 오버플로우 비트(1073)가 설정될 때(예를 들어, 1일 때), 다음 바이트의 상태는 아래에 설명하는 바와 같이 RLC 잔차 MSB 상태(1052)로 이동한다. 따라서, 도 10g의 하반부는 상태 전이를 야기하는 RLC 잔차 LSB 상태(1051)에서의 바이트를 도시한다. 오버플로우 비트가 설정될 때, 1075에 도시된 바와 같이, 다음 상태는 0의 런일 수 없고, 비트 7이 예를 들어 데이터 부분(1076)에 의해 도시된 바와 같이 데이터를 인코딩하는 데 대신 사용될 수 있다.
RLC 잔차 MSB 상태: 이 상태(1052로 도시됨)는 6 비트의 데이터 내에 맞지 않는 요소 값의 비트 7 내지 13을 인코딩한다. RLC 잔차 상태에 대한 바이트(1080)의 런-렝스 인코딩은 도 10h에 도시된 바와 같다. 데이터 부분(1082)은 7개의 최하위 비트를 채운다. 이 예에서, 비트 7- 런 비트(1081)로서 표시됨 -은 그 다음 바이트가 0의 런인지를 인코딩한다. 런 비트가 (예를 들어, 1로) 설정되면, 이때, 상태는 RLC 0 런 상태(1053)로 전이한다.
RLC 0 런 상태: 이 상태(1053으로 도시됨)는 0 런 카운트의 7 비트를 인코딩한다. RLC 0 런 상태(1053)에 대한 바이트(1085)의 런-렝스 코딩이 도 10i에 도시되어 있다. 역시, 데이터 부분(1087)은 7개의 최하위 비트로 제공된다. 최상위 비트(1086)는 런 비트이다. 카운트를 인코딩하는데 더 많은 비트가 필요한 경우, 런 비트는 하이이다. 런 비트가 하이(예를 들어, 1)이면, 상태 기계(1050)는 RLC 0 런 상태(1053)로 유지된다. 런 비트가 로우(예를 들어, 0)이면, 상태 기계(1050)는 RLC 잔차 LSB 상태(1051)로 전이한다. RLC 잔차 LSB 상태(1051)에서, 런 비트가 하이 (예를 들어, 1)이고 오버플로우 비트가 로우(예를 들어, 0)이면, 상태 기계(1050)는 RLC 잔차 LSB 상태(1051)로부터 RLC 0 런 상태(1053)로 전이한다.
예에서, 허프만 인코더에 의한 사용을 위해 각각의 상태에 대해 빈도 테이블이 생성된다. 디코더가 알려진 상태에서 시작하기 위해, 인코딩된 스트림 내의 제1 심볼은 항상 잔차일 것이다. 비트는 물론 기능성의 손실 없이 반전될 수 있다(0/1, 1/0 등). 유사하게, 플래그의 심볼 또는 바이트 내의 위치는 단지 예시적이다.
시간적 예측 및 시그널링
시간적 시그널링의 특정 양태를 포함하는 시간적 예측의 특정 변형 및 구현 상세가 이제 설명될 것이다.
본 출원에 설명된 특정 예에서, 상이한 시간 샘플에 관련된 비디오의 2개 이상의 프레임으로부터의 정보가 사용될 수 있다. 이는 예를 들어 상이한 시간으로부터의 정보와 관련되므로 시간적 모드로서 설명될 수 있다. 모든 실시예가 시간적 양태를 사용할 수 있는 것은 아니다. 시간적 예측을 위한 컴포넌트는 도 1 내지 5c의 예에 도시된다. 본 출원에 설명되는 바와 같이, 하나 이상의 잔차 세트를 인코딩하는 단계는 비디오의 이전 프레임에 관한 정보를 저장하도록 배열되는 시간적 버퍼를 이용할 수 있다. 일 경우에, 잔차 세트를 인코딩하는 단계는 시간적 버퍼로부터 시간적 계수 세트를 도출하고 검색된 시간적 계수 세트를 사용하여 현재 계수 세트를 수정하는 단계를 포함할 수 있다. 이러한 예에서, "계수"는, 예를 들어, 비디오 스트림의 프레임의 하나 이상의 코딩 유닛을 참조하여 정의된 바와 같은 변환된 잔차를 포함할 수 있다- 접근법이 잔차 및 계수 양자 모두에 적용될 수 있다. 특정 경우에, 수정은 현재 계수 세트로부터 시간적 계수 세트를 감산하는 것을 포함할 수 있다. 이 접근법은 계수의 다수의 세트, 예를 들어, 레벨 1 스트림에 관련된 것 및 레벨 2 스트림에 관련된 것에 적용될 수 있다. 현재 계수 세트의 수정은, 예를 들어, 비디오 데이터의 프레임 내의 코딩 유닛을 참조하여 선택적으로 수행될 수 있다.
시간적 양태는 인코딩 및 디코딩 스테이지 양자 모두에 적용될 수 있다. 시간적 버퍼의 사용은 도 3a 및 3b의 인코더(300) 및 도 5b 및 5c의 디코더(580, 590)에 도시된다. 본 출원에 설명된 바와 같이, 현재 계수 세트를 수정하기 전에, 현재 계수 세트가 순위화되고 변환되는 것 중 하나 이상이 이루어질 수 있다. 일 경우에, 대응하는 위치(예를 들어, 동일한 위치 또는 맵핑된 위치)에 있는 이전에 인코딩된 (n-1) 프레임으로부터의 탈양자화된 변환된 계수- dqCx,y,n-1 -는 인코딩될 프레임(n)에서 계수 Cx,y,n을 예측하는 데 사용된다. 4x4 변환이 사용되는 경우, x, y는 범위 [0,3]에 있을 수 있고; 2x2 변환이 사용되는 경우, x,y는 범위 [0,1]에 있을 수 있다. 탈양자화된 계수는 역양자화 블록 또는 연산에 의해 생성될 수 있다. 예를 들어, 도 3b에서, 탈양자화된 계수는 역양자화 컴포넌트(372)에 의해 생성된다.
특정 예에서, 적어도 2개의 시간적 모드가 있을 수 있다.
Figure pct00016
시간적 버퍼를 사용하지 않거나 모두 0인 값을 갖는 시간적 버퍼를 사용하는 제1 시간적 모드. 제1 시간적 모드는 현재 프레임 내부로부터의 정보만을 사용하기 때문에 프레임내 모드로 볼 수 있다. 제1 시간적 모드에서, 임의의 적용된 순위화 및 변환에 이어서, 하나 이상의 이전 프레임으로부터의 정보에 기초한 수정 없이 계수가 양자화될 수 있다.
Figure pct00017
시간적 버퍼를 사용하는, 예를 들어 가능한 비-제로 값을 갖는 시간적 버퍼를 사용하는 제2 시간적 모드. 제2 시간적 모드는 현재 프레임 외부로부터의, 예를 들어, 다수의 프레임으로부터의 정보를 사용하기 때문에 프레임간 모드로 볼 수 있다. 제2 시간적 모드에서, 임의의 적용된 순위화 및 변환에 후속하여, 이전 프레임 탈양자화된 계수는 양자화될 계수로부터 감산될 수 있다- Cx,y,n,inter.= Cx,y,n - dqCx,y,n-1.
일 경우에, 제1 시간적 모드는 제로화된 시간적 계수 세트로 감산을 수행함으로써 적용될 수 있다. 다른 경우에, 감산은 시간적 시그널링 데이터에 기초하여 선택적으로 수행될 수 있다. 도 11a 및 11b는 2개의 각각의 시간적 모드에 대한 인코더에서의 예시적인 동작을 나타낸다. 도 11a의 제1 예(1100)는 제1 시간적 모드에서 인코딩 컴포넌트(1102)에 의해 발생되는 계수 세트- Cx,y,n, intra -를 도시한다. 이들은 그 후 양자화를 위해 전달된다. 도 11a에서, 제2 시간적 모드에서의 계수 세트- Cx,y,n, inter -가 위에서 설명한 바와 같이 감산(1114)에 의해 인코딩 컴포넌트(1112)에 의해 생성된 후에 양자화를 위해 전달된다. 그 다음, 양자 모두의 경우에 양자화된 계수는 도 3a 및 3b에 따라 인코딩된다. 다른 예에서, 시간적 모드는 양자화 후에, 또는 인코딩 파이프라인 내의 다른 지점에서 적용될 수 있다는 점에 유의해야 한다.
2개의 시간적 모드 각각은 시그널링될 수 있다. 인코더와 디코더 사이에 시간적 시그널링이 제공될 수 있다. 2개의 시간적 모드는 비디오 스트림 내에서 선택 가능할 수 있으며, 예를 들어 상이한 모드가 비디오 스트림의 상이한 부분(예를 들어, 상이한 인코딩된 픽처 및/또는 타일과 같은 픽처를 갖는 상이한 영역들)에 적용될 수 있다. 시간적 모드는 또한 또는 대안적으로 전체 비디오 스트림에 대해 시그널링될 수 있다. 시간적 시그널링은 예를 들어 인코더로부터 디코더로 송신되는 메타데이터의 일부를 형성할 수 있다. 시간적 시그널링은 인코딩될 수 있다.
일 경우에, 전역 구성 변수는 비디오 스트림에 대해, 예를 들어, 비디오 스트림 내의 복수의 프레임에 대해 정의될 수 있다. 예를 들어, 이는 temporal_enabled 플래그를 포함할 수 있으며, 여기서 0의 값은 제1 시간적 모드를 나타내고 1의 값은 제2 시간적 모드를 나타낸다. 다른 경우에, 전역 구성 값뿐만 아니라, 또는, 전역 구성 값 대신에, 비디오 스트림 내의 각각의 프레임 또는 "픽처"에 시간적 모드를 나타내는 플래그가 할당될 수 있다. temporal_enabled 플래그가 전역 구성 변수로서 사용되는 경우, 이는 인코더에 의해 설정되어 디코더에 통신될 수 있다.
특정 경우에, 비디오 스트림의 프레임의 하나 이상의 부분에 그 부분에 대한 시간적 모드를 나타내는 변수가 할당될 수 있다. 예를 들어, 부분은 코딩 유닛 또는 블록, 예를 들어, 2x2 또는 4x4 변환 행렬에 의해 변환되는 2x2 또는 4x4 영역을 포함할 수 있다. 특정 경우에, 각각의 코딩 유닛에 시간적 모드를 나타내는 변수가 할당될 수 있다. 예를 들어, 1의 값은 제1 시간적 모드(예를 들어, 유닛이 "인트라" 유닛임)를 나타낼 수 있고, 0의 값은 제2 시간적 모드(예를 들어, 유닛이 "인터" 유닛임)를 나타낼 수 있다. 각각의 부분과 관련된 변수는 인코더와 디코더 사이에서 시그널링될 수 있다. 일 경우에, 이는 변환된 계수 중 하나를 변수 값으로 설정함으로써 수행될 수 있으며, 예를 들어, 이는 2x2 코딩 유닛에 대한 H 계수 또는 4x4 코딩 유닛에 대한 HH 계수를 변수 값(예를 들어, 0 또는 1)으로 설정함으로써 시그널링될 수 있다. 다른 경우에, 각각의 코딩 유닛은 시간적 모드를 나타내는 메타데이터 및/또는 측대역 시그널링을 포함할 수 있다. 도 11c는 전자의 경우의 예(1120)를 도시한다. 이 예(1120)에서, 2x2 변환으로부터 초래되는 4개의 계수(1122)가 있다. 이 4개의 계수(1122)는 (예를 들어, 주어진 평면에 대해) 잔차의 2x2 코딩 유닛을 변환함으로써 생성될 수 있다. 아다마르 변환이 사용될 때, 4개의 계수는 코딩 유닛 내의 평균, 수평, 수직 및 대각선 양태를 각각 나타내는 A, H, V 및 D 성분(1124)으로서 지칭될 수 있다. 도 11c의 예(1120)에서, H 성분은 1126으로 도시된 바와 같이 시간적 모드를 시그널링하는데 사용된다.
시간적 처리는 표시된 시간적 모드에 기초하여 인코더 및/또는 디코더에서 선택적으로 적용될 수 있다. 개선 스트림의 프레임의 부분에 대한 메타데이터 및/또는 측대역 채널 내의 시간적 시그널링은 디코더로 송신될 데이터의 크기를 감소시키기 위해 예를 들어 런-렝스 인코딩 등으로 인코딩될 수 있다. (예를 들어, 이 메타데이터는 반복된 값의 시퀀스를 갖는 '0 및 '1의 스트림을 포함할 수 있기 때문에) 몇몇 시간적 모드가 있는 작은 부분, 예를 들어, 코딩 유닛 및/또는 타일에 대해 런-렝스 인코딩이 유리할 수 있다.
2개의 개선 스트림 중 하나 이상에 대해 (예를 들어, 레벨 2에서 그리고/또는 레벨 1에서) 시간적 모드가 시그널링될 수 있다. 예를 들어, 하나의 경우에, 시간적 모드는 LoQ2(즉, 레벨 2)에서는 적용될 수 있지만 LoQ1(즉, 레벨 1)에서는 적용되지 않을 수 있다. 다른 경우에, 시간적 모드는 LoQ2 및 LoQ1 양자 모두에서 적용될 수 있다. 시간적 모드는 각각의 개선 레벨에 대해 독립적으로 (예를 들어, 앞서 설명한 바와 같이) 시그널링될 수 있다. 각각의 개선 레벨은 상이한 시간적 버퍼를 사용할 수 있다. LoQ1에 대해, 디폴트 모드는 시간적 모드를 사용하지 않을 수 있다(예를 들어, 0의 값은 시간적 특징이 사용되지 않음을 나타내고, 1의 값은 시간적 모드가 사용됨을 나타낸다). 시간적 모드가 특정 개선 레벨에서 사용되는지는 디코더의 능력에 따라 달라질 수 있다. 본 출원에 설명되는 시간적 동작 모드는 각각의 개선 레벨에서 유사하게 적용될 수 있다.
인코더에서의 시간적 처리
특정 경우에, 비디오의 적어도 일부에 대한 각각의 시간적 모드의 비용이 추정될 수 있다. 이는 인코더에서 또는 상이한 디바이스에서 수행될 수 있다. 특정 경우에, 더 작은 비용을 갖는 시간적 모드가 선택되고 시그널링된다. 인코더에서, 이는 도 3a 및 3b에 도시된 시간적 모드 선택 블록에 의해 수행될 수 있다. 디코더는 이후 시그널링을 디코딩하고, 예를 들어, 인코더에 의해 명령된 바와 같이, 선택된 시간적 모드를 적용할 수 있다.
비용계산은 프레임별 기반으로 및/또는 부분별 기반으로, 예를 들어, 타일별로 및/또는 코딩 유닛별로 수행될 수 있다. 후자의 경우, 비용계산 평가의 결과는 양자화 및 인코딩 이전에 코딩 유닛에 대한 시간적 모드 변수를 설정하는데 사용될 수 있다.
특정 경우에, 비디오의 프레임 또는 프레임의 부분의 세트에 대한 초기 시간적 모드를 나타내는 맵이 제공될 수 있다. 이 맵은 인코더에 의해 사용될 수 있다. 일 경우에, 아래에 더 상세히 설명되는 바와 같이 비용 추정에 사용하기 위해 인코딩되어 temporal_type 변수가 획득될 수 있다.
일 경우에, 시간적 모드를 선택하는 데 사용되는 비용은 예를 들어 구성 파일 내에 파라미터를 설정함으로써 제어 가능할 수 있다. 일 경우에, 시간적 모드를 선택하는 데 사용되는 비용은 입력 프레임과(예를 들어, 재구성된) 하나 이상의 잔차 세트 사이의 차이에 기초할 수 있다. 다른 경우에, 비용 함수는 입력 프레임과 재구성된 프레임 사이의 차이에 기초할 수 있다. 각각의 시간적 모드에 대한 비용이 평가될 수 있고, 최소 비용을 갖는 모드가 선택될 수 있다. 비용은 SAD(sum of absolute differences) 계산에 기초할 수 있다. 비용은 이러한 방식으로 프레임마다 및/또는 코딩 유닛마다 평가될 수 있다.
예를 들어, 제1 비용 함수는 Jo = Sum(abs(Ix,y,n - Rx,y,v,o))에 기초할 수 있고, 여기서 Ix,y,n는 입력 값이고, Rx,y,v,o는 재구성된 잔차이고, o는 인트라 또는 인터 프레임이다(즉, 제1 또는 제2 시간적 모드를 나타낸다). 비용 함수는 각각의 시간적 모드로부터의 재구성된 잔차를 사용하여 평가될 수 있으며, 이어서 비용 함수의 결과는 각각의 시간적 모드에 대해 비교될 수 있다. 제2 비용 함수는 비-제로 양자화된 계수에 대해 페널티를 적용하는 추가적인 항에 기초할 수 있고/있거나, 이들이 시그널링(예를 들어, 후속 변환)을 위해 사용되는 경우에 하나 이상의 방향 성분의 값에 기초할 수 있다. 제2 경우에, 제2 비용 함수는 Jo = Sum(abs(Ix,y,n - Rx,y,v,o)) + step_widthAA * Sum((qCx,y,n,o != 0) + ((o==intra)&(qC0,3,n,intra == 0)))에 기초할 수 있고, 여기서 단계 폭은 경험적으로 튜닝될 수 있는 구성가능한 가중치 또는 승수이고, qCx,y,n,o는 양자화된 계수이고, qC0,3,n,intra는 (2x2 변환에 대한) H 또는 (4x4 변환에 대한) HH 요소에 관련된 계수이다. 측대역 시그널링이 사용되는 다른 경우에, 이러한 비트를 1로 설정하는 비용은 제2 비용 함수에 포함될 수 있다. 제1 시간적 모드(예를 들어, 인트라 모드)에 대해, 잔차는 Rx,y,n, intra =Transform(dqCx,y,n, intra )에 따라 재구성될 수 있으며, 여기서 "dq"는 탈양자화된 것을 나타낸다. 제2 시간적 모드(예를 들어, 인터 모드)에 대해, 잔차는 Rx,y,n,inter = Transform(dqCx,y,n,inter +dqCx,y,n-1 )에 따라 재구성될 수 있다. 양자 모두의 경우에의 "변환"은 계수의 역변환을 나타낼 수 있다. 변환 행렬이 자기-역 행렬(self-inverse matrix)이면, 이때, 공통 또는 공유 행렬이 순방향 및 역방향 변환 양자 모두에 사용될 수 있다. 이전과 같이, 사용되는 시간적 모드는 시그널링 정보, 예를 들어 메타데이터 및/또는 설정된 파라미터 값에서 표시될 수 있다.
일 경우에, 비용은 인코더에서 평가될 수 있다. 예를 들어, 시간적 선택 블록이 비용을 평가할 수 있다. 다른 경우에, 비용은 별개의 엔티티(예를 들어, 비디오 스트림의 전처리 동안 원격 서버)에 의해 평가될 수 있고, 시간적 모드는 인코더 및/또는 디코더에 시그널링될 수 있다.
제2 시간적 모드가 선택되면(예를 들어, 인터 프레임 처리), 이때, 수정된 양자화된 계수(예를 들어, 도 3b의 변환 컴포넌트(341)와 양자화 컴포넌트(343) 사이의 감산 블록(342)에 의해 출력됨)가 그 후, 엔트로피 인코딩을 위해 전송된다. 그 다음, 이 계수의 탈양자화된 값은 다음 프레임, 예를 들어, 프레임 n+1의 시간적 예측을 위해 유지될 수 있다. 도 3b가 레벨 1 스트림에 대한 2개의 개별적인 역양자화 연산을 나타내고 있지만, 유의할 점은, 이들이 특정 경우에 단일의 공통 역양자화 연산을 포함할 수 있다는 것이다.
시간적 모드 선택 및 시간적 예측은 도 3b에 도시된 레벨 2 및 레벨 1 스트림 중 하나 이상에(예를 들어, 하나 또는 양자 모두의 잔차 세트에) 적용될 수 있다. 특정 경우에, 시간적 모드는 각각의 스트림에 대해 개별적으로 구성 및/또는 시그널링될 수 있다.
시간적 리프레시
나중의 섹션에서 설명되는 바와 같이, 특정 예에서, 제2 시간적 모드는 시간적 리프레시 파라미터를 이용할 수 있다. 이 파라미터는 시간적 버퍼가 리프레시될 때, 예를 들어 시간적 버퍼에 저장된 제1 세트의 값은 제2 세트의 값으로 대체되는 위치를 시그널링할 수 있다. 시간적 리프레시는 인코더 및 디코더 중 하나 이상에서 적용될 수 있다. 시간적 버퍼는 시간적 버퍼(124, 144, 230, 250, 345, 361, 424, 444, 530, 550 및 591) 중 어느 하나일 수 있다. 예를 들어, 인코더에서, 시간적 버퍼는 시간적 리프레시 플래그가 설정될 때 로딩되는 (예를 들어, "리프레시"를 나타내는 1과 동일한) 이전 프레임에 대한 탈양자화된 계수를 저장할 수 있다. 이 경우, 탈양자화된 계수는 시간적 버퍼에 저장되고, 미래의 프레임에 대한 시간적 예측을 위해(예를 들어, 감산을 위해) 사용되는 반면, 프레임에 대한 시간적 리프레시 플래그는 설정되지 않는다(예를 들어, "리프레시 없음"을 나타내는 0과 동일하다). 이 경우에, 1로 설정된 관련된 시간적 리프레시 플래그를 갖는 프레임이 수신될 때, 시간적 버퍼의 콘텐츠가 대체된다. 이는 프레임별 기반으로 수행될 수 있고/있거나 타일 또는 코딩 유닛과 같은 프레임의 부분에 적용될 수 있다.
시간적 리프레시 파라미터는 느리게 변하거나 비교적 정적인 장면을 나타내는 프레임의 세트에 유용할 수 있으며, 예를 들어 프레임의 세트에 대한 제1 샷이 장면 내의 후속 프레임에 사용될 수 있다. 장면이 다시 변경될 때, 다음 장면에 대한 프레임의 세트 내의 제1 프레임은 시간적 리프레시가 다시 필요하다는 것을 나타낼 수 있다. 이는 시간적 예측 동작의 속도를 높이는 것을 도울 수 있다.
시간적 버퍼에 대한 시간적 리프레시 동작은 시간적 버퍼로 모든 값을 제로화함으로써 달성될 수 있다.
시간적 리프레시 파라미터는 예를 들어 이진 temporal_refresh_bit로서 인코더에 의해 디코더로 시그널링될 수 있으며, 여기서 1은 디코더가 특정 인코딩된 스트림(예를 들어, 레벨 1 또는 레벨 2)에 대한 시간적 버퍼를 리프레시해야 한다는 것을 나타낸다.
타일에 대한 시간적 추정 및 리프레시
본 출원에 설명된 바와 같이, 특정 예에서, 데이터는 타일, 예를 들어 이미지의 32x32 블록으로 그룹화될 수 있다. 이 경우에, 예를 들어, 앞서 설명 바와 같은, 시간적 리프레시 동작이 프레임에 대해 타일별 기반으로 수행될 수 있고, 예를 들어, 여기서 계수는 시간적 버퍼에 저장되고 타일별로 어드레싱될 수 있다. 타일링된 시간적 리프레시를 위한 메커니즘은 인코더 및 디코더에서 비대칭적으로 적용될 수 있다.
일 경우에, 프레임별 또는 블록/코딩 유닛별 기반으로 시간적 리프레시 로직을 결정하기 위해 인코더에서 시간적 처리 동작이 수행될 수 있다. 특정 경우에, 디코더에서의 시간적 리프레시를 위한 시그널링은 인코더로부터 디코더로 송신되는 비트의 수를 보존하도록 적응될 수 있다.
도 12a는 인코더에서 수행될 수 있는 시간적 처리의 일 예(1200)를 도시한다. 도 12a는 예시적인 인코더의 시간적 처리 서브유닛(1210)을 도시한다. 이 인코더는 도 3a 또는 3b의 인코더(300, 360)에 기초할 수 있다. 시간적 처리 서브유닛은 R로서 표시되는 잔차 세트를 수신한다. 이는 본 출원에 설명되는 바와 같은 레벨 2 또는 레벨 1 잔차일 수 있다. 이는 순위화되고 필터링된 잔차 세트 또는 순위화되지 않고 필터링되지 않은 잔차 세트를 포함할 수 있다. 시간적 처리 서브유닛(1210)은 그 후 엔트로피 인코딩될 수 있는 양자화된 계수 세트- qC로 표시됨 -를 출력한다. 본 예에서, 시간적 처리 서브유닛(1210)은 또한 디코더로의 통신을 위해 시간적 시그널링 데이터- TS로 표시됨 -를 출력한다. 시간적 시그널링 데이터(TS)는 양자화된 계수와 함께 또는 이와 별개로 인코딩될 수 있다. 시간적 시그널링 데이터(TS)는 헤더 데이터로서 그리고/또는 측대역 시그널링 채널의 일부로서 제공될 수 있다. 일 경우에, 시간적 데이터는 디코더에 통신되는 별개의 표면으로서 인코딩될 수 있다.
도 12a의 예(1200)에서, 잔차(R)는 변환 컴포넌트(1212)에 의해 수신된다. 이는 다른 예의 변환 컴포넌트, 예를 들어, 도 3a 및 도 3b의 변환 컴포넌트(322, 341) 중 하나에 대응할 수 있다. 변환 컴포넌트(1212)는 본 출원에 설명된 바와 같은 변환 계수(즉, 변환된 잔차들)를 출력한다. 시간적 처리 서브유닛(1210)은 또한 중앙 시간적 프로세서(1214)를 포함한다. 이는 또한 타일 기반 시간적 리프레시 파라미터 temporal_refresh_per_tile 및 시간적 모드 initial_temporal_mode의 추정치의 형태로 메타데이터를 수신한다. 시간적 모드의 추정치는 프레임의 코딩 유닛마다 제공될 수 있고, 타일 기반 시간적 리프레시 파라미터는 타일마다 제공될 수 있다. 예를 들어, 2x2 변환이 사용되면, 코딩 유닛은 2x2 영역과 관련되고, 이때, 32x32 타일에는 16x16 이러한 영역이 있고, 따라서 256개의 코딩 유닛이 있다. 메타데이터는 예를 들어 전처리 동작에서 인코더의 다른 서브유닛에 의해 생성될 수 있고/있거나, 예를 들어 네트워크 애플리케이션 프로그래밍 인터페이스(API)를 통해 인코더에 공급될 수 있다.
도 12a의 예(1200)에서, 시간적 프로세서(1214)는 메타데이터를 수신하고, 각각의 코딩 유닛에 대한 시간적 모드 및 전체 프레임 또는 픽처에 대한 시간적 리프레시 비트에 대한 값을 결정하도록 구성된다. 시간적 프로세서(1214)는 시간적 버퍼(1222)의 적용을 제어한다. 시간적 버퍼(1222)는 위에서 언급한 바와 같은 이전 예의 시간적 버퍼에 대응할 수 있다. 시간적 버퍼(1222)는 역양자화 컴포넌트(1220)로부터 탈양자화된 또는 역양자화된 계수를 수신하며, 이는 도 3a 및 3b의 역양자화 컴포넌트(372 또는 364) 중 하나에 대응할 수 있다. 역양자화 컴포넌트(1220)는 도 3a 및 도 3b의 양자화 컴포넌트(323 또는 343) 중 하나에 대응할 수 있는 양자화 컴포넌트(1216)의 출력에 차례로 통신가능하게 결합된다. 시간적 프로세서(1214)는 도 3a 및 3b에 도시된 바와 같이 시간적 모드 선택 컴포넌트(363 또는 370)의 특정 기능을 구현할 수 있다. 도 12a가 양자화 컴포넌트(1216), 역양자화 컴포넌트(1220) 및 시간적 버퍼(1222) 사이의 특정 결합을 도시하지만, 다른 예에서, 시간적 버퍼(1222)는 양자화 전에 시간적 프로세서(1214)의 출력을 수신할 수 있고, 따라서 역양자화 컴포넌트(1220)는 생략될 수 있다. 도 12a에서, 시간적 프로세서(1214)의 동작에 기초하여 시간적 시그널링 TS를 생성하는 시간적 시그널링 컴포넌트(1218)도 도시된다.
도 12b는 예를 들어 디코더에서 구현되는 바와 같은 대응하는 예(1230)를 나타내며, 여기서 디코더는 프레임별 temporal_refresh 비트 및 코딩 유닛별 temporal_mode 비트를 수신한다. 앞서 설명한 바와 같이, 특정 경우에, 각각의 코딩 유닛에 대한 시간적 모드는 예를 들어 계수 내의 H 또는 HH 값을 대체함으로써 인코딩된 계수 내에 설정될 수 있다. 다른 예에서, 각각의 코딩 유닛에 대한 시간적 모드는 추가적인 시그널링 정보를 통해, 예를 들어 측대역를 통해 그리고/또는 프레임 메타데이터의 일부로서 전송될 수 있다.
도 12b의 예(1230)에서, 시간적 처리 서브유닛(1235)이 디코더에 제공된다. 이는 레벨 1 또는 레벨 2 디코딩 컴포넌트의 적어도 일부를 구현할 수 있다. 시간적 처리 서브유닛(1235)은 역양자화 컴포넌트(1240), 역변환 컴포넌트(1242), 시간적 프로세서(1244) 및 시간적 버퍼(1248)를 포함한다. 역양자화 컴포넌트(1240) 및 역변환 컴포넌트(1242)는 도 5b 및 도 5c에 도시된 역양자화 컴포넌트(572, 582) 및 역변환 컴포넌트(573, 583)의 구현을 포함할 수 있다. 시간적 프로세서(1244)는 시간적 예측 컴포넌트(585) 및 제3 합산 컴포넌트(594)에 의해, 또는 시간적 예측 컴포넌트(585) 및 제4 합산 컴포넌트(595)에 의해 적용된 기능에 대응할 수 있다. 시간적 버퍼(1248)는 시간적 버퍼(550 또는 591) 중 하나에 대응할 수 있다. 도 12b에는, 이 예에서 비트스트림에 대한 헤더의 세트(H) 내에 표시되는 데이터(1232)를 수신하는 시간적 시그널링 컴포넌트(1246)도 존재한다. 이 헤더 H는 도 5c의 헤더(556)에 대응할 수 있다. 유의할 점은, 시간적 서브유닛(1210 및 1235)이, 특정 경우에, 본 출원에서의 다른 예와 상이한 각각의 인코더 및 디코더로 구현될 수 있다는 것이다.
특정 경우에, 예를 들어, 전역 temporal_enabled 비트에 의해 설정된 바와 같이, 시간적 모드가 인에이블될 때, 도 12a의 시간적 프로세서(1214)는 타일 기반 시간적 리프레시 파라미터 temporal_refresh_per_tile 및 시간적 모드 initial_temporal_mode의 추정치를 사용하고, 인코더와 디코더 사이의 통신 효율을 개선시키는 전체 프레임에 대한 시간적 리프레시 비트 및 각각의 코딩 유닛에 대한 시간적 모드에 대한 값을 결정하도록 구성된다.
일 경우에, 시간적 프로세서는 시간적 모드 initial_temporal_mode의 추정에 기초하여 비용을 결정하고, 이러한 비용을 사용하여 디코더에 통신되는 값을 설정할 수 있다.
일 경우에, 시간적 프로세서는, 예를 들어, 코딩 유닛이 시간적 모드의 초기 추정치를 갖는 경우, 프레임에 대한 코딩 유닛의 세트에 걸쳐 상이한 추정된 시간적 모드의 백분율에 기초하여 프레임별 리프레시가 수행되고 시그널링되어야 하는지를 초기에 결정할 수 있다. 예를 들어, 먼저, 추정된 시간적 모드 양자 모두의 모든 코딩 유닛(예를 들어, 2x2 또는 4x4 변환과 관련된 요소들)이 절대 차이의 제로 합을 갖는 경우(예를 들어, 잔차가 없는 경우) 이는 무시될 수 있다. 이어서, 프레임에 대한 리프레시 비트는 비-제로 코딩 유닛의 비율(예를 들어, 백분율들)에 기초하여 추정될 수 있다. 특정 예에서, 시간적 버퍼의 콘텐츠에 대한 리프레시 동작은 제1 시간적 모드와 관련된 것으로 초기에 추정되는 코딩 유닛의 백분율에 기초하여 설정될 수 있다. 예를 들어, temporal_refresh_per_tile이 설정되지 않은 경우에 제1 시간적 모드에 관련된 것으로 추정되는 코딩 유닛의 60% 초과가 설정되거나, 또는 temporal_refresh_per_tile가 설정된 경우에 75%보다 많은 코딩 유닛이 제1 시간적 모드에 관련된 것으로 고려되면, 이어서, 시간적 버퍼(1222)는 전체 프레임 및 디코더에 대한 적절한 시그널링 세트에 대해(예를 들어, 버퍼 내의 값을 제로화함으로써) 리프레시될 수 있다. 이러한 경우에, (예를 들어, temporal_enabled 시그널링을 통해) 시간적 처리가 인에이블되더라도, 시간적 버퍼(1222) 내에서 제로화된 값에 대해 임의의 감산이 수행되고, 따라서 디코더에서의 시간적 예측은 제1 시간적 모드와 유사하게 금지된다. 이는 시간적 예측을 갖는 제2 시간적 모드가 시그널링되더라도 (예를 들어, 라이브 스트림인 경우) 비디오 스트림 내의 변경에 기초하여 제1 시간적 모드로 복귀하는 데 사용될 수 있다. 이는 시청 품질을 개선할 수 있다.
유사하게, 특정 경우에, 제2 시간적 모드가 코딩 유닛에 대해 선택되고 디코더에 시그널링되더라도, 베이스 인코더에 의해 인코딩된 프레임이 (예를 들어, 프레임에 대한 temporal_refresh_bit를 설정함으로써) I 또는 인트라 프레임으로 설정되면, 이때, 시간적 버퍼(1222)는 상기와 같이 리프레시된다(예를 들어, 제1 시간적 모드와 유사한 처리를 실행한다). 이는, 시간적 처리가 인에이블될 때 예를 들어, 인코딩된 바와 같은, 베이스 스트림의 GoP(Group of Pictures) 경계가 존중되는 것을 보장하는 것을 도울 수 있다.
예를 들어, 타일에 대해 시간적 리프레시가 수행되는지는 격리된 정적 에지를 갖는 노이즈 시퀀스가 존재하는지에 따라 달라질 수 있다. 비용 함수의 정확한 형태는 구현에 따라 달라질 수 있다.
도 12a의 시간적 처리 서브유닛(1210)에 의해 수행되는 처리를 참조하면, 전체 프레임 리프레시에 대한 결정에 이어서, 제2 스테이지는 temporal_refresh_per_tile 비트 값에 기초하는 타일 기반 처리를 수반할 수 있다. 이는 프레임에 대한 타일의 주어진 세트에 대해 타일마다 수행될 수 있다. temporal_refresh_per_tile가 사용되고, 그리고, 플래그 temporal_refresh_per_tile가 시간적 프로세서에 의해 수신된 메타데이터에 설정되면, 이때, 다음의 처리가 수행될 수 있다.
제1 서브스테이지에서, 주어진 타일에 대한 시간적 버퍼가 이미 비어 있는지가 검사될 수 있다. 그러한 경우, 타일 내의 모든 시간적 신호는 0이고, 이 타일 내의 코딩 유닛은 제2 시간적 모드에서 인코딩(예를 들어, 인터 인코딩)되는데, 예를 들어, 유닛에 대한 시간적 모드는 제2 모드로서 설정되고, 인코더에서, 이 모드에 관련하여 추가 시간적 처리가 수행되고, (예를 들어, 계수 값을 설정하거나 측대역 시그널링을 통한 것 중 어느 하나에 의해) 시간적 모드가 디코더에 시그널링된다. 이는 시간적 버퍼가 비어 있음에 따라 제1 시간적 모드(예를 들어, 인트라-코딩)에 따라 타일을 효과적으로 코딩할 수 있다. 제2 시간적 모드(예를 들어, 인터 모드)가 시간적 모드 비트에서 0 값을 통해 설정되면, 이러한 접근법은 시간적 버퍼가 비어 있는 경우에 디코더에 통신될 필요가 있는 비트의 수를 감소시킬 수 있다.
주어진 타일에 대해 temporal_refresh_per_tile 플래그가 설정되지 않은 경우, 타일 내의 제1 코딩 유닛은 제2 시간적 모드에 따라 (예를 들어, 인터 유닛으로서) 인코딩될 수 있고, 이 타일에 대한 시간적 시그널링은 설정되지 않는다. 이 경우, 이전에 설명된 바와 같은 비용계산 동작은 타일 내의 다른 코딩 유닛에 대해 수행된다(예를 들어, 제1 또는 제2 시간적 모드는 절대 차이의 합(SAD) 메트릭에 기초하여 결정될 수 있다). 이 경우, 다른 코딩 유닛에 대해, 초기 추정된 시간적 모드 정보는 현재(예를 들어, 라이브) 인코딩 조건에 기초하여 재계산된다. 타일 내의 모든 다른 코딩 유닛은 위의 절차 및 비용계산 단계가 적용될 수 있다. 제2 시간적 모드로서의 타일 내의 제1 코딩 유닛의 인코딩은 디코더에서 초기 시간적 처리를 명령하는 데(예를 들어, 타일에 대한 초기 리프레시를 명령하는 데) 사용될 수 있으며, 다른 코딩 유닛에 대한 시간적 처리는 코딩 유닛에 대해 설정된 temporal_mode 비트의 확인된 값에 기초하여 디코더에서 수행된다.
주어진 타일에 대한 플래그 temporal_refresh_per_tile가 설정되고, 타일에 대한 시간적 버퍼가 비어 있지 않은 경우, 이때, 시간적 프로세서는 타일의 시간적 리프레시를 준비할 수 있으며, 이어서 디코더에서 이를 명령하기 위해 시간적 시그널링이 설정된다. 이는 제1 코딩 유닛에 대한 시간적 모드 값을 1로 설정하고 모든 다른 코딩 유닛에 대한 시간적 모드 값을 0으로 설정함으로써 수행될 수 있다. 제1 코딩 유닛에서의 1과 다른 코딩 유닛에서의 0의 이러한 문제는 리프레시 동작이 타일에 대해 수행되어야 하지만 그를 통해 송신될 정보를 감소시킨다는 것을 디코더에 나타낸다. 이 경우, 시간적 프로세서는 시간적 모드 값을 사실상 무시하고, 모든 코딩 유닛을 제1 시간적 모드에 따라(예를 들어, 시간적 예측 없이 인트라-코딩 유닛로서) 인코딩한다.
따라서, 이들 예들에서, temporal_refresh_per_tile가 인코더 메타데이터의 일부로서 설정될 때, 제1 코딩 유닛은 디코더에게 그 타일의 위치에서 그 대응하는 시간적 버퍼를 소거하도록(즉, 비우도록) 명령하는 데 사용될 수 있고, 인코더 로직은 적절한 시간적 모드로서 시간적 처리를 적용할 수 있다.
위의 접근법은 타일 내의 코딩 유닛에 기초하여 타일별 기반으로 시간적 예측이 수행되게 할 수 있다. 주어진 타일에 대한 구성은 타일 내의 하나의 코딩 유닛에 대해 설정될 수 있다. 이러한 접근법은 레벨 2 스트림 및 레벨 1 스트림 중 하나 이상에 대해, 예를 들어 잔차 세트 중 하나 이상에 대해 적용될 수 있다.
특정 경우에, temporal_tile_intra_signalling 전역 파라미터는 앞서 설명한 타일 리프레시 로직이 디코더에서 사용될 것임을 나타내기 위해 비디오 스트림에 대해 설정될 수 있다.
초기 시간적 모드 플래그
특정 예에서, initial_temporal_mode 데이터는 복수의 프레임, 예를 들어, 현재 프레임 및 다음 프레임에 대해 제공될 수 있다. 이러한 예에서, 다음 프레임, 예를 들어, 프레임 n+1에 대한 initial_temporal_mode 추정치는 또한 비트 레이트를 감소시키는데 중요한 것으로 고려되지 않는 양자화된 값을 제거하는데 사용될 수 있고, 추정된 시간적 모드 정보는 (예를 들어, 양자화 컴포넌트(323, 343) 중 하나에서, 시간적 모드 선택 컴포넌트(363, 370) 중 하나에서 또는 도 3a 또는 도 3b의 RM L-1 제어 컴포넌트(324, 365)에서) 양자화된 값의 제거를 명령하기 위해 하나 이상의 임계값과의 비교를 제어하는데 사용될 수 있다.
특정 경우에, 다음 프레임 내의 동일한 위치에서의 코딩 유닛에 대한 initial_temporal_mode가 제1 시간적 모드(예를 들어, 인트라 모드)에 관련된 것으로 추정되는 경우, 본 코딩 유닛에서 코딩될 잔차가 다음 프레임에서 사라질 것이고, 따라서 주어진 임계값 이하인 잔차가 제거될 수 있다고 가정될 수 있다. 예로서, 테스트 케이스에서, 이 임계값은 2로 설정될 수 있고, 이는 +/-3보다 작은 모든 양자화된 값이 코딩 유닛으로부터 제거될 것임을 의미한다.
도 12c는 잔차(1251)의 프레임에 대해 시간적 시그널링 정보가 제공될 수 있는 방법의 일 예(1250)를 도시한다. 이러한 예에서 "프레임"에 대한 참조는 특정 평면에 대한 프레임을 지칭할 수 있으며, 예를 들어 잔차의 개별 프레임은 YUV 평면 각각에 대해 생성된다. 이와 같이, 용어 "평면" 및 "프레임"은 상호 교환적으로 사용될 수 있다. 도 12c의 좌측은 잔차의 프레임이 어떻게 다수의 타일(1252)로 분할될 수 있는지를 나타낸다. 도 12c의 우측은 시간적 시그널링 정보가 각각의 타일에 할당될 수 있는 방법을 나타낸다. 예를 들어, 원(1253)은 제1 타일(1254)을 나타낸다. 프레임(1251)에서, 타일은 프레임(1251)에 걸쳐 행의 래스터형 패턴을 형성한다. 우측은 제1 타일(1254)을 더 상세히 나타낸다.
도 12c의 우측의 원(1253)은 각각의 타일(1254)이 어떻게 다수의 코딩 유닛을 포함하는지를 나타낸다. 코딩 유닛은 하나 이상의 잔차를 포함할 수 있다. 일 경우에, 코딩 유닛은 변환 동작과 관련된 잔차 블록, 예를 들어, 방향 분해 변환(DD- 아래에서 더 상세히 설명됨)과 관련될 수 있는 본 출원에 설명된 2x2 블록, 또는 방향 분해 제곱(DDS)과 관련될 수 있는 본 출원에 설명된 4x4 블록과 관련될 수 있다. 도 12c에서, 타일 내의 각각의 코딩 유닛은 temporal_type 플래그(1255)("TT"로 도시됨)를 갖고 타일(1254)은 temporal_refresh_per_tile 플래그(1256)("TR"로 도시됨)를 갖는다. 이 정보는 앞서 설명된 바와 같이 시간적 인코딩을 적용하기 위해 인코더에 의해 획득되고 사용될 수 있다.
다른 시간적 시그널링 예
앞서 설명한 바와 같이, 하나의 경우에, 시간적 시그널링은 예를 들어 개선 스트림의 일부로서 "인-스트림"으로 제공될 수 있다. 이는 변환 이후에 특정 계수를 대체함으로써 수행될 수 있는데, 예를 들어, 시간적 시그널링이 변환 계수 내에 임베딩된다. 일 경우에, 수평 계수(예를 들어, 2x2 방향 분해 변환에서의 H 또는 4x4 방향 분해 제곱 변환에서의 HH)가 특정한 코딩 유닛에 대한 시간적 모드를 시그널링하는데 사용될 수 있다. 수평 계수는 재구성된 신호에 대한 영향을 최소화할 수 있으므로 사용될 수 있다. 특정 경우에, 수평 계수의 효과는 디코더에서 역변환에 의해, 예를 들어, 코딩 블록 내의 다른 계수에 의해 반송되는 데이터에 기초하여 재구성될 수 있다.
다른 경우에, 시간적 시그널링은 메타데이터를 사용하여 수행될 수 있다. 메타데이터는, 여기서 사용될 때, 예를 들어, 베이스 또는 개선 스트림의 일부를 형성하지 않는, 한 형태의 측대역 시그널링일 수 있다. 일 경우에, 메타데이터는 디코더에 의해 수신되는 별개의 스트림으로 (예를 들어, 인코더 또는 원격 서버에 의해) 송신된다.
"인-스트림" 시간적 시그널링이 압축에 대한 특정 이점을 제공할 수 있지만, 정보, 예를 들어, 메타데이터의 별개의 청크로서 프레임에 대한 시간적 데이터를 전송하는 것은 상이한 그리고 가능하게는 더 효율적인 엔트로피 코딩이 이 정보에 대해 사용될 수 있게 한다. 또한, 예를 들어, 앞서 설명된 바와 같이, 수신된 개선 스트림 데이터를 필요로 하지 않고 시간적 제어 및 처리가 수행될 수 있게 한다. 이는 시간적 버퍼가 준비될 수 있게 하고, 인-루프 시간적 디코딩을 간단한 추가 프로세스가 되게 한다.
제2 시간적 모드인 경우(예를 들어, 시간적 처리가 인에이블되는 경우), 시간적 시그널링의 3개의 레벨이 존재할 수 있다:
Figure pct00018
제1 레벨에서, 프레임별 시간적 신호가 존재할 수 있다. 이는 프레임별 시간적 리프레시 신호를 포함할 수 있다. 이는 프레임별 리프레시 비트일 수 있다. 이것이 설정되는 경우, 시간적 예측 없이 전체 프레임이 인코딩될 수 있다. 이 레벨의 신호는 프레임을 인코딩하는데 사용될 수 있고 디코더에 시그널링될 수 있다.
Figure pct00019
제2 레벨에서, 타일별 시간적 신호가 존재할 수 있다. 예를 들어, 이는 m x n 타일마다 설정될 수 있고, 여기서 m 및 n은 32일 수 있다. 타일별 시간적 신호는 타일별 시간적 리프레시 신호를 포함할 수 있다. 이는 타일별 리프레시 비트일 수 있다. 시간적 리프레시 신호가 타일에 대해 설정되는 경우, 이때, 그 전체 타일이 시간적 정보 없이 인코딩된다. 이러한 레벨의 시간적 시그널링은 프레임을 인코딩하는 데 사용될 수 있다. 일 경우에, 이는 디코더에 명시적으로 시그널링되지 않을 수 있고; 이 경우, 타일 리프레시 신호는 아래에 설명하는 바와 같이 제3 레벨의 제1 시간적 신호에 의해 표시될 수 있다. 다른 경우에, 타일별 시간적 리프레시 신호가 디코더에 명시적으로 시그널링될 수 있다.
Figure pct00020
제3 레벨에서, 블록 또는 코딩 유닛별 시간적 신호가 존재할 수 있다. 이는 블록에 대한 시간적 모드 신호를 포함할 수 있다. 이는 디코더에 시그널링될 수 있다. 타일별 시간적 리프레시 신호가 1로 설정되고, 전체 타일은 시간적 정보 없이 (예를 들어, 제1 시간적 모드에 따라) 인코딩되고, 이때 이는 1로 설정될 수 있는 제1 블록에 대한 블록 시간적 신호당 1-비트로 디코더에 시그널링될 수 있다. 타일별 시간적 리프레시 신호가 0으로 설정되면, 이때, 타일 내의 제1 변환 블록(예를 들어, 2x2 또는 4x4 블록)은 시간적 예측으로(예를 들어, 시간적 버퍼를 사용하여) 인코딩될 수 있다. 이 경우, 블록 당 시간적 신호는 시간적 예측이 사용됨을 나타내는 (예를 들어, 제2 시간적 모드에 따라 인코딩됨) 0으로 설정될 수 있다. 타일별 시간적 리프레시 신호가 0으로 설정되면, 타일 내의 모든 다른 변환 블록은, 타일이 시간적 정보 없이 인코딩되면 1로 설정되고, 동일한 공간 위치에서의 이전 프레임으로부터의 변환 계수가 변환 계수로부터 먼저 감산되고 그 후 차이가 양자화되어 엔트로피 인코더에 전달되면(즉, 제2 시간적 모드 및 시간적 버퍼가 사용되면) 0으로 설정되는 1-비트 시간적 신호를 가질 수 있다.
도 12d는 4x4 변환 크기(예를 들어, DDS 변환)에 대한 시간적 신호의 표현(1260)을 도시한다. 2x2 변환 크기는 대응하는 방식으로 시그널링될 수 있다. 도 12d는 (예를 들어, 도 12c와 유사한) 복수의 타일(1265, 1266)을 갖는 (예를 들어, 잔차로부터 유도된) 요소(1262)의 프레임(또는 평면)(1261)을 나타낸다. 시간적 신호는 타일(1265, 1266)을 사용하여 조직된다. 4x4 변환 및 32x32 타일에 대해, 타일별 8x8 시간적 신호(즉, 32/4)가 있다. 2x2 변환 및 32x32 타일에 대해, 타일별 16x16 시간적 신호(즉, 32/2)가 있다. 예를 들어, 도 12d에 도시된 바와 같이, 잔차의 프레임에 대한 시간적 신호의 세트는 "시간적 맵"으로 지칭될 수 있다. 시간적 맵은 인코더로부터 디코더로 통신될 수 있다.
도 12d는 타일(1265, 1266) 내의 제1 변환 블록(1268, 1269)에 대한 시간적 신호가 타일이 제1 또는 제2 시간적 모드에서 처리되어야 하는지를 어떻게 나타낼 수 있는지를 도시한다. 시간적 신호는 시간적 모드를 나타내는 비트일 수 있다. 예를 들어, 블록(1268)에 대해 도시된 바와 같이, 비트가 제1 변환 블록에 대해 1로 설정되면, 이는 타일(1265)이 예를 들어, 시간적 버퍼의 사용 없이 제1 시간적 모드에 따라 디코딩되어야 함을 나타낸다. 이 경우, 다른 변환 블록에 대한 비트는 설정되지 않을 수 있다. 이는 디코더에 송신되는 시간적 데이터의 양을 감소시킬 수 있다. 예를 들어, 블록(1269)에 대한 경우와 같이, 제1 변환 블록의 시간적 시그널링 비트가 0으로 설정되면, 이는 도 12d에서 타일(1266)이 제2 시간적 모드에 따라, 예를 들어 시간적 예측 및 시간적 버퍼의 사용으로 디코딩되어야 한다는 것을 나타낸다. 이 경우, 나머지 변환 블록의 시간적 시그널링 비트는 0 또는 1로 설정되어, (제3의) 블록 레벨별로 시간적 제어의 레벨을 제공한다.
시간적 신호의 인코딩
특정 경우에는, 앞서 설명된 바와 같은 제3 레벨에서의 시간적 시그널링은 메타데이터(예를 들어, 측대역 데이터)로서 전송될 경우에 효율적으로 인코딩될 수 있다.
앞서 설명한 경우에, 그리고 예를 들어 도 12d에 도시된 바와 같이, 프레임에 대한 시간적 맵은 런-렝스 인코더로 전송될 수 있다(예를 들어, 여기서 프레임은 인코딩된 잔차의 "픽처"이다). 시간적 맵은 런-렝스 인코딩을 사용하여 효율적으로 인코딩될 수 있다. 런-렝스 인코딩은 제1 및 제2 개선 스트림 중 하나 이상의 "엔트로피 코딩" 컴포넌트(또는 이 인코더 프로세스의 사본)에서 사용된 동일한 런-렝스 인코더를 사용해서 수행될 수 있다. 다른 경우에, 상이한 런-렝스 인코더가 사용될 수 있다.
런-렝스 인코딩이 사용되는 경우, 이때, 시간적 맵이 런-렝스 인코더에 의해 수신될 때, 여러 동작이 발생할 수 있다. 일 경우에, 타일에서의 제1 시간적 신호가 1이면, 나머지 타일에 대한 시간적 시그널링은 스킵된다. 이는 1의 값을 갖는 제1 변환 블록으로부터의 화살표에 의해 도시된다. 이 경우, 타일 내의 제1 시간적 신호가 0이면, 예를 들어, 도 12d의 후속 타일(1266)에 대해 도시된 바와 같이, 타일에 대한 시간적 시그널링 비트는 라인별로(예를 들어, 변환 블록의 다음 행으로 이동하기 전에 변환 블록의 제1 행을 따라, 각각의 단계에서 변환 블록의 다음 열로 이동) 스캐닝될 수 있다. 도 12d에서, 각각의 타일은 8개의 행 및 8개의 열을 가지며, 따라서 0 비트에 대해, 해당 특정 타일에 대한 변환 블록에 대한 모든 시간적 신호가 인코딩될 때까지 제1 행의 처음 8개의 열에 대해 반복이 수행되고, 그 후, 제2 행에 대해 동일한 8개의 열에 대해 반복이 반복되는 등이다.
일 경우에, 시간적 신호에 대한 런-렝스 인코더는 0 및 1의 비트 값을 나타내는 2개의 상태(즉, 제2 시간적 모드 및 제1 시간적 모드)를 가질 수 있다. 이는 1들의 런 및 0들의 런을 인코딩하는 데 사용될 수 있다. 일 경우에, 런-렝스 인코더는 런을 인코딩하기 위해 바이트당 7 비트를 사용하고, 컨텍스트가 변경되는 것 또는 런(1로 설정됨)을 인코딩하기 위해 더 많은 비트가 필요한 것을 인코딩하기 위해 비트 7을 사용하여 바이트별로 런을 인코딩할 수 있다. 관례상, 스트림 내의 제1 심볼은 항상 0 또는 1로서 코딩되며, 따라서 디코더는 상태 기계를 초기화할 수 있다. 사용될 수 있는 상태 기계(1280)가 도 12e에 도시된다. 도 12d에 도시된 데이터는 "시간적 표면", 예를 들어 시간적 시그널링 데이터의 표면으로 지칭될 수 있다.
도 12e의 상태 기계(1280)는 시작 상태(1281) 및 그 후, 2개의 후속 상태(1282 및 1283)를 갖는다. 시간적 시그널링을 위한 런-렝스 디코더는 런-렝스 인코딩된 데이터를 바이트별로 판독할 수 있다(예를 들어, 런-렝스 인코더에 의해 인코딩되는 도 12d에 도시된 데이터). 구성에 의해, 데이터의 제1 바이트의 상태(1281)는 스트림 내의 제1 심볼의 실제 값이 되도록 보장될 수 있다. 디코더는 상태 기계(1280)를 사용하여 데이터의 다음 바이트의 상태를 결정한다. 데이터의 바이트는 도 10h 및 도 10i에서의 바이트(1080, 1085)와 유사한 방식으로 인코딩될 수 있다. 이러한 경우에, 제1 후속 상태는 1-런 상태(1282)이다. 이는 런 플래그 비트(예를 들어, 도 10h의 1081과 유사함)로서 최상위 비트(비트 7)를 그리고 데이터 부분으로서 나머지 비트(비트 6 내지 0 총 7개 -도 10h의 1082와 유사함)를 가질 수 있다. 1-런 상태(1082)는 1 런 카운트의 7 비트를 인코딩한다. 카운트를 인코딩하는데 더 많은 비트가 필요한 경우, 런 비트는 하이이다. 제1 심볼 상태(1281)로부터, 상태 기계(1280)는 런 및 심볼 비트가 양자 모두 0 또는 양자 모두 1이면 1-런 상태(1282)로 이동할 수 있고 런 및 심볼 비트가 상이하면(예를 들어, 0과 1 또는 1과 0) 0-런 상태로 이동할 수 있다. 0의 런 비트 값은 1-런 및 0-런 상태(1282 및 1283) 사이에서 토글할 수 있다. 0-런 상태(1283)는 또한 도 10h 또는 도 10i에 도시된 것과 유사한 바이트 구조를 가질 수 있다. 0-런 상태는 0-런 카운트의 7 비트를 인코딩한다. 카운트를 인코딩하는데 더 많은 비트가 필요한 경우, 런 비트는 하이이다.
일 예에서, 런-렝스 디코더는 크기(PictureWidth/ nTbs, PictureHeight/ nTbs)의 시간적 신호 표면 어레이 TempSigSurface에 0 및 1 값을 기록할 수 있고, 여기서 nTbs는 변환 크기(예를 들어, 본 출원의 예에서 2 또는 4)이다. TempSigSurface에서의 기록 위치(x,y)에서 기록할 값이 1이고 x%(32/nTbs)== 0이고 y%(32/nTbs)== 0이면, y+32/nTbs < PictureWidth / nTbs일 때 다음 기록 위치는 (x, y+32/nTbs)로 이동되고, 그렇지 않으면(x+32/nTbs, 0)으로 이동된다. 시간적 시그널링에 대한 런-렝스 인코딩 및 디코딩은 (예를 들어, 도 10a 내지 도 10i를 참조하여) 잔차 데이터에 대해 설명된 런-렝스 인코딩과 유사한 방식으로 구현될 수 있다.
일 경우에, 런-렝스 인코더에 의해 생성된 정보는 엔트로피 인코더에 전송될 수 있다. 이는 허프만 인코더를 포함할 수 있다. 허프만 인코더는 각각의 상태에 대한 2개의 허프만 코드 및 허프만 인코딩된 값을 메타데이터 스트림에 기록할 수 있다. 따라서, 런-렝스 인코딩 및 엔트로피 인코딩은 (예를 들어, 적합하게 초기화된 스레드로서) 기존의 엔트로피 코딩 컴포넌트 및/또는 이 컴포넌트의 적합하게 적응된 복제물을 사용할 수 있다. 이는 인코딩 및 디코딩을 단순화할 수 있는데, 그 이유는 컴포넌트가 상이한 구성 정보로 재사용될 수 있기 때문이다. 특정 경우에, 허프만 또는 프리픽스 코딩은 (예를 들어, 도 10a 내지 도 10i를 참조하여 설명된 바와 같이) 잔차 데이터 및 시간적 시그널링 데이터 양자 모두에 대해 유사한 방식으로 구현될 수 있다.
시간적 처리 흐름도 예
도 13a 및 도 13b는 일 예에 따른, 시간적 처리 방법을 도시하는 흐름도의 2개의 절반부(1300, 1340)이다. 시간적 처리 방법은 인코더에서 수행될 수 있다. 시간적 처리 방법은 앞서 설명한 특정 프로세스를 구현할 수 있다. 처리 방법은 도 12c에 도시된 잔차의 프레임에 적용될 수 있다.
제1 블록 1302에서, 잔차의 현재 프레임이 I-프레임(즉, 인트라-코딩된 프레임)인지에 대한 검사가 구성되는다. 잔차의 현재 프레임이 I-프레임인 경우, 이때, 블록 1304에서 시간적 버퍼가 리프레시되고, 그리고 블록 1306에서 잔차의 현재 프레임이 프레임간으로서 인코딩되며, 블록 1308에서 픽처당 시그널링이 1로 설정된다. 블록 1302에서, 잔차의 현재 프레임이 I-프레임이 아닌 것으로 결정되는 경우, 이어서, 제1 타일이 선택되고, 블록 1310에서 temporal_refresh_per_tile 플래그가 설정되었는지(예를 들어, 1의 값을 갖는지)를 결정하기 위한 검사가 행해진다. 이는 도 12c의 우측에 도시된 바와 같은 TR 변수(1256)일 수 있다. temporal_refresh_per_tile 플래그가 설정되면, 그 다음, 블록 1320에서 현재 타일 내의 유닛의 temporal_type 플래그가 분석된다. 예를 들어, 제1 타일에 대해, 이는 도 12c의 우측에 도시된 유닛의 temporal_type 플래그(1255)일 수 있다. 다음 블록 1324에서, I 또는 제1 시간적 모드 플래그 값의 백분율(예를 들어, '1'의 값들)이 카운트될 수 있다. 이들이 75%보다 크면, 시간적 버퍼는 블록 1328에서 리프레시되고 타일은 블록 1330에서 인터 코딩되며, 각각의 타일의 시간적 신호는 블록 1332에서 0으로 설정된다. 이들이 75% 미만이면, 방법은 (예를 들어, 노드 A를 통해) 도 13b로 진행한다. temporal_refresh_per_tile가 설정되지 않은 경우(예를 들어, 0의 값을 갖는 경우) 유사한 프로세스가 발생하고, 여기서 블록 1322에서 현재 타일 내의 유닛의 temporal_type 플래그의 60% 초과가 I 또는 제1 시간적 모드로 설정되는지(예를 들어, '1'의 값을 갖는지)를 결정하기 위해 검사가 행해진다. 이러한 경우라면, 이전의 75% 검사에 따라 유사한 프로세스가 발생한다(예를 들어, 블록(1328 내지 1332)이 수행된다). 현재 타일 내의 유닛의 temporal_type 플래그의 60% 미만이 I 또는 제1 시간적 모드로 설정되면, 이때, 방법은 다시 도 13b로(예를 들어, 노드 B를 통해) 진행한다.
도 13b에 도시된 두 번째 절반부(1340)를 참조하면, 도 13b의 좌측의 노드 A에서 시작하여, 유닛의 75% 미만이 I 또는 제1 시간적 모드를 갖는다면, 이때, 블록 1342에서 시간적 버퍼가 비어있는지에 대한 검사가 구성된다. 시간적 버퍼가 비어 있으면, 블록 1344에서 타일 내의 유닛이 인터 코딩되고 블록 1346에서 타일 내의 유닛에 대해 시간적 신호가 0으로 설정된다. 시간적 버퍼가 비어 있지 않다면, 이때, 타일 내의 유닛은 블록 1348에서 인트라 코딩된다. 이 경우, 이어서, 블록 1350에서, 제1 유닛에 대한 시간적 신호는 1로 설정되고 타일 내의 모든 다른 유닛에 대한 시간적 신호는 0으로 설정된다.
이제, 도 13b의 우측을 참조하면, 노드 B에서 시작하여, 60% 미만의 유닛이 I 또는 제1 시간적 모드를 갖는 경우, 이때, 블록 1352에서 현재 타일의 제1 유닛은 인터 코딩되고, 블록 1354에서 제1 유닛에 대한 시간적 신호는 0으로 설정된다. 이어서, 블록 1356에서, 병치된 n+1 유닛(즉, 다음 프레임 내의 병치된 유닛)에 대한 temporal_type가 1로 설정되는지에 대한 검사가 이루어진다. 그러한 경우, 그리고, 블록 1358에서 잔차 값이 2보다 작은 것으로 결정되면, 이때, 블록 1360에서 잔차는, 예를 들어, 잔차 값을 0으로 설정하는 것에 의해 제거된다. 블록 1358에서 잔차 값이 2보다 더 작지 않거나 병치된 유닛이 1로 설정되지 않은 경우, 이때, 블록 1362에서 비용 함수를 기초로 타일의 다음 유닛이 인트라 코딩될 것인지 인터 코딩될 것인지에 대한 결정이 이루어진다. 블록 1364에서, 다음 유닛에 대한 시간적 신호가 비용 함수 분류에 따라 설정될 수 있다. 이는 타일 내의 나머지 유닛에 대해 반복될 수 있다. 예를 들어, temporal_refresh_per_tile에 대한 검사로부터의 방법이 프레임 내의 각각의 타일에 대해 반복될 수 있다.
클라우드 구성
특정 예에서, 인코더(또는 인코딩 프로세스)는 하나 이상의 원격 디바이스와 통신할 수 있다. 인코더는, 도 1, 도 3a 및 도 3b 중 임의의 하나에 도시되거나 예들 중 임의의 다른 예에서 설명된 인코더일 수 있다.
도 14a는 네트워크(1404)를 통해 통신하는 인코더(1402)의 예(1400)를 도시한다. 일 경우에, 인코더(1402)는 네트워크(1404)를 통해 구성 데이터(1406)를 수신하고 및/또는 네트워크(1404)를 통해 구성 데이터(1408)를 송신할 수 있다. 도 14a의 예에서, 인코더는 인코더 파라미터, 시간적 시그널링 및 잔차 마스크 중 하나 이상의 형태로 구성 데이터(1406)를 수신한다. 시간적 시그널링은 본 출원에서 논의된 시간적 시그널링 중 임의의 것을 포함할 수 있다. 인코더 파라미터는 인코더를 제어하는 하나 이상의 파라미터에 대한 값을 포함할 수 있다. 일 경우에, 인코더 파라미터는 베이스 인코더, 레벨1 스트림에 대한 처리 컴포넌트 및 레벨2 스트림에 대한 처리 컴포넌트 중 하나 이상에 대한 파라미터를 포함할 수 있다. 인코더 파라미터는 각각의 스트림에 대한 스트림 해상도, 양자화, 시퀀스 처리, 비트레이트 및 코덱 중 하나 이상을 구성하는 데 사용될 수 있다. 잔차 마스크는 잔차 세트에 적용하기 위해, 예를 들어, 잔차의 2x2 또는 4x4 그룹화(즉, 블록들)에 적용하기 위해, 예를 들어, 0부터 1까지의 가중을 포함할 수 있다. 잔차 마스크는 디코더로의 블록의 전달 및/또는 인코딩에 대한 우선순위를 나타낼 수 있다. 다른 경우에, 잔차 마스크는 블록의 처리를 제어하는 가중을 포함할 수 있으며, 예를 들어, 특정 블록은 시각적으로 개선되거나 가중될 수 있다. 가중은 잔차의 하나 이상의 블록에 적용된 클래스(예를 들어, 라벨 또는 수치 값)에 기초하여 설정될 수 있다.
특정 경우에, 인코더(1402)는 복수의 비트레이트에서 인코딩을 수행하도록 적응될 수 있다. 이 경우, 인코더 파라미터는 복수의 비트레이트 각각에 대해 공급될 수 있다. 특정 경우에, 네트워크(1404)로부터 수신되는 구성 데이터(1406)는 전역 구성 데이터, 프레임별 데이터 및 블록당 데이터 중 하나 이상으로서 제공될 수 있다. 예에서, 잔차 마스크 및 시간적 시그널링은 프레임별로 제공될 수 있다. 예를 들어, 복수의 비트레이트는 통신 채널의 가용 용량, 예를 들어, 측정된 대역폭, 및/또는 원하는 용도, 예를 들어, 10Mbps 다운링크 채널의 2Mbps 사용에 기초하여 설정될 수 있다.
인코더(1402)로부터 통신되는 구성 데이터(1408)는 베이스 코덱 타입, 요구된 비트레이트의 세트 및 시퀀스 정보 중 하나 이상을 포함할 수 있다. 베이스 코덱 타입은 현재 처리 세트를 위해 사용되는 베이스 인코더의 타입을 나타낼 수 있다. 특정 경우에, 상이한 베이스 인코더가 이용가능할 수 있다. 일 경우에, 베이스 인코더는 수신된 베이스 코덱 타입 파라미터에 기초하여 선택될 수 있고; 다른 경우에, 베이스 코덱 타입이 인코더 내에서의 로컬 처리에 기초하여 선택되고 네트워크를 통해 통신될 수 있다. 요구되는 비트레이트의 세트는 베이스 스트림 및 2개의 개선 스트림 중 하나 이상을 인코딩하기 위해 사용될 하나 이상의 비트레이트를 나타낼 수 있다. 상이한 스트림은 상이한 비트레이트를 사용할 수 있다. 개선 스트림은 이용가능한 경우에 추가적인 대역폭을 사용할 수 있고; 예를 들어, 대역폭이 이용가능하지 않다면, 이때, 대역폭은 주어진 비트레이트에서 제1 품질 레벨을 제공하기 위해 인코딩된 베이스 및 레벨 1 스트림에 의해 사용될 수 있고; 인코딩된 레벨 2 스트림은 이후 추가적인 개선을 제공하기 위해 제2 비트레이트를 사용할 수 있다. 이 접근법은 또한 베이스 및 레벨 1 스트림 대신에 베이스 및 레벨 2 스트림에 차등적으로 적용될 수 있다.
일 경우에, 네트워크(1404)를 통해 수신된 인코더 파라미터는 인코더(1402)에 의해 적용될 잔차 모드 및 시간적 모드 중 하나 이상을 나타낼 수 있다. 인코더 파라미터는 각각의 스트림에 대한 모드를 개별적으로 나타내거나 개선 스트림 양자 모두에 대한 공통 모드를 나타낼 수 있다. 잔차 모드 파라미터는 도 1, 3a 및 3b에 도시된 잔차 모드 선택 컴포넌트(150, 350)에 의해 수신될 수 있다. 특정 경우에, 잔차 모드 선택 컴포넌트는 생략될 수 있고, 잔차 모드 파라미터는 인코더의 다른 컴포넌트, 예를 들어, 도 1의 L-1 또는 L-2 인코딩 컴포넌트(122, 142)에 의해 직접 수신될 수 있거나, 도 3a 및 도 3b의 RM L-1 제어 및/또는 RM L-2 선택/순위화 컴포넌트(321, 340)는 인코더(1402)의 클라우드 인터페이스로부터 잔차 모드 파라미터를 수신할 수 있다. 특정 경우에, 각각의 잔차 또는 시간적 모드는 정수 값, 예를 들어, 시간적 처리를 위한 '1' 및/또는 변환 동작에 후속하여 특정 계수만이 유지되는 잔차 모드 2에 의해 표시될 수 있다. 잔차 모드는 어떤 형태의 예측 계수 처리가 적용될 것인지, 예를 들어, 예컨대 더 낮은 해상도의 스트림으로부터의 데이터를 사용하여 특정 계수가 예측될 것인지를 나타낼 수 있다.
일 경우에, 인코더(1402)는 원격 또는 클라우드 구성에 관련된 상이한 구성 설정을 가질 수 있다. "디폴트(default)" 모드일 수 있는 한 모드에서, 인코더는 본 출원에 설명된 바와 같이 인코딩을 수행하기 위해 초기 구성 파라미터를 검색하기 위해 네트워크에 걸쳐 원격 프로그램 호출을 하도록 구성될 수 있다. "사용자 정의(custom)" 모드일 수 있는 다른 모드에서, 인코더(1402)는 특정 사용자 구성, 예를 들어 인코더에 의해 사용되는 도구의 특정 세트 및/또는 그러한 도구에 대한 구성을 나타내는 로컬 파라미터 값을 검색할 수 있다. 일 경우에, 인코더(1402)는 어느 파라미터가 원격 디바이스로부터 검색되어야 하는지 및 어느 파라미터가 로컬 스토리지로부터 검색되어야 하는지를 나타내는 상이한 모드들을 가질 수 있다.
일 경우에, 시간적 시그널링은, 예를 들어, 앞서 설명된 바와 같이, 비디오 데이터의 프레임에 대한 특정 처리를 나타낼 수 있다. 시간적 시그널링은 예를 들어 앞서 설명한 바와 같은 특정 프레임에 대한 시간적 모드를 나타낼 수 있다(예를 들어, 모드 1 또는 0은 인트라 또는 인터 프레임을 나타낸다). 시간적 시그널링은 개선 스트림 중 하나 또는 양자 모두에 대해 제공될 수 있다.
도 14b는 인코더(1402)가 원격 제어 서버(1412)로 및/또는 그로부터 구성 데이터(1406, 1408)를 전송 및/또는 수신할 수 있다는 것을 도시한다. 제어 서버(1412)는 데이터를 수신 또는 전송하기 위한 애플리케이션 프로그래밍 인터페이스를 구현하는 서버 컴퓨팅 디바이스를 포함할 수 있다. 예를 들어, 제어 서버는 RESTful 인터페이스를 구현할 수 있으며, 이에 의해 데이터는 (보안) 하이퍼텍스트 전송 프로토콜(HTTP) 요청 및 응답에 의해 통신될 수 있다. 다른 경우에, 네트워크(1404)를 통한 제어 서버(1412)와 인코더(1402) 사이의 통신을 위해(예를 들어, 전송 또는 애플리케이션 계층에서) 특정 통신 프로토콜을 사용하여 구현되는 사이드 채널이 사용될 수 있다. 네트워크(1404)는 근거리 및 광역 네트워크를 포함하는 하나 이상의 유선 및/또는 무선 네트워크를 포함할 수 있다. 일 경우에, 네트워크는 인터넷을 포함할 수 있다.
도 14c는 (도 14a 및 14b의 인코더(1402)를 포함하는 설명되는 인코더 중 임의의 인코더를 구현할 수 있는) 인코더(1432)가 네트워크를 통해 예를 들어 원격 제어 서버(1412)와 통신하도록 구성되는 구성 인터페이스(1434)를 어떻게 포함할 수 있는지를 나타낸다. 구성 인터페이스(1434)는 하드웨어 인터페이스, 예를 들어, 이더넷 및/또는 무선 어댑터, 및/또는 하나 이상의 통신 네트워크를 통해 통신하기 위해 통신 스택을 제공하는 소프트웨어를 포함할 수 있다. 도 14c에서, 인코더(1432)에 의해 사용 및/또는 저장되는 구성 파라미터 및 설정(1436)은 구성 인터페이스(1434)를 사용하여 네트워크(1404)를 통해 통신된다. 예를 들어, 하나 이상의 메모리 또는 레지스터에 저장될 수 있는 인코더 구성 파라미터(1438)가 구성 인터페이스로부터 수신된다. 일 경우에, 인코더 구성 파라미터(1438)는, 예를 들어, 도면에 도시된 바와 같이, 인코더(1432) 내의 다운샘플링, 베이스 인코더 및 베이스 디코더 컴포넌트 중 하나 이상을 제어할 수 있다. 구성 인터페이스(1434)는 또한 데이터를 L-1 스트림 제어 컴포넌트(1440) 및 L-2 스트림 제어 컴포넌트(1442)로 전달한다. 이러한 컴포넌트는 각각의 개선 스트림에 대한 도구 사용을 구성할 수 있다. 일 경우에, L-1 및 L-2 스트림 제어 컴포넌트(1440, 1442)는 잔차 모드 선택, 변환, 양자화, 잔차 모드 제어, 엔트로피 인코딩 및 시간적 처리 컴포넌트(예를 들어, 도면에 도시되고 본 출원에 설명됨) 중 하나 이상을 제어한다.
본 출원에 설명된 바와 같은 클라우드 구성을 사용하는 것은 구현 이점을 제공할 수 있다. 예를 들어, 인코더는, 예를 들어, 네트워크 제어 시스템 및 측정에 기초하여 원격으로 제어될 수 있다. 인코더는 또한, 예를 들어, 하나 이상의 원격 데이터 소스 또는 제어 서버에 의해 공급되는 측정 또는 전처리에 기초하여, 추가 데이터로, 개선 처리를 제공하는 펌웨어를 업그레이드하는 것에 의해 새로운 기능을 제공하도록 업그레이드될 수 있다. 이는 레거시 하드웨어 디바이스를 업그레이드하고 제어하는 유연한 방식을 제공한다.
잔차 모드 선택
예를 들어, 도 3a 및 3b와 관련하여 앞서 설명한 바와 같이, 특정 예는 상이한 잔차 처리 모드를 구현할 수 있다. 예를 들어, 도 3a에서, 잔차 모드 순위화 컴포넌트(350)는 레벨 1 및 레벨 2 개선 스트림 각각에서 잔차 모드 선택 컴포넌트(321, 340)를 제어하고; 도 3b에서, 잔차 모드 선택 컴포넌트(350)는 레벨 1 및 레벨 2 개선 스트림 각각에서 잔차 모드 순위화 컴포넌트(321, 340)를 제어한다. 일반적으로, 인코더는 잔차 모드를 선택 및 구현하는 잔차 모드 제어 컴포넌트 및 하나 이상의 개선 스트림에 대해 선택된 잔차 모드에 대한 처리를 구현하는 잔차 모드 구현 컴포넌트를 포함할 수 있다.
일 예에서, 잔차가 계산되고나면, 잔차는 어떻게 잔차가 인코딩되고 송신되는지를 결정하기 위해 처리될 수 있다. 앞서 설명한 바와 같이, 여기서 잔차는 이미지 신호의 원래 형태를 이미지 신호의 재구성된 형태와 비교함으로써 계산된다. 예를 들어, 하나의 경우에, 레벨 2 개선 스트림에 대한 잔차는 이미지 신호의 원래 형태(예를 들어, 도면에 표시된 바와 같은 입력 비디오(120, 302))로부터 업샘플링의 출력(예를 들어, 도 1, 3a 및 3b에서)을 감산함으로써 결정된다. 업샘플링에 대한 입력은 모사된 디코딩 이후의 신호의 재구성이라고 할 수 있다. 다른 경우에, 레벨 1 개선 스트림에 대한 잔차는 베이스 디코더에 의해 출력된 이미지 스트림을 원래 이미지 신호의 다운샘플링된 형태(예를 들어, 도 1, 3a 및 3b의 다운샘플링 컴포넌트(104, 304)의 출력)로부터 감산함으로써 결정된다.
예를 들어, 선택된 잔차 모드에서 잔차를 처리하기 위해, 잔차가 카테고리화될 수 있다. 예를 들어, 잔차는 잔차 모드를 선택하기 위해 카테고리화될 수 있다. 잔차의 카테고리화 프로세스는 예를 들어, 입력 이미지의 특정 공간적 및/또는 시간적 특성에 기초하여 수행될 수 있다.
일 예에서, 입력 이미지는 각각의 요소(예를 들어, 픽셀 또는 다수의 픽셀을 포함하는 영역) 및/또는 요소의 그룹에 대해 그 요소 및/또는 요소의 그룹이 특정 공간 및/또는 시간적 특성을 갖는지를 결정하도록 처리된다. 예를 들어, 요소를 각각의 공간 및/또는 시간적 특성에 대해 어떻게 분류할지를 결정하기 위해 요소가 하나 이상의 임계값에 대해 측정된다. 공간 특성은 특정 요소 또는 요소의 그룹 사이의 공간 활동의 레벨(예를 들어, 이웃 요소 사이에 얼마나 많은 변화가 존재하는지), 또는 특정 요소 사이의 및/또는 요소의 그룹 사이의 콘트라스트의 레벨(예를 들어, 요소의 그룹이 요소의 하나 이상의 다른 그룹과 얼마나 상이한지)을 포함할 수 있다. 공간 특성은 공간 방향의 세트(예를 들어, 2D 평면 이미지에 대한 수평 및/또는 수직 방향들)에서의 변화의 척도일 수 있다. 시간적 특성은 특정 요소 및/또는 요소의 그룹에 대한 시간 활동(예를 들어, 요소 및/또는 요소의 그룹이 하나 이상의 이전 프레임 상의 병치된 요소 및/또는 요소의 그룹 사이에서 얼마나 상이한지)을 포함할 수 있다. 시간적 특성은 (예를 들어, 시계열을 따른) 시간적 방향의 변화의 척도일 수 있다. 특성은 요소 및/또는 요소 그룹마다 결정될 수 있고; 이는 픽셀별 및/또는 2x2 또는 4x4 잔차 블록별일 수 있다.
카테고리화는 요소 및/또는 요소의 그룹의 공간적 및/또는 시간적 특성에 기초하여 각각의 요소 및/또는 요소의 그룹에 각각의 가중치를 관련시킬 수 있다. 가중치는 0과 1 사이의 정규화된 값일 수 있다.
하나의 잔차 모드에서, 주어진 잔차 세트를 인코딩하고 송신할지 여부에 관한 결정이 이루어질 수 있다. 예를 들어, 하나의 잔차 모드에서, 특정 잔차(및/또는 본 출원에 설명된 2x2 또는 4x4 블록과 같은 잔차 블록들)는 도 3a 및 3b에 도시된 바와 같이 RM L-x 순위화 컴포넌트 및/또는 RM L-x 선택 컴포넌트에 의해 레벨 1 및/또는 레벨 2 개선 처리 파이프라인을 따라 선택적으로 포워딩될 수 있다. 달리 말하면, 상이한 잔차 모드는 도 1의 레벨 1 및/또는 레벨 2 인코딩 컴포넌트(122, 142)에서 상이한 잔차 처리를 가질 수 있다. 예를 들어, 하나의 잔차 모드에서, 특정 잔차는 추가의 레벨 1 및/또는 레벨 2 인코딩을 위하여 포워딩되지 않을 수 있고, 예를 들어, 변환, 양자화, 및 엔트로피 인코딩되지 않을 수 있다. 일 경우에, 특정 잔차는 잔차 값을 0으로 설정함으로써 및/또는 잔차 또는 잔차를 포함하는 그룹에 관한 특정 제어 플래그를 설정함으로써 포워딩되지 않을 수 있다.
하나의 잔차 모드에서, 0 또는 1의 이진 가중치가 예를 들어, 앞서 설명한 컴포넌트에 의해 잔차에 적용될 수 있다. 이는 선택적 잔차 처리가 "온"인 모드에 대응할 수 있다. 이 모드에서, 0의 가중치는 특정 잔차를 "무시"하는 것, 예를 들어, 개선 파이프라인에서의 추가 처리를 위해 이를 포워딩하지 않는 것에 대응할 수 있다. 다른 잔차 모드에서, 가중이 없을 수 있고(또는 가중치는 모든 잔차에 대해 1로 설정될 수 있고); 이는 선택적 잔차 처리가 "오프"인 모드에 대응할 수 있다. 또 다른 잔차 모드에서, 0 내지 1의 정규화된 가중치가 잔차 또는 잔차의 그룹에 적용될 수 있다. 이는 디코더에서 비디오 신호를 재구성하기 위한 중요도 또는 "유용성" 가중치를 나타낼 수 있으며, 예를 들어 여기서 1은 잔차가 정상 사용을 갖는다는 것을 나타내고, 1 아래의 값은 잔차의 중요도를 감소시킨다. 다른 경우에, 정규화된 가중치는 또 다른 범위에 있을 수 있고, 예를 들어, 0 내지 2의 범위는 1보다 큰 가중치를 갖는 특정 잔차에 현저성을 제공할 수 있다.
앞서 설명한 잔차 모드에서, 잔차 및/또는 잔차 그룹은 할당된 가중치로 승산될 수 있고, 여기서 가중치는 한 세트의 대응하는 요소 및/또는 한 그룹의 요소에 적용된 카테고리화 프로세스에 후속하여 할당될 수 있다. 예를 들어, 하나의 경우에, 각각의 요소 또는 요소의 그룹은 미리 정의된 정수의 세트 또는 범위로부터 선택된 정수 값에 의해 표현되는 클래스를 할당받을 수 있다(예를 들어, 0부터 9까지의 10개의 클래스). 각각의 클래스는 이어서 대응하는 가중치 값(예를 들어, 클래스 0에 대해 0, 클래스 1에 대해 0.1, 또는 일부 다른 비선형 맵핑)을 가질 수 있다. 클래스와 가중치 사이의 관계는 분석 및/또는 실험에 의해, 예를 들어, 디코더에서 및/또는 인코더 내에서 픽처 품질 측정에 기초하여 결정될 수 있다. 그 다음, 가중치는 대응하는 잔차 및/또는 잔차 그룹, 예를 들어, 요소 및/또는 요소 그룹에 대응하는 잔차 및/또는 잔차 그룹을 승산하는데 사용될 수 있다. 일 경우에, 이 대응은 공간적일 수 있는데, 예를 들어, 잔차는 특정한 입력 요소 값에 기초하여 계산되고, 분류는 잔차에 대한 가중치를 결정하기 위해 특정한 입력 요소 값에 적용된다. 즉, 카테고리화는 입력 이미지의(여기서, 입력 이미지는 비디오 신호의 프레임일 수 있음) 요소 및/또는 요소의 그룹에 대해 수행될 수 있지만, 그러나, 이때, 이 카테고리화로부터 결정된 가중치는 요소 및/또는 요소의 그룹보다는 병치된 잔차 및/또는 잔차의 그룹을 가중하는 데 사용된다. 이러한 방식으로, 특성화가 인코딩 프로세스와 별개의 프로세스로서 수행될 수 있고, 따라서, 잔차 프로세스의 인코딩과 병렬로 계산될 수 있다.
잔차 모드 처리의 예
도 15는 잔차 모드의 일 예를 나타낸다. 이 예는 레벨 2 스트림에 관련한 것이지만, 레벨 1 스트림에 대해 유사한 컴포넌트 세트가 제공될 수 있다. 분류 컴포넌트(1502)를 통해 한 세트의 입력 이미지 요소 iij(1501)가 분류되어 한 세트의 클래스 표시(1503)(예를 들어, 0 내지 4의 범위)를 생성한다. 클래스 표시(1503)는 이어서 클래스 표시(1503)와 관련된 가중치 세트(1505)를 검색하기 위해 가중치 맵핑 컴포넌트(1504)에 의해 사용된다. 동시에, 재구성된 업샘플링된 요소의 세트 uij(1506)이 입력 이미지 요소 iij(1501)로부터 감산되어, 초기 잔차 세트 rij(1508)가 생성된다. 이어서, 이러한 잔차(1508) 및 가중치(1505)의 세트는 가중치 승산 컴포넌트(1509)에 입력되며, 이 가중치 승산 컴포넌트는 잔차(1508)와 가중치(1505)의 세트를 승산하여, 수정된 잔차 r'ij(1510)의 세트를 출력한다. 도 15는 잔차 모드 선택이 잔차 값(1512)의 서브세트를 필터링하는 것(예를 들어, 그것에 0 가중치를 승산함으로써) 및 잔차 값(1511)의 다른 서브세트를 통과시키거나 수정하는 것(예를 들어, 비-제로 가중치가 있는 경우)을 수반할 수 있음을 도시한다.
특정 경우에, 특성화는 인코더로부터 원격 위치에서 수행되어 인코더로 통신될 수 있다. 예를 들어, 사전 기록된 영화 또는 텔레비전 쇼를 한 번 처리하여, 잔차 세트 또는 잔차의 그룹에 대한 가중치의 세트를 결정할 수 있다. 이러한 가중치는 네트워크를 통해 인코더로 통신될 수 있는데, 예를 들어 이는 도 14a 내지 14c와 관련하여 설명된 잔차 마스크를 포함할 수 있다.
일 경우에, 잔차를 가중하는 것 대신에, 또는 가중하는 것뿐만 아니라, 잔차는 카테고리화 프로세스로부터 유도된 하나 이상의 임계값과 비교될 수 있다. 예를 들어, 카테고리화 프로세스는 가중치 및 임계값의 관련된 세트, 또는 단지 임계값의 관련된 세트를 갖는 클래스의 세트를 결정할 수 있다. 이 경우, 잔차는 결정된 임계값과 비교되고, 특정 하나 이상의 임계값 아래에 속하는 잔차는 폐기되고 인코딩되지 않는다. 예를 들어, 도 15로부터의 수정된 잔차(1510)에 추가의 임계값 처리가 적용될 수 있고 그리고/또는 가중치 맵핑 및 가중치 승산 컴포넌트가 임계값 맵핑 및 임계값 적용 스테이지로 대체될 수 있다. 일반적으로, 양자 모두의 경우에, 잔차는 카테고리화 프로세스에 기초한 추가 처리를 위해 수정되고, 여기서, 카테고리화 프로세스는 대응하는 이미지 요소에 적용될 수 있다.
잔차 모드 처리의 앞서 설명한 방법은 인코더에서 적용될 수 있지만, 디코더에서 적용되지 않을 수 있다. 따라서, 이는 통신을 개선시키기 위해 인코더에서의 증가된 자원를 고려할 수 있는 비대칭 인코딩의 형태를 나타낸다. 예를 들어, 잔차는 인코더와 디코더 사이에서 송신되는 데이터의 크기를 감소시키기 위해 가중될 수 있으며, 이는 (예를 들어, 폐기되는 잔차가 디코더에서 감소된 검출 가능성을 갖는 경우에) 제약된 비트 레이트에 대한 품질의 증가를 가능하게 한다.
예측 평균
본 출원에 설명되는 바와 같이, 잔차 요소는 아래에 표시되는 바와 같이 입력 프레임 요소와 대응하는/병치된 업샘플링된 요소 사이의 차이로서 정의될 수 있다:
Figure pct00021
인코더에서, 잔차는 양자화되기 전에 변환되고, 엔트로피 코딩되어 디코더에 송신된다. 특히, 인코더는 2개의 가능한 변환, 즉, 방향 분해(DD; Directional Decomposition)라 지칭되는 제1 변환, 방향 분해 제곱(DDS; Directional Decomposition Squared)이라 지칭되는 다른 변환을 사용한다. 이러한 변환에 대한 더 많은 세부사항은 또한 특허 출원 PCT/EP2013/059847 및 PCT/GB2017/052632에 포함되고, 이는 참조에 의해 본 출원에 포함된다.
도 16a는 인코더에서 DD 변환을 수반하는 프로세스(1600)를 도시한다. DD의 경우에, 변환이 입력 데이터(1610)의 프레임 또는 평면의 각각의 2x2 블록에 적용된다. 도 16a를 참조하면, 입력 값(1612)의 4개의 2x2 블록(1611)이 제시된다. 이는 (예를 들어, 도 1, 도 3a 및 도 3b의 다운샘플링 컴포넌트(104, 304)와 유사한) 다운샘플링 프로세스(1615)에 의해 다운샘플링되어, 요소 값(1621)을 갖는 다운샘플링된 프레임 또는 평면(1620)을 생성한다. 이어서, 다운샘플링된 프레임(1620)은 (예를 들어, 도 1, 도 3a 및 도 3b의 컴포넌트(134, 334)를 통해 도시된 바와 같이) 업샘플링 프로세스(1625)에 의해 업샘플링된다. 이는 또한 업샘플링된 값(1632)의 블록(1631)을 갖는 업샘플링된 프레임(1630)을 야기하며, 도 16a에서, 하나의 다운샘플링된 값(1622)이 업샘플링되어 4개의 업샘플링된 값(1632)(즉, 하나의 업샘플링된 블록(1631))을 생성한다. 도 16a에서, 업샘플링된 프레임(1630)을 입력 프레임(1610)으로부터 감산하여(1635) 잔차(1640)의 프레임을 생성하고, 이는 잔차 값(1642)의 블록(1641)을 포함한다.
변환에서, 잔차(1641)의 각각의 블록에 대해 다음과 같은 계수가 계산된다(아래의 표현식은, 간결성을 위해, 좌측 최상위 2x2 블록을 참조하지만, 다른 블록에 대해서는 유사한 표현식이 쉽게 유도될 수 있다):
Figure pct00022
Figure pct00023
Figure pct00024
Figure pct00025
이제부터 평균 성분(A0)을 살펴보면, 이는 다음과 같이 분해될 수 있다:
Figure pct00026
도 16a에 도시된 바와 같은 업샘플링된 값(1632)을 갖는 각각의 업샘플링된 2x2 블록(1631)은 대응하는 저해상도 요소(1622)로부터 시작하는 업샘플링 동작으로부터 획득된다는 점에 유의한다. 이 저해상도 요소(1622)는 "제어 요소"라고 지칭될 수 있다. 좌측 최상위 블록의 경우에, 그 요소는 d00일 것이다.
따라서, d00이 추가 및 삭제되어 다음을 얻을 수 있다:
Figure pct00027
이는 그 후 다음과 같이 그룹화될 수 있다:
Figure pct00028
반면, δA0(델타 평균)은 1650으로서 도시되어 있으며, 이는 (예를 들어, 블록(1611)의) 입력 이미지 내의 요소의 평균과 제어 요소(1622) 사이의 차이(1645)에 대응한다. 예측 평균 PA0는 업샘플링된 요소의 평균과 제어 요소 사이의 차이에 대응한다. 이는 디코더에서 계산될 수 있다.
도 16b는 디코더에서 대응하는 프로세스(1655)를 설명한다. 인코더(1656)로부터의 데이터는 δA 값(1658)을 전달한다. 병렬적으로, 레벨 1 해상도 프레임(1660)이 재구성되고 업샘플링(1665)되어 업샘플링된 프레임(1666)을 형성한다. 도 16b는 4개의 저해상도 요소(1662)의 블록(1661)을 도시한다. 이러한 요소는 재구성된 비디오 신호에 대응한다. 업샘플링된 프레임(1666)은 4개의 업샘플링된 요소(1669)의 4개의 블록(1668)을 갖는 것으로 도시되어 있다. 디코더는 업샘플링된 요소(1668)와 저해상도 프레임(예를 들어, AVC, HEVC 등과 같은 별개의 코덱으로 인코딩된 베이스를 디코딩하여 얻어진 프레임)을 디코딩하여 얻어진 제어 요소(1662)를 사용하여 PA를 계산할 수 있다. 도 16b에서, 예측 평균(1671)은 업샘플링된 요소(1668)의 블록과 제어 요소(1662)의 평균의 차이(1670)로서 결정된다. 이어서, 원래의 평균(1675)은 δA 값(1658)과 예측 평균 값 PA(1671)를 합산(1672)함으로써 재구성될 수 있다. 이는 또한 이 요소가 디코더에서 예측될 수 있는 평균의 성분이라는 점에서 "예측 평균"이라고 지칭되는 이유이다. 이어서, 디코더는 인코더에 의해 제공되는 δA만을 필요로 할 것인데, 이는 입력 이미지 프레임에 대한 정보가 인코더에서 알려져 있기 때문이다.
따라서, DD 변환 타입을 사용할 때, 디코더는 하나 이상의 업샘플링된 요소 및 저해상도 이미지("제어 요소")로부터의 대응하는 요소를 사용하여 예측 평균을 계산할 수 있고, 상기 대응하는 요소는 상기 하나 이상의 업샘플링된 요소를 생성하는데 사용된다. 이어서, 인코더로부터 수신된 값을 디코딩할 수 있으며, 상기 값은 참조(예를 들어, 입력) 이미지 내의 하나 이상의 요소와 제어되는 요소 사이의 차이를 나타낸다. 그 후, 상기 예측 평균 및 디코딩된 값을 조합하여 변환된 계수 중 하나, 즉 평균 계수를 생성할 수 있다.
DD 변환 타입을 사용할 때, 인코더는 디코더로 송신될 값을 계산할 수 있고, 상기 값은 참조(예를 들어, 입력) 이미지에서의 하나 이상의 요소와 저해상도 이미지로부터의 대응하는 요소("제어 요소") 사이의 차이를 나타낸다. 인코더는 이미지를 재구성하기 위해 인코더가 수행할 필요가 있는 동작을 복제함으로써 상기 제어 요소를 생성할 수 있다. 특히, 제어 요소는 상기 하나 이상의 업샘플링된 요소를 생성하기 위해 디코더가 사용할 요소에 대응한다. 이어서, 인코더는 H, V 및 D 계수를 디코더로 더 송신할 수 있다.
DDS 변환의 경우에, 동작은 약간 수정된다. DDS는 잔차의 4x4 블록에 걸쳐 동작하고 16개의 변환된 계수를 생성한다. DDS는 적어도 2가지 방식으로 구현될 수 있다. 직접, 4x4 블록 내의 16개의 잔차를 합산하고 감산하는 방식- 아래 참조:
Figure pct00029
다른 대안으로서, 보다 효율적인 방식으로, 이는 먼저 각각의 2x2 잔차 블록에 대해 DD 변환을 수행하여 2x2 DD 계수 블록을 생성하고 이어서 제2 DD 변환을 적용함으로써 "2-단계" 변환으로서 구현될 수 있다.
제1 단계:
Figure pct00030
Figure pct00031
Figure pct00032
Figure pct00033
제2 단계:
Figure pct00034
알 수 있는 바와 같이, DDS의 경우에, 각각의 방향에 대해 하나씩, 4개의 "평균" 계수가 있다: (1) AA, 또는 평균 계수의 평균; (2) AH, 또는 수평 계수의 평균; (3) AV, 또는 수직 계수의 평균; 및 (4) AD, 또는 대각선 계수의 평균.
DD 변환과 유사하게, 이러한 평균 계수 각각은 다음과 같이 델타 평균(인코더에 의해 계산되고 디코더에서 디코딩됨) 및 예측 평균(디코더에 의해 계산됨)으로 분해될 수 있다:
Figure pct00035
Figure pct00036
Figure pct00037
Figure pct00038
따라서, 인코더에 의해 계산될 4개의 델타 평균, 즉, δAA, δAH, δAV 및 δAD가 존재한다.
위에서 정의된 2-단계 접근법을 사용하여, 4개의 델타 평균이 다음과 같이 계산될 수 있다:
Figure pct00039
Figure pct00040
Figure pct00041
Figure pct00042
한편, 다양한 예측 평균은 다음과 같이 계산될 수 있다:
Figure pct00043
Figure pct00044
Figure pct00045
Figure pct00046
여기서,
Figure pct00047
Figure pct00048
Figure pct00049
Figure pct00050
Figure pct00051
예측 평균을 계산하는 대안적인 방식은 각각의 2x2 블록에 대한 예측 평균을 먼저 계산한 후에 이에 대해 방향 분해를 수행하는 것이다.
즉, 제1 단계는 다음을 계산하는 것이다:
Figure pct00052
그리고, 그 다음,
Figure pct00053
Figure pct00054
Figure pct00055
Figure pct00056
따라서, DDS 변환을 사용할 때, 인코더는 다양한 델타 평균들 δAA, δAH, δAV 및 δAD를 생성하고, 이를 다른 DDS 계수 HA, HH, HV, HD, VA, VH, VV, VD, DA, DH, DV, DD와 함께 디코더에 전송할 수 있다.
디코더에서, 디코더는 위에서 예시한 바와 같이 PAA, PAH, PAV 및 PAD를 계산할 수 있다. 또한, 본 예에서, 이는 델타 평균을 수신하고, 그것을 디코딩한 다음, 그것을 예측 평균으로 합산하여 평균 AA, AH, AV 및 AD를 획득할 수 있다. 그 다음, 평균은 다른 DDS 계수와 조합되고, 역 DDS가 적용되고, 그 다음, 역변환으로부터 잔차가 획득된다.
대안적으로, 변환 및 역변환이 선형 연산이므로, 델타 평균 δAA, δAH, δAV 및 δAD 및 다른 DDS 계수 HA, HH, HV, HD, VA, VH, VV, VD, DA, DH, DV, DD에 대해 역 DDS를 수행하여 잔차를 획득할 수 있으며, PA ij 를 대응하는 2x2 블록 내의 잔차에 변환 후에 추가하여 최종 잔차 값을 획득할 수 있다.
도 16c 및 도 16d는, 각각, 도 16a 및 도 16b에 대응하지만 변환이 1차원인, 예를 들어, 다운샘플링 및 업샘플링이 2개의 방향이 아니라 한 방향으로 수행되는, 인코딩 프로세스(1680) 및 디코딩 프로세스(1690)를 도시한다. 이는, 예를 들어, 인터레이스된 신호에 사용될 수 있는 수평 전용 스케일링 모드의 경우일 수 있다. 이는 블록(1683) 내의 2개의 요소(1682)가 다운샘플링되어 요소(1684)를 생성하는 표시된 요소(1681)에 의해 알 수 있다. 그 다음, 입력 데이터 요소(1681) 및 다운샘플링된("제어") 요소가 델타 평균(δA)(1685)을 생성하는데 사용된다. 따라서, 디코딩 프로세스(1690)에서, 업샘플링된 요소의 2 요소 블록(1691)을 다운샘플링된 요소(1662)와 비교하여 예측 평균(1671)을 결정한다.
DDS 내의 시그널링
특정 구현에서, 비트 또는 바이트스트림 시그널링은 DDS 변환으로부터의 계수 중 하나 이상이 (예를 들어, 변환된 계수 값을 반송하는 것과는 대조적으로) 내부 시그널링을 위해 사용되는지를 나타내기 위해 사용될 수 있다.
예를 들어, 하나의 경우에, 시그널링 비트는 내부 시그널링이 사용되지 않음을 나타내기 위해 0의 값으로 설정될 수 있고(예를 들어, 미리 정의된 계수 값이 코딩 유닛에 대한 변환된 잔차 값을 반송함), 내부 시그널링이 사용됨을 나타내기 위해 1의 값으로 설정될 수 있다(예를 들어, 임의의 기존의 변환된 잔차 값이 디코더에 정보를 반송하는 시그널링 값으로 대체됨). 후자의 경우에, 계수의 값은 변환된 잔차를 역변환할 때 무시될 수 있는데, 예를 들어, 그 안에서의 시그널링을 위해 사용되는 값에 관계없이 0인 것으로 가정될 수 있다.
일 경우에, DDS 변환의 HH 계수는 시그널링 비트가 1로 설정되는 경우에 시그널링을 반송하도록 적응될 수 있다. 이 계수는 코딩 블록에 대한 디코딩된 잔차 값에 최소로 영향을 미치도록 결정된 그 값으로서 선택될 수 있다.
내부 계수 시그널링에서 반송되는 값은 다양한 목적을 위해 사용될 수 있다. 디코더가 (예를 들어, 디코더의 재량으로) 정보를 수신하고 그에 따라 작용하도록 구성되어 있는 경우, 정보가 디코더에서 사용될 수 있다.
일 경우에, 계수내 시그널링은 더 넓은 코딩 유닛(예를 들어, 시그널링 계수와 관련된 코딩 유닛)에 관해 수행할 후처리와 관련된 정보를 나타낼 수 있다. 일 경우에, 계수내 시그널링은 디코딩된 코딩 유닛이 레벨 1 및 레벨 2 개선 동작 중 하나 이상에서 적용될 때 존재할 수 있는 잠재적 아티팩트 또는 손상과 관련되는 정보를 나타낼 수 있다. 예를 들어, 계수내 시그널링은 코딩 유닛과 관련된 디코딩된 잔차 데이터(및/또는 재구성된 비디오 프레임의 일부)에 밴딩, 블록 현상 등이 적용될 수 있다는 것을 나타낼 수 있다. 하나 이상의 후처리 알고리즘은 그 후 하나 이상의 후처리 동작을 선택적으로 적용하여 손상을 해결하고 재구성된 비디오를 개선하기 위해 계수 데이터 내에 임베딩된 이 정보를 사용할 수 있다.
예측된 잔차들
앞서 설명된 바와 같이, 특정 예는 변환 스테이지에 의해 생성된 계수를 예측하도록 작용하는 접근법을 사용할 수 있다. 일 경우에, 평균 성분(A)은 "예측 평균" 계산을 사용하여 예측될 수 있다. 예측 평균 계산은 델타 평균이 전체 평균 값 대신에 송신될 수 있게 한다. 이는 인코딩될 평균 성분의 엔트로피를 감소시키기 때문에(예를 들어, 종종 이 델타 평균이 작거나 0일 수 있음) 상당한 양의 데이터를 절감할 수 있다(예를 들어, 요구되는 비트레이트를 감소시킨다).
예를 들어, 레벨 2 개선 스트림을 디코딩할 때, 레벨 1 해상도에서의 하나의 화소가 업샘플링 동작에 입력될 수 있고, 여기서, 이는 업샘플링된 또는 레벨 2 해상도로 4개의 화소를 생성하는데 사용된다. 재구성의 일부로서, 4개의 화소의 업샘플링된 코딩 유닛에 대한 예측 평균의 값이 4개의 화소에 대한 업샘플링된 값에 추가될 수 있다.
일 경우에, 상기 예측 평균 계산에 대한 변형이 적용될 수 있다.
이 변형에서, 업샘플링 후의 예측 평균 값의 추가가 수정될 수 있다. 추가는 예측 평균 값의 상이한 비율을 업샘플링된 코딩 블록 내의 상이한 위치에 추가하도록 작용하는 선형 또는 비선형 함수에 의해 수정될 수 있다.
예를 들어, 하나의 경우에, 상이한 화소에 대해 상이하게 예측 평균 값을 가중하기 위해 하나 이상의 이웃 코딩 블록으로부터의 정보가 사용될 수 있다. 이 경우, 더 낮은 값의 화소에 이웃하는 화소는 예측 평균 값을 더 적게 수신할 수 있고, 더 높은 값의 화소에 이웃하는 화소는 예측 평균 값을 더 많이 수신할 수 있다. 따라서, 예측 평균의 가중은 화소에 대해 그의 이웃 화소의 상대 값에 기초하여 설정될 수 있다.
이는 코딩 블록 내에 에지가 존재할 때 개선을 제공할 수 있다. 업샘플링된 코딩 블록에 에지가 존재하는 경우, 에지 위치에 따라 예측 평균 값을 가중하는 것이 유리할 수 있다. 예를 들어, 에지가 수직인 경우, 코딩 유닛의 하나의 열 내의 화소는 코딩 유닛의 다른 열보다 높거나 낮은 값과 조합될 수 있고, 여기서, 정확한 가중은 에지의 구배에 의존한다. 상이한 각도에서의 에지는 예측 평균 값의 더 복잡한 가중치를 가질 수 있다. 예측 평균 추가에 대한 이러한 형태의 보정은 "틸트(tilt)"의 형태를 추가하는 것으로 지칭될 수 있다. 이는 예측된 잔차 계산의 일부를 형성할 수 있다. 이러한 경우에서, 각각의 화소는 공통 단일 예측 평균 값과 대조적으로, 조합을 위한 상이한 값을 수신할 수 있다.
수정된 변환
특정 예에서, 변환 프로세스(예를 들어, 도 3a 및 도 3b의 변환 컴포넌트(322 또는 341)에 의해 적용됨)는 특정 품질 레벨(예를 들어, LoQ1 또는 L-1)을 인코딩하는 데 필요한 비트레이트를 감소시키고/시키거나 동일한 출력 비트레이트로 변환된 잔차("계수"이라고도 지칭됨)를 양자화할 때 사용되는 양자화 단계 폭을 감소시키기 위해 수정될 수 있다.
일 예에서, 평균 변환된 계수(예를 들어, 방향 분해 변환(예를 들어, 2x2)의 경우 A, DDS 변환, 예를 들어 4x4의 경우 AA, AH, AV, AD)만을 유지하고 이들만을 양자화기 및 엔트로피 인코더에 전송하도록 결정될 수 있다. 방향 분해 제곱(4x4) 변환에 특히 유용한 다른 예에서, 평균 계수, 즉, AA의 평균만을 유지하도록 결정될 수 있다. 다른 실시예에서, 모든 계수가 유지된다. 특정 경우에, 상이한 계수는 차동 방식으로 가중될 수 있는데, 예를 들어, x x y 코딩 유닛 또는 블록 내의 각각의 계수 위치는 상이한 가중치를 가질 수 있다. 임의의 조합이 사용될 수 있다.
예를 들어, 특정 경우에, 앞서 설명한 잔차 처리는 변환 스테이지 이전과는 대조적으로 변환 스테이지 이후에 적용될 수 있다. 이러한 경우에서, 본 출원에서 계수로 지칭되는 변환의 결과는 입력 잔차 대신에 또는 입력 잔차와 마찬가지로 가중될 수 있다. 예를 들어, 특정 계수를 유지하는 것은 그 계수를 1로 그리고 다른 계수를 0으로 가중하는 것과 등가일 수 있다.
일 예에서, 추가 처리를 위해 특정 계수를 포워딩할지에 대한 결정은 잔차를 변환하기 전에 이루어질 수 있다. 즉, 변환을 수행한 다음 양자화 및 송신을 위해 선택되지 않은 계수를 폐기하기보다는, 양자화, 엔트로피 인코딩 및 송신될 계수만이 계산되고, 따라서 추가적인 계산을 절약한다. 예를 들어, 변환의 출력을 가중하는 대신에, 특정 변환 동작이 선택적으로 수행될 수 있는데, 예를 들어, 평균 변환(A 또는 Ax)만이 수행될 수 있다. 이는 변환 행렬의 행의 서브세트에 의해서만 승산하는 것, 예를 들어 변환 행렬의 제1 행을 나타내는 벡터에 의해 단지 잔차를 승산하여 평균(A) 계수를 결정하는 것(예를 들어, 4x4 변환 행렬을 갖는 2x2 경우에 대해)에 대응할 수 있다.
상기 선택 각각은 각각의 변환 모드와 관련될 수 있다.
선택은 전형적으로, 각각의 개선 레벨(예를 들어, 레벨 1 또는 레벨 2)에 대해 사용될 비트레이트, 및/또는 특정 개선 레벨에 대해 사용될 각각의 양자화 단계-폭과 관련된 각각의 결정에 기초하지만, 이는 또한 입력으로서 앞서 설명한 잔차 모드 카테고리화를 사용할 수도 있다. 일 경우에, 각각의 개선 레벨에 대해 사용될 비트레이트는 도 14a 내지 14c를 참조하여 설명된 바와 같이 네트워크를 통해 수신된 데이터에 기초하여 결정될 수 있다.
레이트 제어 및 양자화
특정 구현에서, 양자화 연산은 인코딩된 스트림 중 하나 이상의 비트 레이트를 제어하도록 제어될 수 있다. 예를 들어, 도 3a 및 도 3b의 양자화 컴포넌트(323 및/또는 343)에 대한 양자화 파라미터는 인코딩된 비디오 스트림 중 하나 이상에서 원하는 비트레이트(공통의 인코딩된 스트림을 생성하기 위한 모든 스트림에 대한 공통의 비트 레이트이든 상이한 인코딩된 스트림에 대한 상이한 비트 레이트이든)를 제공하도록 설정될 수 있다.
특정 경우에, 양자화 파라미터는 베이스 인코딩 및 개선 스트림 인코딩 중 하나 이상의 분석에 기초하여 설정될 수 있다. 양자화 파라미터는 사전 정의된 비트 레이트 제약의 세트 내에서 원하는 품질 레벨을 제공하거나 품질 레벨을 최대화하도록 선택될 수 있다. 원래의 비디오의 변동을 제어하기 위해 다수의 메커니즘이 사용될 수 있다.
도 17a는 예시적인 인코더(1700)의 개략도를 도시한다. 인코더(1700)는 도 1, 도 3a 및 도 3b에 도시된 인코더 중 하나일 수 있으며, 명료성을 위해 특정 컴포넌트는 생략되어 있다. 인코더(1700)는 2개의 개선 레벨 인코딩 컴포넌트(1700-1 및 1700-2)를 갖는다. 이는 도 1의 컴포넌트(122 및 142)에 대응할 수 있다. 도 1, 도 3a 및 도 3b의 일 예에 추가하여, 도 17a의 인코더(1700)는 레이트 제어기(1710)를 포함한다. 레이트 제어기(1710)는 개선 레벨 인코딩 컴포넌트(1700-1 및 1700-2) 중 하나 이상의 인코딩 레이트를 제어할 수 있다. 레이트 제어기(1710)는 또한 베이스 인코더(112) 및 베이스 디코더(114)에 대응할 수 있는 베이스 코덱(1730)으로부터 정보를 수신할 수 있다. 예시적인 인코더(1700)는 또한 버퍼(1740)를 포함한다. 시간적 버퍼와 달리, 이는 예를 들어 송신 및/또는 저장 전에 인코딩된 스트림을 수신하는 버퍼이다. 레이트 제어기(1710)는 프로세서 및/또는 전용 전자 회로에 의해 실행되는 (예를 들어, C 또는 C++와 같은 고속 로우-레벨 언어의) 소프트웨어 루틴을 포함할 수 있다. 버퍼(1740)는 소프트웨어 정의 버퍼(예를 들어, 메모리 자원의 예비 섹션) 및/또는 전용 하드웨어 버퍼를 포함할 수 있다. 도 17a의 레이트 제어기(1710)는 베이스 처리 계층(예를 들어, 적어도 베이스 코덱(1730)의 베이스 인코더) 및 버퍼(1740)로부터 데이터를 수신한다. 버퍼(1740)는 적어도 인코딩된 베이스 스트림(BS) 및 인코딩된 개선 스트림(L1S 및/또는 L2S)을 저장 및/또는 조합하는 데 사용된다.
도 17a는 인코딩된 베이스 스트림 및 인코딩된 L-1 스트림에 대한 버퍼(1740)의 사용을 도시하고; 도 17b는 버퍼(1740)가 인코딩된 베이스 스트림과 인코딩된 레벨 1 및 레벨 2 개선 스트림 양자 모두를 수신하는 다른 예를 도시한다. 도 17a의 예에서, 레이트 제어기(1710)는 양자화 파라미터 세트를 공급함으로써 레벨 1 인코딩 계층 내에서 양자화(1720)를 제어한다. 도 17b의 일 예에서, 레이트 제어기(1710)는 각각의 양자화 컴포넌트(예를 들어, 양자화 컴포넌트(323 및 343)에 대응할 수 있는 1720-1 및 1720-2)에 양자화 파라미터를 제공함으로써 양자 모두의 개선 인코딩 계층 내의 양자화(1720)를 제어한다. 또 다른 경우에, 버퍼(1740)는 인코딩된 베이스 스트림 및 인코딩된 레벨 2 스트림을 수신하도록 구성될 수 있다.
도 17a 및 도 17b의 예에서, 버퍼(1740)는 출력이 일정한 레이트로 판독되는 동안 가변 비트 레이트로 입력을 수신하도록 구성된다. 도면에서, 출력은 하이브리드 비디오 스트림(HVS)으로서 도시된다. 레이트 제어기(1710)는 버퍼(1740)로부터 상태를 판독하여 오버플로우하거나 비워지지 않도록 보장하고, 데이터는 항상 그 출력에서 판독되도록 이용가능하다.
도 18 및 도 19는 레이트 제어기(예를 들어, 레이트 제어기(1710))의 2가지 가능한 구현을 도시한다. 이러한 구현은 버퍼의 상태를 사용하여 현재 프레임 t에 대한 양자화 파라미터 Qt의 세트를 생성한다. 양자화 파라미터는 도 3a, 3b에 도시된 바와 같이 레벨 1 및 레벨 2 인코딩 파이프라인 중 하나 이상에서 양자화 컴포넌트(323, 343)에 공급될 수 있다. 일 경우에, 도 18 또는 도 19의 아키텍처는 레벨 1 및 레벨 2 인코딩 파이프라인 각각에 대해 복제될 수 있고, 그래서, 차이 양자화 파라미터가 각각의 파이프라인에 대해 생성된다.
도 18은 버퍼로부터 신호(1840)를 수신하고 주어진 시간 t에서 한 세트의 양자화 파라미터, 즉 Qt를 계산하는 Q(즉, 양자화) 추정 컴포넌트(1820)를 포함하는 제1 예시적인 레이트 제어기(1800)를 도시한다. 도 19는 버퍼로부터 신호(1940)를 수신하고 주어진 시간 t에서 한 세트의 양자화 파라미터, 즉 Q't를 계산하는 Q(즉, 양자화) 추정 컴포넌트(1920)를 또한 포함하는 제2 예시적인 레이트 제어기(1900)를 도시한다. 제2 예시적인 레이트 제어기(1900)는 또한 목표 크기 추정 컴포넌트(1910), 다음 프레임에 대한 양자화 파라미터 세트를 저장하는 Q 버퍼(1930), 인코딩 컴포넌트(1940) 및 Q 캡핑 컴포넌트(1950)를 포함한다. 목표 크기 추정 컴포넌트(1910)는 베이스 계층으로부터 데이터(1942)를 수신하고, 인코딩 컴포넌트(1940)는 입력(1944)을 수신한다.
레이트 제어기(1800, 1900)의 개괄적인 동작은 다음과 같을 수 있다. 양자화 파라미터 Qt은 버퍼(예를 들어, 버퍼(1740)) 내의 데이터의 양에 기초하여 제어된다. 도 18 및 도 19 양자 모두에서, 버퍼 내의 데이터의 양의 표시(즉, 버퍼가 얼마나 "충만한지")는 "버퍼로부터(From Buffer)" 신호(1840, 1940)를 통해 수신된다. 이어서, 이는 Q 추정 컴포넌트(1820, 1920)에 의해 직접 또는 간접적으로 사용되어, 양자화 컴포넌트(예를 들어, 323 및/또는 343) 동작 파라미터로서 사용되는 양자화 파라미터 세트를 추정한다.
일 경우에, 양자화 파라미터 값은 버퍼 내의 데이터의 양과 역으로 상관된다. 예를 들어, 새로운 프레임을 수신하는 순간에, 버퍼 내에 많은 양의 데이터가 있는 경우, 이때, 레이트 제어기(1800)는 인코딩되는 잔차 데이터의 양을 감소시키기 위해 낮은 Q 값을 설정하고, 여기서 낮은 Q 값은 주어진 범위의 잔차 값에 대해 보다 적은 양자화 빈 또는 그룹을 초래하는 보다 큰 양자화 단계 폭 값에 대응한다. 대안적으로, 버퍼가 비교적 비어 있는 경우, 이때, 레이트 제어기(1800)는 보다 많은 잔차 데이터를 하이브리드 비디오 스트림으로 인코딩하기 위해 높은 Q 값(즉, 낮은 단계 폭 값)을 설정하도록 구성되어 있다.
도 19의 예는 추가적인 컴포넌트를 사용하여 양자화 파라미터 세트를 결정한다. 도 19의 일 예에서, 레이트 제어기(1900)는 또한 (예를 들어, "베이스로부터(From Base)" 신호(1942)를 통해 수신되는) 베이스 인코더가 그의 흐름에 추가하고자 하는 "필러" 데이터의 양을 사용한다. 이 경우에, 인코더는 이용가능한 대역폭을 최대화하기 위해 베이스 인코더 "필러" 데이터를 추가의 개선 스트림 데이터로 대체할 수 있다. 이 경우, 높은 레벨의 필러가 있는 경우, 레이트 제어기(1900)는 더 높은 Q 값(예를 들어, 버퍼 내에서 많은 잔차 데이터가 수신되도록 하는 더 낮은 단계-폭 값)을 설정할 수 있고, 그 이유는 이 "필러" 데이터는 베이스 인코더 스트림에서(예를 들어, 버퍼에서 또는 버퍼 전에) 제거 또는 대체될 수 있기 때문이다.
도 19에서, 목표 크기 추정 컴포넌트(1910)는 버퍼의 상태 및 베이스 인코더가 프레임에 추가하려고 계획하는 "필러" 데이터의 양에 관한 정보를 수신한다. 버퍼 내에 보유된 데이터의 양은 0 내지 1, 또는 0% 내지 100%의 범위 내에서 정규화될 수 있는 "충만도" 파라미터에 의해 표시될 수 있으며, 여기서 60%는 버퍼가 60% 충만 상태(즉, 40%의 나머지 공간을 가짐)임을 나타낸다. 이 경우, 맵핑 함수 또는 룩업 테이블은 "충만도" 빈으로부터 "목표 크기" 파라미터로 맵핑하도록 정의될 수 있고, 여기서, 목표 크기는 레벨 1 및 레벨 2 개선 계층 중 하나 이상에 의해 인코딩될 다음 프레임에 대한 목표 크기이다. 일 경우에, 맵핑 함수 또는 룩업 테이블은 실험에 기초하여 설정될 수 있는 비선형 맵핑을 구현할 수 있다. 일 경우에, 목표 크기 추정은 또한 개선 스트림에 의해 채워질 하이브리드 비디오 스트림의 원하는 비율을 나타내는 구성 파라미터에 기초하여 설정될 수 있다(예를 들어, 하이브리드 비디오 스트림의 나머지가 베이스 스트림에 의해 채워짐).
도 19의 예에서, 목표 크기 추정 컴포넌트(1910)에 의해 결정된 목표 크기는 Q 추정 컴포넌트(1920)로 통신된다. 도 19에서, Q 추정 컴포넌트(1920)는 이전 프레임으로부터의 Q 값 및 개선 인코딩 파이프라인 중 적어도 하나의 구현을 저장하는 Q 버퍼(1930)로부터 입력을 추가적으로 수신한다. 도 19에서, Q 추정 컴포넌트(1920)는 "목표 크기", Qt-1(즉, 이전 프레임에 대해 결정된 양자화 파라미터 세트), 및 Qt-1로 인코딩된 현재 프레임의 크기("현재 크기")를 수신한다. 현재 프레임의 크기는 개선 인코딩 파이프라인(예를 들어, 레벨 1 및 레벨 2 컴포넌트들) 중 적어도 하나의 구현에 의해 공급된다. 특정 경우에, 개선 인코딩 파이프라인 중 적어도 하나의 구현은 Qt-1로 인코딩된 하나 이상의 이전 프레임에 대한 크기도 공급될 수 있다. 일 경우에, "현재 크기" 정보는 개선 인코딩 파이프라인 중 적어도 하나의 병렬 사본에 의해 결정될 수 있고, 예를 들어, 현재 프레임은 송신을 위해 양자화 파라미터 Qt로 양자화되지만, 도 19의 L-x 인코딩 컴포넌트(1940)는 Qt-1를 수신하고 송신되지 않는 인코딩을 수행함으로써 이 양자화 파라미터에 기초한 현재 크기를 결정한다. 다른 예에서, 현재 크기는 대안적으로, 예를 들어, 사전 기록된 비디오에 대한 전처리에 기초하여, 클라우드 구성 인터페이스로부터 수신될 수 있다. 이 다른 예에서, 병렬 구현이 요구되지 않을 수 있다.
도 19에서, Q 추정 컴포넌트(1920)는 (예를 들어, 앞서 설명한 바와 같이) 그의 입력을 취하고, 추정된 양자화 파라미터 Q't의 초기 세트를 계산한다. 일 경우에, 이는 데이터 크기(예를 들어, 목표 또는 현재 크기로 표현됨)를 양자화 파라미터에 맵핑하는 크기 함수 세트를 사용하여 수행될 수 있다. 데이터 크기 및/또는 양자화 파라미터는 예를 들어 0과 1 사이의 값으로 정규화될 수 있다. 양자화 파라미터는 양자화 단계 크기와 관련될 수 있는데, 예를 들어, 양자화 단계 크기에 반비례하는 "품질 인자"일 수 있고/있거나 양자화 단계 크기일 수 있다.
도 19의 예에서, 정규화된 크기를 양자화 파라미터에 맵핑하기 위해 곡선의 세트가 정의될 수 있다. 각각의 곡선은 현재 프레임의 속성에 의존할 수 있는 (예를 들어, 프레임 내에서 인코딩할 정보의 복잡성에 의존할 수 있는) 승수 및 오프셋 중 하나 이상을 가질 수 있다. 승수 및 오프셋은 곡선의 형상을 정의할 수 있다. 승수는 양자화 파라미터 Q의 함수인 크기 정규화 함수에 적용될 수 있다. 일 경우에, 현재 크기(즉, Qt-1로 인코딩된 프레임 t의 크기) 및 Qt-1는 곡선의 세트의 공간 내의 지점을 정의하기 위해 사용될 수 있다. 이 지점은 곡선의 세트로부터 최근접 곡선의 세트를 선택하기 위해 사용될 수 있다. 이는 지점 위에 있는 곡선 및 지점 아래에 있는 곡선 또는 지점에 대한 최고 또는 최저 곡선일 수 있다. 최근접 곡선의 세트는 지점과 관련된 새로운 곡선을 결정하기 위해 지점과 함께 보간 함수에서 사용될 수 있다. 이 새로운 곡선이 결정되면, 새로운 곡선에 대한 승수와 오프셋이 결정될 수 있다. 그 다음, 이 값은 수신된 목표 크기와 함께 사용되어 Qt에 대한 값을 결정할 수 있다(예를 들어, 곡선은 크기와 Q의 함수를 정의할 수 있다).
특정 경우에, 적어도 레이트 제어기의 Q 추정은 적응성이고, 하나 이상의 이전 프레임의 속성이 현재 프레임의 Q 추정에 영향을 미친다. 일 경우에, 곡선의 세트는 액세스가능한 메모리에 저장되고 이전 프레임에 대해 결정된 곡선의 세트에 기초하여 업데이트될 수 있다. 특정 경우에, 적응 양자화는 코딩 유닛 또는 블록 내의 상이한 계수 위치에 대해, 예를 들어, (2x2 또는 4x4 변환에 대해) 4개 또는 16개의 계수의 어레이 내의 상이한 요소에 대해 상이하게 적용될 수 있다.
마지막으로, 도 19의 예는, Q 추정 컴포넌트(1920)로부터 출력되는 추정된 양자화 파라미터 Q't의 세트를 수신하고 하나 이상의 인자에 기초하여 이 세트를 보정하는 Q 캡핑 컴포넌트(1950)를 특징으로 한다. 추정된 양자화 파라미터 Q't의 세트는 하나 이상의 값을 포함할 수 있다. 하나의 경우에, 초기 양자화 파라미터 Q't의 세트 는 베이스 인코딩 계층의 동작 거동 및 양자화 파라미터 Q의 변경 중 하나 이상에 기초하여 보정될 수 있다. 일 경우에, 추정된 양자화 파라미터 Q't의 세트는 이 계층으로부터 데이터를 수신할 수 있는 베이스 인코딩 계층에 의해 사용되는 양자화 파라미터 세트에 기초하여 캡핑될 수 있다. 일 경우에, 베이스 인코딩 계층 데이터를 사용하는 적응을 사용하든 그렇지 않든, 추정된 양자화 파라미터 Q't의 세트는 이전 양자화 파라미터 세트의 값에 기초하여 제한될 수 있다. 이 경우, Q't에 대한 최소값 및 최대값 중 하나 이상은 이전 Q 값에 기초하여 설정될 수 있다(예를 들어, Qt-1). 그 다음, 캡핑의 출력은 도 19에서 Qt로서 제공된다.
일 경우에, 양자화 파라미터 세트는 Qt에 대한 하나의 값을 포함한다. 이 경우, 양자화 컴포넌트 중 하나에 의해 프레임 t에 적용되는 단계-폭은 Qt에 기초하여 설정될 수 있다. 단계-폭을 결정하는 함수는 또한 최대 단계-폭에 기초할 수 있다(예를 들어, 단계-폭은 0과 10 사이의 범위일 수 있다). 예시적인 단계-폭 계산은 다음과 같다:
Figure pct00057
양자화 특징
이제, 도 20a 내지 20d를 참조하여 특정 양자화 변형이 설명된다.
도 20a는 정의된 단계 폭을 갖는 빈에 기초하여 잔차 및/또는 계수(변환된 잔차들)의 양자화가 어떻게 수행될 수 있는지의 예(2000)를 제공한다. 도 20a의 x-축(2001)은 잔차 또는 계수 값을 나타낸다. 이 예에서, 다수의 빈(2002)이 5의 단계-폭으로 정의된다(예를 들어, 2003으로 도시됨). 단계-폭(2004)의 크기는 예를 들어 파라미터 값에 기초하여 선택 가능할 수 있다. 특정 경우에, 단계-폭(2004)의 크기는, 예를 들어, 앞서 설명한 레이트 제어 예에 기초하여 동적으로 설정될 수 있다. 도 20a에서, 단계-폭(2004)은 0-4, 5-9, 10-14, 15-19의 범위(즉, 0 및 4 양자 모두를 포함하는 0 내지 4)의 잔차 값에 대응하는 빈(2002)을 초래한다. 빈 폭은 필요에 따라 종점을 포함하거나 배제하도록 구성될 수 있다. 이 예에서, 양자화는 빈에 속하는 모든 값을 정수 값으로 대체함으로써 수행된다(예를 들어, 0과 4 사이(경계값 포함)의 잔차 값은 1의 양자화된 값을 갖는다). 도 20a에서, 양자화는 단계-폭(2004)(예를 들어, 5)으로 나누고, 결과의 플로어(즉, 양의 값에 대해 소수점 아래에 가장 가까운 정수)를 취하고, 그 후 1을 더함으로써 수행될 수 있다(예를 들어, 3/5= 0.6, floor(0.6)=0, 0+1=1; 또는 16/5= 3.2, floor(3.2)= 3, 3+1=4). 음의 값은 유사한 방식으로, 예를 들어 절대 값에 대해 작업한 후에, 계산 이후 음의 값으로 변환함으로써 처리될 수 있다(예를 들어, abs(-9)= 9, 9/5=1.8, floor(1.8)= 1, 1+1=2, 2*-1=-2). 도 20a는 모든 빈이 공통의 단계-폭을 갖는 선형 양자화의 경우를 도시한다. 유의할 점은, 이 접근법에 기초한 다양한 상이한 구현이 제정될 수 있다는 것, 예를 들어, 첫 번째 빈이 1 대신에 0의 양자화된 값을 가질 수 있거나, 1부터 5까지(경계값 포함)의 값을 포함할 수 있다는 것을 유의하여야 한다. 도 20a는 주어진 단계-폭의 빈에 따른 양자화의 단순한 하나의 예시이다.
데드존(Deadzone)
도 20b는 소위 "데드존" (DZ)이 어떻게 구현될 수 있는지의 예(2010)를 도시한다. 도 20b에서, 사전 정의된 범위(2012) 내의 값을 갖는 잔차 또는 계수는 0으로 설정된다. 도 20b에서, 사전 정의된 범위는 범위 한계(2011 및 2013)에 의해 도시된 바와 같이 0의 값 주위의 범위이다. 도 20b에서, 2014로 도시된 바와 같이 6보다 작고 -6보다 큰 값은 0으로 설정된다. 데드존은 고정된 범위(예를 들어, -6 내지 6)로서 설정될 수 있거나, 단계-폭에 기초하여 설정될 수 있다. 일 경우에, 데드존은 단계-폭의 미리 정의된 배수로서, 예를 들어 단계-폭 값의 선형 함수로서 설정될 수 있다. 도 20b의 예에서, 데드존은 2.4*단계-폭으로 설정된다. 따라서, 단계-폭이 5인 경우, 데드존은 -6에서 +6까지 연장된다. 다른 경우에, 데드존은 단계-폭 값의 비선형 함수로서 설정될 수 있다.
일 경우에, 데드존은 동적 단계-폭에 기초하여 설정되며, 예를 들어, 적응적일 수 있다. 이 경우, 데드존은 단계-폭이 변함에 따라 변할 수 있다. 예를 들어, 단계-폭이 5 대신에 3으로 업데이트되었다면, 2.4*단계-폭의 데드존은 -6 내지 +6의 범위에서 -3.6 내지 3.6의 범위로 변할 수 있거나; 또는, 단계-폭이 10으로 업데이트되면, 데드존은 -12 내지 12로 확장되도록 변경될 수 있다. 일 경우에, 단계-폭에 대한 승수는 2 내지 4의 범위일 수 있다. 일 경우에, 승수는 또한, 예를 들어, 이용가능한 비트 레이트와 같은 동작 조건에 기초하여 적응적일 수 있다.
데드존을 갖는 것은 네트워크를 통해 송신될 데이터의 양을 감소시키는 데 도움이 될 수 있는데, 예를 들어 비트 레이트를 감소시키는 데 도움이 될 수 있다. 데드존을 사용할 때, 데드존에 속하는 잔차 또는 계수 값은 사실상 무시된다. 이러한 접근법은 또한 낮은 레벨의 잔차 노이즈를 제거하는 것을 도울 수 있다. 일정한 데드존이 아니라 적응형 데드존을 갖는 것은, 단계-폭이 감소할 때(예를 들어, 더 많은 대역폭이 이용가능한 경우) 더 작은 잔차 또는 계수 값이 과도하게 필터링되지 않고, 단계-폭이 증가하는 경우 비트 레이트가 적절히 감소한다는 것을 의미한다. 데드존은 인코더에서만 제정되면 되고, 디코더는 단순히 데드존에 속하는 임의의 잔차 또는 계수에 대해 양자화된 값 0을 수신한다.
빈 폴딩(Bin Folding)
도 20c는 빈 폴딩이라 지칭되는 접근법이 어떻게 적용될 수 있는지의 예(2020)를 도시한다. 도 20c의 예에서, 빈 폴딩은 데드존과 함께 사용되지만, 그러나, 다른 경우에서, 이는 데드존 없이 및/또는 다른 양자화 접근법과 함께 사용될 수 있다. 도 20c에서, 빈 폴딩은 선택된 양자화 빈(2021) 위에 존재하는 모든 잔차 또는 계수 값을 선택된 빈 내에 배치하도록 작용한다. 예를 들어, 이는 클리핑의 형태로 볼 수 있다. 양의 값에 대해서는 양의 값에 대한 한계(2021) 및 화살표(2022)를 통해 그리고 음의 값에 대해서는 한계(2023) 및 화살표(2024)를 통해 도시되어 있다.
도 20c에서, 5의 단계-폭이 다시 적용된다. 2.4*단계-폭의 범위를 갖는 데드존(2012)이 또한 적용되고, 그래서, -6과 6 사이의 값이 0으로 설정된다. 이는 또한 (0의 값을 갖는) 보다 큰 제1 양자화 빈으로 이어지는 것으로 볼 수 있다. 이어서, 양 및 음의 값에 대해 폭 5를 갖는 2개의 양자화 빈(2002)(2003으로 도시됨)이 정의된다. 예를 들어, 1의 양자화 값을 갖는 빈은 6과 11 사이에 정의되고(예를 들어, 5의 단계-폭을 가짐), 2의 양자화 값을 갖는 빈은 11과 16 사이에 정의된다. 이 예에서, 빈 폴딩을 제정하기 위해, 일반적으로 두 번째 빈 위의 빈에 속하는 (예를 들어, 16보다 큰 값을 갖는) 값을 갖는 모든 잔차 또는 계수가 두 번째 빈 내로 "폴딩"되고(2022), 예를 들어, 2의 양자화 값을 갖도록 클리핑된다. 이는 임계값보다 큰 모든 값을 최대 빈 값(예를 들어, 2)으로 설정함으로써 수행될 수 있다. 음의 값에 대해 유사한 프로세스가 이루어진다. 이는 도 20c에서 큰 화살표(2022, 2024)로 예시되어 있다.
빈 폴딩은 인코더에서의 선택 가능한 처리 옵션일 수 있다. 이는 디코더에서의 탈양자화 동안 제정될 필요가 없다(예를 들어, 2의 "폴딩된" 또는 "클리핑된" 값은 두 번째 빈에 있는 것처럼 단순히 역양자화된다). 빈 폴딩은 네트워크를 통해 디코더로 전송되는 비트의 수를 감소시키도록 제정될 수 있다. 빈 폴딩은, 네트워크 상태 및/또는 베이스 스트림 처리에 기초하여 비트 레이트를 감소시키도록 구성가능할 수 있다.
양자화 오프셋들
도 20d는 특정 경우에 양자화 오프셋이 어떻게 사용될 수 있는지의 예(2030)를 도시한다. 양자화 오프셋은 양자화 빈의 위치를 시프트하는데 사용될 수 있다. 도 20d는 x-축 잔차 또는 계수 값 범위를 따른 가능한 실제 카운트를 나타내는 라인(2031)을 도시한다. 이 예에서, 많은 값은 0에 가깝고, 0으로부터 멀어지도록 이동함에 따라 더 높은 값의 카운트가 감소한다. 카운트 값이 정규화되면, 라인은 또한 잔차 또는 계수 값에 대한 확률 분포를 나타낼 수 있다.
도 20d의 우측의 좌측 바(2032) 및 점선(2033)은 양자화를 모델링하는 히스토그램을 예시한다. 설명의 편의를 위해, 데드존 다음의 첫 번째 내지 세 번째 빈에 대한 카운트 값이 도시된다(양의 값 및 음의 값 양자 모두에 대해, 음의 값은 막대를 예시하기 위해 줄무늬로 표시됨). 예를 들어, 막대(2035)는 1, 2, 3 및 -1, -2, -3의 양자화된 값에 대한 카운트를 나타낸다. 양자화로 인해, 히스토그램에 의해 모델링된 분포는 라인에 의해 도시된 실제 분포와 상이하다. 예를 들어, 막대가 라인과 어떻게 다른지를 표시하는 에러(2037)가 도시된다.
에러(2037)의 속성을 변경하기 위해, 양자화 오프셋(2036)이 적용될 수 있다. 양의 값에 대해, 양의 양자화 오프셋은 각각의 빈을 우측으로 시프트하는 기능하고, 음의 양자화 오프셋은 각각의 빈을 좌측으로 시프트하도록 작용한다. 일 경우에, 데드존은 임계값의 제1 세트에 기초하여 적용될 수 있고, 예를 들어, (n*step_width)/2보다 작고 (n*step_width*-1)/2보다 큰 모든 값은 0으로 설정되고, 빈 폴딩은 제2 세트의 임계값에 기초하여 적용될 수 있으며, 예를 들어, 마지막 예로부터, 16보다 크거나 -16보다 작은 모든 값은 2로 설정된다. 이 경우, 이들이 앞서 언급한 더 높은 임계값 및 더 낮은 임계값에 기초하여 설정되기 때문에 양자화 오프셋은 첫 번째 빈의 시작 또는 최종 빈의 끝을 시프트하지 않을 수 있지만, 그러나, 빈의 위치(2034)를 이 임계값 사이에서 시프트할 수 있다. 예시적인 양자화 오프셋은 0.35일 수 있다.
일 경우에, 양자화 오프셋(2036)은 구성가능할 수 있다. 일 경우에, 양자화 오프셋은, 예를 들어, 인코딩 동안의 조건에 기초하여 동적으로 변화될 수 있다. 이 경우, 양자화 오프셋은 역양자화에 사용하기 위해 디코더에 시그널링될 수 있다.
일 경우에, 인코더에서, 양자화 오프셋은 단계-폭에 기초한 양자화 전에 잔차 또는 계수 값으로부터 감산될 수 있다. 따라서, 디코더에서, 시그널링된 오프셋은 단계-폭에 기초한 역양자화 이전에 수신된 양자화된 값에 추가될 수 있다. 특정 경우에, 오프셋은 0 값에 관한 대칭적 동작을 허용하기 위해 잔차 또는 계수의 부호에 기초하여 조정될 수 있다. 일 경우에, 오프셋의 사용은 양자화 또는 역양자화 오프셋 값을 0으로 설정함으로써 디스에이블될 수 있다. 일 경우에, 적용된 양자화 오프셋은 정의된 데드존 폭에 기초하여 조정될 수 있다. 일 경우에, 데드존 폭은, 예를 들어, 인코더로부터 수신된 양자화 파라미터 및 단계-폭의 함수로서, 디코더에서 계산될 수 있다.
양자화 행렬
일 경우에, 양자화를 위한 단계-폭은 계수의 2x2 또는 4x4 블록 내의 상이한 계수에 대해 변화될 수 있다. 예를 들어, 디코딩된 신호의 인식에 더 크게 영향을 주도록 실험적으로 결정되는 계수에 더 작은 단계-폭이 할당될 수 있고, 예를 들어, 앞서 설명된 바와 같은 4x4 방향 분해(DD-제곱 또는 "DDS")에서 AA, AH, AV 및 AD 계수는 더 작은 단계-폭을 할당받을 수 있고, 나중의 계수는 더 큰 단계-폭을 할당받을 수 있다. 이 경우, 디폴트 단계-폭을 설정하는 base_stepwidth 파라미터가 정의될 수 있고, 그 후 수정자가 양자화(및 탈양자화)에 사용할 modified_stepwidth를 계산하기 위해 이것에 적용될 수 있으며, 예를 들어, modified_stepwidth= base_stepwidth*수정자가 되고, 여기서 수정자는 블록 또는 유닛 내의 특정 계수에 기초하여 설정될 수 있다.
특정 경우에, 수정자는 또한 또는 대안적으로 개선 레벨에 따라 달라질 수 있다. 예를 들어, 단계-폭은 더 높은 품질 레벨에서 다수의 재구성된 픽셀에 영향을 미칠 수 있기 때문에 레벨 1 개선 스트림에 대해서는 더 작을 수 있다.
특정 경우에, 수정자는 블록 내의 계수 및 개선 레벨 양자 모두에 기초하여 정의될 수 있다. 일 경우에, 양자화 행렬은 상이한 계수 및 상이한 개선 레벨에 대한 수정자의 세트로 정의될 수 있다. 이 양자화 행렬은 (예를 들어, 인코더 및/또는 디코더에서) 미리 설정되고, 인코더와 디코더 사이에서 시그널링되고, 및/또는 인코더 및/또는 디코더에서 동적으로 구성될 수 있다. 예를 들어, 후자의 경우, 양자화 행렬은 다른 저장된 및/또는 시그널링된 파라미터, 예를 들어, 이전에 설명된 바와 같이 구성 인터페이스를 통해 수신된 것들의 함수로서 인코더 및/또는 디코더에서 구성될 수 있다.
일 경우에, 상이한 양자화 모드가 정의될 수 있다. 하나의 모드에서, 공통 양자화 행렬이 양자 모두의 개선 레벨에 대해 사용될 수 있고; 또 다른 모드에서, 상이한 레벨에 대해 별개의 행렬이 사용될 수 있고; 또 다른 모드에서, 양자화 행렬은 단 하나의 개선 레벨에 대해서만, 예를 들어 레벨 2에 대해서만 사용될 수 있다. 양자화 행렬은 블록 내의 계수의 위치에 의해 인덱싱될 수 있다(예를 들어, 2x2 블록에 대해 x 방향으로 0 또는 1, y 방향으로 0 또는 1, 또는 4x4 블록에 대해 0 내지 3).
일 경우에, 베이스 양자화 행렬은 값의 세트로 정의될 수 있다. 이 베이스 양자화 행렬은 하나 이상의 개선 레벨에 대한 단계-폭의 함수인 스케일링 인자에 의해 수정될 수 있다. 일 경우에, 스케일링 인자는 단계-폭 변수의 클램핑된 함수일 수 있다. 디코더에서, 단계-폭 변수는 레벨 1 스트림 및 레벨 2 스트림 중 하나 이상에 대해 인코더로부터 수신될 수 있다. 일 경우에, 양자화 행렬 내의 각각의 엔트리는 스케일링 인자의 지수 함수를 사용하여 스케일링될 수 있다, 예를 들어, 각각의 엔트리는 스케일링 인자로 거듭제곱될 수 있다.
일 경우에, 레벨 1 스트림 및 레벨 2 스트림 각각에 대해 상이한 양자화 행렬이 사용될 수 있다(예를 들어, 이 레벨에 관련된 계수- 변환된 잔차 -를 인코딩 및 디코딩할 때 상이한 양자화 행렬이 사용된다). 일 경우에, 특정 양자화 구성은 미리 정의된 디폴트로서 설정될 수 있고, 이 디폴트로부터의 임의의 변형이 인코더와 디코더 사이에서 시그널링될 수 있다. 예를 들어, 상이한 양자화 행렬이 디폴트로 사용되어야 하는 경우, 이는 인코더와 디코더 사이의 이러한 효과에 대한 시그널링을 요구하지 않을 수 있다. 그러나, 공통 양자화 행렬이 사용되는 경우, 이는 디폴트 구성을 오버라이드하도록 시그널링될 수 있다. 디폴트 구성을 갖는 것은 (디폴트 구성이 시그널링될 필요가 없을 수 있으므로) 필요한 시그널링의 레벨을 감소시킬 수 있다.
타일링
예를 들어, 도 12c를 참조하여 앞서 설명된 바와 같이, 특정 구성에서, 비디오 데이터의 프레임은 "타일"이라 지칭되는 2차원 부분으로 분할될 수 있다. 예를 들어, 비디오 데이터의 640x480 프레임은 16 픽셀 x 16 픽셀의 1200 타일(예를 들어, 40 타일 x 30 타일)을 포함할 수 있다. 따라서, 타일은 프레임 내에 비중첩 연속적인 영역을 포함할 수 있고, 여기서, 각각의 영역은 2차원 각각에서 세트 크기이다. 일반적인 관례는 타일이 프레임에 걸쳐 행으로 연속적으로 실행되는 것인데, 예를 들어 타일의 행은 아래의 타일의 행을 시작하기 전에 프레임의 수평 범위에 걸쳐 실행될 수 있다(인터레이스된 형식과 같은 다른 관례들도 사용될 수 있지만, 소위 "래스터" 형식). 타일은 코딩 유닛의 특정 세트로서 정의될 수 있는데, 예를 들어, 16x16 픽셀 타일은 2x2 코딩 유닛의 8x8 세트 또는 4x4 코딩 유닛의 4x4 세트를 포함할 수 있다.
특정 경우에, 디코더는 베이스 스트림, 레벨 1 개선 스트림 및 레벨 2 개선 스트림 중 하나 이상의 부분을 선택적으로 디코딩할 수 있다. 예를 들어, 재구성된 비디오 프레임에서 관심 영역에 관한 데이터만을 디코딩하는 것이 바람직할 수 있다. 이 경우, 디코더는 베이스 스트림, 레벨 1 개선 스트림 및 레벨 2 개선 스트림 중 하나 이상에 대한 완전한 데이터 세트를 수신할 수 있고, 재구성된 비디오 프레임에서 관심 영역을 렌더링하는데 이용가능한 스트림 내의 데이터만을 디코딩할 수 있다. 이는 부분 디코딩의 형태로 볼 수 있다.
이러한 방식의 부분 디코딩은 다수의 상이한 영역들에서 이점을 제공할 수 있다.
가상 또는 증강 현실 애플리케이션을 구현할 때, 임의의 한 시점에서 넓은 시야의 일부만이 보여질 수 있다. 이 경우, 시청 영역에 관련된 작은 관심 영역만이 높은 품질 레벨에서 재구성될 수 있고, 시야의 나머지 영역은 낮은(즉, 더 낮은) 품질 레벨에서 렌더링된다. 이러한 접근법에 관한 추가 상세는 특허 공개 WO2018/015764 A1에서 발견될 수 있고, 이는 본 출원에 참조로 포함된다. 유사하게, 접근법은 컴퓨터 게임에 관한 비디오 데이터를 통신할 때 유용할 수 있다.
부분 디코딩은 또한 자원가 제약되는 모바일 및/또는 임베디드 디바이스에 대한 이점을 제공할 수 있다. 예를 들어, 베이스 스트림이 빠르게 디코딩되어 사용자에게 제시될 수 있다. 그 후, 사용자는 이 베이스 스트림의 일부를 선택하여 더 상세히 렌더링할 수 있다. 관심 영역의 선택에 이어서, 관심 영역에 관한 레벨 1 및 레벨 2 개선 스트림 중 하나 또는 양자 모두 내의 데이터가 디코딩되어 특정 제한된 영역을 매우 상세히 렌더링하는 데 사용될 수 있다. 유사한 접근법은 또한 객체 인식에 유리할 수 있으며, 여기서 객체는 베이스 스트림에 위치될 수 있고, 이러한 위치가 관심 영역을 형성할 수 있다. 관심 영역에 관한 레벨 1 및 레벨 2 개선 스트림 중 하나 또는 양자 모두 내의 데이터는 그 후 오브젝트에 관한 비디오 데이터를 더 처리하기 위해 디코딩될 수 있다.
본 예에서, 부분 디코딩은 타일에 기초할 수 있다. 예를 들어, 관심 영역은 재구성된 비디오 스트림, 예를 들어, 높은 품질 레벨 또는 전체 해상도의 재구성된 비디오 스트림의 프레임 내의 하나 이상의 타일의 세트로서 정의될 수 있다. 재구성된 비디오 스트림 내의 타일은 입력 비디오 스트림의 프레임 내의 등가의 타일에 대응할 수 있다. 따라서, 비디오의 완전한 프레임보다 작은 영역을 커버하는 타일의 세트가 디코딩될 수 있다.
본 출원에 설명된 특정 구성에서, 적어도 레벨 1 개선 스트림 및 레벨 2 개선 스트림의 일부를 형성하는 인코딩된 데이터는 런-렝스 인코딩 및 이어서 허프만 인코딩으로부터 얻어질 수 있다. 이러한 인코딩된 데이터 스트림에서, 데이터를 먼저 디코딩하지 않고 (예를 들어, 코딩 유닛으로 조직되는 적어도 양자화된 변환된 계수를 획득할 때까지) 비디오의 재구성된 프레임의 특정 부분에 관한 데이터를 구별하는 것이 가능하지 않을 수 있다.
상기 구성에서, 본 출원에 설명된 예의 특정 변형은, 특정 타일에 관련된 인코딩된 데이터가 디코딩 이전에 식별자일 수 있도록, 레벨 1 개선 스트림 및 레벨 2 개선 스트림 중 하나 이상의 인코딩된 데이터 내에서의 시그널링의 세트를 포함할 수 있다. 이는 그 후 앞서 설명한 부분 디코딩을 허용할 수 있다.
예를 들어, 특정 예에서, 도 10a 내지 10i 중 하나 이상에 예시된 인코딩 방식은 프레임 내의 특정 타일을 식별하는 헤더 데이터를 포함하도록 적응될 수 있다. 식별자는 (도 12c에 도시된 바와 같은) 타일의 규칙적인 그리드 내의 특정 타일 번호를 식별하는 16 비트 정수를 포함할 수 있다. 예를 들어, 입력 비디오 프레임의 특정 타일에 관한 인코딩된 데이터의 송신의 시작부에, 타일에 대한 식별자가 인코딩된 데이터의 헤더 필드에 추가될 수 있다. 디코더에서, 식별자에 후속하는 모든 데이터는, 인코딩된 스트림 내에서 새로운 헤더 필드가 검출되거나 프레임 전이 헤더 필드가 검출되는 시간까지, 식별된 타일에 관련된 것으로 간주될 수 있다. 이 경우에, 인코더는 레벨 1 개선 스트림 및 레벨 2 개선 스트림 중 하나 이상 내에서 타일 식별 정보를 시그널링하고, 이 정보는 스트림 내에서 수신되고 스트림을 디코딩하지 않고 추출될 수 있다. 따라서, 디코더가 정의된 관심 영역에 관련된 하나 이상의 타일을 디코딩하는 경우, 디코더는 그러한 타일에 관련된 하나 이상의 개선 스트림의 부분만을 디코딩할 수 있다.
인코딩된 개선 스트림 내의 타일 식별자의 사용은 허프만 및 런-렝스 인코딩의 조합에 의해 출력되는 것과 같은 가변 길이 데이터를 여전히 가능하게 하면서, 재구성된 비디오 프레임의 특정 영역과 관련된 데이터가 디코딩 전에 결정될 수 있게 한다. 따라서, 타일 식별자는 수신된 비트스트림의 상이한 부분을 식별하는 데 사용될 수 있다.
본 예에서, 타일에 관한 (예를 들어, 변환된 계수 및/또는 디코딩된 잔차 데이터의 형태의) 개선 데이터는 개선 스트림 내의 다른 타일에 관한 개선 데이터와 독립적일 수 있다. 예를 들어, 다른 타일에 관한 데이터를 요구하지 않고 주어진 타일에 대해 잔차 데이터가 획득될 수 있다. 이러한 방식으로, 본 예는, 재구성된 픽처의 특정 영역 또는 매크로블록에 관한 데이터를 디코딩하기 위해 예컨대 다른 인트라 또는 인터 픽처 데이터를 요구하는, 예를 들어, HEVC 및 AVC 표준(예를 들어, SVC 및 SHVC)과 관련된, 비교대상 스케일러블 비디오 코딩 방식과 상이할 수 있다. 이는 본 예가 병렬 처리를 사용하여 효율적으로 구현될 수 있게 한다- 재구성된 프레임의 상이한 타일 및/또는 코딩 유닛이 병렬로 재구성될 수 있다 -. 이는 다수의 CPU 또는 GPU 코어가 이용가능한 현대의 컴퓨팅 하드웨어 상에서 디코딩 및 재구성을 크게 가속할 수 있다.
바이트스트림 내의 타일
도 21a는 개선 스트림에 대한 비트 또는 바이트스트림 구조의 다른 예(2100)를 나타낸다. 도 21a는 도 9a와 유사한 다른 예로서 볼 수 있다. 도 21a의 상단은 비디오 데이터의 단일 프레임에 대한 예시적인 바이트스트림(2110)의 컴포넌트(2112 내지 2118)를 도시한다. 이때, 비디오 스트림은 비디오의 각각의 프레임에 대한 다수의 이러한 구조를 포함할 것이다. 단일 프레임에 대한 바이트스트림은 헤더(2112), 및 3개의 평면 각각에 관한 데이터를 포함한다. 이 예에서, 이러한 평면은 프레임의 컬러 성분, 즉 Y, U 및 V 성분(2114, 2216 및 2218)이다.
도 21a의 제2 레벨에서, 주어진 컬러 평면(2115)에 대한 바이트스트림의 일반적인 구조가 도시된다. 이 경우, Y 평면의 하위 부분이 도시된다. 다른 평면은 유사한 구조를 가질 수 있다. 도 21a에서, 각각의 평면은 2개의 개선 레벨 각각에 관련된 데이터(2120)를 포함한다: 제1 품질 레벨(레벨 또는 LoQ1)(2122) 및 제2 품질 레벨(레벨 또는 LoQ2)(2124). 앞서 설명한 바와 같이, 이는 레벨 1 개선 스트림 및 레벨 2 개선 스트림에 대한 데이터를 포함할 수 있다.
도 21a의 제3 레벨에서, 각각의 개선 레벨(2125)은 복수의 계층에 관련된 바이트스트림 부분(2132)을 포함하는 데이터(2130)를 더 포함한다. 도 21a에는, N개의 계층이 도시되어 있다. 여기서 각각의 계층은 인코딩된 계수의 상이한 "평면", 예를 들어, 변환, 양자화 및 엔트로피 인코딩에 후속하는 잔차 데이터에 관련될 수 있다. 2x2 코딩 유닛이 사용되는 경우, 4개의 그러한 계층(예를 들어, 방향 분해의 각각의 방향-DD)이 존재할 수 있다. 4x4 코딩 유닛이 사용되는 경우, 16개의 그러한 계층(예를 들어, 방향 분해 제곱의 각각의 방향-DDS)이 존재할 수 있다. 일 경우에, 각각의 계층은 다른 계층과 독립적으로 디코딩될 수 있고; 이와 같이, 각각의 계층은 독립적으로 디코딩가능한 유닛(IDU)을 형성할 수 있다. 시간적 모드가 사용되는 경우, 시간적 정보와 관련된 하나 이상의 계층도 존재할 수 있다.
타일링 구성이, 예를 들어, 부분 디코딩을 위해 사용될 때, 각각의 계층에 대한 데이터(2140)를 다수의 타일에 관련된 부분(2142)으로 추가 분해(2135)할 수 있다. 이 타일은 원래의 입력 비디오의 직사각형 영역에 대응할 수 있다. 타일 크기는 각각의 픽처 그룹(GOP)에 대해 고정될 수 있다. 타일은 래스터 순서로 순서화될 수 있다. 도 6b 및 도 12c는 타일 구조의 예를 도시한다.
도 21a는 각각의 계층이 M개의 타일과 관련된 바이트스트림의 부분(2142)을 더 포함하는 예를 도시한다. 따라서, 각각의 타일은 IDU를 형성하고, 다른 타일과 독립적으로 디코딩될 수 있다. 이때, 이러한 독립성은 선택 가능 또는 부분 디코딩을 가능하게 한다. 도 21b는 각각의 품질 레벨(2120) 또는 바이트스트림(2110)이 먼저 M개의 타일과 관련된 부분(2140)으로 분해되는 대안 예(2150)를 도시하고, 이에 의해, 각각의 타일 부분은 그 후 각각의 계층(2130)에 관련한 부분으로 분해된다. 어느 접근법이든 사용될 수 있다.
예에서, 각각의 IDU는 (예를 들어, 사용 또는 비-제로 데이터를 나타내는) isAlive 필드, (스트림 부분의 데이터 크기를 나타내는) StreamLength 및 IDU에 대한 인코딩된 데이터를 반송하는 페이로드 중 하나 이상과 같은 헤더 정보를 포함할 수 있다. 특정 타일이 데이터를 포함하는지의 표시(예를 들어, isAlive=1)를 사용하는 것은 송신될 데이터를 감소시키는 것을 도울 수 있는데, 그 이유는 종종 특정 타일이 잔차 데이터의 사용으로 인해 0일 수 있고, 따라서 송신될 추가적인 타일 데이터가 최소화될 수 있기 때문이다.
타일링이 사용될 때, 예를 들어 픽처 그룹(GOP)에 대한 헤더는 타일링 모드 플래그를 포함하도록 수정될 수 있다. 이 경우, 제1 플래그 값(예를 들어, 0)은 부분 디코딩이 지원되지 않는 "널 영역" 모드를 나타낼 수 있고, 제2 플래그 값(예를 들어, 1)은 부분 디코딩이 지원되는 "타일" 모드를 나타낼 수 있다. 제2 플래그 값은 특정 고정 크기 타일 모드가 사용되고 있는 것을 나타낼 수 있으며, 이에 의해 평면(예를 들어, YUV 평면 중 하나)은 크기 TW x TH의 고정 크기 직사각형 영역(타일들)으로 분할되고, 타일은 래스터 순서로 인덱싱된다. 다른 경우에서, 상이한 플래그 값은 상이한 타일링 모드를 나타낼 수 있는데, 예를 들어, 하나의 모드는 헤더 정보와 함께 송신되는 사용자 정의 타일 크기를 나타낼 수 있다.
일 경우에, 타일 크기는 헤더 정보에서 시그널링될 수 있다. 타일 크기는 (예를 들어, 픽셀 내의 타일 폭 TW 및 픽셀 내의 타일 높이 TH를 전송함으로써) 명시적으로 시그널링될 수 있다. 일 경우에, 타일 크기는 디코더에 저장된 룩업 테이블에 대한 인덱스를 전송함으로써 시그널링될 수 있다. 따라서, 타일 크기는 255개까지의 타일 크기 중 하나를 나타내는 1 바이트를 사용하여 시그널링될 수 있다. 하나의 인덱스 값은 또한(예를 들어, 헤더에서 추가로 시그널링될) 사용자 정의 크기를 나타낼 수 있다. 타일 크기는, 헤더 정보에서 명시적으로 시그널링되면, 4 바이트(폭/높이 당 2 바이트)를 사용하여 통신될 수 있다.
타일링 모드가 시그널링되는 경우, 헤더 정보에서 시그널링되는 하나 이상의 타일 특정 구성이 있을 수 있다. 일 경우에, 데이터 집성 모드가 (예를 들어, 1-비트 플래그를 사용하여) 시그널링될 수 있다. 1의 값은 앞서 설명한 isAlive/StreamLength/Payload 부분과 같은, 바이트스트림 내의 타일 데이터 세그먼트가 그룹화되거나 집성되는 것을 나타낼 수 있다(예를 들어, 데이터 스트림은 먼저 타일의 세트에 대한 isAlive 헤더 정보, 다음에 타일의 세트에 대한 StreamLength 정보, 이어서 타일의 세트에 대한 페이로드 정보를 포함한다). 이러한 방식으로 바이트스트림을 조직하는 것은, 예를 들어, 각각의 타일에 대한 스트림 길이 정보가 페이로드 데이터 이전에 수신될 수 있기 때문에, 타일의 선택적 디코딩을 용이하게 할 수 있다. 이 경우에, 집성된 데이터는 또한 (예를 들어, 본 출원에 설명되는 바와 같이) 런-렝스 및 허프만 인코딩을 사용하여 선택적으로 압축될 수 있고, 이는 또한 (예를 들어, 1-비트 필드를 사용하여) 플래깅될 수 있다. 집성된 데이터 스트림의 상이한 부분은 상이한 압축 설정을 가질 수 있다. 스트림 길이 필드와 같은 정보가 허프만 인코딩되는 경우, 이어서, 이는 절대 또는 상대 값 중 어느 하나로서(예를 들어, 최종 스트림 값과의 상대 차이로서) 인코딩될 수 있다. 상대 값 인코딩은 바이트스트림 크기를 더 감소시킬 수 있다.
이러한 예에서, 개선 스트림을 인코딩하는 방법이 설명되며, 따라서 개선 비트스트림은 비디오의 프레임의 상이한 공간 부분(즉, 타일들)을 나타내는 부분 또는 청크로 분할될 수 있다. 각각의 타일에 관한 데이터는 독립적으로 수신 및 디코딩될 수 있어, 병렬 처리 및 선택적 또는 부분적 디코딩을 허용한다.
신경망 업샘플링
특정 예에서, 업샘플링은 인공 신경망을 사용함으로써 개선될 수 있다. 예를 들어, 컨볼루션 신경망은 업샘플링된 픽셀 또는 신호 요소 값을 예측하기 위해 업샘플링 동작의 일부로서 사용될 수 있다. 업샘플링 동작을 개선시키기 위해 인공 신경망을 사용하는 것은 WO 2019/111011 A1에 설명되어 있고, 이는 본 출원에 참조로 포함되어 있다. 신경망 업샘플러는 본 출원에서 예에서 설명되는 업샘플링 컴포넌트 중 어느 하나를 구현하는 데 사용될 수 있다.
도 22a는 신경망 업샘플러(2210)의 제1 예(2200)를 나타낸다. 신경망 업샘플러는 제1 레벨(n-1)의 신호 데이터와 제2 레벨(n)의 신호 데이터 사이에서 변환하는데 사용될 수 있다. 본 예와 관련하여, 신경망 업샘플러는 개선 레벨 1(즉, 품질 레벨-LoQ-1)에서 처리된 데이터와 개선 레벨 2(즉, 품질 레벨-LoQ-2)에서 처리된 데이터 사이에서 변환할 수 있다. 일 경우에, 제1 레벨(n-1)은 제1 해상도(예를 들어, size_1 x size_2 요소들)를 가질 수 있고 제2 레벨(n)은 제2 해상도(예를 들어, size_3 x size_4 요소들)를 가질 수 있다. 제2 해상도에서의 각각의 차원 내의 요소의 수는 제1 해상도에서의 각각의 차원 내의 요소의 수의 배수일 수 있다(예를 들어, size_3= F1*size_1 및 size_4= F2*size_2). 설명된 예에서, 배수는 양자 모두의 차원에서 동일할 수 있다(예를 들어, F1=F2=F 및 일부 예에서, F=2).
특정 예에서, 인공 신경망의 사용은 하나의 데이터 형식으로부터 다른 데이터 형식으로의 요소 데이터(예를 들어, 컬러 평면에 대한 값과 같은 화소들)의 변환을 포함할 수 있다. 예를 들어, 요소 데이터(예를 들어, 비-신경 경우에서 업샘플러에 대한 입력으로서)는 8-또는 16-비트 정수의 형태일 수 있는 반면, 신경망은 부동 데이터 값(예를 들어, 32-또는 64-비트 부동 소수점 값들)에 대해 동작할 수 있다. 따라서, 요소 데이터는 업샘플링 전에 정수로부터 부동 형식으로, 및/또는 신경 개선 업샘플링 후에 부동 형식으로부터 정수 형식으로 변환될 수 있다. 이는 도 22b에 예시되어 있다.
도 22b에서, 신경망 업샘플러(2210)(예를 들어, 도 22a의 업샘플러)로의 입력은 먼저 제1 변환 컴포넌트(2222)에 의해 처리된다. 제1 변환 컴포넌트(2222)는 입력 데이터를 정수 형식으로부터 부동 소수점 형식으로 변환할 수 있다. 이어서, 부동 소수점 데이터는 신경망 업샘플러(2210)에 입력되고, 신경망 업샘플러는 부동 소수점 연산을 자유롭게 수행한다. 신경망 업샘플러(2210)로부터의 출력은 부동 소수점 형식의 데이터를 포함한다. 도 22b에서, 이는 이어서 데이터를 부동 소수점 형식으로부터 정수 형식으로 변환하는 제2 변환 컴포넌트(2224)에 의해 처리된다. 정수 형식은 원래의 입력 데이터와 동일한 정수 형식 또는 상이한 정수 형식일 수 있다(예를 들어, 입력 데이터는 8-비트 정수로서 제공되지만 10-, 12-또는 16-비트 정수로서 출력될 수 있다). 제2 변환 컴포넌트(2224)의 출력은, 본 출원에 설명되는 레벨 2 개선과 같은, 상위 개선 레벨 동작에 적절한 형식으로 출력 데이터를 배치할 수 있다.
특정 예에서, 데이터 형식 변환 대신에, 또는 뿐만 아니라, 제1 및/또는 제2 변환 컴포넌트(2222 및 2224)는 또한 데이터 스케일링을 제공할 수 있다. 데이터 스케일링은 인공 신경망 아키텍처의 적용에 더 적합한 형태로 입력 데이터를 배치할 수 있다. 예를 들어, 데이터 스케일링은 정규화 동작을 포함할 수 있다. 예시적인 정규화 동작이 아래에 설명된다:
norm_value = (input_value - min_int_value) / (max_int_value - min_int_value)
여기서 input_value는 입력 값이고, min_int_value는 최소 정수 값이고 max_int_value는 최대 정수 값이다. 추가적인 스케일링은 스케일링 제수(divisor)로 승산하고(즉, 스케일 인자로 나눔) 및/또는 스케일링 오프셋을 감산함으로써 적용될 수 있다. 제1 변환 컴포넌트(2222)는 순방향 데이터 스케일링을 제공할 수 있고, 제2 변환 컴포넌트(2224)는 대응하는 역 동작(예를 들어, 역 정규화)을 적용할 수 있다. 제2 변환 컴포넌트(2224)는 또한 정수 표현을 생성하기 위해 값을 반올림할 수 있다.
도 22c는 간단한 신경망 업샘플러(2210)에 대한 예시적인 아키텍처(2230)를 나타낸다. 신경망 업샘플러(2210)는 비선형성(2234)에 의해 분리된 2개의 계층(2232, 2236)을 포함한다. 선택적인 후처리 동작(2238)이 또한 존재한다. 신경망 아키텍처를 단순화함으로써, 실시간 비디오 디코딩을 여전히 허용하면서 업샘플링이 개선될 수 있다.
컨볼루션 계층(2232, 2236)은 2차원 컨볼루션을 포함할 수 있다. 컨볼루션 계층은 미리 정의된 크기를 갖는 하나 이상의 필터 커널을 적용할 수 있다. 일 경우에, 필터 커널은 3x3 또는 4x4일 수 있다. 컨볼루션 계층은 가중치 값의 세트로 정의될 수 있는 필터 커널을 적용할 수 있고, 또한 바이어스를 적용할 수 있다. 바이어스는 컨볼루션 계층의 출력과 동일한 차원을 갖는다. 도 22c의 예에서, 양자 모두의 컨볼루션 계층(2232, 2236)은 공통 구조 또는 함수를 공유할 수 있지만 상이한 파라미터(예를 들어, 상이한 필터 커널 가중치 값 및 상이한 바이어스 값들)를 가질 수 있다. 각각의 컨볼루션 계층은 상이한 차원에서 동작할 수 있다. 각각의 컨볼루션 계층의 파라미터는 크기를 갖는 4차원 텐서-(kernel_size1, kernel_size2, input_size, output_size)로서 정의될 수 있다. 각각의 컨볼루션 계층의 입력은 크기-(input_size_1, input_size_2, input_size)의 3차원 텐서를 포함할 수 있다. 각각의 컨볼루션 계층의 출력은 크기-(input_size_1, input_size_2, output_size)의 3차원 텐서를 포함할 수 있다. 제1 컨볼루션 계층(2232)은 1의 input_size를 가질 수 있는데, 즉, 본 출원에 설명된 바와 같은 비-신경 업샘플러와 유사한 2차원 입력을 수신하도록 되어 있다. 이러한 크기에 대한 예시적인 값은 다음과 같다: kernel_size1 및 kernel_size2= 3; 제1 컨벌루션 계층(2232)에 대해, input_size=1 및 output_size=16; 및 제2 컨벌루션 계층(2236)에 대해, input_size= 16이고 output_size= 4. 구현 및 경험적 성능에 따라 다른 값이 사용될 수 있다. 출력 크기가 4인 경우(즉, 각각의 입력 요소에 대해 4개의 채널이 출력됨), 이는 주어진 화소에 대한 업샘플링된 출력을 나타내는 2x2 블록으로 리팩터링될(refactored) 수 있다.
제1 컨볼루션 계층(2232)에 대한 입력은 본 출원에 설명된 다른 업샘플러 구현과 유사한 2차원 어레이일 수 있다. 예를 들어, 신경망 업샘플러(2210)는 재구성된 프레임 및/또는 완전한 재구성된 프레임의 부분(예를 들어, 베이스 계층 플러스 레벨 1 개선의 디코딩된 출력)을 수신할 수 있다. 신경망 업샘플러(2210)의 출력은 예를 들어 본 출원에 설명되는 다른 업샘플러 구현에 따라 더 높은 해상도의 완전한 재구성된 프레임 및/또는 그 일부를 포함할 수 있다. 따라서, 신경망 업샘플러(2210)는 본 출원에 설명되는 다른 이용가능한 업샘플링 접근법과 공통으로 모듈러 컴포넌트로서 사용될 수 있다. 일 경우에, 예를 들어, 디코더에서의 신경망 업샘플러의 선택은 송신된 바이트스트림 내에서, 예를 들어, 전역 헤더 정보에서 시그널링될 수 있다.
비선형성 계층(2234)은 시그모이드 함수(sigmoid function), tanh 함수, ReLU(Rectified Linear Unit), 또는 ELU(Exponential Linear Unit)와 같은 임의의 공지된 비선형성을 포함할 수 있다. 소위 Leaky ReLU 또는 Scaled ELU와 같은 공통 함수의 변형들도 사용될 수 있다. 일 예에서, 비선형성 계층(2234)은 Leaky ReLU를 포함한다- 이 경우, 계층의 출력은 0보다 큰(또는 0과 동일한) 입력의 값에 대한 입력과 동일하고, 0보다 작은 입력의 값에 대한 입력의 미리 정의된 비율, 예를 들어 a*input와 동일하다. 일 경우에, a는 0.2로 설정될 수 있다.
도 22d는 도 22c로부터의 선택적으로 후처리 동작(2238)의 일 구현을 갖는 예(2240)를 도시한다. 이 경우, 후처리 동작은 역변환 동작(2242)을 포함할 수 있다. 이 경우, 제2 컨볼루션 계층(2236)은, 크기(size1, size2, number_of_coefficients)의 텐서, 즉, 입력과 동일하지만 방향 분해 내의 각각의 방향을 나타내는 채널을 갖는 크기를 출력할 수 있다. 역변환 동작 2242는 레벨 1 개선 계층에서 수행되는 역변환 동작과 유사할 수 있다. 이 경우, 제2 컨볼루션 계층(2236)은 업샘플링된 코딩 유닛에 대한 계수 추정치를 출력하는 것으로 볼 수 있다(예를 들어, 2x2 코딩 블록에 대해, 4-채널 출력은 A, H, V 및 D 계수를 나타낸다). 이어서, 역변환 단계는 다채널 출력을 2차원 화소 세트로 변환하고, 예를 들어, 각각의 입력 화소에 대한 [A, H, V, D] 벡터는 레벨 n에서 2x2 화소 블록으로 변환된다.
유사한 적응이 다운샘플링을 위해 제공될 수 있다. 인코더에서 적용된 업샘플링 접근법은 디코더에서 반복될 수 있다. 이용가능한 처리 자원에 기초하여 상이한 토폴로지가 제공될 수 있다.
상기 예에서의 컨볼루션 계층의 파라미터는 레벨(n-1) 및 레벨 n 데이터의 쌍에 기초하여 훈련될 수 있다. 예를 들어, 훈련 동안의 입력은 인코더 및 디코더 경로 중 하나 이상을 적용하는 것으로부터 기인하는 제1 해상도의 재구성된 비디오 데이터를 포함할 수 있는 반면, 훈련을 위한 실측 정보 출력은 원본 신호로부터의 실제 대응하는 콘텐츠(예를 들어, 업샘플링된 비디오 데이터보다는 더 높은 또는 제2 해상도 비디오 데이터)를 포함할 수 있다. 따라서, 신경망 업샘플러는 더 낮은 해상도 표현이 주어지면 입력 레벨 n 비디오 데이터(예를 들어, 입력 비디오 개선 레벨 2)를 가능한 한 가깝게 예측하도록 훈련된다. 신경망 업샘플러가 비교대상 업샘플러보다 입력 비디오에 더 가까운 출력을 생성할 수 있는 경우, 이는 레벨 2 잔차를 감소시키는 이점을 가질 것이며, 이는 인코딩된 레벨 2 개선 스트림에 대해 송신될 필요가 있는 비트의 수를 더 감소시킬 것이다. 훈련은 다양한 테스트 미디어 콘텐츠에 대해 오프라인으로 수행될 수 있다. 그 다음, 훈련으로부터 발생하는 파라미터는 온라인 예측 모드에서 사용될 수 있다. 이러한 파라미터는 픽처 그룹에 대한(예를 들어, 헤더 정보 내의) 인코딩된 바이트스트림의 일부로서 그리고/또는 무선(over-the-air) 또는 유선 업데이트 동안 디코더로 통신될 수 있다. 일 경우에, 상이한 비디오 타입은 상이한 세트의 파라미터(예를 들어, 영화 대 라이브 스포츠)를 가질 수 있다. 일 경우에, 비디오의 상이한 부분(예를 들어, 액션 기간 대 비교적 정적인 장면들)에 대해 상이한 파라미터가 사용될 수 있다.
예시적인 인코더 및 디코더 변형들
선택적인 레벨 0 업스케일링을 갖는 그래픽 예
도 23은 본 출원의 특정 예에서 설명된 디코딩 프로세스의 그래픽 표현(2300)을 도시한다. 디코딩 프로세스에서의 다양한 스테이지가 도 23에서 좌측으로부터 우측으로 도시되어 있다. 도 23의 예는 베이스 픽처의 디코딩 이후에 추가적인 업샘플링 동작이 어떻게 적용될 수 있는지를 나타낸다. 이러한 변형을 수행하기 위한 예시적인 인코더 및 예시적인 디코더가 도 25 및 26에 각각 도시된다.
도 23의 가장 좌측에는, 디코딩된 베이스 픽처(2302)가 도시되어 있다. 이는 본 출원의 예에서 설명된 바와 같은 베이스 디코더의 출력을 포함할 수 있다. 본 예에서, 더 낮은 해상도의 디코딩된 베이스 픽처(2302)에 관해 선택 가능한 업샘플링(즉, 업스케일링)이 수행된다. 예를 들어, 일 경우에, 선택적으로 적용될 수 있는 도 1, 도 3a 및 도 3b의 베이스 인코더(112 또는 332) 이전의 추가의 다운샘플링 컴포넌트를 포함할 수 있다. 더 낮은 해상도의 디코딩된 베이스 픽처(2302)는 레벨 0 또는 계층 0 신호로서 고려될 수 있다. 디코딩된 베이스 픽처의 업샘플링은 시그널링된 스케일링 인자에 기초하여 적용될 수 있다.
도 23은 예비 중간 픽처(2304)를 생성하기 위한 제1 업샘플링 동작을 도시한다. 이는 레벨 1 개선과 관련된 공간 해상도(예를 들어, 레벨 1 또는 계층 1 신호)에 있는 것으로 고려될 수 있다. 도 23에서, 예비 중간 픽처(2304)는 조합된 중간 픽처(2310)를 생성하기 위해(예를 들어, 개선 서브 계층 1로부터 생성된) 디코딩된 잔차(2308)의 제1 계층에 추가된다(2306). 그 다음, 조합된 중간 픽처(2310)는 제2 업샘플링 동작 동안 업샘플링되어 예비 출력 픽처(2312)를 생성할 수 있다. 제2 업샘플링 동작은 시그널링된 스케일링 인자에 따라 선택적으로 적용될 수 있다(예를 들어, 생략되거나 2가 아니라 1차원에서만 수행될 수 있다). 예비 출력 픽처(2312)는 레벨 2 공간 해상도에 있는 것으로 고려될 수 있다. 조합된 중간 픽처(2310)는 합산 컴포넌트(220 또는 530)의 출력을 포함할 수 있고, 예비 출력 픽처(2312)는 합산 컴포넌트(258 또는 558)에 대한 입력을 포함할 수 있다.
스테이지(2314)에서, 예비 출력 픽처(2312)가 (예를 들어, 개선 서브 계층 2로부터 얻어지는) 디코딩된 잔차의 제2 계층(2316)에 추가된다. 디코딩된 잔차의 제2 계층(2316)은 시간적 버퍼(2320)에 저장된 정보로부터의 추가된(2318) 기여도로 도시된다. 정보(2320)는 잔차의 제2 계층(2316)을 재구성하는 데 필요한 정보의 양을 감소시킬 수 있다. 이는 (예를 들어, 제1 레벨-레벨 1-해상도와 비교하여) 증가된 공간 해상도로 인해 제2 레벨(레벨 2)에서 더 많은 데이터가 있기 때문에 유익할 수 있다. 도 23에서, 마지막 추가의 출력은 최종 조합된 출력 픽처(2322)이다. 이는 단색 비디오로 보여질 있거나 및/또는 프로세스는 컬러 비디오 출력을 생성하기 위해 복수의 컬러 성분 또는 평면에 대해 반복될 수 있다.
제4 예시적인 디코더
도 24는 제4 예시적인 디코더(2400)를 도시한다. 제4 예시적인 디코더(2400)는 본 출원에 설명된 다른 예시적인 디코더의 변형으로서 볼 수 있다. 도 24는 위에서 그리고 아래에서 더 상세히 설명되는 프로세스 중 일부를 블록도로 나타낸다. 방식은 잔차 데이터의 개선 계층을 포함하고, 이는 그 후, 일단 처리되고 디코딩되면, 디코딩된 베이스 계층에 추가된다. 개선 계층은 2개의 서브 계층 1 및 2를 더 포함하고, 각각은 잔차 데이터의 상이한 세트를 포함한다. 또한, 예를 들어, 제로-모션 벡터 알고리즘을 사용하여, 서브 계층 2에서 잔차의 일부를 예측하는 시그널링을 포함하는 데이터의 시간적 계층이 있다.
도 24에서, 디코더(2400)는 한 세트의 헤더(2402)를 수신한다. 이는 수신된 조합된 비트스트림의 일부를 형성할 수 있고/있거나 클라우드 제어 컴포넌트로부터 유래할 수 있다. 헤더(2402)는 디코더(2400)를 구성하기 위해 디코더 구성 컴포넌트(2404)에 의해 사용되는 디코더 구성 정보를 포함할 수 있다. 디코더 구성 컴포넌트(2404)는 도 14c의 구성 인터페이스(1434)와 유사할 수 있다.
도 24는 또한 베이스 계층(2410) 및 2개의 서브 계층으로 이루어져 있는 개선 계층을 나타내고 있다: 서브 계층 1(2420) 및 서브 계층 2(2440). 이러한 서브 계층은 이전에 설명된 레벨 또는 서브-레벨(예를 들어, 각각 레벨 1 및 2)과 등가일 수 있다. 베이스 계층(2410)은 인코딩된 베이스(2412)를 수신한다. 다른 예에서와 같이, 베이스 디코딩 프로세스(2414)는 인코딩된 베이스(2412)를 디코딩하여 레벨 1 베이스 픽처(2416)를 생성한다. 베이스 계층 업샘플링이 없다면, 레벨 1 베이스 픽처(2416)는 예비 중간 픽처(2304)를 포함할 수 있다. 특정 다른 예에서, 베이스 픽처(2416)는 예비 중간 픽처(2304)를 생성하기 위해 스케일링 정보에 기초하여 업샘플링될 수 있다.
서브 계층 1은 레벨 1 계수 계층(2422)의 세트를 수신한다. 예를 들어, 레벨 1 계수 계층(2422)은 도 21a 및 도 21b에서의 LoQ1(2122)에 대한 계층(2130)과 유사한 계층을 포함할 수 있다. 서브 계층 2는 레벨 2 계수 계층(2442)의 세트를 수신한다. 이는 도 21A 및 21B의 LoQ2(2124)에 대한 계층(2130)과 유사한 계층을 포함할 수 있다. 도 21a 및 도 21b에 도시된 바와 같이 다수의 평면에 대해 복수의 계층이 수신될 수 있다-즉, 도 24에 도시된 프로세스가 다수의 (컬러) 평면에 병렬로 적용될 수 있다-. 도 24에서, 시간적 계층(2450)도 수신된다. 이는 전술되고 도 12d에 예시된 것과 같은 시간적 시그널링을 포함할 수 있다. 인코딩된 베이스(2412), 레벨 1 계수 계층(2422), 레벨 2 계수 계층, 시간적 계층(2450) 및 헤더(2402) 중 2개 이상이, 예를 들어, 도 9a 또는 도 21a 및 도 21b에 도시된 라인을 따라, 조합된 비트스트림으로서 수신될 수 있다.
서브 계층 1(2420)을 참조하면, 인코딩된 양자화된 계수는 엔트로피 디코딩 컴포넌트(2423), 역양자화 컴포넌트(2424), 역변환 컴포넌트(2425) 및 평활화 필터(2426)에 의해 수신되고 처리된다. 인코딩된 양자화된 계수는 디코딩, 탈양자화 및 역변환될 수 있으며, 디블로킹 필터로 더 처리되어, 서브 계층 1에 대한 디코딩된 잔차(예를 들어, 도 23의 개선 서브 계층 1의 잔차(2308))를 생성할 수 있다. 서브 계층 2 (2440)을 참조하면, 인코딩된 양자화된 계수는 개선 서브 계층 2에 대해 수신되고, 엔트로피 디코딩 컴포넌트(2443), 시간적 처리 컴포넌트(2444), 역양자화 컴포넌트(2445), 및 역변환 컴포넌트(2446)에 의해 처리된다. 따라서, 인코딩된 양자화된 계수은 디코딩, 탈양자화 및 역변환되어 서브 계층 2에 대한 디코딩된 잔차(예를 들어, 도 23의 개선 서브 계층 2의 잔차(2316))를 생성할 수 있다. 탈양자화 이전에, 디코딩된 양자화된 변환 계수은 시간적 버퍼를 적용하는 시간적 처리 컴포넌트(2444)에 의해 처리될 수 있다. 시간적 버퍼는 이전 프레임에 대한 변환된 잔차(즉, 계수들)를 포함한다. 이를 조합할지 여부에 대한 결정은 탈양자화 및 역변환 전에 계수를 재구성하기 위해 인터 또는 인트라 예측을 사용할지 여부에 관한 디코더에 의해 수신된 정보에 의존하며, 인터 예측은 디코딩된 양자화된 변환 계수로부터 수신된 추가 정보와 함께, 탈양자화 및 역변환될 계수를 예측하기 위해 시간적 버퍼로부터의 정보를 사용하는 것을 의미한다.
앞서 설명된 바와 같이, 베이스 계층은 스케일링 정보에 기초하여 추가로 업샘플링되어(도시되지 않음) 업샘플링된 베이스(예를 들어, 도 23의 예비 중간 픽처(2304))를 생성할 수 있다. 어떤 경우든, 레벨 1 해상도에서 베이스 계층(2410)의 출력은 제1 합산 컴포넌트(2430)에서 개선 서브 계층 1에 의해 출력된 디코딩된 잔차와 조합되어(도 23의 2310과 같은) 조합된 중간 픽처를 생성한다. 이 픽처는 업샘플링된 베이스(예를 들어, 도 23의 예비 출력 픽처(2312))를 생성하기 위해 스케일링 정보에 기초하여 업샘플러(2432)에 의해 더 업샘플링될 수 있다. 업샘플러는 또한 이전 예에서 설명된 바와 같이 예측된 잔차(2434)를 추가하는 단계를 포함할 수 있다. 그 다음, 예비 출력 픽처는 제2 합산 컴포넌트(2454)에서 개선 서브 계층 2 (2440)에 의해 출력된 디코딩된 잔차에 추가되어 최종 출력 픽처(2460)(예를 들어, 도 23의 최종 조합된 출력 픽처(2322))을 생성할 수 있다.
제5 예시적인 인코더 및 디코더
도 25 및 26은 각각 도 1, 3a 및 3b의 인코더 아키텍처 및 도 2, 5a 및 5b의 디코더 아키텍처의 변형을 도시한다.
비트스트림을 생성하기 위한 인코딩 프로세스(2500)가 도 25에 도시되어 있다. 먼저, 입력 시퀀스(2502)가 제1 다운 샘플러(2504)에 공급되고, 이어서 제2 다운 샘플러(2506)(즉, 도면에서 다운-스케일러라고 지칭되는 연속적인 다운 샘플러)가 선택된 스케일링 모드에 따라 처리된다. 도 25의 변형은, 베이스 계층 이전에 추가적인 다운샘플링 및 업샘플링 스테이지가 존재한다는 점에서, 예를 들어, 제2 다운-스케일러(2506)로서 도시된 추가적인 다운샘플링 스테이지가 데이터를 베이스 인코더(2512)에 전달하기 이전에 가능하고, (도 25에서 제1 업-스케일러(2508)로서 도시된) 추가적인 업샘플링 스테이지가 베이스 계층으로부터 디코딩된 데이터의 수신 이후에 가능하다는 점에서 이전 예의 변형과는 상이하다. 특정 예에서, 주어진 스케일링 모드는 각각의 스테이지에서 다운-스케일러 및 업-스케일러 쌍을 턴온 및 턴오프하는데 사용될 수 있다. 일 경우에, 스케일링 모드는, 예를 들어, 본 출원에 설명된 수평 단독 다운샘플링/업샘플링에 따라, 스케일링의 방향을 나타낼 수 있다. 제2 다운-스케일러(2506) 및 제1 업-스케일러(2508)가 턴오프되면, 공간 스케일링은 도 1, 3a 및 3b의 것과 유사하다.
도 25에서, 이전 예에 따라, 그 자신의 명세에 따라 베이스 비트스트림(2516)을 생성하는 베이스 코덱이 사용된다. 이 인코딩된 베이스는 현재 비디오 코딩 프레임워크에 대한 조합된 비트스트림의 일부로서 포함될 수 있다.
추가적인 업스케일링을 사용하거나 사용하지 않고서, 재구성된 베이스 픽처, 예를 들어 베이스 인코딩된 프레임의 디코딩된 버전이 제1 감산 컴포넌트(2520)에서 1차 다운스케일링된 입력 시퀀스로부터 감산되어, 서브 계층 1 잔차(본 출원에 설명되는 바와 같은 레벨 1 잔차 데이터)를 생성한다. 이 잔차는 제1 개선 계층의 인코딩 프로세스에 대한 시작점을 형성한다. 본 출원에 설명된 바와 같은 변환 컴포넌트(2521), 양자화 컴포넌트(2523) 및 엔트로피 인코딩 컴포넌트(2524)(특히)는 (레벨 1) 엔트로피 인코딩된 양자화된 변환 계수(2526)를 생성하기 위해(레벨 1) 제1 잔차 세트를 처리한다.
도 25에서, 이전 예에 따라, 서브 계층 1로부터의 엔트로피 인코딩된 양자화된 변환 계수은 역 또는 디코딩 동작을 수행하는 인-루프 디코더에 의해 처리된다. 이러한 동작은 디코더에서 수행될 제1 잔차 세트에 대한 디코딩 프로세스를 모사한다. 도 25의 일 예에서, 이는 엔트로피 디코딩 컴포넌트(2525), 역양자화 컴포넌트(2527), 역변환 컴포넌트(2528) 및 레벨 1 필터(2530)를 포함한다. 이는 이전에 설명된 컴포넌트와 유사할 수 있다. 처리된 또는 "디코딩된" 제1 잔차 세트는 합산 컴포넌트(2532)에서 베이스 인코더의 출력으로부터 유도된(예를 들어, 디코딩되고 선택적으로 업스케일링된) 데이터에 추가되어 재구성된 프레임을 생성한다. 도 25에서, 재구성된 프레임은 제2 업-스케일러(2534)에 의해 처리된다. 업-스케일러의 사용은 역시 선택된 스케일링 모드에 의존할 수 있다. 마지막으로, (L2 계층으로도 지칭될 수 있는) 제2 서브 계층 2에 대한 잔차는 입력 시퀀스 및 업스케일링된 재구성의 감산에 의해 제2 감산 컴포넌트(2536)에서 계산된다. 이는 (레벨 2) 잔차의 제2 세트를 형성하고, 이 잔차는 또한 코딩 컴포넌트 또는 도구의 세트에 의해 처리되고, 이는 변환 컴포넌트(2541), 시간적 예측 컴포넌트(2542), 양자화 컴포넌트(2543) 및 엔트로피 인코딩 컴포넌트(2544)를 포함한다. 출력은 레벨 2 계수 계층(2546)의 세트이다. 다른 예에서 설명된 바와 같이, 시간적 모드가 활성화되면, 특정의 시간적 중복 정보를 제거하고 레벨 2 잔차 스트림의 에너지(예를 들어, 값의 수 및 비-제로 잔차 값의 수)를 감소시키기 위해 변환 계수에 대해 시간적 예측 컴포넌트(2542)에 의해 추가의 시간적 예측이 적용될 수 있다. 서브 계층 2의 엔트로피 인코딩된 양자화된 변환 계수는 물론 블록 기반의 시간적 예측의 사용을 지정하는 시간적 계층(2556)이 개선 비트스트림에 포함되어 있다. 시간적 계층(2556)은 (예를 들어, 도 12c 및 도 12d를 참조하여 설명된 것과 유사한) 이전 예를 참조하여 설명된 시간적 시그널링을 포함할 수 있다. 이는 엔트로피 인코딩 컴포넌트(2557)에 의해 엔트로피 인코딩될 수 있다. 엔트로피 인코딩 컴포넌트(2557)는 예를 참조하여 논의된 바와 같이 적어도 런-렝스 인코딩을 적용할 수 있다.
인코더(2500)는, 예를 들어, 도 14a 내지 도 14c의 예를 참조하여 설명된 바와 같이, 인코더 구성 정보(2565)의 세트로 구성될 수 있다. 이 정보는 출력 비트스트림에 대한 일련의 헤더(2566)로서 디코더로 송신될 수 있다. 도 25에서, 인코더에 대한 조합된 비트스트림은 헤더(2566), 시간적 계층(2556), 레벨 2(L2) 인코딩된 계수(2546), 레벨 1(L1) 인코딩된 계수(2526) 및 인코딩된 베이스 스트림(2516)을 포함할 수 있다.
도 26은 예에 따른 디코더(2600)의 변형을 도시한다. 디코더는 도 2, 5a, 5b 및 24 중 어느 하나에 도시된 디코더의 변형을 포함할 수 있다. 도 26의 디코더는 도 25의 인코더와 함께 사용될 수 있다.
먼저, 프레임의 출력 시퀀스의 생성을 위해, 디코더(2600)는 비트스트림을 분석한다. 도 26에서 알 수 있는 바와 같이, 프로세스는 다시 3개의 부분으로 분할될 수 있다.
(예를 들어, 계층 0에서) 디코딩된 베이스 픽처를 생성하기 위하여, 베이스 디코더(2618)에는 추출된 베이스 비트스트림(2616)이 공급된다. 선택된 스케일링 모드에 따르면, 이 재구성된 픽처는 제1 세트(레벨 1)의 잔차를 추가하는 합산 컴포넌트(2630)에 앞서 추가의 제1 업-스케일러(2608)에 의해 업스케일링될 수 있다. 제1 업-스케일러(2608)로부터 합산 컴포넌트(2630)로의 입력은 예비 중간 픽처라 지칭될 수 있다.
베이스 계층 디코딩에 후속하여(또는 이와 병렬로), (잔차의 2개의 서브 계층을 포함하는) 개선 계층 비트스트림이 디코딩될 필요가 있다. 먼저, 서브 계층 1(L1)에 속하는 계수(2626)는 인코딩 프로세스 동안 사용되는 코딩 컴포넌트 또는 도구의 역 버전을 사용하여 디코딩된다. 따라서, 레벨 1 계수 계층(2626)은, 차례로, 엔트로피 디코딩 컴포넌트(2671), 역양자화 컴포넌트(2672), 및 역변환 컴포넌트(2673)에 의해 처리된다. 추가적으로, 서브 계층 1(L1) 필터(2632)는 변환 블록(즉, 코딩 유닛)의 경계를 평활화하기 위해 적용될 수 있다. 서브 계층 1(L1) 디코딩 프로세스의 출력은 개선 서브 계층 1 출력으로 지칭될 수 있다. 이 개선 서브 계층 1 출력은 제1 (하위) 합산 컴포넌트(2630)에서 예비 중간 픽처에 추가되어, 조합된 중간 픽처가 된다. 역시, 스케일링 모두에 따라, 제2 업-스케일러(2687)가 적용될 수 있고, 결과적인 예비 출력 픽처가 생성될 수 있다. 예비 출력 픽처는 제2 상위 합산 컴포넌트(2658)에 제공된다. 이는 전체 출력 픽처와 동일한 차원을 갖는다.
최종 단계로서, 제2 개선 서브 계층(2)에 대한 인코딩된 계수(2646)가 디코딩된다. 다시 말하지만, 이는 본 출원에서의 다른 예에서 설명된 바와 같은 역 코딩 성분 또는 도구의 세트를 사용한다. 도 26에서, 이 성분은 엔트로피 디코딩 컴포넌트(2681), 역양자화 컴포넌트(2682) 및 역변환 컴포넌트(2683)를 포함한다. 시간적 모드가 활성화되면, 이때, 시간적 예측 컴포넌트(2685)는 시간적 예측을 적용할 수 있다. 시간적 예측은 제2 개선 서브 계층(2) 내의 임의의 지점에서 적용될 수 있다. 일 경우에, 이는 양자화된 변환 계수에 적용된다. 시간적 예측은 시간적 계층(2656)으로서 수신된 시그널링에 기초하여 적용될 수 있다. 도 26에서, 시간적 계층(2656)은 엔트로피 디코딩 컴포넌트(2690)에 의해 디코딩된다(예를 들어, 런-렝스 디코딩될 수 있다). 시간적 예측의 출력은 개선 서브 계층 2 출력으로서 제2 상위 합산 컴포넌트(2658)에 제공된다. 그 다음, 이는 상기 합산 컴포넌트(2658)에 의해 예비 출력 픽처에 추가되어 조합된 출력 픽처(2660)를 디코딩 프로세스의 최종 출력으로서 형성한다.
다시 말하면, 디코딩 프로세스는 비트 스트림의 헤더(2666) 내에서 송신되는 디코더 구성(2692)에 따라 제어될 수 있다.
상기 예를 참조하여 설명된 바와 같이, 비교대상 스케일러블 코덱과 달리, 본 출원에 설명된 새로운 접근법은 서브 계층을 인코딩하기 위해 사용되는 코덱에 대해 완전히 애그노스틱할 수 있다. 이는, 예를 들어, 도 2, 도 24 및 도 26에 도시된 바와 같이, 서브 계층에 관한 특정 정보도 없이 상위 계층이 디코딩가능하기 때문이다. 도 26에 도시된 바와 같이, 디코더는 인코더에 의해 생성된 다수의 스트림을 수신한다. 이는 다음을 포함하는 5개 정도의 스트림일 수 있다: 베이스 코덱(예를 들어, AVC, HEVC, 또는 임의의 다른 코덱)에 입력 비디오의 다운샘플링된 버전을 공급함으로써 생성되는 제1 인코딩된 스트림(인코딩된 베이스); 재구성된 베이스 코덱 비디오와 입력 비디오의 다운샘플링된 버전(레벨 1 잔차들) 사이의 차이를 취함으로써 획득된 잔차를 처리함으로써 생성되는 제2 인코딩된 스트림(레벨 1 계수 계층들); 재구성된 베이스 코딩된 비디오의 보정된 버전의 업샘플링된 버전과 입력 비디오 사이의 차이 (레벨 2 잔차들)를 취함으로써 획득된 잔차를 처리함으로써 생성되는 제3 인코딩된 스트림(레벨 2 계수 계층들); 디코더에 명령하기 위해 시간적 처리로부터 생성되는 (예를 들어, 시간적 계층의 형태의) 제4 인코딩된 스트림; 및 디코더를 구성하기 위해 생성되는 제5 스트림(헤더들). 인코딩된 베이스 스트림은 인코더에서 사용되는 베이스 코덱에 의해 구현되는 인코딩 알고리즘에 대응하는 디코딩 알고리즘을 구현하는 베이스 디코더에 의해 디코딩되고, 이의 출력은 디코딩된 베이스이다. 별개로 그리고 독립적으로, 레벨 1 계수 그룹은 레벨 1 잔차 데이터를 획득하기 위하여 디코딩된다. 또한, 개별적으로 그리고 독립적으로, 레벨 2 잔차 데이터를 획득하기 위해 레벨 2 계수 그룹이 디코딩된다. 이어서, 디코딩된 베이스, 레벨 1 잔차 데이터 및 레벨 2 잔차 데이터가 조합된다. 특히, 디코딩된 베이스는 레벨 1 잔차 데이터와 조합되어 중간 픽처를 생성한다. 이어서, 중간 픽처가 업샘플링되고, 레벨 2 잔차 데이터와 더 조합될 수 있다.
또한, 새로운 접근법은 어떠한 인터-블록 예측도 사용하지 않고 픽처를 처리하는 인코딩 및 디코딩 프로세스를 사용한다. 오히려, 이는 화소의 NxN 블록(예를 들어, 2x2 또는 4x4)을 변환하고 서로 독립적으로 블록을 처리함으로써 픽처를 처리한다. 이는 효율적인 처리는 물론, 이웃 블록에 대한 의존성이 없게 하며, 따라서 픽처의 처리가 병렬화되는 것을 가능하게 한다.
일반적으로 요약하면, 도 26을 참조하면, 본 발명에 따른 비제한적인 예시적인 실시예가 도시되어 있다. 도 26에는, 예시적인 디코딩 모듈(2600)이 도시되어 있다. 디코딩 모듈(2600)은 인코딩된 베이스(2616), 레벨 1 계수 그룹(2626), 레벨 2 계수 그룹(2646), 시간적 계수 그룹(2656) 및 헤더(2666)를 포함하는 복수의 입력 비트스트림을 수신한다.
일반적으로, 디코딩 모듈(2600)은 2개의 데이터 계층을 처리한다. 제1 계층, 즉 베이스 계층은 인코딩된 베이스를 포함하는 수신된 데이터 스트림(2616)을 포함한다. 그 다음, 인코딩된 베이스(2616)는 베이스 디코딩 모듈(2618)에 전송되고, 베이스 디코딩 모듈(2618)은 인코딩된 베이스(2616)를 디코딩하여 디코딩된 베이스 픽처를 생성한다. 베이스 디코딩은 인코딩된 베이스의 인코딩된 형식에 따라 AVC, HEVC, AV1, VVC, EVC, VC-6, VP9 등과 같은 임의의 기존의 베이스 코덱 알고리즘을 구현하는 디코더일 수 있다.
제2 계층, 즉 개선 계층은 2개의 개선 서브 계층으로 추가로 구성된다. 디코딩 모듈은 계수의 제1 그룹, 즉 레벨 1 계수 그룹(2626)을 수신하고, 이는 그 후 엔트로피 디코딩 모듈(2671)에 전달되어 디코딩된 계수 그룹을 생성한다. 이는 그 후 역양자화 모듈(2672)에 전달되고, 역양자화 모듈은 하나 이상의 탈양자화 파라미터를 사용하여 탈양자화된 계수 그룹을 생성한다. 그 후, 이는 역변환 모듈(2673)에 전달되고, 역변환 모듈은 탈양자화된 계수 그룹에 대해 역변환을 수행하여 개선 서브 계층 1에서 잔차(레벨 1 잔차들)를 생성한다. 그 다음, 잔차는 평활화 필터(2632)에 의해 필터링될 수 있다. 레벨 1 잔차(즉, 디코딩된 제1 개선 서브 계층)는 베이스 픽처의 처리된 출력에 적용된다.
디코딩 모듈은 계수의 제2 그룹, 즉 레벨 2 계수 그룹(2646)을 수신하고, 이는 그 후 엔트로피 디코딩 모듈(2681)에 전달되어 디코딩된 계수 그룹을 생성한다. 이는 그 후 역양자화 모듈(2682)에 전달되고, 역양자화 모듈은 하나 이상의 탈양자화 파라미터를 사용하여 탈양자화된 계수 그룹을 생성한다. 개선 서브 계층 2에 사용되는 탈양자화 파라미터는 개선 서브 계층 1에 사용되는 탈양자화 파라미터와 상이할 수 있다. 탈양자화된 계수 그룹은 그 후 역변환 모듈(2683)에 전달되고 이 역변환 모듈은 탈양자화된 계수 그룹에 대해 역변환을 수행하여 개선 서브 계층 2(레벨 2 잔차들)에서 잔차를 생성한다.
설명된 예의 양태의 변형
앞서 설명한 특정 양태의 다수의 변형이 이제 설명될 것이다.
부분 타일링
특정 예에서, 계수의 각각의 그룹은 개별적으로 인코딩 및 디코딩될 수 있다. 그러나, 각각의 그룹은 전체 프레임에 대한 각각의 계수를 포함한다(예를 들어, 2x2 변환에 대해 하나의 그룹은 모든 "A" 계수에 관련될 수 있고 다른 그룹은 모든 "V" 계수에 관련될 수 있다). 본 설명에서, 계수의 그룹은 또한 계수 계층으로 지칭된다.
특정 변형에서, 프레임의 더 작은 부분(예를 들어, 타일들)은 디코더에 의해 개별적으로 디코딩될 수 있고, 따라서 부분 디코딩과 같은 특징을 가능하게 한다.
특히, 비트스트림은 계수의 타일링이 인에이블되었는지를 디코더에 시그널링한다. 인에이블되는 경우, 이때, 디코더는 계수의 그룹 내에서, 선택된 타일에 대응하는 그룹의 부분을 식별함으로써 디코딩할 타일을 선택할 수 있다.
예를 들어, 일 경우에, 도 9a의 계층은 도 21a에 도시된 바와 같이 타일링될 수 있다. 타일(2140) 각각은 대안적으로 계수(SG들)의 서브 그룹이라고 지칭될 수 있다. 각각의 계수 그룹은 M개의 서브 그룹으로 분할될 수 있고, 각각의 서브 그룹은 타일에 대응한다.
특정 예에서, 각각의 서브 그룹의 크기는 서브 그룹 사이에서 상이할 수 있는데, 그 이유는 크기가 각각의 그룹 내에 인코딩된 데이터의 양에 의존할 수 있기 때문이다. 각각의 서브 그룹의 크기는 물론, 서브 그룹이 활성인지 여부(서브 그룹이 임의의 인코딩된 데이터를 포함하는 경우에만 활성임)가 압축된 메타데이터로서 시그널링될 수 있으며, 압축된 메타데이터는, 예를 들어, 다른 예와 관련하여 설명된 바와 같이 허프만 코딩 및/또는 RLE를 사용하여 인코딩 및 디코딩될 수 있다.
부분 디코딩, 예를 들어, 특정 타일을 디코딩하지만 다른 타일을 디코딩하지 않는 것은, 가상 및 증강 현실 애플리케이션 및 텔레프레즌스 애플리케이션(telepresence applications)(예를 들어, 원격 의료 또는 수술)에 특히 유용할 수 있다. 본 출원에 설명된 솔루션은 디코더가 예를 들어 뷰포트 영역에 기초하여 디코딩할 비디오의 부분을 선택적으로 선택하고, 그 부분만을 디코딩할 수 있게 한다. 비제한적인 예로서, 디코더는 8K 픽처(8,192 x 4,320 픽셀)를 수신할 수 있지만, 그러나, 예를 들어, 사용자의 관점(예를 들어, 4,096 x 2,160 픽셀의 4K 영역)으로 인해 그의 일부만을 디스플레이하기로 결정할 수 있다.
특히, 본 출원의 예에서 설명된 것과 같은 계층적 코딩 방식에서, 베이스 계층은 레거시 코덱(예를 들어, HEVC, VVC, EVC, AV1, VP9, AVC 등)으로 인코딩된 더 낮은 해상도의 계층(예를 들어, 4K)일 수 있고, 개선 계층은 본 출원에 설명된 저 복잡성 개선 비디오 코딩과 같은 개선 코덱으로 인코딩된 더 높은 해상도의 계층(예를 들어, 8K)일 수 있다. 디코더는 디코딩할 8K 전체 해상도 픽처의 일부, 예를 들어 4K 부분을 선택할 수 있다. 디코더는 먼저 레거시 코덱을 사용하여 베이스 계층을 디코딩할 것이고, 그 후 8K 개선 계층의 관심 부분, 예를 들어 4K 영역 또는 디코더의 결정에 따라 약간 더 큰 영역만을 선택할 것이다. 이러한 방식으로, 디코더는 해상도를 잃지 않고 픽처의 관심 영역을 디코딩하기 위한 시간을 상당히 가속할 것이다.
상기 변형의 예시적인 방법은 다음을 포함할 수 있다: 재구성 데이터의 제1 및 제2 세트를 수신하는 단계- 상기 재구성 데이터는 (예를 들어, 본 출원에 설명된 인코딩된 잔차 데이터를 포함하는) 비디오 시퀀스를 재구성하기 위해 사용됨 -; 비디오 시퀀스에서 관심 영역을 선택하는 단계; 선택된 관심 영역에 기초하여 재구성 데이터의 제1 세트의 제1 부분을 디코딩하는 단계; 및 선택된 관심 영역에 기초하여 재구성 데이터의 제2 세트의 제2 부분을 디코딩하는 단계. 제1 부분은 제1 세트의 전체에 대응할 수 있다. 방법은 비디오 시퀀스의 예비 재구성을 생성하기 위해 제1 부분을 처리하는 단계를 포함할 수 있다. 방법은 디코딩된 제2 부분을 예비 재구성과 조합하여 비디오 시퀀스의 최종 재구성을 생성하는 단계를 더 포함할 수 있다. 최종 재구성은 전체 제1 및 제2 세트가 디코딩되고 함께 조합되는 경우에 생성될 재구성의 관심 영역에 대응할 수 있다.
사용자 데이터 시그널링
본 출원에 설명된 예의 특정 변형에서, 비트스트림 내의 비트는 특히 4x4 변환의 경우에 변환 블록과 관련된 계수 중 하나(예를 들어, HH 계수) 대신에 사용자 데이터의 존재를 시그널링하는 데 사용될 수 있다. 예를 들어, 이는 다른 예와 관련하여 설명된(그리고, 예를 들어, 도 11c에 도시된) 시간적 시그널링 대신에 사용자 데이터를 시그널링하는 것을 포함할 수 있다.
특정 예에서, 계수 중 하나 대신에 사용자 데이터의 인코딩은 다음과 같이 구성될 수 있다. 비트가 "0"으로 설정되면, 이때, 디코더는 그 데이터를 관련 변환 계수로서 해석할 것이다. 비트가 "1"로 설정되면, 이때, 관련 계수에 포함된 데이터는 사용자 데이터인 것으로 고려되고, 디코더는 그 데이터를 무시하도록, 즉, 관련 계수를 0으로서 디코딩하도록 구성된다.
이러한 방식으로 송신되는 사용자 데이터는 디코더가 예를 들어 본 출원에 참고로 포함되는 공동 출원 특허 출원 번호 GB1914413.8에 설명된 바와 같은 다양한 특징 추출 및 유도를 포함하는 보충 정보를 획득하는 것을 가능하게 하는 데 유용할 수 있다.
파라미터의 모듈식 시그널링
본 개시내용의 일 양태에서, 특정 디코딩 파라미터를 모듈 방식으로 시그널링하기 위한 방법이 제공된다. 특히, 비트스트림의 시그널링 부분에서(예를 들어, 시퀀스 파라미터 세트(SPS)와 같은 시퀀스와, 또는 픽처 파라미터 세트(PPS)와 같은 픽처와 관련된 파라미터를 나타내는 헤더에서) 특정 파라미터가 비트스트림에서 표시되는 것을 나타내기 위해 하나 이상의 비트가 사용될 수 있다.
특히, 비트스트림은 하나 이상의 특정 값으로 설정될 때, 디코딩될 추가 정보의 존재를 디코더에 나타내는 하나 이상의 비트를 포함할 수 있다. 디코더는, 일단 비트스트림을 수신하면, 하나 이상의 비트를 디코딩하고, 하나 이상의 비트가 하나 이상의 특정 값에 대응한다고 결정할 시에, 비트스트림에서의 상기 하나 이상의 후속 비트의 세트를, 비트스트림(예를 들어, 비트스트림에 포함된 페이로드)을 디코딩할 때에 사용되어야 할 하나 이상의 특정 파라미터로서 해석한다.
비제한적인 예에서, 상기 하나 이상의 특정 파라미터는 인코딩된 데이터의 일부의 디코딩과 관련될 수 있다. 예를 들어, 하나 이상의 특정 파라미터는 인코딩된 데이터의 일부를 디코딩하기 위해 하나 이상의 양자화 파라미터와 관련될 수 있다. 예를 들어, 인코딩된 데이터가 인코딩된 데이터의 2개 이상의 부분을 포함하는 경우(예를 들어, 각각의 부분은 앞서 설명된 바와 같이 개선 계층의 서브 계층일 수 있음), 하나 이상의 특정 파라미터는 인코딩된 데이터의 2개 이상의 부분 중 일부를 디코딩하는 것과 관련된 하나 이상의 양자화 파라미터일 수 있다. 다른 예에서, 하나 이상의 특정 파라미터는, 예를 들어 디더링 함수를 적용하는, 디코더에서 수행될 일부 후처리 동작과 관련된 하나 이상의 파라미터일 수 있다.
특정 예에서, 하나 이상의 비트는 요구될 때에만 양자화 파라미터(예를 들어, step_width_level1)의 명시적 시그널링을 가능하게 하는 비트(예를 들어, step_width_level1_enabled 비트)일 수 있다. 예를 들어, 이는 앞서 설명한 바와 같이 서브 계층 1 내에 인코딩된 데이터가 존재할 때에만 발생할 수 있다. 특히, 비트 step_width_level1_enabled가 "0"으로 설정되면, 이때, 서브 계층 1에 대한 단계 폭의 값은 디폴트로 최대값으로 설정될 것이다. 한편, 비트 step_width_level1_enabled가 "1"로 설정될 때, 이때, step_width_level1은 명시적으로 시그널링되고 서브 계층 1에 대한 단계 폭의 값은 그것으로부터 유도된다. 디코딩 모듈/디코더는 비트 step_width_level1_enabled를 디코딩할 것이고, 그것이 "0"으로 설정된다고 결정하면, 서브 계층 1에 대한 단계 폭의 값을 최대값으로 설정할 수 있다. 한편, "1"로 설정된 것으로 결정되면, 서브 계층 1에 대한 단계 폭의 값을 파라미터 step_width_level1에 대응하는 값으로 설정할 수 있다(예를 들어, 0과 2N-1 사이의 값, 여기서 N은 step_width_level1과 관련된 비트 수임).
상이한 예에서, 하나 이상의 비트는 decoder_control이 "1"로 설정되는 경우에 2개의 파라미터(예를 들어, 디더링 제어 변수 dithering_type 및 dithering_strength)가 픽처별 기반으로 시그널링되는 것을 가능하게 하기 위한 비트(예를 들어, decoder_control 비트)일 수 있다. 디코딩 모듈/디코더는 비트 decoder_control을 디코딩할 것이며, "1"로 설정된 것으로 결정하는 경우, 디더링 제어 변수 dithering_type 및 dithering_strength를 디코딩하고, 본 출원에 설명되는 바와 같이 디더링을 적용할 것이다.
상기 메커니즘은, 여기서 특정 예를 참조하여 설명되지만 일반적인 경우로 쉽게 일반화될 수 있는 일부 중요한 기술적 이점을 제공한다. 첫 번째로, 비트 step_width_level1_enabled의 사용으로부터 유래하는 일부 효율 이득이 있고, 이는 서브 계층 1에 대해 개선이 사용되지 않는 경우에 픽처별 N 비트 절약을 유발한다. 이는, 예를 들어, 50fps 시퀀스에 대해 800bps를 절감할 수 있다. 둘째, 비트 step_width_level1_enabled의 사용은 디코딩 모듈/디코더가 개선 서브 계층 1에 대한 모든 처리를 완전히 "우회(by-pass)"할 수 있게 하며, 따라서 디코딩 복잡성을 더 감소시킬 수 있다.
상이한 시그널링 접근법의 추가 예가 아래의 신택스 및 시멘틱 섹션과 관련하여 설명된다.
하이브리드 디코딩 모듈
본 개시내용의 양태에서, 적어도 제1 디코딩 알고리즘으로 디코딩가능한 제1 비트스트림(예를 들어, AVC, HEVC, VVC 등과 같은 베이스 코덱) 및 제2 디코딩 알고리즘으로 디코딩가능한 제2 비트스트림(예를 들어, 본 출원에 설명되는 개선 코덱들)으로 구성되는 조합된 비트스트림의 디코딩을 가능하게 하기 위한 디코딩 모듈이 제공된다. 2개의 비트스트림은 본 출원에서 인코딩된 베이스 스트림 및 인코딩된 개선 스트림으로 지칭되는 비트스트림을 포함할 수 있으며, 인코딩된 개선 스트림은 복수의 계층, 레벨 또는 서브-레벨 각각에 대응하는 2개의 서브-스트림을 가질 수 있다.
제1 비-제한적인 양태에서, 조합된 비트스트림은 제1 비트스트림 및 제2 비트스트림을 분리하고, 제1 비트스트림을(제1 디코딩 알고리즘으로 디코딩할 수 있는) 제1 디코딩 모듈에, 그리고 제2 비트스트림을(제2 디코딩 알고리즘으로 디코딩할 수 있는) 제2 디코딩 모듈에 전송하는 수신 모듈에 의해 수신된다. 이는 역멀티플렉서의 형태를 포함할 수 있다. 또한, 모듈은 제1 디코딩 모듈로부터 디코딩된 제1 비트스트림에 대응하는 스트림을 수신하고, 이를 제2 디코딩 모듈에 전달할 수 있다. 이어서, 제2 디코딩 모듈은 이를 사용하여, 본 명세서에서 더 상세히 설명되는 바와 같은 최종 디코딩된 스트림을 생성할 수 있다.
제2 비-제한적인 양태에서, 조합된 비트스트림은 (제1 디코딩 알고리즘으로 디코딩할 수 있는) 제1 디코딩 모듈에 의해, 그리고 동시에, (제2 디코딩 알고리즘으로 디코딩할 수 있는) 제2 디코딩 모듈에 의해 수신된다. 제1 디코딩 모듈은 제1 비트스트림만을 디코딩하고 제2 비트스트림을 폐기할 것이다. 제2 디코딩 모듈은 제2 비트스트림만을 디코딩하고 제1 비트스트림을 폐기할 것이다. 그 다음, 제2 디코딩 모듈은, 다른 예에서 더 상세히 설명되는 바와 같이, 디코딩된 제1 비트스트림을 수신한 다음 이를 사용하여 최종 디코딩된 스트림을 생성할 수 있다.
아래에 설명된 NALU 처리의 예는 이 양태 중 특정 예를 더 상세히 설명한다.
NALU 처리
베이스 스트림 및 개선 스트림이 네트워크 추상화 계층 유닛(Network Abstraction Layer Units) 또는 NALU의 세트 내에 캡슐화될 수 있는 예가 본 출원에 설명된다. 네트워크 추상화 계층 또는 NAL은 H.264/AVC 및 HEVC 비디오 코딩 표준의 일부로서 도입되었다. 이는, 예를 들어, 베이스 스트림 및 개선 스트림 중 하나 이상을 포함할 수 있는 비디오 코딩 계층이 RTP/IP(인터넷 트래픽용) 및 MPEG-2(방송 신호용)와 같은 기본 네트워크 전송 계층에 맵핑되는 메커니즘을 제공한다.
각각의 NALU는 정수 바이트 수를 포함하는 정보의 패킷으로 볼 수 있다. 한 세트의 바이트는 NAL 헤더를 형성한다. NAL 헤더는 NALU 내에 포함된 데이터의 타입을 나타낼 수 있다. 이는, 예를 들어, 비트스트림에 대한 신택스의 이후의 예에 예시되어 있다. NAL 헤더는 다수의 바이트(예를 들어, 1 또는 2 바이트)일 수 있다. NALU의 나머지 바이트는 NAL 헤더에 의해 표시된 타입의 페이로드 데이터를 포함한다. NAL 헤더는 NALU 타입을 나타내는 nal_unit_type 변수를 포함할 수 있다. 이는 나중에 설명된 예 중 일부에 나타나 있다.
NAL 유닛은 패킷-지향 및 비트스트림-지향 전송 시스템 양자 모두에서 사용하기 위한 일반 형식을 지정할 수 있고, 인코더에 의해 생성된 일련의 NALU는 NALU 스트림이라 지칭될 수 있다. 본 경우에, 베이스 계층 및 개선 계층 양자 모두는 NALU 스트림으로서 캡슐화될 수 있다. 특정 경우에, 각각의 계층은 상이한 NALU 스트림을 포함할 수 있다. 이 경우에, 제1 및 제2 개선 계층 스트림(예를 들어, 본 출원에 설명된 레벨 1 및 레벨 2)은 단일 NALU 스트림(예를 들어, 일반적인 "개선 스트림")으로 캡슐화되거나 또는 별개의 NALU 스트림(예를 들어, 개선 스트림 1 및 개선 스트림 2)으로서 공급될 수 있다.
일 실시예에서, 신택스의 후반 섹션에 나타나는 바와 같이, 인코딩된 개선 데이터를 포함하는 적어도 하나의 개선 스트림은 특정 NAL 헤더 유닛 타입 값(예를 들어, 후반 섹션에서 0)으로 표시된다. 이는 NAL 스트림이 본 출원의 예에서 설명된 비디오 코딩 명세와 관련된다는 것을 디코더에 나타낸다.
특정 구현에서는, 레거시 디코더가 본 출원에 설명되는 바와 같은 인코딩된 베이스 스트림을 수신 및 디코딩할 수 있는 것이 바람직할 수 있다. 그러나, 특정 디코더는 개선 계층에 대한 NALU를 파싱하지 못할 수 있는데, 예를 들어, 이는 AVC 또는 HEVC와 같은 레거시 비디오 코딩 표준에 대한 NALU만을 처리하도록 구성될 수 있다. 이 경우에, 디코더가 레거시 비디오 코딩 표준의 지정된 구성을 준수하지 않는 NALU를 수신하는 경우, 디코더는 에러를 경험하고 및/또는 인코딩된 베이스 스트림은 물론 인코딩된 개선 스트림을 디코딩하는 것을 거절할 수 있다. 예를 들어, 레거시 디코더는 인코딩된 베이스 스트림 및 인코딩된 개선 스트림 양자 모두를 수신할 수 있지만; 그러나, 인코딩된 개선 스트림은 레거시 디코더에 의해 예상되지 않는 NALU 타입을 가지므로, 인코딩된 베이스 스트림이 레거시 표준에 따라 구성되더라도, 인코딩된 베이스 스트림의 처리를 방지하는 예외를 초래할 수 있다. 또는 대안적으로, 개선 스트림에 의해 사용되는 NALU 타입은 레거시 표준에 따라 상이하게 파싱되어, 디코더의 예측불가능한 동작을 초래할 수 있다.
이러한 이슈에 대한 하나의 솔루션은, 수신된 NALU를 파싱하고, 베이스 코딩 기술뿐만 아니라 개선 코딩 기술의 지식으로 구성되며, 따라서 다운스트림 레거시 디코더에 전송되는 NALU를 필터링할 수 있는, 디코더에서의 프론트-엔드 컴포넌트를 제공하는 것이다. 그러나, 이는 디코딩을 복잡하게 할 수 있으며, 디코딩 파이프라인 내에 추가적인 엔티티를 필요로 한다.
다른 솔루션은 인코딩된 개선 스트림이 베이스 코딩 기술(예를 들어, 베이스 코덱)에 의해 지원되는 NALU 구조를 사용하는 것이지만, 여기서 NALU 헤더는 베이스 코딩 기술에 의해 사용되지 않는 유닛 타입을 나타낸다. 이러한 예에서는 단일 개선 스트림이 참조될 것이며, 이 스트림은 설명되는 개선 스트림의 2개의 계층을 캡슐화한다. 그러나, 다른 예에서는, 2개의 개별 개선 스트림이 존재할 수 있다.
앞서 설명한 두 번째 솔루션에서, 개선 스트림은 베이스 스트림에 의해 지원되는 NALU 구조를 사용할 수 있지만, NALU 타입을 베이스 코딩 기술 내에서 지정되지 않거나 예비 유닛 타입으로 설정된 유닛 타입으로 설정할 수 있다. 예를 들어, 베이스 코딩 기술은 동일한 수의 가능한 유닛 타입을 나타내는 256 또는 65536개의 가능한 정수 값을 각각 나타내는, 바이트 또는 2 바이트에 의해 설정되는 유닛 타입을 가질 수 있다. (예를 들어, 기술에 대한 디코딩 명세에서 지정된 바와 같이) 적은 수의 이 유닛 타입만이 실제로 베이스 코딩 기술에 의해 사용될 수 있으며, 나머지 유닛 타입은 "미지정" 유닛 타입의 범위로서 표시된다. 특정 경우에, 정수 값의 특정 범위는 "미지정"으로서 표시될 뿐만 아니라, 또는 그 대신에 예비될 수 있다.
이 경우, 개선 스트림의 인코더는 베이스 코딩 기술의 구조를 준수하지만 미지정 또는 예비 값으로 설정된 NALU 타입을 갖는 NALU를 사용하여 스트림을 캡슐화할 수 있다. 레거시 디코더는 이어서 개선 스트림에 대한 NALU의 헤더를 수신하여 파싱할 수 있지만, 지정되지 않거나 예비 유닛 타입의 표시는 레거시 디코더로 하여금(예를 들어, 베이스 코딩 기술에 의해 명령되는 바와 같이) 이 유닛을 단순히 무시하거나 폐기하게 할 수 있다. 이어서, 레거시 디코더는 인코딩된 베이스 스트림에 대한 NALU들도 수신할 수 있으며, 이는 개선 스트림에 대한 NALU와 동일한 NAL 구조를 갖지만, NALU 타입은 지정되지 않거나 예비되지 않을 것이다. 동일한 NAL 구조가 사용될 때, NALU의 헤더는 레거시 표준에 따라 종래의 스트림으로서 처리될 수 있다. 이 경우, 개선 스트림을 처리하도록 구성된 개선 디코더는 NALU 세트로서 개선 스트림을 수신하고 NAL 헤더를 파싱하여 유닛 타입을 결정할 수 있다. 이 경우, 유닛 타입이 베이스 코딩 기술에 대해 지정되지 않거나 예비될 수 있지만, 개선 코딩 기술에 대한 명세에서 지정될 수 있으며, 이는 개선 디코더가 개선 스트림을 파싱 및 처리할 수 있음을 의미한다.
예를 들어, 예시적인 베이스 코딩 기술에 대한 NALU 헤더는 1 바이트일 수 있다. 이 예시적인 베이스 코딩 기술에서, 0 내지 128의 범위는 상이한 지정된(즉, 지원되는) 유닛 타입을 나타낼 수 있고, 129 내지 192의 범위는 지정되지 않은 유닛 타입의 범위를 나타낼 수 있고, 193 내지 255의 범위는 예비 값을 나타낼 수 있다. 따라서, 본 출원에 설명된 인코딩된 베이스 스트림은 베이스 코딩 기술에 의해 지원되고 지원되는 범위(0 내지 128) 내의 유닛 타입을 가지는 NALU 구조를 사용할 수 있다. 개선 코딩 기술은 동일한 NALU 헤더 및 구조를 사용하지만 범위 129 내지 255 (또는 129 내지 192 또는 193 내지 255 중 하나) 내의 NALU 타입을 사용할 수 있다. 레거시 디코더 및 개선 디코더는 인코딩된 베이스 스트림 및 인코딩된 개선 스트림 양자 모두를 수신할 수 있다. 개선 코딩 기술은 디코더에 의해 무시되거나 폐기되도록 베이스 코딩 기술에서 지정되는 NALU 타입을 사용하도록 구성될 수 있다. 따라서, 레거시 디코더는 양자 모두의 스트림을 수신하지만, 그러나, 베이스 스트림만을 처리하여, 개선 스트림에 대한 NALU(즉, 패킷)를 폐기한다. 한편, 개선 디코더는 개선 스트림에 대한 패킷을 처리할 수 있지만, 그렇게 구성되는 경우에는 베이스 스트림에 대한 NALU(즉, 패킷)를 폐기할 수 있다. 이러한 방식으로, 프론트-엔드 파서가 패킷을 배포할 필요가 없다. 이는 모두 NALU 헤더에 지정된 NALU 타입에 기초하여 수행된다.
그래서, 특정 예에서, 패킷(예를 들어, NALU들)의 스트림이 존재하며, 여기서 패킷은 인코딩된 베이스 스트림 또는 인코딩된 개선 스트림과 관련된다. 인코딩된 베이스 스트림 및 인코딩된 개선 스트림의 패킷은 베이스 코딩 기술(예를 들어, 베이스 코덱)과 호환되는 구조를 갖는다. 패킷은 헤더를 포함하고, 헤더는 패킷 타입(예를 들어, NALU 타입)을 나타낸다. 인코딩된 베이스 스트림에 관한 패킷은 베이스 코딩 기술에 의해 지원되는 (예를 들어, 베이스 코딩 기술에 따라 구성된 디코더에 의해 파싱되고 처리될 수 있는 값을 갖는) 패킷 타입 값의 제1 범위를 갖는다. 인코딩된 개선 스트림에 관련된 패킷은 패킷 타입 값의 제1 범위와 상이하고 베이스 코딩 기술 내의 기능을 갖지 않는 (예를 들어, 지정되지 않거나 예비) 패킷 타입 값의 제2 범위를 갖는다. 따라서, 패킷 타입은 패킷과 이러한 패킷을 처리하도록 적응된 디코더 사이의 맵핑을 허용한다.
따라서, 베이스 코딩 기술에 따라 구성된 디코더는 인코딩된 베이스 스트림을 처리하고, 인코딩된 베이스 스트림에 관한 패킷을 사용하여 디코딩된 베이스 스트림을 출력할 수 있다. 동일한 디코더는 인코딩된 개선 스트림과 관련된 패킷의 헤더를 처리할 수 있지만(즉, 중단 내에서 인코딩된 개선 스트림 패킷을 처리할 수 있지만), 베이스 코딩 기술의 명세에 따라 폐기 또는 무시할 수 있다. 디코딩된 베이스 스트림은 디스플레이 디바이스 상에 렌더링되거나, 아래에서 설명하는 바와 같이 디코딩된 개선 스트림과 함께 사용될 수 있다.
따라서, (예를 들어, 본 출원에서 "개선" 코딩과 관련하여 설명되는 바와 같은, 본 출원에서 저 복잡성 개선 비디오 코딩 또는 LCEVC 코덱으로도 지칭되는) 개선 코딩 기술에 따라 구성되는 디코더는 인코딩된 개선 스트림을 처리하고, 인코딩된 개선 스트림과 관련된 패킷을 사용하여 디코딩된 개선 스트림을 출력할 수 있다. 동일한 디코더는 개선 코딩 기술의 명세에 따라 인코딩된 베이스 스트림에 관한 패킷을 폐기하거나 무시할 수 있다. 디코딩된 개선 스트림은 본 출원에 설명되는 바와 같이 디코딩된 베이스 스트림과 조합되어, 예를 들어 베이스 스트림의 품질 레벨보다 높은 품질 레벨로 개선된 재구성 비디오를 생성할 수 있다.
양자 모두의 경우에, 패킷 헤더에 설명된 패킷 타입(예를 들어, NALU 헤더의 NALU 타입)은 NALU와 디코더 사이의 맵핑을 가능하게 한다. 따라서, 동일한 데이터 스트림이 레거시 및 개선 디코더 양자 모두에 의해 수신되고 처리될 수 있지만, 유닛 타입 값에 기초하여 그 스트림의 상이한 컴포넌트(예를 들어, 베이스 및 개선 부분들)에 선택적으로 처리 적용될 수 있다. 레거시 디코더는 또한 에러 없이 개선 코딩 기술과 함께 동작할 수 있다. 양자 모두의 디코더는 NALU의 헤더를 파싱하기만 하면 되고, 이는 대량의 데이터의 효율적인 처리를 허용하며, 예를 들어, 어느 디코더도 처리하지 않는 데이터 스트림에 대한 페이로드 데이터를 파싱할 필요가 없다.
개선 인코더에 의한 NAL 구조의 선택
상기 경우에, 이전에 설명된 예의 맥락에서, 상이한 베이스 코딩 기술이 사용될 수 있다. 예를 들어, 베이스 코딩 기술(즉, 베이스 코덱)은 구성 데이터에 기초하여 개선 인코더에 의해 선택될 수 있다. 구성 데이터는 사용자 선택 및/또는 하나 이상의 동작 파라미터에 따른 선택을 나타낼 수 있다. 이 경우에, 개선 인코더는 다수의 베이스 인코딩을 지원한다.
개선 인코더가 다수의 베이스 인코딩을 지원하는 경우에, 개선 인코더는 선택된 베이스 인코딩에 기초하여 NAL 구조, 예를 들어 NALU에 대한 형식 및 NALU 타입을 선택하도록 구성될 수 있다. 예를 들어, 하이브리드 인코딩은 본 출원에 설명된 바와 같은 베이스 인코딩 및 개선 인코딩을 포함할 수 있다. 위의 예에서, 베이스 인코딩 및 개선 인코딩 양자 모두에 대한 NALU는 NALU 헤더가 베이스 디코더에 의해 파싱될 수 있는 구조를 갖는다. 이 경우, 베이스 인코딩 및 개선 인코딩 양자 모두에 사용되는 구조는 선택된 베이스 인코딩에 기초하여 선택될 수 있다. 베이스 인코더가 디폴트로 호환가능한 NALU 구조를 갖는 인코딩된 베이스 스트림을 생성할 수 있지만, 개선 인코더는 베이스 인코딩과 호환가능한 NALU 구조를 갖는 하나 이상의 개선 스트림을 생성하도록 구성될 필요가 있을 수 있다. 즉, 개선 인코더는 다수의 NAL 구조를 지원하고 베이스 인코더에 기초하여 필요한 구조를 선택할 수 있다. 개선 인코더는 사용되고 있는 베이스 코딩 기술(예를 들어, AVC 또는 HEVC)을 결정하고 그 후 그 베이스 코딩 기술에 따라 헤더에서 NALU 및 NALU 타입을 구성할 수 있다. 이는 상이한 베이스 코딩 기술이 상이한 비지정 및/또는 예비 유닛 타입을 갖는 경우에 유용할 수 있다. 예를 들어, 상이한 베이스 코딩 기술은 NALU 헤더에 대해 상이한 수의 바이트를 사용할 수 있고, 이와 같이 미지정 및/또는 예비 유닛 타입에 대한 정수 값은 베이스 코딩 기술에 대해 상이할 수 있다. 상기 예에서의 개선 인코더는 베이스 코딩 기술과 호환되는 NALU 헤더 값(예를 들어, 미지정 및/또는 예비 유닛 타입)을 선택하여 베이스 및 개선 스트림 양자 모두의 성공 디코딩을 용이하게 하도록 적응된다.
유사하게, 다수의 베이스 코딩 기술이 선택 가능할 때, 개선 디코더는 수신된 스트림(예를 들어, 대응하는 베이스 스트림과 관련된 개선 스트림)과 관련하여 사용되고 있는 베이스 코딩 기술을 결정하고 그에 따라 NAL을 파싱하도록 구성될 수 있다. 예를 들어, 개선 디코더는 사용되고 있는 베이스 코덱을 결정하고 이 결정을 사용하여, 적어도 NALU 헤더의 파싱을 비롯한 NALU의 파싱을 구성할 수 있다. 일 경우에, 베이스 코딩 기술은 개선 인코더에 의해 시그널링될 수 있다. 다른 경우에, 개선 디코더는, 예를 들어, 개선 인코더로부터의 명시적인 시그널링 없이, 수신된 NALU를 일련의 가능한 NALU와 매칭하도록 구성될 수 있다. 예를 들어, NALU 헤더의 바이트 크기는 특정한 베이스 코딩 기술을 나타낼 수 있다. 개선 디코더는 인코딩된 베이스 스트림 및 인코딩된 개선 스트림 중 하나 이상에 대한 하나 이상의 NALU 헤더를 파싱하여 베이스 코딩 기술을 결정하도록 구성될 수 있다. 또 다른 경우에, 개선 디코더는 어느 베이스 코덱이 사용되고 있는지를 나타내는 정보를 베이스 코덱으로부터 수신하도록 구성될 수 있다. 이어서, 이 정보는 (예를 들어, 무시하기 위해) 인코딩된 베이스 스트림 및 (예를 들어, 처리하기 위해) 인코딩된 개선 스트림 중 하나 이상을 파싱하기 위한 NALU 구성을 선택하는 데 사용될 수 있다. 이 경우, 베이스 코덱 및/또는 구성 계층은 애플리케이션 프로그래밍 인터페이스를 포함할 수 있고, 여기서, 방법 호출은 베이스 코덱 타입을 반환하는 데(즉, 베이스 스트림을 디코딩하는 데 사용되는 적어도 베이스 디코더를 결정하는 데) 사용된다.
업샘플러 계수 시그널링
본 출원에 설명되는 바와 같은 개선 인코더 및 디코더는 하나의 공간 계층으로부터 다른 공간 계층으로(예를 들어, 더 낮은 해상도로부터 더 높은 해상도로) 변환하기 위해 업샘플링("업스케일링")을 수행할 수 있다. 업샘플링은 하나 이상의 차원으로 수행될 수 있으며, 특정 경우에는 생략될 수 있다.
상이한 타입의 업샘플링이 사용될 수 있다. 적어도 최근접 이웃, 쌍선형, 쌍삼차, 수정된 삼차 및 신경망 업샘플러가 본 출원의 예에서 설명된다. 이러한 업샘플러는 업샘플링 커널을 사용할 수 있다. 업샘플링 커널은 업샘플링을 구현하기 위한 하나 이상의 계수 값을 포함할 수 있다. 예를 들어, 하나 이상의 계수 값은, 가산 또는 승산 같은, 하나 이상의 업샘플링 계산에서 사용될 수 있다. 일 경우에, 업샘플링 커널은 하나 이상의 행렬 변환에서 사용하기 위한 계수 값을 포함할 수 있다. 업샘플링 커널은 다차원 어레이 (예를 들어, 행렬 또는 텐서)를 포함할 수 있다. 예를 들어, 삼차 업샘플러는 업샘플링 커널로서 2차원 행렬을 사용할 수 있고, 신경망 업샘플러는 하나 이상의 다차원 텐서를 사용하는 일련의 하나 이상의 컨볼루션(예를 들어, 비선형 활성화 함수를 갖거나 갖지 않음)을 사용할 수 있다(본 출원에 설명된 4D 및 3D 예를 참조).
상기 경우에, 업샘플러(또는 업샘플링 컴포넌트, 프로세스 또는 연산)는 업샘플러 타입 및 구성가능한 계수 세트(앞서 설명한 "커널")를 통해 정의될 수 있다. 구성가능한 계수 세트는 개선 디코더에 시그널링될 수 있다. 시그널링은 개선 인코더로부터 그리고/또는 클라우드 구성 서버로부터 전송될 수 있다. 일 경우에, 업샘플러 타입은 구성가능한 계수의 수신된 세트를 파싱(예를 들어, 처리 또는 다른 방식으로 검사)함으로써 개선 디코더에 의해 결정될 수 있다. 이는 업샘플러 타입을 명시적으로 시그널링하고, 따라서 대역폭을 확보할 필요성을 피할 수 있다.
일 경우에, 복수의 상이한 업샘플러 타입은 (예를 들어, 하나 이상의 행렬 또는 다차원 어레이로서) 공통 또는 공유 형식으로 공급되는 구성가능한 계수 세트를 가질 수 있다. 예를 들어, 삼차, 수정된 삼차 또는 신경망 업샘플러의 세트는 다차원 어레이로서 저장된 계수를 갖는 커널을 사용할 수 있다. 이어서, 이러한 계수의 값은 어느 타입의 업샘플러가 적용되는지를 결정할 수 있다. 이러한 방식으로, 개선 디코더로 시그널링되는 커널 계수 값을 변경함으로써 업샘플러가 변경될 수 있다. 이는 다시 업샘플러 타입을 명시적으로 시그널링할 필요를 없앨 수 있으며, 업샘플러 정의에서의 효율은 다수의 업샘플러 타입(예를 들어, 컴파일된 컴퓨터 프로그램 코드 내의 최적화들)에 의해 공유될 수 있다.
시간적 시그널링 및 시간적 수정자
본 출원의 양태에서, 인코딩된 데이터(인코딩된 계수들)와는 별개로 시간적 정보를 관리하기 위한 메커니즘이 있다. 특히, 시간적 시그널링 정보는 인코딩된 데이터의 개별 계층을 통해 전송된다. 계수가 전송되지 않는 경우(예를 들어, 레벨 2 개선 서브 계층에 대한 단계-폭을 최대값으로 설정함으로써), 시간적 버퍼는 이전 프레임에서 계산되고 버퍼에 저장된 잔차를 현재 프레임에 계속해서 적용하는데 사용될 수 있다.
특히, 개선이 전송되지 않는 경우(예를 들어, no_enhancement_flag를 0으로 설정함으로써), 시간적 버퍼는 시그널링에 기초하여(예를 들어, temporal_refresh_bit를 1로 설정함으로써) 전체 프레임에 대해 리셋될 수 있으며, 이 경우에 현재 프레임에 잔차가 적용되지 않는다. 그러나, 버퍼가 시그널링에 기초하여(예를 들어, temporal_refresh_bit를 0으로 설정함으로써) 전체 프레임에 대해 리셋되지 않는 경우, 제2 플래그를 사용하여, 시간적 시그널링이 디코더에 의해 판독되어야 하는지를 결정할 수 있다. 특히, 인코더는 시간적 시그널링 계층이 존재한다는 것을 디코더에 알리기 위해 플래그를 1로 설정(예를 들어, temporal_signalling_present_flag를 1로 설정)할 것이다. 그 경우, 디코더는 시간적 시그널링을 판독하고 인코더에 의해 표시된 시간적 로직을 디코딩된 비트스트림에 적용해야 한다. 특히, 이는 시그널링에서 표시되는 타일 및/또는 블록을 리프레시해야 한다. 한편, 인코더가 플래그를 0으로 설정하는 경우(예를 들어, temporal_signalling_present_flag가 0으로 설정되는 경우), 시간적 시그널링이 전송되지 않으며, 디코더는 시간적 버퍼에 포함된 잔차를 현재 프레임에 적용할 것이다.
상기 메커니즘에 의해, 정적 영역에 속하는 시간적 정보 및 잔차는 더 이상의 데이터가 전송되지 않는 경우에도 보존될 수 있고, 따라서 높은 품질 및 디테일을 유지하는 것을 허용한다.
제2 양태에서, 개선 서브 계층에 적용될 단계-폭은 픽처의 정적 영역에 대해 감소된다. 특히, 버퍼로부터의 정보를 사용하여 디코딩될 타일(즉, 블록의 그룹들) 및 현재 프레임으로부터의 추가적인 델타 잔차, 즉, 정적 타일을 식별하는 시그널링에 기초하여, 정적이고 따라서, 시각적으로 관련될 가능성이 더 많은 비디오의 부분에 대한 더 큰 양자화 입도를 가능하게 하기 위해, 단계-폭은 시그널링된 파라미터(예를 들어, stepwidth_modifier)에 비례하는 인자만큼 감소될 수 있다. 또한, 단계-폭이 델타 잔차(즉, 현재 프레임에 대한 잔차와 시간적 버퍼에 이미 저장된 병치된 잔차 사이의 차이)에 적용되기 때문에, 더 낮은 단계-폭(즉, 더 높은 양자화 단계)은 잔차들보다 훨씬 더 작을 가능성이 있는 델타 잔차의 양자화에서 더 많은 정확도를 가능하게 할 것이다. 따라서, 개선된 품질이 달성될 것이다.
무손실 코딩을 위한 양자화 데드존
무손실 코딩의 경우, 데드존을 더 작은 크기로 변경할 필요가 있을 수 있다. 이는 무손실 경우에, 0에 가까운 계수들이 0으로 설정되지 않고 인코딩되는 것을 보장하는 것이 필요할 수 있기 때문이다. 그 경우, 상이한 데드존은, 예를 들어, 손실 인코딩의 경우에와 같은 단계-폭의 크기보다 더 큰 크기보다는 단계-폭의 크기로 설정함으로써 생성될 수 있다. 데드존이 변경되는 전형적인 값들은 8과 16 사이의 단계-폭들의 범위 내에 있으며, 전형적으로 16이다.
비트스트림
본 출원에 설명된 비디오 코딩 프레임워크에 의해 생성되는 예시적인 비트스트림은 더 낮은 해상도에 있을 수 있는 베이스 계층, 및 최대 2개의 서브 계층으로 구성된 개선 계층을 함유할 수 있다. 다음 하위 섹션에서는 이 비트스트림의 구조와 정보를 추출할 수 있는 방법을 간단하게 설명한다.
베이스 계층은 임의의 비디오 인코더를 사용하여 생성할 수 있으며 다양한 기존 및 미래의 비디오 인코딩 기술을 사용하여 유연하게 구현될 수 있다. 베이스 계층의 비트스트림은 기존 코덱의 출력으로서의 비트스트림과 유사할 수 있다. 개선 계층은 추가적인 다른 구조를 가지고 있다. 이 구조 내에서, 신택스 요소는 NAL(네트워크 추상화 계층) 유닛의 세트로 캡슐화된다. 이들은 또한 (예를 들어, 비디오를 재구성하기 위해 디코더에서) 베이스 계층 디코딩된 정보와 개선 계층 정보의 동기화를 가능하게 한다. GOP(group of pictures) 내 비디오 프레임의 위치에 따라, 전역 구성을 지정하고 디코더를 제어하기 위한 추가 데이터가 존재할 수 있다.
본 출원의 예에서 설명된 바와 같이, 그리고 도 9a, 도 21a 및 도 21b에 도시되어 있는 바와 같이, 하나의 개선 픽처의 데이터는 여러 청크로 인코딩될 수 있다. 이들 데이터 청크는 앞서 언급한 도면에 도시되어 있는 바와 같이 계층적으로 조직될 수 있다. 이들 예에서, (예를 들어, 컬러 성분에 대응하는) 각각의 평면에 대해, 최대 2개의 개선 서브 계층이 추출된다. 그 각각은 변환 계수의 수많은 계수 그룹으로 다시 전개된다. 계수의 수는 변환의 선택된 타입에 의존한다(예를 들어, 2x2 코딩 유닛에 적용된 4x4 변환은 4개의 계수를 생성할 수 있고 4x4 코딩 유닛에 적용된 16x16 변환은 16개의 계수를 생성할 수 있음). 추가적으로, 시간적 처리 모드가 사용되는 경우, 하나 이상의 개선 서브 계층(예를 들어, 레벨 1 및 레벨 2 서브 계층 중 하나 이상)에 대한 시간적 데이터를 갖는 추가 청크가 존재할 수 있다. 개선 비트스트림 내의 엔트로피 인코딩된 변환 계수는 본 출원에 설명된 코딩 도구에 의해 디코더에서 처리될 수 있다.
본 출원에 설명된 바와 같이, 용어 비트스트림, 바이트스트림 및 NALU의 스트림은 상호 교환적으로 사용될 수 있다. 예시의 구현은 개선 레벨의 구현만을 포함할 수 있으며 베이스 인코더 및 디코더와 같은 베이스 계층 구현은 제3자 컴포넌트에 의해 구현될 수 있고, 여기서, 베이스 계층 구현의 출력이 수신되어 본 출원에 설명된 바와 같은 개선 디코딩과 함께 개선 레벨의 디코딩된 평면과 조합될 수 있다.
특정 예에서, 비트스트림은 2개의 형식 중 하나일 수 있다: NAL 유닛 스트림 형식 또는 바이트 스트림 형식. NAL 유닛 스트림 형식은 개념적으로 더 "기본적인" 타입으로 고려될 수 있다. 이는 NAL 유닛이라고 지칭되는 신택스 구조의 시퀀스로 구성된다. 이 시퀀스는 청디코딩 순서로 순서화된다. NAL 유닛 스트림에서 NAL 유닛의 디코딩 순서(및 콘텐츠)에 대한 제약이 부여될 수 있다. 바이트 스트림 형식은 NAL 유닛을 청디코딩 순서로 순서화하고 각각의 NAL 유닛에 시작 코드 프리픽스 및 0개 이상의 제로-값 바이트를 프리픽싱하여 바이트 스트림을 형성함으로써 NAL 유닛 스트림 형식으로부터 구성될 수 있다. NAL 유닛 스트림 형식은 이 바이트 스트림 내에서 고유한 시작 코드 프리픽스 패턴의 위치를 검색하여 바이트 스트림 형식에서 추출할 수 있다.
비트 지향 전달의 경우, 바이트 스트림 형식의 비트 순서는 제1 바이트의 최상위 비트에서 시작하여 제1 바이트의 최하위 비트로 진행하고, 제2 바이트의 최상위 비트가 뒤따르는 등으로 지정될 수 있다. 바이트 스트림 형식은 바이트 스트림 NAL 유닛 신택스 구조의 시퀀스로 구성될 수 있다. 각각의 바이트 스트림 NAL 유닛 신택스 구조는 하나의 nal_unit( NumBytesInNalUnit ) 신택스 구조가 뒤따르는 하나의 4 바이트 길이 표시를 함유할 수 있다. 이 신택스 구조는 다음과 같을 수 있다:
Figure pct00058
바이트 스트림에서 바이트 스트림 NAL 유닛의 순서는 바이트 스트림 NAL 유닛에 함유된 NAL 유닛의 디코딩 순서를 따를 수 있다. 각각의 바이트 스트림 NAL 유닛의 콘텐츠는 바이트 스트림 NAL 유닛에 함유된 NAL 유닛과 동일한 액세스 유닛과 관련될 수 있다. 위의 nal_unit_length는 nal_unit() 신택스 구조 내 NAL 유닛의 길이를 나타내는 4 바이트 길이 필드이다.
베이스 비트스트림과 개선 비트스트림 사이의 관계
베이스 비트스트림과 개선 비트스트림 사이의 관계는 다음 2개의 메커니즘 중 하나를 사용하여 실현될 수 있다. 첫 번째 경우, 베이스 비트스트림과 개선 비트스트림이 인터리빙되지 않으면 베이스 디코더의 액세스 유닛과 개선 디코더(즉, 개선 계층)의 액세스 유닛 사이의 관계가 지정될 수 있다. 두 번째 경우, 베이스 디코더 비트스트림과 개선 비트스트림이 단일 엘리멘터리 스트림에 인터리빙되는 경우, 베이스 비트스트림의 액세스 유닛과 개선 비트스트림의 액세스 유닛을 인터리빙하여 관계가 실현될 수 있다.
예를 들어, 첫 번째 경우에는 국제 표준(IS) 13818-1 프로그램 스트림에 지정된 인터리빙 및 동기화 메커니즘 또는 IS 14496-14 파일 형식에 지정된 인터리빙 및 동기화 메커니즘을 사용하여 관계를 지정할 수 있다. 두 번째 경우에, 베이스 액세스 유닛 및 대응하는 개선 액세스 유닛의 인터리빙은 다수의 제약을 사용하여 구현될 수 있다. 이러한 제약은 다음 중 하나 이상을 포함할 수 있다: 입력 베이스 비트스트림에서 액세스 유닛의 순서가 인터리빙된 베이스 및 개선 비트스트림에서 보존됨; 대응하는 베이스 액세스 유닛과 관련된 개선 액세스 유닛은 비트스트림 순서로 베이스 액세스 유닛 직후에 그리고 다음 베이스 액세스 유닛 직전에 삽입됨; 베이스 비트스트림에 속하는 액세스 유닛과 개선 비트스트림에 속하는 액세스 유닛 사이의 구별은 이후의 예와 관련하여 설명되는 NAL 유닛 타입에 의해 실현됨; 및 개선 디코더는 개선 액세스 유닛을 디코딩하여 획득된 잔차가 바로 선행하는 베이스 액세스 유닛을 디코딩하여 획득된 베이스 픽처의 샘플과 조합하여 처리되어야 한다고 추론함.
페이로드 처리
입력 비트스트림에는 페이로드 데이터 블록 유닛 프로세스가 적용될 수 있다. 페이로드 데이터 블록 유닛 프로세스는 입력 비트스트림을 데이터 블록으로 분리하는 것을 포함할 수 있으며, 여기서 각각의 데이터 블록은 NALU로 캡슐화된다. NALU는 개선 레벨을 베이스 레벨과 동기화하기 위해 앞서 설명된 바와 같이 사용될 수 있다. 각각의 데이터 블록은 헤더 및 페이로드를 포함할 수 있다. 페이로드 데이터 블록 유닛은 헤더 및 페이로드를 유도하기 위해 각각의 데이터 블록을 파싱하는 것을 포함할 수 있고, 여기서 헤더는 디코딩을 용이하게 하기 위한 구성 메타데이터를 포함하고 페이로드는 인코딩된 데이터를 포함한다. 인코딩된 데이터의 페이로드를 디코딩하기 위한 프로세스는 인코딩된 데이터 세트를 검색하는 것을 포함할 수 있고 이는 헤더 세트에 대한 디코딩 프로세스 다음에 수행될 수 있다. 페이로드는 도 9a, 도 21a 및 도 21b 중 하나 이상에 도시되어 있는 구조, 예를 들어 평면, 개선 레벨 또는 계층으로 그룹화된 엔트로피 인코딩된 계수 세트에 기초하여 처리될 수 있다. 언급된 바와 같이, 각각의 NALU의 각각의 픽처에는 픽처 구성 페이로드 파라미터가 선행될 수 있다.
예를 들어, 각각의 계층은 변환 계수의 특정 세트와 관련된 인코딩된 데이터를 함유하는 신택스 구조라는 점에 유의한다. 따라서, 각각의 계층은 예를 들어 2x2 변환이 사용되는 경우, 각각의 블록(또는 코딩 유닛)에 대한 '평균' 값 세트, 각각의 블록에 대한 '수평' 값 세트, 각각의 블록에 대한 '수직' 값 세트 및 각각의 블록에 대한 '대각선' 값 세트를 포함할 수 있다. 물론, 각각의 계층에 포함된 변환 계수의 특정 세트는 그 특정 개선 레벨(예를 들어, 위에서 정의된 제1 또는 추가, 레벨 1 또는 2)에 사용되는 특정 변환과 관련될 것임을 이해하여야 한다.
비트스트림 신택스
특정 예에서, 본 출원에 설명된 비트스트림(예를 들어, 특히, 개선 비트스트림)은 정의된 바에 따라 구성될 수 있다. 이 섹션에서는 사용할 수 있는 예시적인 신택스를 제공한다. 예시적인 신택스는 데이터를 해석하는 데 사용될 수 있고 본 출원에 설명된 예시의 이해를 돕기 위해 가능한 처리 구현을 나타낼 수 있다. 아래에 설명된 신택스는 제한적이지 않으며 아래에 제시된 것과 다른 신택스가 설명된 기능을 제공하기 위해 예에서 사용될 수 있다는 점에 유의해야 한다.
일반적으로 신택스는 헤더에 함유된 내용과 헤더에 첨부된 데이터에 함유된 내용을 식별할 수 있는 예시적인 방법을 제공할 수 있다. 헤더는 헤더(256, 556, 2402, 2566 또는 2666)와 같은 이전 예에 예시된 헤더를 포함할 수 있다. 신택스는 표현되는 내용을 나타낼 수 있지만 반드시 해당 데이터를 인코딩 또는 디코딩하는 방법을 나타내는 것은 아니다. 예를 들어, 업샘플링 동작의 특정 예와 관련하여, 신택스는 헤더가 더 넓은 인코딩 동작, 즉, 프로세스의 인코더측에서 사용하기 위해 선택된 업샘플링 동작의 표시자를 포함한다는 것을 설명할 수 있다. 또한 해당 표시가 헤더에 포함된 위치 또는 해당 표시자가 결정될 수 있는 방법이 표시될 수 있다. 아래에 설명된 신택스 예 뿐만 아니라, 디코더는 또한 비트스트림으로의 진입점을 식별하기 위한 컴포넌트, 비순응 비트스트림을 식별하고 핸들링하기 위한 컴포넌트, 및 에러를 식별하고 핸들링하기 위한 컴포넌트를 구현할 수 있다.
아래 테이블은 예시적인 신택스가 제시되는 방법에 대한 일반적 지침을 제공한다. 신택스 요소가 나타날 때, 이는 syntax_element와 같은 변수를 통해 표시되고; 이는 신택스 요소가 비트스트림으로부터 파싱되고 비트스트림 포인터가 비트스트림 파싱 프로세스에서 신택스 요소를 넘어 다음 위치로 전진되는 것을 지정한다. 문자 "D"는 설명자를 나타내며, 이는 아래에서 설명된다. 신택스의 예는 최상위 비트에서 최하위 비트 순서로 제시된다.
Figure pct00059
Figure pct00060
신택스의 예에서, 함수는 아래 테이블에 설명된 바와 같이 정의된다. 함수는 비트스트림에서 디코딩 프로세스가 판독할 다음 비트의 위치를 나타내는 비트스트림 포인터 값의 관점에서 표현된다.
Figure pct00061
예제 테이블의 "D" 열에 사용할 수 있는 다음 설명자는 각각의 신택스 요소의 파싱 프로세스를 지정한다:
b(8): 임의의 패턴의 비트 스트링(8 비트)을 갖는 바이트. 이 설명자에 대한 파싱 프로세스는 함수 read_bits( 8 )의 반환 값에 의해 지정된다.
f(n): 좌측 비트를 처음으로 하여 (좌측에서 우측으로) 기록된 n비트를 사용하는 고정 패턴 비트 스트링. 이 설명자에 대한 파싱 프로세스는 함수 read_bits(n)의 반환 값에 의해 지정된다.
u(n): n 비트를 사용하는 부호 없는 정수. 신택스 테이블에서 n이 "v"일 때, 비트 수는 다른 신택스 요소의 값에 의존하는 방식으로 변한다. 이 설명자에 대한 파싱 프로세스는 최상위 비트가 먼저 기록되는 부호 없는 정수의 이진 표현으로 해석되는 read_bits(n) 함수의 반환 값에 의해 지정된다.
ue(v): 좌측 비트를 처음으로 하는 부호 없는 정수 0차 지수 골롬 코딩된 신택스 요소. 이 설명자에 대한 파싱 프로세스는 이후 예에서 지정된다.
mb: 여러 바이트를 판독. 이 설명자에 대한 파싱 프로세스는 최상위 비트가 먼저 기록되고, 부호 없는 문자(unsigned char) 시퀀스의 최상위 바이트가 먼저 기록되는 다수의 부호 없는 문자의 이진 표현으로 해석되는 read_multibyte(비트스트림) 함수의 반환 값에 의해 지정된다.
NAL 유닛 및 NAL 유닛 헤더 신택스
NAL 유닛 및 NAL 유닛 헤더 신택스는 아래의 각각의 2개의 테이블에 설명된 바와 같이 구성될 수 있다.
Figure pct00062
Figure pct00063
프로세스 블록 신택스
예시적인 프로세스 블록 신택스가 아래 테이블에 설명되어 있다:
Figure pct00064
프로세스 페이로드 - 시퀀스 구성
프로세스 페이로드 시퀀스 구성 신택스가 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00065
프로세스 페이로드 - 전역 구성
프로세스 페이로드 전역 구성 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00066
Figure pct00067
프로세스 페이로드 - 픽처 구성
예를 들어 비디오 프레임에 대한 프로세스 페이로드 픽처 구성 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00068
Figure pct00069
프로세스 페이로드 - 인코딩된 데이터
프로세스 페이로드 인코딩된 데이터 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00070
Figure pct00071
프로세스 페이로드 - 인코딩된 타일링된 데이터
프로세스 페이로드 인코딩된 타일링된 데이터 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00072
Figure pct00073
Figure pct00074
Figure pct00075
프로세스 페이로드 - 표면
프로세스 페이로드 표면 신택스(예를 들어, 인코딩된 계수 및/또는 시간적 시그널링을 포함할 수 있는 데이터 세트에 대한 신택스)는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00076
Figure pct00077
프로세스 페이로드 - 추가 정보
프로세스 페이로드 추가 정보 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00078
프로세스 페이로드 - 필러
프로세스 페이로드 필러 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00079
바이트 정렬
바이트 정렬 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00080
비트스트림 시멘틱스
아래 섹션에서는 위의 테이블에 설명된 특정 변수의 의미에 대해 추가적인 세부사항을 제공한다. 이 세부사항은 비트스트림의 "시멘틱스"라고 지칭될 수 있다. 신택스 구조 및 이러한 구조 내의 신택스 요소와 관련된 시멘틱스의 예가 이 섹션에 설명되어 있다. 특정 경우에, 신택스 요소는 가능한 값의 닫힌 집합을 가질 수 있으며 이러한 경우의 예가 아래의 특정 테이블에 제시되어 있다.
NAL 유닛 시멘틱스
NAL 유닛과 일반적으로 관련된 변수 또는 파라미터의 다수의 예가 이제 설명될 것이다. 이들은 제한으로 보아서는 안 된다.
NumBytesInNalUnit 변수는 NAL 유닛의 크기를 바이트 단위로 지정하는 데 사용할 수 있다. 이 값은 NAL 유닛의 디코딩에 사용될 수 있다. NAL 유닛 경계의 일부 형태의 구분은 NumBytesInNalUnit의 추론을 가능하게 하는 데 사용될 수 있다. 이러한 구분 방법 중 하나는 바이트 스트림 형식에 대한 NALU의 다른 예를 참조하여 설명된다. 다양한 구분 방법이 사용될 수 있다.
변수 rbsp_byte[i]는 원시 바이트 시퀀스 페이로드(RBSP)의 i번째 바이트이다. RBSP는 정렬된 바이트 시퀀스로 지정될 수 있으며 다음과 같이 데이터 비트 스트링(SODB)을 함유할 수 있다:
SODB가 비어 있으면(즉, 길이가 0 비트), RBSP도 비어 있다.
그렇지 않으면, RBSP에는 다음과 같이 SODB가 함유된다:
1. RBSP의 제1 바이트는 SODB의 (최상위, 최좌측) 8 비트를 함유하고, RBSP의 다음 바이트는 8 비트 미만의 SODB가 남을 때까지 SODB의 다음 8 비트 등를 함유하는 등이다.
2. rbsp_trailing_bits()는 다음과 같이 SODB 이후에 존재한다:
i. 최종 RBSP 바이트의 제1(최상위, 최좌측) 비트에는 SODB의 나머지 비트(존재하는 경우)가 함유된다.
ii. 다음 비트는 1과 동일한 단일 rbsp_stop_one_bit로 구성된다.
iii. rbsp_stop_one_bit가 바이트 정렬된 바이트의 마지막 비트가 아닐 때, 하나 이상의 rbsp_alignment_zero_bit가 존재하여 바이트 정렬을 초래한다.
위의 RBSP 속성을 갖는 신택스 구조는 "_rbsp" 서픽스를 사용하여 위 신택스 테이블에 표시된다. 이러한 구조는 rbsp_byte[i] 데이터 바이트의 콘텐츠로서 NAL 유닛 내에서 반송될 수 있다. NAL 유닛에 대한 RBSP 신택스 구조의 연관성은 아래 테이블에 설명된 바와 같을 수 있다. RBSP의 경계가 알려져 있을 때, 디코더는 RBSP의 바이트 비트를 연접하고 1과 동일한 마지막(최하위, 최우측) 비트인 rbsp_stop_one_bit를 폐기하고 0과 동일한 이를 뒤따르는 임의의 다음(하위(less significant), 우측에서 더 먼) 비트를 폐기함으로써 RBSP로부터 SODB를 추출할 수 있다. 디코딩 프로세스를 위한 데이터는 RBSP의 SODB 부분에 함유될 수 있다.
emulation_prevention_three_byte 변수는 0x03과 같은 바이트이다. NAL 유닛에 emulation_prevention_three_byte가 존재할 때, 이는 디코딩 프로세스에서 폐기될 수 있다. 특정 경우에, NAL 유닛의 마지막 바이트가 0x00과 같아지는 것이 방지되고, NAL 유닛 내에서 다음 3 바이트 시퀀스는 임의의 바이트 정렬 위치에서 제외된다: 0x000000, 0x000001 및 0x000002. NAL 유닛 내에서 다음 시퀀스 이외의 0x000003으로 시작하는 임의의 4 바이트 시퀀스는 임의의 바이트 정렬 위치에서 발생하지 않도록 구성될 수도 있다(예를 들어, 다음 4 바이트 시퀀스 0x00000300, 0x00000301, 0x00000302 및 0x00000303).
NAL 유닛 헤더 시멘틱스
NAL 유닛 헤더와 관련된 정보를 반송하기 위해 사용될 수 있는 변수 또는 파라미터의 다수의 예가 이제 설명될 것이다. 이들은 제한으로 보아서는 안 된다.
특정 예에서, 변수 forbidden_zero_bit는 0과 같은 것으로 설정되고 변수 forbidden_one_bit는 1과 같은 것으로 설정된다. 변수 nal_unit_type는 아래 테이블에 지정된 NAL 유닛에 함유된 RBSP 데이터 구조의 타입을 지정하는 데 사용될 수 있다.
Figure pct00081
이 예에서, 시멘틱스가 지정되지 않은 UNSPEC0…UNSPEC27(경계값 포함) 및 UNSPEC31 범위의 nal_unit_type를 갖는 NAL 유닛은 개선 디코딩 프로세스에 영향을 미치지 않도록 구성될 수 있다. reserved_flag는 비트 시퀀스 111111111과 동일할 수 있다. UNSPEC0…UNSPEC27 및 UNSPEC31 범위의 NAL 유닛 타입은 특정 애플리케이션 또는 구현에 의해 결정된 바와 같이 사용될 수 있다. 이들은 LCEVC_LEVEL nal_unit_type와 관련될 수 있는 본 출원에 설명된 "개선" 디코딩 프로세스와 관련될 수 있다. 상이한 애플리케이션은 UNSPEC0…UNSPEC27 및 UNSPEC31NAL 범위의 NAL 유닛 타입을 다른 목적으로 사용할 수 있으며 인코더와 디코더는 그에 따라 적응될 수 있다. 비트스트림의 디코딩 유닛에서 데이터의 양을 결정하는 것(예를 들어, 특정 텍스트 구성에서 사용됨) 이외의 목적을 위해 디코더는 nal_unit_type의 예비 값을 사용하는 모든 NAL 유닛의 콘텐츠를 무시(비트스트림에서 제거 및 폐기)하도록 구성될 수 있다. 본 출원에 설명된 양태에 대한 미래의 호환 가능한 확장은 예비 및/또는 지정되지 않은 NAL 유닛 타입을 사용할 수 있다.
데이터 블록 유닛 일반적 시멘틱스
NAL 유닛의 데이터 블록에 관한 정보를 반송하기 위해 사용될 수 있는 변수 또는 파라미터의 다수의 예가 이제 설명될 것이다. 이들은 제한으로 보아서는 안 된다.
payload_size_type 변수를 사용하여 페이로드의 크기를 지정할 수 있다. 이는 아래 테이블에 지정된 바와 같이 0과 7 사이의 값을 취할 수 있다.
Figure pct00082
변수 payload_type는 사용된 페이로드의 타입(예를 들어, 페이로드의 콘텐츠)을 지정할 수 있다. 이는 아래 테이블에 지정된 바와 같이 0과 31 사이의 값을 취할 수 있다. 이 테이블은 또한 예시적인 비트스트림 내에서 각각의 콘텐츠의 제안된 최소 출현 빈도를 나타낸다.
Figure pct00083
데이터 블록 시멘틱스
다음은 각각의 데이터 블록 유닛, 예를 들어 NAL 유닛에 의해 전달되는 데이터에 대한 시멘틱스를 설명한다. 아래에서 설명하는 특정 변수는 프로파일, 레벨 및 툴셋과 관련된다. 프로파일, 레벨 및 툴셋을 사용하여 비트스트림에 대한 제한을 지정하고, 따라서, 비트스트림을 디코딩하는 데 필요한 능력에 제한을 적용할 수 있다. 프로파일, 레벨과 툴셋은 개별 디코더 구현 사이의 상호 운용성 지점을 나타내는 데에도 사용할 수 있다. 디코더에서 개별적으로 선택 가능한 "옵션"을 피하는 것이 바람직할 수 있고, 이는 상호 운용성의 어려움을 증가시킬 수 있기 때문이다.
프로파일은 해당 프로파일을 준수하는 모든 디코더에서 지원하는 알고리즘 특징 및 제한의 서브세트를 지정할 수 있다. 특정 경우에, 인코더는 프로파일에서 지원되는 특징의 임의의 특정 서브세트를 사용할 필요가 없을 수 있다.
레벨은 신택스 요소(예를 들어, 앞서 설명한 요소)에 의해 취해질 수 있는 값에 대한 제한 세트를 지정할 수 있다. 모든 프로파일에 동일한 세트의 레벨 정의를 사용할 수 있지만 개별 구현은 지원되는 각각의 프로파일에 대해 상이한 레벨을 지원할 수 있다. 임의의 주어진 프로파일에 대해, 레벨은 일반적으로 특정 디코더 처리 부하 및 메모리 능력에 대응할 수 있다. 본 출원에 설명된 예에 따르는 비디오 디코더의 구현은 프로파일 및 레벨의 제약을 준수하는 비디오 스트림을 디코딩하는 능력의 관점에서 특정될 수 있고, 예를 들어 프로파일 및/또는 레벨은 지원 및/또는 사용되는 특정 특징 세트와 같은 비디오 디코더에 대한 특정 명세를 나타낼 수 있다. 이와 같이, 디코더의 특정 구현의 능력은 프로파일 및 그 프로파일에 대한 주어진 레벨을 사용하여 지정될 수 있다. 변수 profile_idc는 비트스트림에 대한 프로파일을 나타내기 위해 사용될 수 있고 변수 level_idc는 레벨을 나타내기 위해 사용될 수 있다. 이러한 변수의 값은 정의된 명세 세트로 제한될 수 있다. 지정된 값의 세트 사이의 profile_idc의 예비 값은 지정된 프로파일 사이의 중간 능력을 나타내지 않을 수 있지만; 그러나, 지정된 값의 세트 사이의 level_idc 예비 값은 지정된 레벨 사이의 중간 능력을 표시하는 데 사용될 수 있다. 변수 sublevel_idc는 또한 능력 세트에 대한 하위 레벨을 나타내는 데 사용될 수 있다. 이러한 레벨 및 하위 레벨은 다른 개념인 개선 인코더 및 디코더의 레벨 및 하위 레벨과 혼동되어서는 안 된다.
예를 들어, "메인" 프로파일이 있을 수 있다. 이 예시적인 "메인" 프로파일에 대한 비트스트림의 적합성은 0과 동일한 profile_idc에 의해 표시될 수 있다. 이 예시적인 "메인" 프로파일을 따르는 비트스트림은 활성 전역 구성 데이터 블록이 단지 0 또는 1과 동일한 chroma_sampling_type를 갖는다는 제약을 가질 수 있다. 지정된 전역 구성 파라미터 세트에 대한 모든 제약은 비트스트림이 디코딩될 때 활성화되는 전역 구성 파라미터 세트에 대한 제약일 수 있다. 특정 레벨(예를 들어, level_idc의 특정 값에 의해 식별됨)에서 본 예시적인 "메인" 프로파일을 준수하는 디코더는 다음 조건 모두가 적용되는 모든 비트스트림 및 서브 계층 표현의 디코딩이 가능할 수 있다: 비트스트림은 "메인" 프로파일을 준수하도록 표시되고 비트스트림 또는 서브 계층 표현은 지정된 레벨보다 더 낮거나 같은 레벨을 준수하도록 표시된다. 이 예시적인 "메인" 프로파일의 변형 또한 정의되고 주어진 profile_idc의 다른 값일 수 있다. 예를 들어, "메인 4:4:4" 프로파일이 있을 수 있다. 예시적인 "메인 4:4:4" 프로파일에 대한 비트스트림의 적합성은 1과 동일한 profile_idc에 의해 표시될 수 있다. 예시적인 "메인 4:4:4" 프로파일을 준수하는 비트스트림은 활성 전역 구성 데이터 블록이 0에서 3까지의 범위(경계값 포함)에서 chroma_sampling_type를 가져야 한다는 제약을 가질 수 있다. 역시, 특정 레벨(예를 들어, level_idc의 특정 값에 의해 식별됨)에서 이 예시적인 "메인 4:4:4" 프로파일을 준수하는 디코더는 다음 조건 모두가 적용되는 모든 비트스트림 및 서브 계층 표현의 디코딩이 가능할 수 있다: 비트스트림은 "메인" 프로파일을 준수하도록 표시되고 비트스트림 또는 서브 계층 표현은 지정된 레벨보다 더 낮거나 같은 레벨을 준수하도록 표시된다. extended_profile_idc 및 extended_level_idc 변수는 각각 확장 프로파일 및 확장 레벨이 사용됨을 나타내는 데 사용될 수 있다.
특정 구현에서, 프로파일과 관련된 "레벨"은 2개의 파라미터를 기초로 정의될 수 있다: 시간에 따른 출력 픽처의 루마 샘플 카운트(즉, 출력 샘플 레이트) 및 개선 코딩(CPBL)을 위한 코딩된 픽처 버퍼에 대한 최대 입력 비트 레이트. 샘플 레이트와 비트레이트는 모두 1초의 관찰 기간에서 고려될 수 있다(예를 들어, 최대 CPBL 비트 레이트는 1,000개의 출력 샘플당 초당 비트 수에 관하여 측정될 수 있음). 아래 테이블은 일부 예시적인 레벨과 하위 레벨을 나타낸다.
Figure pct00084
NAL 유닛 데이터 블록의 추가 변수를 참조하면, 만약 변수 conformance_window_flag가 1과 같으면 이는 적합성 크로핑 윈도우 오프셋 파라미터가 시퀀스 구성 데이터 블록에 존재한다는 것을 나타내기 위해 사용될 수 있다. conformance_window_flag 변수가 0과 같으면 이는 적합성 크로핑 윈도우 오프셋 파라미터가 존재하지 않음을 나타낼 수 있다. 변수 conf_win_left_offset, conf_win_right_offset, conf_win_top_offset 및 conf_win_bottom_offset는 디코딩 프로세스(즉, 결과 출력 비디오)에서 출력되는 코딩된 비디오 시퀀스의 픽처 샘플을 출력용 픽처 좌표에 지정된 직사각형 영역과 관하여 지정한다. conformance_window_flag가 0과 같을 때, conf_win_left_offset, conf_win_right_offset, conf_win_top_offset 및 conf_win_bottom_offset의 값은 0과 같은 것으로 추론될 수 있다. 적합성 크로핑 윈도우는 (SubWidthC * conf_win_left_offset)에서 (width -(SubWidthC * conf_win_right_offset + 1))까지의 수평 픽처 좌표와 (SubHeightC * conf_win_top_offset에서 height - (SubHeightC * conf_win_bottom_offset + 1))까지(경계값 포함)의 수직 픽처 좌표를 갖는 루마 샘플을 함유하도록 정의될 수 있다. SubWidthC * (conf_win_left_offset + conf_win_right_offset)의 값은 폭보다 더 작게 제한될 수 있고, SubHeightC * (conf_win_top_offset + conf_win_bottom_offset) 값은 높이 보다 더 작게 제한될 수 있다. 2개의 크로마 어레이의 대응하는 특정 샘플(예를 들어, YUV 예에서)은 픽처 좌표(x/SubWidthC, y/SubHeightC)를 갖는 샘플로 유사하게 정의될 수 있으며, 여기서(x, y)는 특정 루마 샘플의 픽처 좌표이다. SubWidthC 및 SubHeightC 값의 예는 위의 "예시적인 픽처 형식" 섹션에 표시되어 있다. 적합성 크로핑 윈도우 오프셋 파라미터는 출력에만 적용될 수 있고; 모든 내부 디코딩 프로세스는 크로핑되지 않은 픽처 크기에 적용될 수 있음에 유의한다.
데이터 블록 유닛 전역 구성 시멘틱스
이제 위의 신택스에 표시된 특정 전역 구성 변수에 대한 간단한 설명이 설명된다. 전역 구성에 관한 정보를 반송하는 데 사용될 수 있는 변수 또는 파라미터의 다수의 예가 설명된다. 이들은 제한으로 보아서는 안 된다.
processed_planes_type_flag 변수는 디코더에 의해 처리될 평면을 지정하는 데 사용될 수 있다. 이는 0 또는 1과 같을 수 있다. YUV 예의 경우, 0과 같으면 Luma(Y) 평면만 처리될 수 있고; 1과 같으면 모든 평면(예를 들어, 하나의 루마 및 2개의 크로마)이 처리될 수 있다. 이 경우, processed_planes_type_flag가 0과 같으면 nPlanes는 1과 같아야 하고, processed_planes_type_flag가 1과 같으면 nPlanes는 3과 같아야 한다. 변수 nPlanes의 예시는 도 9a에 도시되어 있다.
resolution_type 변수는 개선된 디코딩된 픽처의 루마(Y) 평면의 해상도를 지정하는 데 사용될 수 있다. 이는 아래 테이블에 지정된 대로 0에서 63 사이의 값으로 정의될 수 있다. 타입의 값은 NxM으로 표현되며, 여기서 N은 개선된 디코딩된 픽처의 Luma(Y) 평면의 폭이고 M은 개선된 디코딩된 픽처의 Luma(Y) 평면의 높이이다. 예를 들어 다음 값(특히)을 사용할 수 있다:
Figure pct00085
Figure pct00086
chroma_sampling_type 변수는 "예시적인 픽처 형식" 섹션의 테이블에 설명된 대로 개선된 디코딩된 픽처의 색상 형식을 정의한다.
transform_type 변수는 사용할 변환 타입을 정의하는 데 사용할 수 있다. 예를 들어 다음 값(특히)을 사용할 수 있다:
Figure pct00087
위의 예에서 transform_type가 0과 같으면 nLayers(예를 들어, 도 9a에 도시됨)는 4와 같을 수 있고 transform_type가 1과 같으면 nLayers는 16과 같을 수 있다.
base_depth_type 변수는 디코딩된 베이스 픽처의 비트 심도를 정의하는 데 사용될 수 있다. 예를 들어 다음 값(특히)을 사용할 수 있다:
Figure pct00088
유사하게, 개선된 디코딩된 픽처의 비트 심도를 정의하기 위해 변수 enhancement_depth_type가 사용될 수 있다. 예를 들어 다음 값(특히)을 사용할 수 있다:
Figure pct00089
변수 temporal_step_width_modifier_signalled_flag는 temporal_step_width_modifier 파라미터의 값이 시그널링되는지 여부를 지정하는 데 사용될 수 있다. 이는 0 또는 1과 같을 수 있다. 0과 같으면, temporal_step_width_modifier 파라미터는 시그널링되지 않을 수 있다.
predicted_residual_mode_flag 변수는 디코더가 디코딩 프로세스 동안 예측된 잔차 프로세스를 활성화해야 하는지 여부를 지정하는 데 사용될 수 있다. 값이 0이면, 예측된 잔차 프로세스가 디스에이블되어야 한다.
변수 temporal_tile_intra_signalling_enabled_flag는 타일(예를 들어, 32x32 타일)을 디코딩할 때 시간적 타일 예측이 사용되어야 하는지 여부를 지정하는 데 사용될 수 있다. 값이 1이면, 시간적 타일 예측 프로세스가 인에이블된다.
upsample_type 변수는 디코딩 프로세스에서 사용할 업샘플러의 타입을 지정하는 데 사용될 수 있다. 예를 들어 다음 값을 사용할 수 있다:
Figure pct00090
level_1_filtering_signalled 변수는 디블로킹 필터가 예를 들어 기본 파라미터 대신 시그널링된 파라미터 세트를 사용해야 하는지 여부를 지정하는 데 사용될 수 있다. 값이 1과 같은 경우, 디블로킹 계수의 값이 시그널링될 수 있다.
변수 temporal_step_width_modifier은 시간적 예측을 사용하는 변환에 대한 가변 단계 폭 수정자를 계산하는 데 사용되는 값을 지정하는 데 사용될 수 있다. temporal_step_width_modifier_signalled_flag가 0과 같으면 이 변수는 미리 정의된 값(예를 들어, 48)으로 설정될 수 있다.
변수 level_1_filtering_first_coefficient는 디블로킹 마스크의 제1 계수의 값을 지정하는 데 사용될 수 있다(예를 들어, 위의 이전 섹션의 예에서 α 또는 4x4 블록 코너 잔차 가중치). 제1 계수의 값은 0과 15 사이일 수 있다.
변수 level_1_filtering_second_coefficient는 디블로킹 마스크에서 제2 계수의 값(예를 들어, 위의 이전 섹션의 예에서 β 또는 4x4 블록측 잔차 가중치)을 지정하는 데 사용될 수 있다. 제2 계수의 값은 0과 15 사이일 수 있다.
scaling_mode_level1 변수는 디코딩된 베이스 픽처와 예비 중간 픽처(예를 들어, 도 26의 업-스케일러(2608)) 사이에 업샘플링 프로세스가 수행되어야 하는지 여부와 방법을 지정하기 위해 제공될 수 있다. 레벨 1에 대한 스케일링 모드 파라미터(예를 들어, 레벨 0에서 레벨 1로 변환)는 다음을 포함하는 다수의 가능한 값을 가질 수 있다.
Figure pct00091
유사한 변수 scaling_mode_level2는 조합된 중간 픽처와 예비 출력 픽처 사이에서 업샘플링 프로세스가 수행되는지 여부와 방법을 지정하는 데 사용될 수 있다(예를 들어, 도 26의 업-스케일러(2687)에 따라). 조합된 중간 픽처는 프로세스 8.9.1의 출력에 대응한다. 레벨 2에 대한(예를 들어, 레벨 1에서 레벨 2로 변환) 스케일링 모드 파라미터는 다음을 포함하는 여러 가능한 값을 가질 수 있다.
Figure pct00092
위의 섹션 제목 "사용자 데이터 시그널링"에서 설명한 바와 같이, 변수 user_data_enabled를 사용하여 사용자 데이터가 비트스트림에 포함되는지 여부와 사용자 데이터의 크기를 지정할 수 있다. 예를 들어, 이 변수는 다음 값을 가질 수 있다.
Figure pct00093
변수는 또한 베이스 계층 및 2개의 개선 서브 계층 중 하나 이상의 비트 심도를 나타내도록 정의될 수 있다. 예를 들어, 변수 level1_depth_flag는 레벨 1의 인코딩 및/또는 디코딩 컴포넌트가 베이스 깊이 타입 또는 개선 깊이 타입을 사용하여(즉, 베이스 비트 심도 또는 하나 이상의 개선 레벨에 대해 정의된 비트 심도에 따라) 데이터를 처리하는지 여부를 지정하는 데 사용될 수 있다. 특정 경우에, 베이스 계층과 개선 계층이 서로 다른 비트 심도를 사용할 수 있다. 레벨 1 및 레벨 2 처리가 상이한 비트 심도에서 수행되는 것도 가능할 수 있다(예를 들어, 레벨 1은 더 낮은 비트 양자화 레벨을 수용할 수 있기 때문에 레벨 1은 레벨 2보다 더 낮은 비트 심도를 사용할 수 있거나 레벨 2는 더 낮은 비트 심도를 사용하여 레벨 2 잔차를 인코딩하는 데 사용되는 바이트 수를 감소시킬 수 있다). level1_depth_flag와 같은 변수가 제공되는 경우, 이때, 값 0은 레벨 1 서브 계층이 베이스 깊이 타입을 사용하여 처리될 것임을 나타낼 수 있다. 1의 값이 사용되는 경우, 이는 레벨 1 서브 계층이 개선 깊이 타입을 사용하여 처리되어야함을 나타낼 수 있다.
tile_dimensions_type 변수는 픽처 타일의 해상도를 나타내기 위해 지정될 수 있다. 이 변수의 값 예는 아래 테이블에 나타나 있다. 타입의 값은 NxM 해상도로 맵핑될 수 있으며, 여기서 N은 픽처 타일의 폭이고 M은 픽처 타일의 높이이다.
Figure pct00094
위의 타입 "3"으로 표시된 대로 특정 경우에 사용자 정의 타일 크기가 정의될 수 있다. 사용자 정의 타일 크기가 표시된 경우(예를 들어, 위 테이블에서 값 3을 통해), 변수 custom_tile_width 및 custom_tile_height를 사용하여 타일에 대한 사용자 정의 폭 및 높이를 지정할 수 있다.
픽처 타일과 관련된 데이터에 대한 압축 방법을 나타내기 위해 하나 또는 변수들이 정의될 수 있다. 압축 방법이 파일에 대한 시그널링에 적용될 수 있다. 예를 들어, compression_type_entropy_enabled_per_tile_flag는 각각의 픽처 타일의 entropy_enabled_flag 필드를 인코딩하는 데 사용되는 압축 방법을 지정하는 데 사용될 수 있다. 이는 아래 테이블에 나타난 바와 같은 값을 가질 수 있다.
Figure pct00095
유사하게, 각각의 픽처 타일의 크기 필드를 인코딩하는 데 사용되는 압축 방법을 나타내기 위해 변수 compression_type_size_per_tile가 정의될 수 있다. 이 경우, compression_type_size_per_tile는 아래 테이블에 표시된 값을 가질 수 있다(여기서, 용어 허프만 코딩과 프리픽스 코딩은 상호 교환적으로 사용됨).
Figure pct00096
마지막으로, custom_resolution_width 및 custom_resolution_height 변수를 사용하여 사용자 정의 해상도의 폭과 높이를 각각 지정할 수 있다.
데이터 블록 유닛 픽처 구성 시멘틱스
픽처 구성에 관한 정보를 반송하기 위해 사용될 수 있는 변수 또는 파라미터의 다수의 예가 이제 설명될 것이다. 이들은 제한으로 보아서는 안 된다.
특정 예에서, 특정 계층이 특징 개선에 대한 것이 아님을 나타내기 위해 변수가 정의될 수 있다. 이는 개선 계층이 특정 픽처에 대해 사실상 턴오프되어 있거나 디스에이블되어 있음을 나타낼 수 있다. 예를 들어, 네트워크 혼잡이 있는 경우, 다수의 프레임에 대해 개선 계층을 턴오프하고 임의의 개선 데이터를 수신 및 추가하지 않는 것이 바람직할 수 있다(예를 들어, 디코딩된 잔차의 제1 세트와 제2 세트 중 하나 이상을 추가하지 않음). 특정 예에서, no_enhancement_bit_flag 변수는 (예를 들어, 도 9a와 관련하여 도시되어 있는 바와 같이) 픽처의 모든 layerIdx < nLayers에 대한 개선 데이터가 없음을 나타내기 위해 지정될 수 있다. 0의 no_enhancement_bit_flag 값은 개선이 사용 중이고 개선 데이터가 있음을 나타낼 수 있다.
본 출원의 다른 예에서 설명된 바와 같이, 양자화 행렬은 양자화 및/또는 탈양자화를 명령하기 위해 사용될 수 있다. 디코더에서의 탈양자화를 위해, 양자화 행렬 모드, 예를 들어 하나 이상의 양자화 행렬을 생성하고 사용하기 위한 특정 동작 모드를 나타내는 시그널링이 제공될 수 있다. 예를 들어, quant_matrix_mode와 같은 변수는 양자화 행렬이 아래 테이블에 따라 디코딩 프로세스에서 사용되는 방법을 지정하는 데 사용될 수 있다. 특정 경우에, quant_matrix_mode가 존재하지 않을 때, 즉, 모드가 명시적으로 시그널링되지 않을 때, 모드는 디폴트 값을 취하는 것으로 가정될 수 있고, 예를 들어 아래에 표시된 바와 같이 0과 동일한 것으로 추론될 수 있다. 양자화 행렬 모드 값이 존재하지 않을 수 있게 함으로써, 각각의 픽처에 대한 시그널링 대역폭이 절약될 수 있다(예를 들어, 디코더의 양자화 컴포넌트는 디폴트 설정을 사용할 수 있음). 아래 예에 표시된 것과 같은 모드의 사용은 양자화 제어의 효율적인 구현을 허용할 수 있으며, 이에 의해 양자화 파라미터는 특정 경우(예를 들어, 인코딩이 변경되는 조건에 적응해야 하는 경우)에는 동적으로 변경되고 다른 경우에는 디폴트 값에 기초하여 검색될 수 있다. 아래 테이블의 예는 제한을 의도하는 것이 아니며, 본 출원에 설명된 다른 예와 관련하여 표시된 바와 같이 다른 모드가 제공될 수 있다.
Figure pct00097
앞서 설명된 바와 같이, 특정 예에서 양자화 오프셋이 사용될 수 있다. 디코더에서의 탈양자화를 위해, 양자화 오프셋(대칭성 양자화 및 탈양자화를 위한 탈양자화 오프셋이라고도 지칭됨)은 인코더 또는 다른 제어 디바이스에 의해 시그널링될 수 있거나 로컬 디코더 메모리로부터 검색될 수 있다. 예를 들어, dequant_offset_signalled_flag 변수는 오프셋 방법 및 탈양자화시 적용될 오프셋 파라미터의 값이 시그널링되는지를 지정하기 위해 사용될 수 있다. 이 경우, 값이 1과 같은 경우, 탈양자화 오프셋 방법 및/또는 탈양자화 오프셋 파라미터의 값이 시그널링될 수 있다. dequant_offset_signalled_flag가 존재하지 않는 경우, 0과 동일한 것으로 추론될 수 있다. 역시, 그 부재에 대한 추론된 값을 갖는 것은 특정 픽처 또는 프레임을 인코딩하기 위해 전송되어야 하는 비트 수를 감소시키는 데 도움이 될 수 있다.
위의 내용에 후속하여, dequant_offset_mode_flag 변수를 사용하여 탈양자화 오프셋을 적용하는 방법을 지정할 수 있다. 예를 들어, 오프셋을 적용하는 다른 방법을 나타내기 위해 상이한 모드가 사용될 수 있다. 디폴트 모드일 수 있는 하나의 모드는 적용될 탈양자화 오프셋 파라미터의 값을 지정하는 시그널링된 dequant_offset 변수를 사용하는 것을 수반할 수 있다. 이는 동적으로 변할 수 있다. 일 경우에, dequant_offset_mode_flag가 0과 같으면, 앞서 언급한 디폴트 모드가 적용되고; dequant_offset_mode_flag의 값이 1과 같으면 상수 오프셋 방법이 적용되며 이는 시그널링된 dequant_offset 파라미터를 또한 사용할 수 있다. 탈양자화 오프셋 파라미터 dequant_offset의 값은 특정 구현에서 0과 127 사이(경계값 포함)일 수 있다.
추가 양자화 변수가 또한 사용될 수 있다. 일 경우에, 한 세트의 변수가 개선 계층 내의 픽처 또는 프레임에 사용할 하나 이상의 양자화 단계 폭을 시그널링하는 데 사용될 수 있다. 단계-폭 값은 위의 예의 양자화 및/또는 탈양자화 컴포넌트와 관련하여 설명된 바와 같이 양자화 및/또는 탈양자화를 적용하는 데 사용될 수 있다. 예를 들어, step_width_level1은 개선 서브 계층 1(즉, 레벨 1)에서 인코딩된 잔차를 디코딩할 때 사용될 단계-폭의 값을 지정하는 데 사용될 수 있고 step_width_level2는 개선 서브 계층 2(즉, 레벨 2)에서 인코딩된 잔차를 디코딩할 때 사용될 단계-폭 값의 값을 지정하는 데 사용될 수 있다.
특정 예에서, 단계-폭은 개선 서브 계층(즉, 레벨 1 및 2) 중 하나 이상에 대해 정의될 수 있다. 특정 경우에, 단계-폭은 특정 서브 계층에 대해 시그널링될 수 있지만 다른 서브 계층에는 시그널링되지 않을 수 있다. 예를 들어, step_width_level1_enabled_flag 변수는 개선 서브 계층 1(즉, 본 출원에 설명된 레벨 1)에서 인코딩된 잔차를 디코딩할 때 사용될 단계-폭의 값이 디폴트 값인지 아니면 (예를 들어, 인코더로부터) 시그널링되는지 여부를 지정하는 데 사용될 수 있다. 0(디폴트 값) 또는 1(값이 step_width_level1에 의해 시그널링됨을 나타냄)일 수 있다. 예시적인 디폴트 값은 32,767일 수 있다. step_width_level1_enabled_flag가 존재하지 않을 때, 이는 0과 같은 것으로 추론된다.
특정 예에서, 어레이의 세트가 양자화 스케일링 파라미터의 세트를 지정하기 위해 정의될 수 있다. 양자화 스케일링 파라미터는 코딩 유닛 또는 블록 내에서 각각의 계수를 스케일링하는 방법(예를 들어, 2x2 변환에 대해 A, H, V 및 D 성분을 나타내는 4개의 계층 각각을 스케일링하는 방법)을 나타낼 수 있다. 일 예에서, quant_matrix_mode가 위의 테이블에서 2, 3 또는 5와 같을 때 양자화 행렬 스케일링 파라미터의 값을 지정하기 위해 어레이 qm_coefficient_0[layerIdx]가 정의될 수 있고 위의 테이블에서 quant_matrix_mode가 4 또는 5와 같을 때 양자화 행렬 스케일링 파라미터의 값을 지정하기 위해 어레이 qm_coefficient_1[layerIdx]가 사용될 수 있다. 인덱스 layerIdx는 특정 계층(예를 들어, 도 9a에 도시되어 있는 바와 같음)을 나타내며, 이는 차례로 특정 계수 세트와 관련된다(예를 들어, 하나의 계층은 A 계수 등을 포함할 수 있음).
예에서, picture_type_bit_flag 변수는 인코딩된 데이터가 프레임 기반(예를 들어, 프로그레시브 모드 또는 인터레이스 모드) 또는 필드 기반(예를 들어, 인터레이스 모드) 중 어느 것으로 전송되는지를 지정하는 데 사용될 수 있다. 가능한 값의 예는 아래 테이블에 나와 있다.
Figure pct00098
(예를 들어, 위의 테이블에서 값 1을 통해) 필드 픽처 타입이 지정되면, 특정 필드를 나타내기 위해 추가 변수가 제공될 수 있다. 예를 들어, 변수 field_type_bit_flag를 사용하여 picture_type_bit_flag가 1과 같으면 전송된 데이터가 상단 필드인지 하단 필드인지를 지정할 수 있다. field_type_bit_flag에 대한 예시 값은 아래에 나타나 있다.
Figure pct00099
앞서 설명된 "시간적 예측 및 시그널링" 섹션에서 설명된 바와 같이, 디코더에 시간적 예측 구성 및 설정을 시그널링하기 위해 다수의 변수가 정의될 수 있다. (예를 들어, 특정 픽처 또는 프레임에 적용하기 위해) 특정 변수가 픽처 또는 프레임 레벨에서 정의될 수 있다. 이 섹션에서는 일부 예에 대해 추가로 설명한다.
일 경우에, temporal_refresh_bit_flag 변수는 픽처에 대해 시간적 버퍼가 리프레시되어야 하는지 여부를 지정하기 위해 시그널링될 수 있다. 1과 같으면, 이는 시간적 버퍼의 리프레시를 명령할 수 있다(예를 들어, 앞서 설명된 바와 같이 버퍼 내의 값을 0으로 설정).
일 경우에, 시간적 시그널링 계수 그룹이 비트스트림에 존재하는지 여부를 지정하기 위해 temporal_signalling_present_flag 변수가 시그널링될 수 있다. temporal_signalling_present_flag가 존재하지 않는 경우, temporal_enabled_flag가 1과 같고 temporal_refresh_bit_flag가 0과 같은 경우 1과 동일한 것으로 추론될 수 있고; 그렇지 않으면, 0과 같은 것으로 추론될 수 있다.
마지막으로, 변수의 세트는, 예를 들어 도면의 예와 관련하여 설명된 바와 같이 개선 계층 내의 필터링을 표시하고 제어하기 위해 사용될 수 있다. 일 경우에, (예를 들어, 도 2, 도 5a 내지 도 5c, 도 24 또는 도 26의 필터링 컴포넌트(232, 532, 2426 또는 2632)에 의해) 레벨 1에서 적용되는 필터링은 인코더로부터의 시그널링을 사용하여 선택적으로 제어될 수 있다. 일 경우에, 필터링을 턴온 및 턴오프하기 위해 시그널링이 제공될 수 있다. 예를 들어 level1_filtering_enabled_flag를 사용하여 레벨 1 디블로킹 필터를 사용해야 하는지 여부를 지정할 수 있다. 값 0은 필터링이 디스에이블됨을 나타낼 수 있고 값 1은 필터링이 인에이블됨을 나타낼 수 있다. level1_filtering_enabled_flag가 존재하지 않는 경우, 0과 동일한 것으로 추론될 수 있다(즉, 플래그가 존재하지 않는 경우 필터링이 디폴트로 디스에이블됨). 레벨 1 개선 서브 계층에서 디코딩되는 잔차의 필터링과 관련하여한 예가 제시되지만, (예를 들어, 추가로 또는 대신하여) 다른 예에서, 필터링은 또한 레벨 2 개선 서브 계층에서 디코딩되는 잔차에 선택적으로 적용될 수 있다. 필터링은 여기서 설명된 예와 유사한 시그널링을 사용하여 레벨 중 하나 이상에서 정의된 변수에 따라 턴오프 또는 턴온될 수 있고 및/또는 구성될 수 있다.
위의 예에서 설명된 바와 같이, 특정 예에서, 디더링이 출력 디코딩된 픽처에 적용될 수 있다. 이는 양자화로 인한 시각적 아티팩트를 감소시키기 위해 난수 생성기에 의해 생성된 랜덤 값의 적용을 수반할 수 있다. 시그널링 정보를 사용하여 디더링을 제어할 수 있다.
일 예에서, 디더링이 적용되어야 하는지 여부를 지정하기 위해 dithering_control_flag가 사용될 수 있다. 이는 잔차 필터링 제어 플래그와 유사한 방식으로 적용될 수 있다. 예를 들어, 값 0은 디더링이 디스에이블됨을 나타낼 수 있고 값 1은 디더링이 인에이블됨을 나타낼 수 있다. dithering_control_flag가 존재하지 않을 때, 이는 0과 같은 것으로 추론될 수 있다(예를 들어, 위의 필터링 레벨에 따라 디스에이블됨). 추가 난수가 가질 값의 범위를 지정하기 위해 하나 이상의 변수가 또한 정의될 수 있다. 예를 들어, 변수 dithering_strength는 난수에 대한 스케일링 인자를 지정하기 위해 정의될 수 있다. 이는 [-dithering_strength, +dithering_strength] 사이의 범위를 설정하는 데 사용될 수 있다. 특정 예에서, 이는 0과 31 사이의 값을 가질 수 있다.
특정 예에서, 상이한 타입의 디더링이 정의되고 적용될 수 있다. 이 경우, 디더링 타입 및/또는 각각의 디더링 타입에 대한 파라미터는 인코더로부터 시그널링될 수 있다. 예를 들어, 변수 dithering_type이 최종 재구성된 픽처에 적용되는 디더링의 타입을 지정하는 데 사용될 수 있다. dithering_type 변수의 값의 예는 아래 테이블에 설명되어 있다.
Figure pct00100
데이터 블록 유닛 인코딩된 데이터 시멘틱스
다음 섹션에서는 인코딩된 데이터를 구성할 수 있는 방법에 대한 일부 예를 설명한다. 특정 예에서, 예를 들어 주어진 계수와 관련된 인코딩된 데이터의 일부는 청크(예를 들어, 도 9a에 관련함)로 지칭된다. 도 9a의 데이터 구조(920) 또는 도 21에 표시된 데이터 구조(2130)는 "표면"으로 지칭될 수 있다. 표면은 다차원 어레이로 저장될 수 있다. 다차원 어레이의 제1 차원은 다른 평면을 나타낼 수 있으며 평면 인덱스- planeIdx -를 사용할 수 있고; 다차원 어레이의 제2 차원은 서로 다른 레벨, 즉, 개선 서브 계층과 관련하여 표시할 수 있으며 레벨 인덱스- levelIdx -를 사용할 수 있고; 다차원 어레이의 제3 차원은 상이한 계층, 즉, 상이한 계수(예를 들어, 2x2 변환에 대한 A, H, V 및 D 계수로 지칭될 수 있는 계수 블록 내의 상이한 위치)에 관련한 상이한 계층을 나타낼 수 있고, 계층 인덱스- layerIdx -를 사용한다. 이는 nPlanes, nLevels 및 nLayers(여기서 이들은 각각의 차원에 얼마나 많은 요소가 있는지 나타냄)가 있는 도 9a에 예시되어 있다.
도 25 및 도 26의 예와 관련하여 설명된 바와 같이, 특정 경우에 추가적인 사용자 정의 계층이 추가될 수 있다. 예를 들어, 시간적 시그널링은 계수 계층 이외에 비계수 계층으로 인코딩될 수 있다. 다른 사용자 시그널링도 사용자 정의 계층으로 추가될 수 있다. 다른 경우에, 이러한 용도를 위해 별개의 "표면" 어레이가 예를 들어, 도 9a에 표시된 바와 같이 구조화된 메인 "표면" 어레이에 추가로 제공될 수 있다.
특정 경우에, "표면" 어레이는 도 21a에 도시되어 있는 타일과 같은 그룹화를 나타내는 추가 차원을 가질 수 있다. "표면" 어레이의 배열은 또한 유연하고, 예를 들어, 타일이 도 21b에 도시되어 있는 바와 같이 계층 아래에 배열될 수 있다.
위의 신택스 섹션의 예를 참조하면, 표면과 관련된 다수의 제어 플래그가 정의될 수 있다. 표면 어레이 내에 인코딩된 데이터가 존재하는지 여부를 나타내기 위해 하나의 제어 플래그가 사용될 수 있다. 예를 들어, surfaces[planeIdx][levelIdx][layerIdx].entropy_enabled_flag가 surfaces[planeIdx][levelIdx][layerIdx]에 인코딩된 데이터가 존재하는지 여부를 나타내는 데 사용될 수 있다. 유사하게, 제어 플래그는 특정 표면이 인코딩되는 방법을 나타내는 데 사용될 수 있다. 예를 들어, surfaces[planeIdx][levelIdx][layerIdx].rle_only_flag는 surfaces[planeIdx][levelIdx][layerIdx]의 데이터가 런-렝스 인코딩만을 사용하여 인코딩되었는지 또는 런-렝스 인코딩 및 프리픽스(즉, 허프만) 코딩을 사용하여 인코딩되었는지 여부를 나타낼 수 있다.
시간적 데이터가 표면의 추가 세트로 구성되는 경우, 시간적 처리가 하나 또는 2개의 개선 레벨에서 수행되는지 여부를 반영하는 차원이 temporal_surfaces 어레이에 제공될 수 있다. 도 3a 및 도 24 내지 도 26에 도시되어 있는 예와 관련하여, 1차원 temporal_surfaces[planeIdx] 어레이가 제공될 수 있으며, 여기서 각각의 평면은 상이한 시간적 표면을 갖는다(예를 들어, 모든 계수가 동일한 시그널링을 사용하는 레벨 2 시간적 처리를 위한 시그널링을 제공함). 다른 예에서, 보다 선택적인 시간적 처리로 시간적 표면 어레이는 상이한 레벨, 상이한 계층(즉, 계수 그룹) 및 상이한 타일 중 하나 이상을 반영하기 위해 추가 차원으로 확장될 수 있다.
위의 신택스 예의 시간적 표면 시그널링과 관련하여, 다른 표면과 유사한 플래그가 제공될 수 있다. 예를 들어, temporal_surfaces[planeIdx].entropy_enabled_flag는 temporal_surfaces[planeIdx]에 인코딩된 데이터가 존재하는지 여부를 나타내는 데 사용될 수 있고 temporal_surfaces[planeIdx].rle_only_flag는 temporal_surfaces[planeIdx]에 있는 데이터가 런-렝스 인코딩만을 사용하여 인코딩되었는지 또는 런-렝스 인코딩 및 프리픽스(즉, 허프만) 코딩을 사용하여 인코딩되었는지 여부를 나타내기 위해 사용될 수 있다.
데이터 블록 유닛 인코딩된 타일링된 데이터 시멘틱스
표면에 대해 위에서 설명한 것과 유사한 변수가 타일을 사용하는 인코딩된 데이터에 사용될 수 있다. 일 경우에, 인코딩된 타일링된 데이터 블록 유닛, 예를 들어 타일링된 데이터는 유사한 surfaces[planeIdx][levelIdx][layerIdx].rle_only_flag를 가질 수 있다. 그러나, 이는 파티션을 타일로 반영하는 추가 차원(또는 변수 세트)를 가질 수 있다. 이는 데이터 구조 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx]를 사용하여 표시될 수 있다. 위의 예에서 설명된 바와 같이, 타일링된 데이터는 또한 각각의 타일에 대해, 각각의 타일에(예를 들어, surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx]에) 인코딩된 데이터가 존재하는지 여부를 나타내는 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].entropy_enabled_flag를 가질 수 있다.
타일링된 데이터 구조는 또한 위의 표면에 대해 설명된 것과 유사한 관련된 시간적 처리 시그널링을 가질 수 있다. 예를 들어, temporal_surfaces[planeIdx].rle_only_flag는 역시 temporal_surfaces[planeIdx]의 데이터가 런-렝스 인코딩만을 사용하여 인코딩되는지 또는 런-렝스 인코딩 및 프리픽스(즉, 허프만) 코딩을 사용하여 인코딩되는지 여부를 나타내는 데 사용될 수 있다. 각각의 타일은 temporal_surfaces[planeIdx].tiles[tileIdx]에 인코딩된 데이터가 존재하는지 여부를 나타내는 temporal_surfaces[planeIdx].tiles[tileIdx].entropy_enabled_flag를 가질 수 있다.
타일링된 데이터는 타일 사용과 관련된 일부 추가 데이터를 가질 수 있다. 예를 들어, 변수 entropy_enabled_per_tile_compressed_data_rle는 각각의 픽처 타일에 대한 RLE 인코딩된 시그널링을 포함할 수 있다. 또한, 각각의 픽처 타일에 대한 인코딩된 데이터의 압축된 크기를 지정하기 위해 변수 compressed_size_per_tile_prefix가 사용될 수 있다. 변수 compressed_prefix_last_symbol_bit_offset_per_tile_prefix는 프리픽스(즉, 허프만) 코딩 인코딩된 데이터의 최종 심볼 비트 오프셋을 지정하는 데 사용될 수 있다. 이 시그널링을 사용하는 디코딩 예는 아래에서 이후에 설명된다.
데이터 블록 유닛 표면 시멘틱스
앞서 설명한 상위 레벨의 "표면" 어레이는 추가적으로 일부 관련 데이터 구조를 가질 수 있다. 예를 들어, 변수 surface.size는 엔트로피 인코딩된 데이터의 크기를 지정할 수 있고, surface.data는 엔트로피 인코딩된 데이터 자체를 포함할 수 있다. 변수 surface.prefix_last_symbol_bit_offset는 프리픽스(즉, 허프만) 코딩 인코딩된 데이터의 최종 심볼 비트 오프셋을 지정하는 데 사용될 수 있다.
데이터 블록 유닛 추가 정보 시멘틱스
추가 정보 데이터 구조는 예를 들어 인코딩된 비디오와 함께 사용될 수 있는 추가 정보를 통신하는 데 사용될 수 있다. 추가 정보는 하나 이상의 추가 정보 타입에 따라 정의될 수 있다. 이는 additional_info_type 변수를 통해 표시될 수 있다. 예를 들어, 추가 정보는 SEI(Supplementary Enhancement Information) 메시지 또는 VUI(Video Usability Information) 메시지의 형태로 제공될 수 있다. 이러한 형태의 추가 정보의 추가적인 예는 이후의 예와 관련하여 제공된다. SEI 메시지가 사용될 때 payload_type 변수는 SEI 메시지의 페이로드 타입을 지정할 수 있다.
데이터 블록 유닛 필러 시멘틱스
특정 경우에, NAL 유닛을 필러로 채우는 것이 필요할 수 있다. 예를 들어, 이는 개선 계층이 많은 수의 0 값을 포함할 때(즉, 개선 계층의 크기가 작은 경우, 인코딩되는 픽처에 따라 가능할 수 있음) 정의된 일정한 비트 레이트를 유지하기 위해 필요할 수 있다. 필러 유닛은 페이로드에 대한 일정한 필러 바이트 값을 사용하여 구성될 수 있다. 필러 바이트는 0xAA와 같은 바이트일 수 있다.
앞서 설명된 예시적인 신택스 및 시멘틱스는 단지 예로서 제공된다는 점에 유의해야 한다. 이들은 적절한 구현을 구성할 수 있다. 그러나, 변수 이름과 데이터 형식은 유사한 기능을 유지하면서 설명된 것으로부터 변경될 수 있다는 점을 유의하여야 한다. 또한, 모든 특징이 필요한 것은 아니며 구현 요구 사항에 따라 특정 특징이 생략되거나 변경될 수 있다.
디코딩 프로세스의 상세한 예시적인 구현
디코딩 프로세스의 일 구현에 대한 상세한 예가 아래에 설명되어 있다. 상세한 예는 도 27의 방법(2700)을 참조하여 설명된다. 아래 설명은 위의 신택스 및 시멘틱스 섹션에 정의된 일부 변수를 참조한다. 상세한 예는 도 2, 도 5a 내지 도 5c, 도 24 및 도 26에 도시되어 있는 개략적인 디코더 배열의 하나의 가능한 구현으로서 취해질 수 있다. 특히, 아래의 예는 개선 코덱의 구현으로 볼 수 있는 개선 계층에 대한 디코딩 양태에 집중한다. 개선 코덱은 잔차 데이터 스트림을 인코딩 및 디코딩한다. 이는 인코더가 각각의 공간 해상도 레벨에서 입력으로서 비디오 데이터를 수신하고 디코더가 각각의 공간 해상도 레벨에서 비디오 데이터를 출력하는 비교대상 SVC 및 SHVC 구현과 상이하다. 이와 같이, 비교대상 SVC 및 SHVC는 코덱의 세트의 병렬 구현으로서 볼 수 있으며, 각각의 코덱은 비디오-인/비디오-아웃 코딩 구조를 갖는다. 다른 한편으로 본 출원에 설명된 개선 코덱은 각각의 공간 해상도 레벨에서 잔차 데이터를 수신하고 또한 잔차 데이터를 출력한다. 예를 들어, SVC 및 SHVC에서, 각각의 공간 해상도 레벨의 출력은 출력 비디오를 생성하기 위해 합산되지 않으며, 이는 의미가 없을 것이다.
위의 "신택스" 섹션에서 설명한 바와 같이 수신된 비트스트림을 처리하기 위해 신택스가 정의될 수 있다. "신택스" 섹션은 데이터를 동반하는 헤더에서 표시자를 검색하는 것과 같은 예시적인 방법을 설명하고, 여기서 표시자는 헤더의 미리 결정된 위치에서 검색될 수 있고 다음 섹션의 신택스에 따라 하나 이상의 동작을 나타낼 수 있다. 예로서, 표시자는 잔차를 추가하고/하거나 잔차를 예측하는 단계를 수행할지 여부를 나타낼 수 있다. 표시자는 비트스트림을 디코딩하기 위해 디코더가 특정 동작을 수행해야 하는지 또는 특정 동작을 수행하도록 구성되어야 하는 지를 나타낼 수 있다. 표시자는 인코더 스테이지에서 이러한 단계가 수행되었는지를 나타낼 수 있다.
전반적 개요
도 27a의 방법(2700)을 참조하면, 현재 설명된 디코딩 프로세스에 대한 입력은 최대 2개의 서브 계층으로 구성된 개선 계층을 포함하는 개선 비트스트림(2702)(저 복잡성 개선 비디오 코딩 비트스트림이라고도 지칭됨)이다. 디코딩 프로세스의 출력은 다음과 같다: 1) 베이스 디코더 재구성된 픽처로부터 획득된 예비 픽처 세트에 추가될 개선 잔차 평면(서브 계층 1 잔차 평면); 및 2) 업스케일링 및 예측된 잔차를 통한 수정으로 얻어진, 예비 픽처 1 및 서브 계층 1 잔차 평면의 조합인, 예비 출력 픽처에 추가될 개선 잔차 평면(서브 계층 2 잔차 평면).
앞서 설명한 바와 같이, 그리고 도 9a, 도 21a 및 도 21b를 참조하면, 데이터는 청크 또는 표면으로 배열될 수 있다. 각각의 청크 또는 표면은 아래에서 설명되고 도면에 도시되어 있는 것과 실질적으로 유사한 예시적인 프로세스에 따라 디코딩될 수 있다. 이와 같이, 디코딩 프로세스는 위의 섹션에서 설명한 대로 데이터 블록에서 동작한다.
이제 방법(2700)의 블록에 대한 개요가 설명된다. 각각의 블록은 후속 하위 섹션에서 더 자세히 설명된다.
방법(2700)의 블록 2704에서, 페이로드 데이터 블록 유닛의 세트가 디코딩된다. 이는 NAL 유닛 헤더를 따르는 비트스트림의 부분이 식별되고 추출될 수 있게 한다(즉, 페이로드 데이터 블록 유닛).
방법(2700)의 블록 2706에서, 픽처에 대한 디코딩 프로세스는 페이로드 데이터 블록 유닛을 수신하고 위에 설명된 신택스 요소를 사용하여 픽처의 디코딩을 시작한다. 픽처는 디코딩에 후속하여 비디오 시퀀스를 출력하기 위해 순차적으로 디코딩될 수 있다. 블록 2706은 앞서 설명된 바와 같이 (데이터) 표면 세트 및 시간적 표면 세트를 추출한다. 특정 경우에, 이 블록에서 엔트로피 디코딩이 적용될 수 있다.
방법(2700)의 블록 2710에서, 재구성된 디코딩된 베이스 샘플(recDecodedBaseSamples)의 세트를 획득하기 위해, 베이스 인코딩 데이터 추출을 위한 디코딩 프로세스가 적용된다. 이는 이전 예의 베이스 디코더를 적용하는 것을 포함할 수 있다. 베이스 코덱 또는 디코더가 별도로 구현되는 경우, 이때, 개선 코덱은 특정 프레임(프레임의 하위 부분 및/또는 프레임에 대한 특정 평면 포함)의 베이스 디코딩을 명령할 수 있다. 재구성된 디코딩된 베이스 샘플의 세트(예를 들어, 도 23의 2302)는 그 다음 선택적 제1 세트의 업스케일링이 예비 중간 픽처(예를 들어, 도 23의 2304)를 생성하기 위해 적용될 수 있는 블록 2712로 전달된다. 예를 들어, 블록 2712는 도 26의 업-스케일러(2608)에 대응할 수 있다. 블록 2712의 출력은 재구성된 레벨 1 베이스 샘플의 세트(여기서 레벨 0은 베이스 레벨 해상도를 포함할 수 있음)이다.
블록 2714에서, 개선 서브 계층 1(즉, 레벨 1) 인코딩된 데이터에 대한 디코딩 프로세스가 수행된다. 이는 변환 크기(nTbs), 사용자 데이터 인에이블 플래그(userDataEnabled) 및 단계-폭(즉, 탈양자화를 위한)을 나타내는 변수는 물론 레벨 1 엔트로피 디코딩된 양자화된 변환 계수(TransformCoeffQ) 및 재구성된 레벨 1 베이스 샘플(recL1BaseSamples)의 블록을 나타내는 변수를 수신할 수 있다. 평면 인덱스(IdxPlanes)는 또한 어떤 평면이 디코딩되고 있는지 나타내기 위해 전달될 수 있다(단색 디코딩에서는 인덱스가 없을 수 있음). 위의 신택스를 사용하여 비트스트림의 페이로드 데이터 유닛으로부터 변수 및 데이터를 추출할 수 있다.
블록 2714는 이전 예의 역양자화, 역변환 및 레벨 1 필터링(예를 들어, 디블로킹) 컴포넌트에 대응하는 다수의 서브 블록을 포함하는 것으로 도시되어 있다. 제1 서브 블록 2716에서, 탈양자화를 위한 디코딩 프로세스가 수행된다. 이는 아래에서 더 자세히 설명되는 위의 신택스에서 많은 제어 변수를 수신할 수 있다. 탈양자화된 계수 코딩 유닛 또는 블록의 세트가 출력될 수 있다. 제2 서브 블록 2718에서, 변환을 위한 디코딩 프로세스가 수행된다. 재구성된 잔차 세트(예를 들어, 제1 세트의 레벨 1 잔차)가 출력될 수 있다. 제3 서브 블록 2720에서, 레벨 1 필터에 대한 디코딩 프로세스가 적용될 수 있다. 이 프로세스의 출력은 재구성되고 필터링된(즉, 디코딩된) 잔차(예를 들어, 도 23의 2308)의 제1 세트일 수 있다. 특정 경우에, 잔차 데이터는 서브 블록 2720에서 NxM 필터를 적용하기 위해 NxM 블록으로 배열될 수 있다.
블록 2730에서, 블록 2714로부터 출력되는 재구성된 레벨 1 베이스 샘플 및 필터링된 잔차가 조합된다. 이는 도면에서 레벨 1 블록에 대한 잔차 재구성이라 지칭된다. 이 블록의 출력에는 재구성된 레벨 1 샘플 세트가 있다(예를 들어, 도 23의 2310). 이는 비디오 스트림으로 볼 수 있다(컬러 신호에 대해 다수의 평면이 조합된 경우).
블록 2732에서, 제2 업스케일링 프로세스가 적용된다. 이 업스케일링 프로세스는 블록 2730으로부터 출력되는 조합된 중간 픽처(예를 들어, 도 23의 2310)를 취하고 예비 출력 픽처(예를 들어, 도 23의 2312)를 생성한다. 이는 도 26의 업-스케일러(2687) 또는 앞서 설명된 업샘플링 컴포넌트 중 임의의 것의 적용을 포함할 수 있다.
도 27에서, 블록 2732는 다수의 서브 블록을 포함한다. 블록 2734에서, 스위칭은 시그널링된 업샘플러 타입에 따라 구현된다. 서브 블록(2736, 2738, 2740, 2742)은 최근접 샘플 업샘플링 프로세스, 쌍선형 업샘플링 프로세스, 삼차 업샘플링 프로세스 및 수정 삼차 업샘플링 프로세스의 각각의 구현을 나타낸다. 서브 블록은 필요에 따라 (예를 들어, 본 출원에 설명된 신경망 업샘플링과 같은) 새로운 업샘플링 접근법을 수용하도록 확장될 수 있다. 서브 블록(2736, 2738, 2740 및 2742)의 출력은 공통 형식, 예를 들어 재구성된 업샘플링된 샘플 세트(예를 들어, 도 23의 2312)로 제공되고, 저해상도의 재구성된 샘플 세트(예를 들어, 블록 2730으로부터의 출력으로서)와 함께 예측된 잔차 프로세스(2744)로 전달된다. 이는 예측 평균 부분을 적용하기 위해 본 출원에 설명된 수정된 업샘플링을 구현할 수 있다. 블록 2744 및 블록 2732의 출력은 재구성된 레벨 2 수정된 업샘플링된 샘플(recL2ModifiedUpsampledSamples)의 세트이다.
블록 2746은 개선 서브 계층 2(즉, 레벨 2) 인코딩된 데이터에 대한 디코딩 프로세스를 나타낸다. 블록(2714)과 유사한 방식으로, 단계-폭(즉, 탈양자화를 위한)을 나타내는 변수뿐만 아니라 레벨 2 엔트로피 디코딩된 양자화된 변환 계수(TransformCoeffQ) 및 재구성된 레벨 2 수정된 업샘플링된 샘플(recL2ModifiedUpsampledSamples) 세트의 블록을 수신한다. 평면 인덱스(IdxPlanes)도 전달되어 어떤 평면이 디코딩되는지 나타낸다(단색 디코딩에서는 인덱스가 없을 수 있음). 위의 신택스를 사용하여 비트스트림의 페이로드 데이터 유닛에서 변수 및 데이터를 다시 추출할 수 있다.
블록 2746은 다수의 시간적 예측 서브 블록을 포함한다. 본 예에서, 개선 서브 계층 2(즉, 레벨 2)에 대해 시간적 예측이 적용된다. 따라서, 블록 2746은 시간적 시그널링 데이터를 제공하는 데이터 구조 TransformTempSig 및 TileTempSig 뿐만 아니라 변수 temporal_enabled, temporal_refresh_bit, temporal_signalling_present, 및 temporal_step_width_modifier을 포함하는 시간적 처리와 관련된 앞서 표시된 바와 같은 추가 변수를 수신할 수 있다.
2개의 시간적 처리 서브 블록이 나타나 있다: TransformTempSig 및 TileTempSig 데이터 구조를 사용하여 시간적 예측을 위한 디코딩 프로세스가 적용되는 제1 서브 블록(2748) 및 타일링된 시간적 리프레시를 적용하는 제2 서브 블록(2750)(예를 들어, 도 11a 내지 도 13b의 예를 참조하여 설명된 바와 같음). 서브 블록 2750은 리프레시 시그널링에 따라 시간적 버퍼의 콘텐츠를 0으로 설정하도록 구성된다.
서브 블록 2752 및 2756에서, 탈양자화 및 변환을 위한 디코딩 프로세스는 서브 블록 2718 및 2720과 유사한 방식으로 레벨 2 데이터에 적용된다(후자는 레벨 1 데이터에 적용됨). 서브 블록 2756에서 역변환 처리로부터 출력된 재구성된 제2 잔차 세트는 그 다음 서브 블록 2756에서 서브 블록 2748로부터 출력되는 시간적으로 예측된 레벨 2 잔차 세트에 추가되고; 이는 시간적 예측의 일부를 구현한다. 블록 2746의 출력은 재구성된 레벨 2 잔차(resL2Residuals)의 세트이다.
블록 2758에서, 재구성된 레벨 2 잔차(resL2Residuals) 및 재구성된 레벨 2 수정된 업샘플링된 샘플(recL2ModifiedUpsampledSamples)이 개선 서브 계층 2에 대한 잔차 재구성 프로세스에서 조합된다. 이 블록의 출력은 레벨 2(recL2PictureSamples)에서 재구성된 픽처 샘플 세트이다. 블록 2760에서, 레벨 2에서 이러한 재구성된 픽처 샘플에 디더 필터를 적용하는 디더링 프로세스가 적용될 수 있다. 이 프로세스의 출력은 레벨 2(recL2DitheredPictureSamples)에서 재구성된 디더링된 픽처 샘플 세트이다. 이들은 블록 2762에서 출력 비디오 시퀀스(예를 들어, 비디오의 프레임을 구성하는 다수의 연속적인 픽처를 위한 것, 여기서 평면은 디스플레이 디바이스에서의 시청을 위해 다차원 어레이로 조합될 수 있음)로 볼 수 있다.
페이로드 데이터 블록 유닛 프로세스
블록 2704에서 수행되는 동작이 이제 더 자세히 설명될 것이다. 이 프로세스에 대한 입력은 개선 계층 비트스트림이다. 개선 계층 비트스트림은 예를 들어 위에 표시된 바와 같이 NAL 유닛으로 캡슐화된다. NAL 유닛은 개선 계층 정보를 베이스 계층 디코딩된 정보와 동기화하기 위해 사용될 수 있다.
비트스트림은 NAL 유닛으로 조직되며, 각각의 NAL 유닛은 하나 이상의 데이터 블록을 포함한다. 각각의 데이터 블록에 대해 process_block( ) 신택스 구조(위의 "신택스" 섹션 참조)는 블록 헤더를(특정 경우에, 단지 블록 헤더만을) 파싱하는 데 사용된다. 블록 헤더의 정보를 기초로 관련 process_block_() 신택스 요소를 호출할 수 있다. 인코딩된 데이터를 포함하는 NAL 유닛은 적어도 2개의 데이터 블록을 포함할 수 있다: 픽처 구성 데이터 블록 및 인코딩된(타일링된) 데이터 블록. 가능한 다양한 데이터 블록 세트는 가능한 페이로드 타입을 나타내는 위의 테이블에 표시되어 있다.
시퀀스 구성 데이터 블록은 비트스트림의 시작 부분에서 적어도 한 번 발생할 수 있다. 전역 구성 데이터 블록은 적어도 모든 순간 디코딩 리프레시 픽처에 대해 발생할 수 있다. 인코딩된(타일링된) 데이터 블록에는 픽처 구성 데이터 블록이 선행될 수 있다. NAL 유닛에 존재할 때, 전역 구성 데이터 블록은 NAL 유닛의 제1 데이터 블록일 수 있다.
픽처 개선 디코딩 프로세스
본 섹션은 블록 2706에서 수행되는 픽처 개선 디코딩 프로세스를 더 자세히 설명한다.
이 프로세스의 입력은 앞서 설명한 "프로세스 블록 신택스" 섹션에 설명된 헤더 디코딩 프로세스를 따르는 비트스트림의 일부일 수 있다. 출력은 디코딩되는 픽처 개선에 속하는 엔트로피 인코딩된 변환 계수이다. 인코딩된 픽처는 위의 "프로세스 페이로드-픽처 구성" 및 "데이터 블록 유닛 픽처 구성 시멘틱스" 섹션에 설명된 픽처 구성 페이로드가 선행될 수 있다.
픽처 개선 인코딩된 데이터는 "프로세스 페이로드-인코딩된 데이터" 섹션에 설명된 이 데이터의 처리 신택스와 함께 payload_encoded_data로 수신될 수 있다. 픽처 개선 인코딩된 데이터의 처리를 위한 입력은 평면의 수를 포함하는 변수 nPlanes(processed_planes_type_flag 변수의 값에 따라 달라질 수 있음), 변수 nLayers(transform_type의 값에 따라 달라질 수 있음) 및 변수 nLevels(처리할 레벨 수를 나타냄)를 포함할 수 있다. 이들은 도 9a에 도시되어 있다. 변수 nLevels는 2개의 개선 서브 계층이 사용 및 처리되는 경우 상수, 예를 들어 2와 같을 수 있다.
블록 2706 프로세스의 출력은 요소 surfaces[nPlanes][nLevels][nLayers]와 함께(nPlanes)x(nLevels)x(nLayers) 표면 세트(예를 들어, 어레이- 바람직하게는 다차원 -로 배열됨)를 포함할 수 있다. temporal_signalling_present_flag가 1과 같으면, 요소 temporal_surface[nPlanes]를 갖는 크기 nPlanes의 추가 시간적 표면이 또한 검색될 수 있다. 변수 nPlanes는 다음 처리를 사용하여 유도될 수 있다.
Figure pct00101
그리고, 변수 nLayers는 다음 처리를 사용하여 유도될 수 있다.
Figure pct00102
인코딩된 데이터는 (특히) 도 9a에 도시되어 있는 바와 같이 청크로 구성될 수 있다. 총 청크 수 total_chunk_count는 다음과 같이 계산될 수 있다 : nPlanes * nLevels * nLayers * (no_enhancement_bit_flag == 0) + nPlanes * (temporal_signalling_present_flag == 1). 각각의 평면에 대해, 다수(예를 들어, 최대 2)의 개선 서브 계층이 추출된다. 각각의 개선 서브 계층에 대해, 변환 계수의 다수(예를 들어, 4x4 변환의 경우 최대 16)의 계수 그룹이 추출될 수 있다. 추가적으로, temporal_signalling_present_flag가 1과 같은 경우, 개선 서브 계층 2를 위한 시간적 데이터를 갖는 추가 청크가 추출될 수 있다. 이 처리 내에서, 1과 동일한 변수 levelIdx의 값은 개선 서브 계층 1을 참조하는 데 사용될 수 있고 2와 동일한 변수 levelIdx의 값은 개선 서브 계층 2를 참조하는 데 사용될 수 있다. 디코딩 프로세스 동안 청크는 한 번에 2 비트를 판독할 수 있다. surfaces[planeIdx][levelIdx][layerIdx].entropy_enabled_flag, surfaces[planeIdx][levelIdx][layerIdx].rle_only_flag, temporal_surfaces[planeIdx].entropy_enabled_flag 및 temporal_surfaces[planeIdx].rle_only_flag에 대한 값은 다음과 같이 유도될 수 있다:
Figure pct00103
엔트로피 인코딩된 변환 계수 및 엔트로피 인코딩된 시간적 신호 계수 그룹과 관련된 데이터는 entropy_enabled_flag 및 rle_only_flag 필드의 각각의 값에 따라 유도될 수 있다. 여기서 엔트로피 인코딩은 런-렝스 인코딩만을 포함하거나 프리픽스/허프만 코딩 및 런-렝스 인코딩을 포함할 수 있다. surfaces[planeIdx][levelIdx][layerIdx].data의 콘텐츠는 데이터의 특정 청크와 관련된 엔트로피 인코딩된 변환 계수의 시작 어드레스를 제공하고 temporal_surfaces[planeIdx].data는 특정 데이터 청크와 관련된 엔트로피 인코딩된 시간적 신호 계수 그룹에 대한 시작 어드레스를 제공한다. 이러한 데이터 부분은 아래에 설명된 바와 같이 유도될 수 있다.
Figure pct00104
그 다음, surfaces[planeIdx][levelIdx][layerIdx].size 길이의 바이트 블록에 포함되고 surfaces[planeIdx][levelIdx][layerIdx].data 어드레스에서 시작하는 변환 계수가 추출되어 엔트로피 디코딩 프로세스로 전달될 수 있고, 이는 도 10a 내지 도 10i와 관련하여 앞서 설명된 방법 및/또는 아래 설명에서 더 자세히 설명된 방법을 적용할 수 있다.
temporal_signalling_present_flag가 1로 설정되면, temporal_surfaces[planeIdx].size의 길이의 바이트의 블록에 포함되고 temporal_surfaces[planeIdx].data 어드레스에서 시작하는 시간적 신호 계수 그룹도 유사한 엔트로피 디코딩 프로세스로 전달될 수 있다.
픽처 개선 디코딩 프로세스 - 타일링된 데이터
픽처 개선 인코딩된 타일링된 데이터(payload_encoded_tiled_data)에 대한 디코딩 프로세스는 앞서 설명한 프로세스의 변형으로 볼 수 있다. 이 프로세스에 대한 신택스는 "프로세스 페이로드-인코딩된 타일링된 데이터"라는 명칭의 위 섹션에 설명되어 있다.
이 프로세스에 대한 입력은 다음과 같을 수 있다: 위와 같은 변수 nPlanes, nLayers 및 nLevels; Ceil(Picture_Width/Tile_Width)xCeil(Picture_Height/Tile_Height)과 동일하고 레벨 2 서브 계층의 타일 수를 의미하는 변수 nTilesL2; 레벨 1 서브 계층의 타일 수를 나타내며 다음과 같은 변수 nTilesL1: (a) 변수 scaling_mode_level2가 0과 같으면 nTilesL2, (b) 변수 scaling_mode_level2가 1과 같으면 Ceil(Ceil(Picture_Width / 2) / Tile_Width)xCeil(Ceil(Picture_Height) / Tile_Height) 및 c) 변수 scaling_mode_level2가 2와 같으면, Ceil(Ceil(Picture_Width / 2) / Tile_Width)xCeil(Ceil(Picture_Height / 2) / Tile_Height); 변수 resolution_type의 값에서 유도된 픽처 폭과 높이를 의미하는 Picture_Width 및 Picture_Height; 및 tile_dimensions_type 변수의 값에서 유도된 타일 폭과 높이를 의미하는 Tile_Width 및 Tile_Height. 여기에, 언급된 변수에 대한 추가적인 내용은 위의 데이터 블록 시멘틱스 섹션에 설명되어 있다.
이 프로세스의 출력은 요소 surfaces[nPlanes][nLevels][nLayer]가 있는(nPlanes)x(nLevels)x(nLayer) 어레이 "표면"이다. temporal_signalling_present_flag가 1로 설정되면, 출력은 또한 요소 temporal_surface[nPlanes]를 갖는 크기 nPlanes의 추가 시간적 표면을 포함할 수 있다. 변수 nPlanes 및 nLayers에 대한 값은 위의 섹션에서 설명한 바와 같이 유도될 수 있다.
위와 같이, 인코딩된 데이터는 청크로 조직된다. 이 경우, 각각의 청크는 타일, 예를 들어 도 21a에 도시되어 있는 부분(2140) 각각에 대응할 수 있다. 총 청크 수 total_chunk_count는 다음과 같이 계산된다: nPlanes * nLevels * nLayers * (nTilesL1 + nTilesL2) * (no_enhancement_bit_flag == 0) + nPlanes * nTilesL2 * (temporal_signalling_present_flag == 1). 개선 픽처 데이터 청크는 도 21a 및 도 21b 중 하나에 도시되어 있는 바와 같이 계층적으로 조직될 수 있다. 본 출원에 설명된 예에 따르면, 각각의 평면에 대해 최대 2개의 개선 서브 계층 계층이 추출될 수 있고 개선의 각각의 서브 계층에 대해 변환 계수의 최대 16개 계수 그룹이 추출될 수 있다. 상이한 수의 서브 계층 또는 상이한 변환을 갖는 다른 구현은 상이한 수의 추출된 레벨 및 계층을 가질 수 있다. 이전과 같이, 본 예는 레벨 2에서 시간적 예측을 적용함에 따라, temporal_signalling_present_flag가 1로 설정되면, 개선 서브 계층 2를 위한 시간적 데이터를 갖는 추가 청크가 추출된다. 변수 levelIdx는 앞서 설명한 바와 같이 사용할 수 있다.
이 타일의 경우, 각각의 청크는 한 번에 1비트씩 판독될 수 있다. surfaces[planeIdx][levelIdx][layerIdx].rle_only_flag 및 temporal_signalling_present_flag가 1로 설정되는 경우의 temporal_surfaces[planeIdx].rle_only_flag는 다음과 같이 유도될 수 있다:
Figure pct00105
surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].entropy_enabled_flag 및 temporal_signalling_present_flag가 1로 설정되는 경우의 temporal_surfaces[planeIdx].tiles[tileIdx].entropy_enabled_flag는 다음과 같이 유도될 수 있다:
Figure pct00106
Figure pct00107
entropy_enabled_flag 및 rle_only_flag 필드의 값에 따라, surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].data에 대한 콘텐츠(즉, 데이터의 특정 청크에 관련한, RLE 단독 또는 프리픽스 코딩 및 RLE 인코딩된 계수의 시작을 나타내는) 및 temporal_signalling_present_flag가 1로 설정되는 경우, entropy_enabled_flag 및 rle_only_flag 필드의 값에 따라, 데이터의 특정 청크에 관련된 RLE 단독 또는 프리픽스 코딩 및 RLE 인코딩된 시간적 신호 계수 그룹의 시작을 나타내는 temporal_surfaces[planeIdx].tiles[tileIdx].data에 대한 콘텐츠는 다음과 같이 유도될 수 있다:
Figure pct00108
Figure pct00109
Figure pct00110
Figure pct00111
그 다음, 길이 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].size의 바이트 블록에 포함되고 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].data 어드레스에서 시작하는 계수가 다른 곳에서 설명한 바와 같이 엔트로피 디코딩 프로세스를 위해 전달될 수 있다. temporal_signalling_enabled_flag가 1로 설정되면, 길이 temporal_surfaces[planeIdx].tiles[tileIdx].size의 바이트 블록에 포함되고 temporal_surfaces[planeIdx].tiles[tileIdx].data 어드레스에서 시작하는 시간적 신호 계수 그룹이 또한 엔트로피 디코딩을 위해 전달된다.
개선 서브 계층 1(L-1) 인코딩된 데이터에 대한 디코딩 프로세스
이 섹션에서는 도 27의 블록 2714의 일부로 수행될 수 있는 특정 프로세스를 설명한다. 이 프로세스의 결과는 예비 중간 픽처에 추가될 개선 잔차 표면(즉, 제1 세트의 레벨 1 잔차)일 수 있다.
제1 동작으로 레벨 1 픽처의 차원이 유도될 수 있다. 잔차 표면의 레벨 1 차원은 예를 들어 블록 2712에 의한 출력과 같은 예비 중간 픽처와 동일하다. scaling_mode_level2(앞서 설명됨)가 0과 같으면, 레벨 1 차원은 resolution_type(예를 들어, 위에서 또한 참조됨)에서 유도된 레벨 2 차원과 동일하게 취해질 수 있다. scaling_mode_level2가 1과 같은 경우, 레벨 1 길이는 resolution_type에서 유도된 레벨 2 길이와 동일하게 설정될 수 있는 반면 레벨 1 폭은 resolution_type에서 유도된 레벨 2 폭을 반분함으로써 계산될 수 있다. scaling_mode_level2가 2와 같으면 resolution_type에서 유도된 레벨 2 차원을 반분하여 레벨 1 차원을 계산해야 한다.
레벨 1 인코딩된 데이터 블록, 예를 들어 도 27의 블록 2714에 대한 일반적인 디코딩 프로세스는 다음을 입력으로 취할 수 있다: 현재 픽처 좌상단 샘플에 대한 현재 변환 블록의 좌상단 샘플을 지정하는 샘플 위치(xTb0, yTb0); 예를 들어 앞서 설명된 것과 같은 변수 transform_type의 값에서 유도된 현재 변환 블록의 크기를 지정하는 변수 nTbS- transform_type이 0과 같으면 nTbS = 2이고 transform_type이 1과 같으면 nTbS = 4임 -; 레벨 1 엔트로피 디코딩된 양자화된 변환 계수를 지정하는 크기 (nTbS)x(nTbS)의 어레이 TransformCoeffQ; 베이스 디코더 또는 이전 업스케일링으로 인한 현재 블록의 예비 중간 픽처 재구성된 샘플을 지정하는 크기 (nTbS)x(nTbS)의 어레이 recL1BaseSamples; 변수 step_width_level1의 값에서 앞서 설명한 바와 같이 유도된 stepWidth 값, 예를 들어, 이는 step_width_level1을 좌측으로 1 비트 시프트하여 획득할 수 있다(즉, step_width_level1 << 1); 변환 계수가 속하는 평면을 지정하는 변수 IdxPlanes; 및 변수 user_data_enabled의 값에서 유도된 변수 userDataEnabled.
프로세스(2714)의 출력은 요소 resL1FilteredResiduals[x][y]를 갖는 잔차 resL1FilteredResiduals의 (nTbS)x(nTbS) 어레이일 수 있다. 픽처에 대한 상이한 블록 위치에 관련한 잔차의 어레이가 계산될 수 있다.
현재 픽처의 좌상단 샘플에 대한 현재 변환 블록의 좌상단 샘플을 지정하는 샘플 위치(xTbP, yTbP)는 다음과 같이 유도될 수 있다 : (xTbP, yTbP) = (IdxPlanes == 0) ? (xTb0, yTb0) : (xTb0 >> ShiftWidthC, yTb0 >> ShiftHeightC), 예를 들어 여기서 P는 변환 계수가 관련된 평면에 따라 루마 또는 크로마 평면 중 어느 하나와 관련될 수 있다. ShiftWidthC 및 ShiftHeightC는 앞서 설명한 바와 같이 유도될 수 있다.
no_enhancement_bit_flag가 0과 같으면, 이때, 개선 데이터가 존재할 수 있으며 다음과 같이 순서화된 단계가 적용된다:
1) nTbs가 4이면 TransCoeffQ(1)(1)은 userDataEnabled 변수가 1로 설정된 경우 2 비트(>>2) 또는 userDataEnabled가 2로 설정된 경우 6 비트(>>6) 우측으로 시프트될 수 있다. 그리고, 추가로, TransCoeffQ(1)(1)의 최종 비트가 0으로 설정되면 TransCoeffQ(1)(1)은 1 비트(>>1) 우측으로 시프트될 수 있으며; 그렇지 않으면(예를 들어, TransCoeffQ(1)(1)의 최종 비트가 1로 설정된 경우), TransCoeffQ(1)(1)은 1 비트(>>1)만큼 우측으로 시프트되고, TransCoeffQ(1)(1)은 음수 값을 갖도록 설정된다.
2) nTbs가 2와 같은 경우, TransCoeffQ(0)(1)은 userDataEnabled 변수가 1로 설정된 경우 2 비트(>>2), 또는 userDataEnabled가 2로 설정된 경우 6 비트(>>6) 우측으로 시프트된다. 그리고, 추가로, TransCoeffQ(0)(1)의 최종 비트가 0으로 설정되면 TransCoeffQ(0)(1)은 1 비트(>>1) 우측으로 시프트된다. 그렇지 않으면(예를 들어, TransCoeffQ(0)(1)의 최종 비트가 1로 설정된 경우), TransCoeffQ(0)(1)은 1 비트(>>1) 우측으로 시프트되고, TransCoeffQ(0)(1)은 음수 값을 갖도록 설정된다.
3) 아래에 설명된 서브 블록 2716의 탈양자화 프로세스는 nTbS와 동일하게 설정된 변환 크기, (nTbS)x(nTbS) 크기의 어레이 TransformCoeffQ, 변수 stepWidth를 입력으로 하여 호출되고, 출력은 (nTbS)x(nTbS) 어레이 또는 탈양자화된 계수 dequantCoeff이다.
4) 서브 블록 2718의 변환 프로세스는 루마 위치(xTbX, yTbX), nTbS와 동일하게 설정된 변환 크기, 크기 (nTbS)x(nTbS)의 어레이 dequantCoeff를 입력으로 사용하여 호출되고, 출력은 재구성된 레벨 1 잔차의 (nTbS)x(nTbS) 어레이-resL1Residuals -이다.
5) 서브 블록 2720의 레벨 1 필터 프로세스는 루마 위치(xTbX, yTbX), 크기 (nTbS)x(nTbS)의 어레이 resL1Residuals를 입력으로 하여 호출되고 출력은 재구성된 필터링된 레벨 1 잔차의 (nTbS)x(nTbS) 어레이- resL1FilteredResiduals -이다.
평면 또는 프레임을 구성하는 모든 코딩 유닛에 대해 위의 단계가 반복될 수 있다. no_enhancement_bit_flag가 1과 같으면, 이때, 개선이 적용되지 않는다. 이 경우 크기 (nTbS)x(nTbS)의 어레이 resL1FilteredResiduals는 0만 포함하도록 설정될 수 있다.
앞서 설명된 동작 다음에, 각각의 평면에 대한 픽처 재구성 프로세스, 즉, 아래에서 더 자세히 설명되는 바와 같은 도 27의 블록 2730은 변환 블록 위치(xTb0, yTb0), 변환 블록 크기 nTbS, 변수 IdxPlanes, (nTbS)x(nTbS) 어레이 resL1FilteredResiduals 및 (nTbS)x(nTbS) 어레이 recL1BaseSamples를 입력으로 사용하여 호출된다.
개선 서브 계층 2(L-2) 인코딩된 데이터에 대한 디코딩 프로세스
블록 2746에서의 개선 서브 계층 2(레벨 2) 인코딩된 데이터에 대한 디코딩 프로세스는 앞서 설명된 개선 서브 계층 1(레벨 1) 인코딩된 데이터에 대한 디코딩 프로세스와 유사할 수 있다. 이 프로세스의 결과는 업스케일링된 레벨 1 개선된 재구성된 픽처에 추가될 레벨 2 개선 잔차 평면이다.
제1 동작으로서, 레벨 2 픽처의 차원이 유도될 수 있다. 이들은 앞서 설명한 변수 resolution_type에서 유도될 수 있다. 레벨 2 잔차 평면의 차원은 레벨 2 픽처의 차원과 동일할 수 있다.
레벨 2 인코딩된 데이터 블록에 대한 일반적 디코딩 프로세스는 다음을 입력으로 사용할 수 있다 : 현재 픽처의 좌상단 샘플에 대한 현재 변환 블록의 좌상단 샘플을 지정하는 샘플 위치(xTb0, yTb0); 변수 transform_type의 값에서 유도된 현재 변환 블록의 크기를 지정하는 변수 nTbS(예를 들어, 앞서 설명한 바와 같음- 다른 예에서 각각의 레벨은 다른 변환 크기를 가질 수 있음 -); 변수 temporal_enabled_flag; 변수 temporal_refresh_bit_flag; 변수 temporal_signalling_present_flag; 변수 temporal_step_width_modifier; 도 27의 업스케일링 프로세스(2732)로부터 얻어진 업샘플링된 재구성된 샘플을 지정하는 크기 (nTbS)x(nTbS)의 어레이 recL2ModifiedUpsampledSamples; 레벨 2 엔트로피 디코딩된 양자화된 변환 계수를 지정하는 크기 (nTbS)x(nTbS)의 어레이 TransformCoeffQ; 변수 temporal_signalling_present_flag가 1과 같고, temporal_tile_intra_signalling_enabled_flag가 1과 같은 경우, 위치(xTb0 >> nTbs, yTb0 >> nTbs)에서 TempSigSurface의 값(예를 들어, 시간적 처리 섹션 참조)에 대응하는 변수 TransformTempSig; 추가로 temporal_tile_intra_signalling_enabled_flag가 1로 설정되는 경우, 위치((xTb0%32) * 32, (yTb0%32) * 32)에서 TempSigSurface의 값에 대응하는 변수 TileTempSig; 위의 "시멘틱스" 섹션에 설명된 바와 같이 변수 step_width_level2의 값에서 유도된 stepWidth 값; 및 변환 계수가 속하는 평면을 지정하는 변수 IdxPlanes. 이러한 변수에 대한 더 자세한 내용은 위의 "신택스" 및 "시멘틱스" 섹션에 설명되어 있다.
블록 2746은 아래에 설명된 바와 같이 입력을 처리하고 요소 resL2Residuals[x][y]를 갖는 레벨 2 잔차- resL2Residuals -의 (nTbS)x(nTbS) 어레이를 출력한다.
샘플 위치(xTbP, yTbP)의 유도는 위 섹션의 레벨 1 잔차에 대해 설명된 것과 유사한 프로세스를 따를 수 있다.
no_enhancement_bit_flag가 0으로 설정된 경우, 즉, 개선이 적용되는 경우, 이때, 다음의 순서화된 단계가 수행될 수 있다.
1) 변수 temporal_enabled_flag가 1과 같고 temporal_refresh_bit_flag가 0과 같은 경우, 시간적 예측 프로세스(예를 들어, 위 및 아래의 예에 명시된 바와 같이)가 루마 위치(xTbY, yTbY), nTbS와 동일하게 설정된 변환 크기, 변수 TransformTempSig 및 변수 TileTempSig를 입력으로 사용하여 호출된다. 출력은 (nTbS)x(nTbS) 크기의 시간적으로 예측된 레벨 2 잔차- tempPredL2Residuals -의 어레이이다.
2) 변수 temporal_enabled_flag가 1과 동일하고 temporal_refresh_bit_flag가 1과 같으면, 위에 명시된 바와 같은 시간적으로 예측된 레벨 2 잔차는 0만을 포함하도록 설정된다.
3) 변수 temporal_enabled_flag가 1과 동일하고, temporal_refresh_bit_flag가 0과 동일하고, temporal_tile_intra_signalling_enabled_flag가 1과 동일하고 TransformTempSig가 0과 동일하면, 변수 stepWidth가 수정될 수 있다. 이는 예를 들어, 다음 계산을 사용하여, temporal_step_width_modifier을 사용하여 수정할 수 있다. Floor(stepWidth *(1-(Clip3(0, 0.5, temporal_step_width_modifier)/255))).
4) 다른 섹션에서 명시되고 서브 블록 2752로 도시되어 있는 바와 같은 탈양자화 프로세스는 nTbS와 동일하게 설정된 변환 크기, (nTbS)x(nTbS) 크기의 어레이 TransformCoeffQ 및 변수 stepWidth를 입력으로하여 호출된다. 출력은 탈양자화된 계수의 (nTbS)x(nTbS) 어레이 dequantCoeff이다.
5) 다른 섹션에서 명시되고 서브 블록 2756으로 나타내어진 변환 프로세스는 루마 위치(xTbY, yTbY), nTbS와 동일하게 설정된 변환 크기, 크기 (nTbS)x(nTbS)의 어레이 탈양자화된 계수 dequantCoeff를 입력으로 하여 호출된다. 출력은 재구성된 레벨 2 잔차- resL2Residuals -의 (nTbS)x(nTbS) 어레이이다.
6) 변수 temporal_enabled_flag가 1과 같으면, (nTbS)x(nTbS) 크기의 시간적으로 예측된 레벨 2 잔차 tempPredL2Residuals의 어레이가 재구성된 레벨 2 잔차 resL2Residuals의 (nTbS)x(nTbS) 어레이에 추가되고, 재구성된 레벨 2 잔차 resL2Residuals의 어레이는 루마 위치(xTbY, yTbY)에서 temporalBuffer에 저장된다.
레벨 1 잔차 처리에 따라, 상기 동작은 픽처를 구성하는 다수의 코딩 유닛에 대해 수행될 수 있다. 코딩 유닛은 다른 코딩 유닛에 의존하지 않기 때문에 레벨 1 잔차 처리에 따라 크기 (nTbS)x(nTbS)의 코딩 유닛에 대해 병렬로 위의 동작이 수행될 수 있다.
no_enhancement_bit_flag가 1로 설정된 경우, 즉, 적어도 레벨 2에 대해 개선이 디스에이블된 경우, 다음의 순서화된 단계가 적용된다:
1) 변수 temporal_enabled_flag가 1과 같고, temporal_refresh_bit_flag가 0과 같고, 변수 temporal_signalling_present_flag가 1과 같으면, 다른 섹션 및 아래에 명시된 것과 같은 시간적 예측 프로세스가 루마 위치(xTbY, yTbY), nTbS와 동일하게 설정된 변환 크기, 변수 TransformTempSig 및 변수 TileTempSig를 입력으로 사용하여 호출된다. 출력은 (nTbS)x(nTbS) 크기의 어레이 tempPredL2Residuals(예를 들어, 위의 동작 1에 따름)이다.
2) 변수 temporal_enabled_flag가 1과 같고, temporal_refresh_bit_flag가 0과 같고, 변수 temporal_signalling_present_flag가 같으면, 루마 위치(xTbY, yTbY), nTbS와 동일하게 설정된 변환 크기, 0과 동일하게 설정된 변수 TransformTempSig 및 0과 동일하게 설정된 변수 TileTempSig를 입력으로 사용하여 시간적 예측 프로세스가 호출되고, 출력은 (nTbS)x(nTbS) 크기의 어레이 tempPredL2Residuals이다.
3) 변수 temporal_enabled_flag가 1과 같고 temporal_refresh_bit_flag가 1과 같으면 (nTbS)x(nTbS) 크기의 어레이 tempPredL2Residuals는 0만 포함하도록 설정된다.
4) 변수 temporal_enabled_flag가 1과 같으면 (nTbS)x(nTbS) 크기의 tempPredL2Residuals 어레이가 (nTbS)x(nTbS) 어레이 resL2Residuals에 저장되고 resL2Residuals 어레이는 루마 위치(xTbY, yTbY)에서 temporalBuffer에 저장된다. 그렇지 않으면 (nTbS)x(nTbS) 크기의 어레이 resL2Residuals가 0만 포함하도록 설정된다.
블록 2758에 도시되어 있는 바와 같이 각각의 평면에 대한 픽처 재구성 프로세스는 변환 블록 위치(xTb0, yTb0), 변환 블록 크기 nTbS, 변수 IdxPlanes, (nTbS)x(nTbS) 어레이 resL2Residuals 및 (xTbY )x(yTbY) recL2ModifiedUpsampledSamples를 입력으로 사용하여 호출된다. 출력은 재구성된 픽처이다.
시간적 예측을 위한 디코딩 프로세스
서브 블록 2752과 같은 시간적 예측을 위한 디코딩 프로세스는 다음을 입력으로 취할 수 있다: 현재 픽처의 좌상단 루마 또는 크로마 샘플에 대한 현재 루마 또는 크로마 변환 블록의 좌상단 샘플을 지정하는 위치(xTbP, yTbP)(여기서 P는 변환 계수가 속하는 평면에 따라 루마 또는 크로마 평면 중 어느 하나에 관련될 수 있음); 현재 변환 블록의 크기를 지정하는 변수 nTbS(예를 들어, 위의 예에서 유도됨); 변수 TransformTempSig; 및 변수 TileTempSig. 이 예에서, 이 프로세스의 출력은 tempPredL2Residuals[x][y] 요소를 갖는 시간적으로 예측된 레벨 2 잔차 tempPredL2Residuals의 (nTbS)x(nTbS) 어레이이다.
프로세스(2752)는 다음의 순서화된 단계를 적용할 수 있다:
1) 변수 temporal_tile_intra_signalling가 1과 같고 xTbP >>5가 0과 같고 yTbP >>5가 0과 같고 TileTempSig가 1과 같은 경우, 아래에 설명되고 서브 블록 2750으로 도시되어 있는 타일링된 시간적 리프레시 프로세스가 위치(xTbP, yTbP)를 사용하여 호출된다.
2) 변수 TransformTempSig가 0과 같으면, 이때, tempPredL2Residuals[x][y] = temporalBuffer[xTbP + x][yTbP + y]이고, 여기서 x와 y는 범위 [0, (nTbS-1)] 내에 있다. 그렇지 않으면, tempPredL2Residuals[x][y]가 모두 0으로 설정된다. 그 다음, 이는 레벨 2 잔차에 적용하기 위해 시간적 버퍼로부터 값을 조건부로 로딩한다(예를 들어, 다른 예의 시간적 예측 프로세스와 유사함).
타일링된 시간적 리프레시
서브 블록 2750에서의 타일링된 시간적 리프레시에 대한 입력은 현재 픽처의 좌상단 루마 또는 크로마 샘플에 대한 현재 루마 또는 크로마 변환 블록의 좌상단 샘플을 지정하는 위치(xTbP, yTbP)(여기서 P는 변환 계수가 속하는 평면에 따라 루마 또는 크로마 평면 중 어느 하나에 관련될 수 있음)를 포함할 수 있다. 이 프로세스의 출력은 위치(xTbP, yTbP)에서(즉, 정의된 타일과 관련된) temporalBuffer 크기 32x32 영역의 샘플이 0으로 설정된다는 것이다. 따라서, 이 프로세스는 다른 예를 참조하여 설명된 바와 같이 시간적 버퍼를 리셋하거나 리프레시하는 것으로 보일 수 있다.
탈양자화를 위한 디코딩 프로세스
다음 프로세스는 레벨 1 및 레벨 2 데이터 블록에 모두 적용될 수 있다. 이는 또한 레벨 1 디코딩 파이프라인의 일부로 인코더에 적용될 수 있다. 이는 예의 탈양자화 컴포넌트를 구현할 수 있다. 도 27을 참조하면, 이는 서브 블록(2716 및 2752)을 구현하는 데 사용될 수 있다. 탈양자화 디코딩 프로세스 개요
이 프로세스에 전달된 모든 변환 계수 그룹은 특정 평면 및 개선 서브 계층에 속한다. 이들은 데드존을 갖는 균일한 양자화기를 사용하여 스케일링되었을 수 있다. 양자화기는 비중앙 탈양자화 오프셋을 사용할 수 있다(예를 들어, 도 20a 내지 도 20d를 참조하여 설명됨).
탈양자화는 변환 계수에 대한 스케일링 프로세스로 볼 수 있다. 일 예에서 탈양자화 프로세스는 다음과 같이 구성될 수 있다. 탈양자화 프로세스는 다음을 입력으로 사용할 수 있다: 현재 변환 블록의 크기를 지정하는 변수 nTbS(예를 들어, 위의 다른 프로세스에 따름); 엔트로피 디코딩된 양자화된 변환 계수를 포함하는 크기 (nTbS)x(nTbS)의 어레이 TransformCoeffQ; 단계-폭 값 파라미터를 지정하는 변수 stepWidth; 개선 서브 계층의 인덱스를 지정하는 변수 levelIdx(개선 서브 계층 1에 대해 levelIdx = 1 및 개선 서브 계층 2에 대해 levelIdx = 2); 탈양자화 오프셋을 지정하는 변수 dQuantOffset(앞서 설명된 바와 같이 변수 dequant_offset에서 유도됨); quant_matrix_mode가 0과 다르면, 크기 1 x nTbS 2 의 어레이 QmCoeff0(변수 qm_coefficient_0에서 유도됨) 및 추가로 quant_matrix_mode가 4와 같으면 크기 1 x nTbS 2 의 어레이 QmCoeff1(변수 qm_coefficient_1에서 유도됨); nTbS == 2인 경우, 이전 픽처에서 사용된 스케일링 파라미터 어레이를 포함하는 크기 (3 * nTbS)x(nTbS)의 어레이 QuantScalerDDBuffer; 및, nTbS == 4이면, 이전 픽처에서 사용된 스케일링 파라미터 어레이를 포함하는 크기 (3 * nTbS)x(nTbS)의 어레이 QuantScalerDDSBuffer.
본 탈양자화 프로세스의 출력은 요소 d[x][y] 및 업데이트된 어레이 QuantMatrixBuffer를 갖는 탈양자화된 변환 계수의 (nTbS)x(nTbS) 어레이 d이다.
x = 0...nTbS-1, y = 0...nTbS-1 및 주어진 양자화 행렬 qm[x][y]를 갖는 스케일링된 변환 계수 d[x][y]의 유도를 위해, 다음 계산을 사용할 수 있다: d[x][y] = (TransformCoeffQ[x][y] * ((qm[x + (levelIdxSwap * nTbS)][y] + stepWidthModifier[x][y]) + appliedOffset [x][y]
위의 탈양자화 프로세스는 탈양자화 오프셋 및 단계-폭 수정자를 사용한다. 예를 들어, appliedOffset[x][y] 및 stepWidthModifier[x][y] 형태로 이러한 변수를 유도하는 프로세스가 아래에 나타나 있다:
Figure pct00112
위의 다른 예에서 설명된 바와 같이, 탈양자화는 가변 폭을 갖는 데드존을 사용할 수 있다. 변수 deadZoneWidthOffset는 다음 프로세스에 따라 유도될 수 있다:
if stepWidth > 16:
deadZoneWidthOffset [x][y] = ((1 << 16) - ((Aconst * (qm[x + (levelIdxSwap * nTbs)][y] + stepWidthModifier [x][y])) + Bconst) >> 1) * (qm[x + (levelIdxSwap * nTbs)][y] + stepWidthModifier [x][y]))) >> 16
if stepWidth <= 16:
deadZoneWidthOffset [x][y] = stepWidth >> 1
위의 계산에서 다음 상수를 사용할 수 있다: Aconst = 39; Bconst = 126484; Cconst = 9175; 및 Dconst = 79953.
변수 dQuantOffsetActual[x][y]는 다음과 같이 계산될 수 있다:
Figure pct00113
변수 levelIdxSwap는 다음과 같이 유도될 수 있다:
Figure pct00114
양자화 행렬의 유도
다양한 양자화 및 탈양자화 프로세스에서 양자화 행렬이 사용될 수 있다. 위의 예에서, 이는 qm[x][y]라 지칭된다. 양자화 행렬 qm[x][y]는 각각의 계수 그룹을 디코딩하는 데 사용되는 실제 양자화 단계-폭을 포함한다. 일 예에서, 양자화 행렬 qm[x][y]은 아래 설명된 바와 같이 유도될 수 있으며, 이는 스케일링 모드 및 개선 레벨에 따라 예비 양자화 행렬 qm_p[x][y]로부터 양자화 행렬을 구축한다:
Figure pct00115
예비 양자화 행렬 qm_p[x][y]는 다음과 같이 계산될 수 있다:
Figure pct00116
이 경우, 예비 양자화 행렬 qm_p[x][y]는 사용된 변환의 크기에 따라 양자화 행렬 스케일링 버퍼 및 stepWidth 변수의 콘텐츠로부터 구축된다. 상이한 양자화 행렬 스케일링 버퍼가 각각의 변환에 사용될 수 있으며, 예를 들어 제1 양자화 행렬 스케일링 버퍼 QuantScalerDDBuffer이 2x2 방향 분해 변환에 사용될 수 있고 제2 양자화 행렬 스케일링 버퍼 QuantScalerDDSBuffer이 4x4 방향 분해 변환에 사용될 수 있다. 이러한 버퍼는 아래에 설명된 바와 같이 구성할 수 있다.
양자화 행렬 스케일링 버퍼의 유도
양자화 행렬 스케일링 버퍼는 (디코더에 로컬 저장될 수 있는) 디폴트 행렬 파라미터의 세트, 이전 픽처에 대한 버퍼의 콘텐츠 및 시그널링된 양자화 행렬 계수 세트(예를 들어, 인코더로부터 수신됨) 중 하나 이상에 기초하여 유도될 수 있다. 예에서 설명된 변환 크기(예를 들어, 2x2 및 4x4) 각각에 대한 버퍼의 유도는 유사할 수 있다. 양자화 행렬 스케일링 버퍼의 초기화는 시그널링된 또는 디폴트(신호가 생략된 경우) 양자화 행렬 모드(예를 들어, 위에서 참조됨)에 의존(즉, 그에 의해 제어)될 수 있다.
양자화 행렬 스케일링 버퍼 QuantScalerDDBuffer[x][y] 형태의 2x2 변환을 위한 스케일링 파라미터는 다음과 같이 유도될 수 있다(즉, 변수 nTbS가 2와 동일한 경우). 먼저, 디폴트 스케일링 파라미터 default_scaling_dd[x][y]는 다음과 같이 설정할 수 있다:
default_scaling_dd[x][y] =
{
{ 0, 2 }
{ 0, 0 }
{ 32, 3 )
{ 0, 32 }
{ 0, 3 }
{ 0, 32 }
}
이러한 값은 구현에 따라 변경될 수 있음을 유의하여야 한다.
이후, 현재 픽처가 IDR 픽처인지 여부에 기초하여 어레이 QuantScalerDDBuffer이 초기화될 수 있다. 현재 픽처가 IDR 픽처인 경우, QuantScalerDDBuffer은 위와 같이 초기화된 default_scaling_dd와 동일하게 초기화될 수 있다. 현재 픽처가 IDR 픽처가 아닌 경우, QuantScalerDDBuffer 행렬은 예를 들어 이전 픽처로부터 변경되지 않은 채로 남겨질 수 있다.
초기화 이후에, 양자화 행렬 스케일링 버퍼 QuantScalerDDBuffer은 양자화 행렬 모드에 기초하여, 예를 들어 quant_matrix_mode의 값에 의해 표시되는 바와 같이 수정될 수 있다.
quant_matrix_mode가 0과 같고 현재 픽처가 IDR 픽처가 아닌 경우 QuantScalerDDBuffer은 변경되지 않은 상태로 남을 수 있다.
quant_matrix_mode가 1과 같으면, QuantScalerDDBuffer은 default_scaling_dd와 같을 수 있다.
quant_matrix_mode가 2와 같으면, QuantScalerDDBuffer은 다음과 같은 양자화 행렬 계수 QmCoeff0의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00117
quant_matrix_mode가 3과 같으면, QuantScalerDDBuffer은 다음과 같은 양자화 행렬 계수 QmCoeff0의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00118
quant_matrix_mode가 4와 같으면, QuantScalerDDBuffer은 다음과 같은 양자화 행렬 계수 QmCoeff1의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00119
quant_matrix_mode가 5와 같으면 QuantScalerDDBuffer은 다음과 같은 양자화 행렬 계수 QmCoeff0 및 QmCoeff1의 2개의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00120
4x4 변환을 위한 스케일링 파라미터의 유도는 앞서 설명한 프로세스와 유사할 수 있다. 양자화 행렬 스케일링 버퍼 QuantScalerDDSBuffer[x][y]의 형태의 4x4 변환을 위한 스케일링 파라미터는 다음과 같이 유도될 수 있다(즉, 변수 nTbS가 4와 동일한 경우). 먼저, 디폴트 스케일링 파라미터 default_scaling_dds[x][y]가 설정될 수 있다:
default_scaling_dds[x][y] =
{
{ 13, 26, 19, 32 }
{ 52, 1, 78, 9 }
{ 13, 26, 19, 32 }
{ 150, 91, 91, 19 }
{ 13, 26, 19, 32 }
{ 52, 1, 78, 9 }
{ 26, 72, 0, 3 }
{ 150, 91, 91, 19 }
{ 0, 0, 0, 2 }
{ 52, 1, 78, 9 }
{ 26, 72, 0, 3 }
{ 150, 91, 91, 19 }
}
역시, 표시된 값은 예시일 뿐이며 구현에 따라 상이할 수 있다.
이후, 현재 픽처가 IDR 픽처인지 여부에 기초하여 어레이 QuantScalerDDSBuffer이 초기화될 수 있다. 현재 픽처가 IDR 픽처인 경우, QuantScalerDDSBuffer은 위에서 초기화된 default_scaling_dds와 동일하게 초기화될 수 있다. 현재 픽처가 IDR 픽처가 아닌 경우, QuantScalerDDSBuffer 행렬은 예를 들어 이전 픽처로부터 변경되지 않은 채로 남을 수 있다.
초기화 이후에, 양자화 행렬 스케일링 버퍼 QuantScalerDDSBuffer은 양자화 행렬 모드에 기초하여, 예를 들어 quant_matrix_mode의 값에 의해 표시되는 바와 같이 다시 수정될 수 있다.
quant_matrix_mode가 0과 같고 현재 픽처가 IDR 픽처가 아닌 경우 QuantScalerDDSBuffer은 변경되지 않은 채로 남을 수 있다.
quant_matrix_mode가 1과 같으면, QuantScalerDDSBuffer은 default_scaling_dds와 같을 수 있다.
quant_matrix_mode가 2와 같으면, QuantScalerDDSBuffer은 다음과 같이 양자화 행렬 계수 QmCoeff0의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00121
quant_matrix_mode가 3과 같으면, QuantScalerDDSBuffer은 다음과 같이 양자화 행렬 계수 QmCoeff0의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00122
quant_matrix_mode가 4와 같으면, QuantScalerDDSBuffer은 다음과 같이 양자화 행렬 계수 QmCoeff1의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00123
quant_matrix_mode가 5와 같으면 QuantScalerDDSBuffer은 다음과 같이 양자화 행렬 계수 QmCoeff0 및 QmCoeff1의 2개의 시그널링된 세트에 기초하여 수정될 수 있다:
Figure pct00124
일반적 업스케일링 프로세스 설명
업스케일링 프로세스는 디코더에서 도 27의 블록 2712에서 디코딩된 베이스 픽처에 그리고 블록 2732에서 조합된 중간 픽처에 적용될 수 있다. 본 예에서, 업스케일링은 시그널링된 스케일링 모드에 기초하여 구성될 수 있다. 아래 설명된 프로세스에서 업스케일링은 레벨 1로의 업스케일링을 위한 scaling_mode_level1의 표시를 기초로 구성되고 레벨 2로의 업스케일링을 위한 scaling_mode_level2를 기초로 구성된다.
디코딩된 베이스 픽처에서 예비 중간 픽처로의 업스케일링
예를 들어, 블록 2712에서 수행되는 바와 같이 디코딩된 베이스 픽처에서 예비 중간 픽처로의 업스케일링은 다음 입력을 취할 수 있다: 현재 픽처 컴포넌트의 좌상단 샘플에 대한 현재 블록의 좌상단 샘플을 지정하는 위치(xCurr, yCurr); 현재 블록의 컬러 성분을 지정하는 변수 IdxPlanes; 일반적 디코딩 프로세스에서 사용되는 잔차 블록의 크기를 지정하는 변수 nCurrS; 현재 블록에 대한 디코딩된 베이스 샘플을 지정하는 (nCurrS)x(nCurrS) 어레이 recDecodedBaseSamples; 디코딩된 베이스 픽처의 폭과 높이를 지정하는 srcWidth 및 srcHeight 변수; 결과적으로 업스케일링된 픽처의 폭과 높이를 지정하는 변수 dstWidth 및 dstHeight; 및 적용할 스케일링에 대한 커널 계수를 선택하는 데 사용되는 변수 is8Bit, 예를 들어 샘플이 8비트인 경우 변수, 이때, is8Bit는 0과 같아야 하고, 샘플이 16비트인 경우, 이때 변수 is8Bit는 1과 같아야 한다. 블록 2712의 출력은 화소의 (nCurrX)x(nCurrY) 어레이 recL1ModifiedUpsampledBaseSamples를 포함할 수 있다.
recL1ModifiedUpsampledBaseSamples[x][y] 요소의 어레이에서 변수 nCurrX 및 nCurrY는 스케일링 모드를 기초로 유도될 수 있다. 예를 들어 scaling_mode_level1이 0과 같은 경우 업스케일링이 수행되지 않고 recL1ModifiedUpsampledBaseSamples[x][y]는 recDecodedBaseSamples[x][y]와 동일하게 설정된다. scaling_mode_level1이 1과 같으면, 이때, nCurrX = nCurrS << 1과 같고 nCurrY = nCurrS이다. scaling_mode_level1이 2와 같으면, 이때, nCurrX = nCurrS << 1과 같고 nCurrY = nCurrS << 1이다.
블록 2712에서 적용된 업스케일링은 전환가능한 업스케일링 필터의 사용을 수반할 수 있다. 디코딩된 베이스 샘플은 비트스트림에서 시그널링된 타입의 업스케일링 필터에 의해 처리될 수 있다. 업-스케일러의 타입은 "데이터 블록 유닛 전역 구성 시멘틱스" 섹션에 설명된 프로세스에서 유도될 수 있다. upsample_type 변수의 값에 따라 다수의 상이한 커널 타입이 적용될 수 있다. 예를 들어, 각각의 커널 타입은 입력으로서 recDecodedBaseSamples 픽처 샘플 세트를 수신하고 업샘플링된 픽처 샘플 recL1UpsampledBaseSamples 세트를 출력으로 생성하도록 구성될 수 있다. (비록 구현에 따라 수와 타입이 변할 수 있지만) 4개의 가능한 업-스케일러 커널이 있을 수 있다. 이는 "예시적인 업샘플링 접근법"이라는 명칭의 섹션에도 설명되어 있다. 본 예에서, upsample_type가 0과 같은 경우, 위의 "최근접 업샘플링" 섹션에서 설명된 최근접 샘플 업-스케일러가 선택될 수 있다. upsample_type가 1과 같은 경우 위의 "쌍선형 업샘플링" 섹션에서 설명된 쌍선형 업-스케일러가 선택될 수 있다. upsample_type가 2와 같은 경우 위의 "삼차 업샘플링" 섹션에서 설명한 쌍삼차 업-스케일러가 선택될 수 있다. upsample_type가 3과 같은 경우 위의 "삼차 업샘플링" 섹션에서 설명한 수정된 삼차 업-스케일러가 선택될 수 있다.
예측된 잔차(예를 들어, 예측 평균) 디코딩 계산이 또한 레벨 1 내지 레벨 2 업스케일링과 관련하여 아래에서 설명되는 바와 같이 특정 경우에 적용될 수 있다.
일반적 업-스케일러는 픽처를 2가지 영역으로 나누어 업스케일링할 수 있다: 도 9b 및 도 9c에 도시되어 있는 바와 같은 중앙 영역 및 경계 영역. 쌍선형 및 쌍삼차 커널에 대해, 경계 영역은 도 9b에 도시된 바와 같이 상단, 좌측, 우측 및 하단 세그먼트의 4개의 세그먼트로 구성되는 반면, 최근접 커널의 경우 도 9c에 도시된 바와 같이 우측 및 하단의 2개의 세그먼트로 구성된다. 이러한 세그먼트는 2개의 샘플(최근접 방법의 경우 1개의 샘플)로 설정될 수 있는 경계 크기 파라미터에 의해 정의된다.
레벨 1 비트 심도 변환
특정 예에서, 업스케일링 프로세스는 또한 비트 심도 변환을 수반할 수 있고, 예를 들어 상이한 레벨(본 출원에 설명된 레벨 0, 1 및 2를 포함)은 상이한 비트 심도를 갖는 데이터를 처리할 수 있다. 각각의 레벨의 비트 심도는, 예를 들어 인코더로부터 디코더로 시그널링될 수 있는 구성 데이터에 기초하여 구성 가능할 수 있다. 예를 들어, 각각의 레벨에 대한 비트 심도 및 임의의 필요한 변환은 위의 예에서 처리된 전역 구성의 비트스트림 필드 값에 따라 달라질 수 있다. 한 경우에는 비트 심도 변환이 업스케일링 프로세스의 일부로 수행된다. 비트 심도 변환은 업스케일링에서 비트 시프트와 하위 및 상위 레벨의 비트 심도 사이의 차이를 사용하여 적용될 수 있다.
블록 2712를 적용할 때, 레벨 1에 대한 샘플 비트 심도는 level1_depth_flag에 기초할 수 있다. level1_depth_flag가 0과 같으면 예비 중간 픽처 샘플은 디코딩된 베이스 픽처에 대해 표현되는 것과 동일한 비트 심도에서 처리된다. level1_depth_flag가 1과 같은 경우, 변수 base_depth 및 변수 enhancement_depth의 값에 따라 예비 중간 픽처 샘플이 변환될 수 있다. base_depth 변수는 베이스 계층에 대한 비트 심도를 나타낸다. 특정 예에서, 예를 들어 위의 "데이터 블록 유닛 전역 구성 시멘틱스" 섹션에 명시된 바와 같이 base_depth_type 필드의 값에 따라 base_depth가 8과 14 사이의 값으로 할당되는 경우, 이때, enhancement_depth는 앞서 언급한 시멘틱스 섹션에 명시된 바와 같이 enhancement_depth_type 필드의 값에 따라 8과 14 사이의 값이 할당된다.
base_depth가 enhancement_depth와 같으면 추가 처리가 필요하지 않다.
enhancement_depth가 base_depth보다 크면, 레벨 1 업샘플링된 베이스 샘플 recL1ModifiedUpsampledBaseSamples의 어레이이 다음과 같이 수정될 수 있다:
recL1ModifiedUpsampledBaseSamples[x][y] =
recL1ModifiedUpsampledBaseSamples[x][y] << (enhancement_depth - base_depth)
base_depth가 enhancement_depth보다 크면, recL1ModifiedUpsampledBaseSamples 어레이는 다음과 같이 수정될 수 있다:
recL1ModifiedUpsampledBaseSamples[x][y] =
recL1ModifiedUpsampledBaseSamples[x][y] >> (base_depth - enhancement_depth)
조합된 중간 픽처에서 예비 출력 픽처로의 업스케일링
유사한 프로세스 세트가 블록 2732에서 수행될 수 있다. 이 프로세스에 대한 입력은 다음을 포함할 수 있다: 현재 픽처 컴포넌트의 좌상단 샘플에 대한 현재 블록의 좌상단 샘플을 지정하는 위치(xCurr, yCurr); 현재 블록의 컬러 성분을 지정하는 변수 IdxPlanes; 잔차 블록의 크기를 지정하는 변수 nCurrS; 현재 블록의 조합된 중간 픽처 샘플을 지정하는 (nCurrS)x(nCurrS) 어레이 recL1PictureSamples; 재구성된 베이스 픽처의 폭과 높이를 지정하는 srcWidth 및 srcHeight 변수; 결과적으로 업스케일링된 픽처의 폭과 높이를 지정하는 dstWidth 및 dstHeight 변수; 및 적용할 스케일링에 대한 커널 계수를 선택하는 데 사용되는 변수 is8Bit. 샘플이 8비트인 경우, 이때, 변수 is8Bit는 0과 같을 수 있고, 샘플이 16비트인 경우, 이때, 변수 is8Bit는 1과 같을 수 있다. 프로세스(2732)의 출력은 요소 recL2ModifiedUpsampledSamples[x][y]를 갖는 예비 출력 픽처 샘플의 (nCurrX)x(nCurrY) 어레이 recL2ModifiedUpsampledSamples이다.
변수 nCurrX, nCurrY는 앞서 설명한 프로세스와 유사한 방식으로 스케일링 모드에 기초하여 유도될 수 있다. scaling_mode_level2가 0과 같은 경우, 업스케일링이 수행되지 않으며 recL2ModifiedUpsampledSamples[x][y]는 recL1PictureSamples[x][y]와 동일하게 설정된다. scaling_mode_level2가 1과 같으면, 이때, nCurrX = nCurrS << 1과 같고 nCurrY = nCurrS이다. scaling_mode_level2가 2와 같으면, 이때, nCurrX = nCurrS << 1과 같고 nCurrY = nCurrS << 1이다.
위의 섹션에서 설명된 바와 같이, 블록 2732에서 수행되는 업스케일링은 업스케일링 필터의 선택적 적용을 또한 수반할 수 있으며, 여기서 업스케일링 타입은 비트스트림에서 시그널링된다. upsample_type 변수의 값에 따라 각각의 커널 타입은 recL1PictureSamples를 입력으로 하여, recL2UpsampledSamples를 출력으로 생성하도록 구성될 수 있다. (비록 구현에 따라 수와 타입이 변할 수 있지만) 4개의 가능한 업-스케일러 커널이 있을 수 있다. 이는 "예시적인 업샘플링 접근법"이라는 명칭의 섹션에도 설명되어 있다. 본 예에서, upsample_type가 0과 같은 경우, 위의 "최근접 업샘플링" 섹션에서 설명된 최근접 샘플 업-스케일러가 선택될 수 있다. upsample_type가 1과 같은 경우 위의 "쌍선형 업샘플링" 섹션에서 설명된 쌍선형 업-스케일러가 선택될 수 있다. upsample_type가 2와 같은 경우 위의 "삼차 업샘플링" 섹션에서 설명한 쌍삼차 업-스케일러가 선택될 수 있다. upsample_type가 3과 같은 경우 위의 "삼차 업샘플링" 섹션에서 설명한 수정된 삼차 업-스케일러가 선택될 수 있다.
픽처를 다수의 영역으로 분할하는 것은 도 9b 및 도 9c를 참조하여 위의 섹션에서 설명된 바와 같이 수행될 수 있다.
업스케일링에 후속하여, 앞서 설명된 것과 같은 predicted_residual_mode_flag가 1과 같은 프로세스인 경우, 앞서, 그리고, 아래에서 설명된 바와 같은 예측된 잔차(즉, 수정된 업샘플링) 모드(도 27의 서브 블록 2744 참조)가 현재 블록의 조합된 중간 픽처 샘플을 지정하는(nCurrS)x(nCurrS) 어레이 recL1PictureSamples 및 nCurrX)x(nCurrY) 어레이 recL2UpsampledSamples로서의 입력을 사용하여 호출될 수 있다. 이 프로세스의 출력은 화소의 (nCurrX)x(nCurrY) 어레이 recL2ModifiedUpsampledSamples를 포함할 수 있다. 그렇지 않으면, predicted_residual_mode_flag가 0과 같은 경우 예측된 잔차 모드가 적용되지 않고 recL2ModifiedUpsampledSamples[x][y]를 recL2UpsampledSamples[x][y]와 같게 설정(즉, 수정 없이 업샘플링된 값으로 설정)한다.
레벨 2 비트 심도 변환
레벨 1에 대해 앞서 설명한 바와 같은 비트 심도 변환은 또한(또는 대안적으로) 레벨 1에서 레벨 2로 업스케일링할 때에도 적용될 수 있다. 역시, 전역 구성에서 비트스트림 필드의 값에 따라 비트 심도 변환이 수행될 수 있다.
레벨 2에 관련하여, 샘플 비트 심도는 level1_depth_flag로부터 유도될 수 있다. level1_depth_flag가 1과 같으면, 예비 출력 픽처 샘플은 예비 중간 픽처에 대해 표현되는 것과 동일한 비트 심도로 처리된다. level1_depth_flag가 0과 같은 경우, 출력 중간 픽처 샘플은 변수 base_depth 및 enhancement_depth의 값에 따라 변환된다. 이들은 위의 레벨 1 비트 심도 변환 섹션에서 설명된 바와 같이 유도될 수 있다. 역시, base_depth가 enhancement_depth와 같으면 추가 처리가 필요하지 않다. enhancement_depth가 base_depth보다 크면 recL2ModifiedUpsampledSamples 어레이가 다음과 같이 수정된다:
recL2ModifiedUpsampledSamples[x][y] =
recL2ModifiedUpsampledSamples[x][y] << (enhancement_depth - base_depth)
base_depth가 enhancement_depth보다 크면 recL2ModifiedUpsampledSamples 어레이가 다음과 같이 수정된다:
recL2ModifiedUpsampledSamples[x][y] =
recL2ModifiedUpsampledSamples[x][y] >> (base_depth - enhancement_depth)
최근접 샘플 업샘플러 커널 설명
아래 섹션에서는 앞서 설명한 예시적인 업샘플러에 대한 추가 세부사항을 설명한다.
제1 업샘플러는 서브 블록 2736에 도시되고 위의 "최근접 업샘플링" 섹션에서 설명된 바와 같은 최근접 샘플 업샘플러이다. 서브 블록 2736의 예는 다음을 입력으로 사용한다: 입력 어레이의 폭과 높이를 지정하는 변수 srcX 및 srcY; 출력 어레이의 폭과 높이를 지정하는 변수 dstX 및 dstY; 및 입력 샘플의 (srcX)x(srcY) 어레이 recInputSamples[x][y]. 이 프로세스에 대한 출력은 출력 샘플의 (dstX)x(dstY) 어레이 recUpsampledSamples[x][y]이다.
최근접 커널은 현재 소스 샘플을 목적지 2x2 그리드에 복사하여 업스케일링을 수행한다. 이는 도 9d에 도시되어 있고 위의 첨부 설명에 설명되어 있다. 목적지 샘플 위치는 양 축에서 소스 샘플의 인덱스를 배가시키고 +1을 추가하여 도 9d에 도시된 바와 같이 4개의 샘플을 커버하도록 범위를 확장하도록 계산된다.
최근접 샘플 커널 업-스케일러는 (xCurr, yCurr) 블록이 도 9d에 명시된 것처럼 픽처 또는 경계 영역에 속할 때마다 다음의 순서화된 단계로 명시된 바와 같이 적용될 수 있다.
scaling_mode_levelX가 1과 같은 경우 계산은 다음과 같을 수 있다:
Figure pct00125
Figure pct00126
쌍선형 업샘플러 커널 설명
쌍선형 업샘플러 커널 프로세스는 위의 "쌍선형 업샘플링" 섹션에 설명되어 있다. 이제 도 27의 서브 블록 2738을 참조하여 추가 예를 설명한다. 서브 블록 2738에 대한 입력 및 출력은 서브 블록 2736에 대한 것과 동일할 수 있다. 쌍선형 업샘플링 커널은 3개의 주요 단계로 구성된다. 제1 단계는 베이스 샘플이 우하단 코너에 위치된 소스 샘플의 2x2 그리드를 구성하는 것을 수반한다. 제2 단계는 쌍선형 보간을 수행하는 것을 수반한다. 제3 단계는 보간 결과를 목적지 샘플에 기록하는 것을 수반한다. 쌍선형 방법은 베이스 샘플에 최근접 3개 샘플의 값을 고려하여 업샘플링을 수행한다. 베이스 샘플은 목적지 샘플의 어드레스가 유도되는 소스 샘플이다. 도 9e는 커널에서 사용되는 예시적인 소스 그리드를 도시한다.
쌍선형 보간은 소스 그리드에 있는 모든 샘플의 가중 합산이다. 사용되는 가중치는 유도되는 목적지 샘플에 따라 다르다. 알고리즘은 목적지 샘플의 위치와 관련하여 소스 샘플의 위치에 대한 가중치를 적용한다. 좌상단 목적지 샘플에 대한 값을 계산하는 경우, 이때, 좌상단 소스 샘플은 가장 큰 가중 계수가 적용되는 반면 우하단 샘플(대각선 반대)은 가장 작은 가중 계수가 적용되고, 나머지 2개의 샘플은 중간 가중 계수가 적용된다. 이는 도 9f에 시각화되어 있으며 위에 상세히 설명되어 있다.
예시적인 쌍선형 커널 업-스케일러가 도 9g에 예시되어 있다. 이는 (xCurr, yCurr) 블록이 도 9b 및 도 9c에 명시된 바와 같이 경계 영역에 속하지 않을 때 아래의 다음 순서화된 단계에 의해 명시된 바와 같이 적용될 수 있다.
scaling_mode_levelX가 1과 같은 경우 다음 업스케일링 계산이 수행될 수 있다.
Figure pct00127
scaling_mode_levelX가 2와 같으면, 다음과 같은 업스케일링 계산이 수행될 수 있다:
Figure pct00128
쌍선형 커널 업-스케일러는(xCurr, yCurr) 블록이 도 9b 및 도 9c에 지정된 대로 경계 영역에 속할 때 아래의 다음 순서화된 단계에 명시된 바와 같이 적용된다:
scaling_mode_levelX가 1과 같은 경우:
Figure pct00129
scaling_mode_levelX가 2와 같은 경우:
Figure pct00130
앞서 설명한 bilinear1D(in00, in10, out00, out10) 함수는 아래에 설명된 바와 같이 적용될 수 있다.
Figure pct00131
앞서 설명한 함수 bilinear2D(in00, in10, in01, in11, out00, out10, out01, out11)는 아래에 설명된 바와 같이 적용될 수 있다.
Figure pct00132
삼차 업샘플러 커널 설명
서브 블록 2740에 도시되어 있는 삼차 업샘플러 커널 프로세스는 이 섹션에서 설명된 바와 같이 적용될 수 있다. 입력 및 출력은 위 섹션에서 설명한 것과 동일하다. 도 9h, 도 9i 및 도 9j 및 "삼차 업샘플링"이라는 명칭의 섹션을 추가로 참조한다.
서브 블록 2740의 삼차 업샘플링 커널은 3개의 주요 단계로 분할될 수 있다. 제1 단계는 베이스 샘플이 로컬 인덱스(2, 2)에 위치된 소스 샘플의 4x4 그리드를 구성하는 것을 수반한다. 제2 단계는 쌍삼차 보간을 수행하는 단계를 수반한다. 제3 단계는 보간 결과를 목적지 샘플에 기록하는 것을 수반한다.
삼차 업샘플링 커널은 4x4 소스 그리드를 사용하여 수행될 수 있으며, 이는 후속하여 4x4 커널로 승산된다. 소스 그리드를 생성하는 동안, 소스 프레임의 프레임 한계를 외부에 속하는 임의의 샘플은 프레임 경계의 소스 샘플 값으로 대체된다. 이는 도 9h 및 도 9i에 시각화되어 있다.
삼차 업샘플링 프로세스에 사용되는 커널은 전형적으로 4x4 계수 그리드를 갖는다. 그러나, 소스 샘플과 관련된 목적지 샘플의 상대 위치는 상이한 계수 세트를 산출할 것이며, 업샘플링이 2의 배수이므로, 업샘플링 프로세스에서 4 세트의 4x4 커널이 사용될 것이다. 이러한 세트는 계수의 4차원 그리드(2 x 2 x 4 x 4)에 의해 표현된다. 쌍삼차 계수는 고정된 파라미터 세트; 핵심 파라미터(또는 쌍삼차 파라미터) 및 4개의 스플라인 생성 파라미터로부터 계산된다. 이들은 예를 들어, 각각 -0.6 및 [1.25, 0.25, -0.75, -1.75]의 값을 가질 수 있다. 필터의 구현은 고정 소수점 계산을 사용한다.
삼차 커널 업-스케일러는 도 9j에 도시되어 있으며 위의 "삼차 업샘플링" 섹션에 더 자세히 설명되어 있다. (xCurr, yCurr) 블록이 도 9b 및 도 9c에 지정된 바와 같이 경계에 속하는 경우, 업-스케일러는 한 번에 한 방향(수직 및 수평)으로 적용되며 상이한 단계들을 따른다.
다음과 같은 예시적인 계수 세트가 주어진다:
kernel[y][x] =
{
{ -1382, 14285, 3942, -461 }
{ -461, 3942, 14285, -1382 }
{ -1280, 14208, 3840, -384 }
{ -384, 3840, 14208, -1280 }
}
여기서, y = 0...1은 10 비트 샘플과 함께 사용되는 계수이고 y = 2...3은 8 비트 샘플과 함께 사용된다. 따라서, 업-스케일러는 다음 의사코드에 따라 적용될 수 있다.
Figure pct00133
위에서 참조한 ConvolveHorizontal(입력, 출력, x, y, 커널, 경계) 함수는 아래에 설명한 바와 같이 적용될 수 있다:
Figure pct00134
위에서 참조한 ConvolveVertical(입력, 출력, yDst0, yDst1, x, ySrc, 커널) 함수는 아래에 설명한 바와 같이 적용될 수 있다:
Figure pct00135
위에서 참조한 ConvolveHorizontal(커널, 입력, 시프트) 함수는 아래에 설명된 바와 같이 적용될 수 있다:
Figure pct00136
수정된 삼차 업샘플러 커널 설명
마지막으로 이 섹션에서는 서브 블록 2742의 예시적인 구현에 대한 간단한 설명이 제공된다. 입력 및 출력은 위의 다른 업샘플링 프로세스와 같이 정의될 수 있다. 수정된 삼차 필터의 구현은 역시 고정 소수점 계산을 사용한다. 앞서 설명한 삼차 업샘플러 커널의 변형으로 볼 수 있지만 다음과 같은 커널 계수를 갖는다:
kernel[y][x] =
{
{ -2360, 15855, 4165, -1276 }
{ -1276, 4165, 15855, -2360 }
{ -2360, 15855, 4165, -1276 }
{ -1276, 4165, 15855, -2360 }
}
여기서 y = 0...1은 10 비트 샘플과 함께 사용되는 계수이고 y = 2...3은 8 비트 샘플과 함께 사용되며 kernelOffset는 4와 같고, kernelSize는 4와 같다.
본 출원에 제공된 커널은 단지 예일 뿐이며 다른 구현에서는 다른 커널을 사용할 수 있다는 점을 유의하여야 한다.
예측 잔차 프로세스 설명
다음 섹션은 도 27의 서브 블록 2744에 도시되어 있는 예측된 잔차 프로세스에 대한 예시적인 구현을 간단하게 제공할 것이다. 이는 또한 다른 예에서 블록 2712의 업스케일링의 일부로서 적용될 수 있다. 이 프로세스에 대한 입력은 다음과 같이 표시된다: 저해상도 어레이의 폭과 높이를 지정하는 변수 srcX 및 srcY; 업샘플링된 어레이의 폭과 높이를 지정하는 변수 dstX 및 dstY; 업스케일링 프로세스에 대한 입력으로 제공된 샘플의 (srcX)x(srcY) 어레이 recLowerResSamples[x][y]; 및 업스케일링 프로세스의 출력인 샘플의 (dstX)x(dstY) 어레이 recUpsampledSamples [x][y]. 이 프로세스의 출력은 출력 샘플의 (dstX)x(dstY) 어레이 recUpsampledModifiedSamples[x][y]이다.
본 예에서, 예측된 잔차 프로세스는 scaling_mode_levelX가 2와 같은 경우(즉, 2차원), 2x2 그리드를 사용하고 scaling_mode_levelX가 1과 같은 경우(즉, 1차원), 2x1 그리드를 사용하여 recUpsampledSamples를 수정한다. scaling_mode_levelX가 0과 같은 경우 예측된 잔차 프로세스가 적용되지 않는다(예를 들어, 업스케일링이 수행되지 않음).
예측된 잔차 프로세스는 (xCurr, yCurr) 블록이 도 9b 및 도 9c에 명시된 것처럼 픽처 또는 경계 영역에 속할 때마다 다음의 순서화된 단계로 명시된 바와 같이 적용될 수 있다.
scaling_mode_levelX가 1과 같으면(즉, 스케일링이 1차원인 경우) 다음 계산이 수행될 수 있다:
Figure pct00137
scaling_mode_levelX가 2와 같은 경우(즉, 스케일링이 2차원인 경우), 다음 계산이 수행될 수 있다:
Figure pct00138
변환 입력 및 출력, 변환 타입 및 잔차 샘플 유도
변환을 위한 디코딩 프로세스는 도 27에서 서브 블록(2718 및 2756)으로 표시된다. 이러한 프로세스는 디코더에서 역변환을 수행할 수 있다. 이러한 프로세스에 대한 입력은 다음과 같을 수 있다: 현재 픽처의 좌상단 루마 또는 크로마 샘플에 대한 현재 루마 또는 크로마 변환 블록의 좌상단 샘플을 지정하는 위치(xTbP, yTbP)(이전과 같이, P는 변환 계수가 속하는 평면에 따라 루마 또는 크로마 평면 중 어느 하나에 관련될 수 있음); 현재 변환 블록의 크기를 지정하는 변수 nTbS(예를 들어, 위와 같이 유도됨); 및 요소 d[x][y]를 갖는 탈양자화된 변환 계수의 (nTbS)x(nTbS) 어레이 d. 이 프로세스의 출력은 요소 R[x][y]를 갖는 잔차의 (nTbS)x(nTbS) 어레이 R이다.
본 출원에 설명된 예에서, 인코딩 프로세스에서 사용할 수 있는 2가지 타입의 변환이 있다. 이는 제한될 필요가 없으며 다른 변환이 사용될 수 있다. 본 출원에 설명된 2개의 변환은 모두 (예를 들어, 앞서 설명된 예측 평균 계산에 따라) 예측된 잔차를 적용하는 스테이지 이후에 남아 있는 잔차에 직접 적용되는 작은 커널을 활용한다. 잔차는 도 6a에 표시된 것과 유사할 수 있다.
잔차 샘플의 (nTbS)x(nTbS) 어레이 R은 2개의 방법 중 하나로 유도될 수 있다. 제1 변환(본 출원에 2x2 또는 방향 분해 - DD라 지칭됨)에 대해, x = 0…nTbS - 1, y = 0...nTbS - 1인 탈양자화된 변환 계수 d[x][y]의 각각의 (수직) 열 1은 nTbS가 2와 같은 경우 본 출원에 설명된 제1 변환에 대한 2차원 변환 프로세스를 호출함으로써 x = 0...nTbS - 1, y = 0...nTbS - 1인 R[x][y]로 변환될 수 있다. 제2 변환(본 출원에 4x4 또는 방향 분해 제곱 - DDS라 지칭됨)에 대해, x = 0...nTbS - 1, y = 0...nTbS - 1인 탈양자화된 변환 계수 d[x][y]의 각각의 (수직) 열 1은 nTbS가 4와 같은 경우 제2 변환에 대한 2차원 변환 프로세스를 호출함으로써 x = 0...nTbS - 1, y = 0...nTbS - 1인 R[x][y]로 변환된다.
2x2 방향 분해 변환
이제 제1 변환(2x2 또는 DD)에 대해 간단하게 설명한다.
nTbS가 2와 같으면 변환에는 변환 계수의 각각의 2x2 블록에 적용되는 2x2 커널이 있다. 결과 잔차는 아래에 설명된 바와 같이 유도된다.
대응하는 개선 서브 계층에 대한 scaling_mode_levelX가 0 또는 2와 같은 경우 역변환은 다음 행렬 승산에 따라 수행된다:
{R00} { 1, 1, 1, 1 } {C00}
{R01} = { 1, -1, 1, -1 } * {C01}
{R10} { 1, 1, -1, -1 } {C10}
{R11} { 1, -1, -1, 1 } {C11}
scaling_mode_levelX가 대응하는 개선 서브 계층에 대해 1과 같으면(즉, 스케일링이 한 방향임), 역변환은 다음 행렬 승산에 따라 수행된다.
{R00} { 1, 1, 1, 0 } {C00}
{R01} = { 1, -1, -1, 0 } * {C01}
{R10} { 0, 1, -1, 1 } {C10}
{R11} { 0, -1, -1, 1} {C11}
4x4 방향 분해 변환
이제 제2 변환(4x4 또는 DDS)에 대해 간단하게 설명한다.
nTbS가 4와 같으면 변환은 4x4 변환 계수 블록에 적용되는 4x4 커널을 갖는다. 결과 잔차는 아래에 설명된 바와 같이 유도된다.
대응하는 개선 서브 계층에 대한 scaling_mode_levelX가 0 또는 2와 같은 경우 역변환은 다음 행렬 승산에 따라 수행된다:
{R00} { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } {C00}
{R01} { 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1 } {C01}
{R02} { 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1 } {C02}
{R03} { 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1 } {C03}
{R10} { 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1 } {C10}
{R11} { 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1 } {C11}
{R12} { 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1 } {C12}
{R13} = { 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1 } * {C13}
{R20} { 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1 } {C20}
{R21} { 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1 } {C21}
{R22} { 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1 } {C22}
{R23} { 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1 } {C23}
{R30} { 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1 } {C30}
{R31} { 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1 } {C31}
{R32} { 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1 } {C32}
{R33} { 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1 } {C33}
대응하는 개선 서브 계층에 대한 scaling_mode_levelX가 1과 같은 경우 역변환은 다음 행렬 승산에 따라 수행된다:
{R00} { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 } {C01}
{R01} { 1, 1, -1, -1, 1, 1, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1 } {C02}
{R02} { 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 1, -1, 0, 0, 1, -1 } {C03}
{R03} { 1, -1, -1, 1, 1, -1, -1, 1, 0, 0, -1, 1, 0, 0, -1, 1 } {C04}
{R10} { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1 } {C10}
{R11} { 0, 0, -1, -1, 0, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1 } {C11}
{R12} { 0, 0, 1, -1, 0, 0, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1 } {C12}
{R13} = { 0, 0, -1, 1, 0, 0, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1 } * {C13}
{R20} { 1, 1, 1, 1, -1, -1, -1, -1, 0, 0, 1, 1, 0, 0, -1, -1 } {C20}
{R21} { 1, 1, -1, -1, -1, -1, 1, 1, 0, 0, -1, -1, 0, 0, 1, 1 } {C21}
{R22} { 1, -1, 1, -1, -1, 1, -1, 1, 0, 0, 1, -1, 0, 0, -1, 1 } {C22}
{R23} { 1, -1, -1, 1, -1, 1, 1, -1, 0, 0, -1, 1, 0, 0, 1, -1 } {C23}
{R30} { 0, 0, 1, 1, 0, 0, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1 } {C30}
{R31} { 0, 0, -1, -1, 0, 0, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1 } {C31}
{R32} { 0, 0, 1, -1, 0, 0, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1 } {C32}
{R33} { 0, 0, -1, 1, 0, 0, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1 } {C33}
잔차 재구성을 위한 디코딩 프로세스
도 27의 블록 2730 및 2758은 잔차를 재구성하는 프로세스를 도시한다. 이 프로세스는 개선 디코딩에서 유도된 잔차 데이터를 다양한 픽처에 적용하여 이들 픽처를 개선시키는 것을 수반한다. 이는 다수의 레벨에서 수행될 수 있으며, 이는 (예를 들어, 송신된 스케일링 인자를 통해 구성된 바와 같은) 다수의 차원에서 다수의 레벨의 스케일링을 반영할 수 있다. 블록(2730 및 2758)은 도 27에 도시되어 있는 다른 동작에서와 같이 데이터의 블록 또는 코딩 유닛(예를 들어, 잔차 및 픽셀 요소의 2x2 또는 4x4 블록)에 적용된 것으로 도시되어 있다. 그 다음, 동작은 완전한 픽처 또는 프레임을 구성하는 모든 블록 또는 코딩 유닛에 걸쳐 적용될 수 있다. 블록 또는 코딩 유닛이 다른 블록 또는 코딩 유닛에 의존하지 않기 때문에, 이러한 동작은, 예를 들어, 태블릿 및 스마트폰과 같은 모바일 디바이스에 존재하는 것을 비롯한 그래픽 처리 유닛(GPU) 및/또는 멀티 코어 프로세서 상에서 블록 또는 코딩 유닛에 대해 병렬화될 수 있다.
이제 도 27의 블록(2730 및 2758) 중 하나 이상을 구현하기 위한 프로세스를 참조하면, 각각의 블록 또는 코딩 유닛의 재구성된 잔차가 여기에 설명된 바와 같이 유도될 수 있다. 첫 번째로, 변수 nCbSL은 transform_type인 경우 2와 같게 설정되거나 transform_type이 1과 같은 경우 4로 설정될 수 있다(예를 들어, 변환의 타입 - 설명된 예에서 2x2 또는 4x4 -을 반영). 그 후, 변수 nCbSC는 nCbSL >> 1과 동일하게 설정된다.
IdxPlanes가 0과 같으면, 루마 코딩 블록 위치(xCb, yCb), nCbSL과 동일하게 설정된 변수 nCurrS 및 0과 같게 설정된 변수 IdxPlanes를 입력으로서 사용하여 아래에 명시된 컬러 성분에 대한 잔차 재구성 프로세스가 호출된다. 이는 루마 평면에 대한 처리에 대응한다.
IdxPlanes가 1과 같으면, 크로마 코딩 블록 위치(xCb >> ShiftWidthC, yCb >> ShiftHeightC), 변수 nCbSC와 동일하게 설정된 변수 nCurrS 및 동일하게 설정된 변수 IdxPlanes를 입력으로서 사용하여아래에 명시된 컬러 성분에 대한 잔차 재구성 프로세스가 호출된다. 이는 크로마 평면에 대한 처리에 대응하며, 여기서 크로마 샘플은 도 7a 내지 도 7c에 도시되어 있는(그리고 위의 파라미터 ShiftWidthC 및 ShiftHeightC를 참조하여 설명된) 바와 같이 루마 샘플에 관련하여 배열될 수 있다.
예를 들어, 도 27의 블록 2730으로 도시되어 있는 바와 같이(그리고 예를 들어, 도 2의 합산 컴포넌트(220)에 의해 적용된 동작과 관련하여) 레벨 1 블록에 대한 잔차 재구성이 이제 설명될 것이다. 이 프로세스에 대한 입력은 다음을 포함할 수 있다: 현재 픽처 컴포넌트의 좌상단 샘플에 대한 현재 블록의 좌상단 샘플을 지정하는 위치(xCurr, yCurr); 현재 블록의 컬러 성분을 지정하는 변수 IdxPlanes; 잔차 블록의 크기를 지정하는 변수 nCurrS; 현재 블록의 예비 중간 픽처 재구성 샘플을 지정하는 (nCurrS)x(nCurrS) 어레이 recL1BaseSamples(예를 들어, 도 23의 2304에 관련됨); 및 현재 블록의 레벨 1 필터링된 잔차를 지정하는 (nCurrS)x(nCurrS) 어레이 resL1FilteredResiduals(예를 들어, 도 23의 2308과 관련됨). 이 프로세스의 출력은 recL1Samples[x][y] 요소를 갖는 조합된 중간 픽처 (nCurrS)x(nCurrS) 어레이 recL1Samples이다(예를 들어, 도 23의 2310과 관련됨).
(xCurr, yCurr) 위치에서 재구성된 샘플 어레이 recL1Samples의 (nCurrS)x(nCurrS) 블록은 다음과 같이 유도될 수 있다:
recL1Samples[xCurr + i][yCurr + j] = recL1BaseSamples[i][j] + resL1FilteredResiduals[i][j]
여기서 i = 0 ... nCurrS - 1, j = 0 ... nCurrS - 1
알 수 있는 바와 같이, 이는 블록별로 또는 완전한 평면에 대해 수행될 수 있다(잔차 및 재구성된 베이스 디코딩된 픽처가 요소별로 추가됨에 따라). 위에서, 위치(xCurr, yCurr)는 단순히 개선된 레벨 1 출력 픽처에 관련한 현재 블록 또는 코딩 유닛에 대한 2차원 오프셋을 제공한다.
블록 2730에서의 재구성에 후속하여, 위에서 특정된 바와 같은(그리고 블록 2732로 도시되어 있는) 컬러 성분에 대한 업스케일링 프로세스가 다음을 입력으로 하여 호출될 수 있다: 위치(xCurr, yCurr); 변환 블록 크기 nTbS, (nCurrS)x(nCurrS) 어레이 recL1Samples; 재구성된 베이스 픽처의 크기를 지정하는 변수 srcWidth 및 srcHeight; 업스케일링된 결과 픽처의 폭과 높이를 지정하는 변수 dstWidth 및 dstHeight; 및 변수 is8Bit(예를 들어, enhancement_depth_type가 0과 같은 경우 이 변수는 1과 같음).
예를 들어, 도 27의 블록 2758으로 도시되어 있는 바와 같이(그리고 예를 들어, 도 2의 합산 컴포넌트(258)에 의해 적용된 동작과 관련하여) 레벨 2 블록에 대한 잔차 재구성이 이제 설명될 것이다. 이 프로세스에 대한 입력은 레벨 1 재구성과 관련하여 앞서 설명한 것과 유사하다. 예를 들어, 입력은 다음을 포함할 수 있다: 현재 픽처 컴포넌트의 좌상단 샘플에 대한 현재 블록의 좌상단 샘플을 지정하는 위치(xCurr, yCurr); 현재 블록의 컬러 성분을 지정하는 변수 IdxPlanes; 현재 블록의 예비 출력 픽처 샘플을 지정하는 (nCurrS)x(nCurrS) 어레이 recL2ModifiedUpscaledSamples(예를 들어, 도 23의 2312와 관련됨); 및 현재 블록의 레벨 2 잔차를 지정하는 (nCurrS)x(nCurrS) 어레이 resL2Residuals(예를 들어, 도 23의 2316과 관련됨). 이 프로세스의 출력은 요소 recL2PictureSamples[x][y]를 갖는 조합된 출력 픽처 샘플의 (nCurrS)x(nCurrS) 어레이 recL2PictureSamples이다(예를 들어, 도 3의 2322와 관련됨).
(xCurr, yCurr) 위치에서 재구성된 샘플 어레이 recL2PictureSamples의 (nCurrS)x(nCurrS) 블록은 다음과 같이 계산될 수 있다:
recL2PictureSamples[xCurr + i][yCurr + j] = recL2ModifiedUpscaledSamples[i][j] + resL2Residuals[i][j]
여기서 i = 0 ... nCurrS - 1, j = 0 ... nCurrS - 1
적어도 위의 "시멘틱스" 섹션에서 설명된 바와 같은 dithering_type이 0과 같지 않으면, 블록 2760에 의해 도시되어 있는 바와 같은 디더링 프로세스가 위치(xCurr, yCurr) 및 (nCurrS)x(nCurrS) 어레이 recL2PictureSamples를 사용하여 호출된다. 이때, 이는 블록 2762에서 비디오의 재구성된 픽처를 출력하기 위해 픽처를 구성하는 다른 코딩 유닛과 함께 사용되는 최종 어레이 recL2DitheredPictureSamples를 출력할 수 있다.
L-1 필터에 대한 디코딩 프로세스
다른 예에서 설명된 바와 같이, 필터가 디코딩된 레벨 1 잔차에 적용될 수 있다. 또한, 유사한 필터가 인코더에 배치될 수 있다(예를 들어, 모사된 레벨 1 디코딩 경로). 이 필터는 "인-루프" 필터로 설명될 수 있는 데, 이는 상이한 코딩 유닛들을 도는 처리 루프로서 적용되기 때문이다. 도 27에서, (예를 들어, 방법 블록 2730에서) 잔차가 베이스 재구성된 픽처에 추가되기 전에 레벨 1 잔차 필터가 방법 블록 2720에서 레벨 1 잔차 표면 블록에 적용된다. 특정 경우에, 변환 타입에 기초하여 레벨 1 필터가 선택적으로 적용될 수 있다. 특정 경우에, 이는 4x4 변환이 사용될 때에만 적용될 수 있으며, 즉, 필터는 transform_type 변수가 1과 동일한 경우에만 동작하도록 구성될 수 있다. 다른 예에서, 블록 2720은 또한 2x2 변환이 상이한 커널과 함께 사용될 때, 또는 샘플을 상이한 크기의 블록으로 리포멧한 후에 적용될 수 있다.
블록 2720의 레벨 1 필터는 가중치가 다음과 같이 구조화되는(그리고, 또한 위의 처리 컴포넌트의 설명을 참조하여 설명되는) 마스크를 적용함으로써 변환된 잔차의 각각의 4x4 블록에 대해 동작할 수 있다:
{ α, β, β, α }
{ β, 1, 1, β }
{ β, 1, 1, β }
{ α, β, β, α }
도 27의 블록 2720을 참조하면, 이 프로세스에 대한 입력은 다음과 같다: 현재 픽처 좌상단 샘플에 대한 현재 변환 블록의 좌상단 샘플을 지정하는 샘플 위치(xTb0, yTb0); 및 개선 서브 계층 1에 대한 잔차를 지정하는 크기 4x4의 어레이 resL1Residuals. 이 프로세스의 출력은 resL1FilteredResiduals[x][y] 요소를 갖는 필터링된 잔차 resL1FilteredResiduals의 4x4 어레이이다. 인-루프 레벨 1 잔차 필터는 먼저 다음과 같이 변수 deblockEnabled, α 및 β를 획득함으로써 적용될 수 있다:
Figure pct00139
deblockEnabled가 참인 경우, 도 6a의 잔차 표현이 주어지면 다음 단계가 적용된다:
Figure pct00140
deblockEnabled가 거짓이면, resL1FilteredResiduals는 단순히 resL1Residuals와 동일하게 설정된다(예를 들어, 필터가 수정 없이 통과 필터로 적용됨).
베이스 디코더 데이터 추출을 위한 디코딩 프로세스
블록 2710의 간단한 개요가 이제 설명될 것이다. 그러나, 다른 예에 따라, 베이스 디코딩은 제3자 컴포넌트에 의해 수행될 수 있는 별개의 독립형 프로세스로 고려될 수 있음을 유의하여야 한다. 특정 경우에, 하드웨어 및 소프트웨어 베이스 디코더 중 하나 이상은 개선 디코더(즉, 도 27에 도시된 잔차 디코딩 처리를 구현함)의 제어 하에 수신된 베이스 스트림을 디코딩하도록 명령될 수 있다. 다른 경우에, 개선 디코더는 특정 레이트로 베이스 디코딩된 픽처를 수신하도록 구성될 수 있고, 이는 그 후 개선 서브 계층의 잔차 디코딩과 동기화된다. 아래에 설명된 프로세스는 베이스 디코딩 프로세스를 실제로 구현하지 않고 대신 별개의 프로세스로서, 예를 들어 디코딩된 베이스 픽처 버퍼로부터 출력된 데이터를 판독하는 베이스 디코딩 프로세스에 대한 래퍼로 고려될 수 있다.
도 27의 예에서, 베이스 디코더 데이터 추출을 위한 디코딩 프로세스는 다음 입력을 수신할 수 있다: 현재 픽처 컴포넌트의 좌상단 샘플에 대한 현재 블록의 좌상단 샘플을 지정하는 위치(xCurr, yCurr); 샘플을 판독할 베이스 디코더 픽처 버퍼 프레임을 지정하는 변수 IdxBaseFrame; 및 현재 블록의 컬러 성분을 지정하는 변수 IdxPlanes. 이 프로세스의 출력은 recDecodedBaseSamples[x][y] 요소를 갖는 픽처 샘플의 (nCurrX)x(nCurrY) 어레이 recDecodedBaseSamples인 것으로 나타나 있다. 프로세스(2710)는 위치(xCurr, yCurr) 및 변수 IdxBaseFrame가 가리키는 프레임으로부터 크기 (nCurrS)x(nCurrS)의 샘플 블록을 판독할 수 있다. 블록은 래스터 순서로 판독할 수 있다.
예를 들어, 도 7a 내지 도 7c에 도시되어 있는 바와 같이 배열된 루마 및 크로마 평면이 존재할 때, 샘플 블록 크기 변수 nCurrX 및 nCurrY는 다음과 같이 유도될 수 있다:
nCurrX = (IdxPlanes == 0) ? nCurrX : nCurrX >> ShiftWidthC
nCurrY = (IdxPlanes == 0) ? nCurrY : nCurrY >> ShiftHeightC
디더 필터의 디코딩 프로세스
잔차 재구성에 대한 섹션에서 앞서 설명한 바와 같이, 디더 필터는 레벨 2 재구성의 출력에 적용될 수 있다. 디더 필터는 예를 들어 양자화의 적용에 의해 생성되는 아티팩트를 숨김으로써 출력 픽처의 이미지 품질을 개선하기 위해 적용될 수 있다. 도 27에서, 디더 프로세스는 블록 2760으로 도시되어 있다.
도 27의 예에서, 디더 프로세스(2760)에 대한 입력은 다음을 포함한다: 현재 픽처 컴포넌트의 좌상단 샘플에 대한 현재 블록의 좌상단 샘플을 지정하는 위치(xCurr, yCurr); 및 재구성된 조합된 출력 픽처 샘플을 지정하는 (nCurrS)x(nCurrS) 어레이 recL2PictureSamples(예를 들어, 도 23의 2322에 관련함). 프로세스(2760)의 출력은 recL2DitheredPictureSamples[x][y] 요소를 갖는 잔차의(nCurrS)x(nCurrS) 어레이 recL2DitheredPictureSamples로 나타나 있다.
알려진 디더링 접근법의 상이한 형태 및 변형이 적용될 수 있다. 디더링의 타입은 변수 dithering_type를 사용하여 시그널링될 수 있다(앞서 설명된 바와 같음). 예를 들어, dithering_type가 1과 같은 경우(예를 들어, 균일한 디더링), 위치(xCurr, yCurr)에서 재구성된 샘플 어레이 recL2DitheredPictureSamples의 (nCurrS)x(nCurrS) 블록은 다음과 같이 유도될 수 있다:
recL2DitheredPictureSamples[xCurr + i][yCurr + j] = recL2PictureSamples[i][j] + rand(i,j)
여기서 i = 0…nCurrS - 1, j = 0…nCurrS - 1. 함수 rand(i, j)는 의사 난수이며, 예를 들어 알려진 의사 또는 실제 난수 생성기로 생성된다. 함수 rand(i, j)는 미리 정의된 범위 내의 값을 출력하도록 구성될 수 있다. 이 미리 정의된 범위는 시그널링될 수 있다. 본 예에서, 미리 정의된 범위는 위의 "신택스" 및 "시멘틱스" 섹션에서 설명한 바와 같이 변수 dithering_strength를 사용하여 설정되며, 여기서 정의된 범위는 [-dithering_strength, +dithering_strength]로 설정될 수 있다.
엔트로피 인코딩 변환 계수에 대한 파싱 프로세스
이 섹션에서는 엔트로피 인코딩 변환 계수에 적용될 수 있는 엔트로피 디코딩 프로세스를 설명한다. 이 프로세스에 대한 입력은 블록 2706으로 나타낸 픽처 개선 디코딩 프로세스로부터 유도된 엔트로피 인코딩된 변환 계수를 포함하는 데이터 청크에 속하는 비트를 포함할 수 있다. 본 출원에 설명된 프로세스는 또한 이전 디코더 예의 엔트로피 디코딩 컴포넌트를 구현하는 데 사용될 수 있다.
앞서 설명된 바와 같이, 본 출원에 설명된 바와 같은 허프만 인코딩 및 디코딩에 대한 언급은 또한 프리픽스 코딩을 참조하는 것으로 처리되는 것으로 나타내어진다는 점에 유의해야 한다. 프리픽스 코드는 프리픽스 프리 코드, 콤마 프리 코드, 프리픽스 조건 코드 및 순간 코드라고도 알려져 있다. 허프만 코딩은 프리픽스 코드를 유도하는 많은 알고리즘 중 단지 하나일 뿐이지만, 프리픽스 코드는 코드가 허프만 알고리즘에 의해 생성되지 않은 경우에도 "허프만 코드"로 널리 언급된다. 따라서 "허프만 코드"는 보다 일반적인 "프리픽스 코드"에 대한 동의어로 본 출원에서 사용된다.
더 자세히, 그리고 도 27의 블록 2706을 참조하여, 데이터가 타일링되는지 여부에 따라 상이한 처리 동작이 일어날 수 있다. 데이터가 타일링되지 않은 경우(예를 들어, 0과 동일한 tile_dimensions_type으로 표시됨) 각각의 청크에 대해 다음 정보가 제공된다: 프리픽스 코딩 디코더가 필요한지(또는 데이터가 프리픽스 코딩 없이 단지 런-렝스 인코딩된 데이터로서 디코딩되는지) 여부를 지정하는 변수 surfaces[planeIdx][levelIdx][layerIdx].rle_only_flag; 데이터 청크의 크기를 지정하는 변수 surfaces[planeIdx][levelIdx][layerIdx].size(예를 들어, 청크는 도 9a에 도시되어 있는 데이터 부분에 대응함); 및 청크의 시작을 지정하는 변수 surfaces[planeIdx][levelIdx][layerIdx].data. 변수 planeIdx, levelIdx 및 layerIdx는 청크가 속한 평면, 개선 서브 계층 및 계수 그룹을 나타내기 위해 앞서 설명한 바와 같이 사용될 수 있다. 이 프로세스의 출력은 앞서 설명된 도 27의 블록(2714 및 2746)으로 도시되어 있는 디코딩 프로세스에 대한 입력으로 사용되는 엔트로피 디코딩된 양자화된 변환 계수이다.
타일링된 데이터가 인에이블되면(예를 들어, 도 21a에 도시되어 있는 바와 같이), 이때, tile_dimensions_type는 비-제로 값으로 설정될 수 있다. 이 경우 각각의 청크에 대해 다음 정보가 제공된다: 디코딩된 픽처의 타일을 가리키는 변수 surfaces[planeIdx][levelIdx][layerIdx].tiles; 및 프리픽스 코딩 디코더가 모든 타일에 필요한지 여부를 지정하는 변수 surfaces[planeIdx][levelIdx][layerIdx].rle_only_flag. 이 경우 데이터 청크는 타일이라고 지칭되는 더 작은 데이터 청크로 더 분할된다. 각각의 타일에 대해 다음 정보가 제공된다: 타일 데이터 청크의 크기를 지정하는 변수 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].size; 및 청크의 시작을 지정하는 변수 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].data. 인덱스 planeIdx, levelIdx, layerIdx 및 tileIdx는 청크가 속한 평면, 개선 서브 계층, 계수 그룹 및 타일을 나타낸다. 이 프로세스의 출력은 다시 엔트로피 디코딩된 양자화된 변환 계수이며 도 27의 블록(2714 및 2746)으로 도시되어 있는 프로세스에 대한 입력으로 사용된다(예를 들어, 도 21a에 도시되어 있는 순서로).
예시적인 엔트로피 디코더는 2개의 컴포넌트로 구성될 수 있다: 프리픽스 코딩 디코더 및 런-렝스 디코더. 이는 도 10a를 참조하여 위의 "예시적인 엔트로피 인코딩" 섹션에 설명되어 있다.
엔트로피 인코딩된 시간적 신호 계수 그룹에 대한 파싱 프로세스
시간적 시그널링 데이터는 또한 예를 들어 도 24 내지 도 26의 예에 도시되고 도 12a 내지 도 12e를 참조하여 설명된 바와 같이 엔트로피 인코딩될 수 있다. 도 27의 예에서 시간적 시그널링 데이터는 엔트로피 인코딩된 시간적 신호 계수 그룹으로 조직된다. 이들은 또한 픽처 개선 디코딩 프로세스(2706)의 일부로서 또는 별개의 프로세스의 일부로서 파싱될 수 있다. 이들은 앞서 설명한 프로세스와 유사한 방식으로 엔트로피 디코딩될 수 있다.
앞서 설명된 바와 같이, 시간적 시그널링 표면의 처리는 데이터가 타일링되는지 여부에 따라 달라질 수 있다. 이는 tile_dimensions_type 변수를 사용하여 표시될 수 있다. 시간적 시그널링 데이터에 대한 이 파싱 프로세스에 대한 입력은 블록 2706으로부터 유도된 엔트로피 인코딩된 시간적 신호 계수 그룹을 포함하는 데이터 청크에 속하는 비트를 포함할 수 있다.
tile_dimensions_type가 0과 같은 경우 각각의 청크에 대해 다음 정보가 제공된다: 프리픽스 코딩 디코더가 필요한지를 지정하는 변수 temporal_surfaces[planeIdx].rle_only_flag; 데이터 청크의 크기를 지정하는 변수 temporal_surfaces[planeIdx].size; 및 청크의 시작을 지정하는 변수 temporal_surfaces[planeIdx].data. 이 경우, planeIdx는 청크가 속한 평면을 나타내는 인덱스이다. 이 프로세스의 출력은 위와 아래에서 더 자세히 설명된 바와 같이 엔트로피 디코딩된 시간적 신호 계수 그룹으로 TempSigSurface에 저장된다.
타일링된 데이터가 인에이블된 경우(예를 들어, tile_dimensions_type가 0과 같지 않은 경우) 각각의 청크에 대해 다음 정보가 제공될 수 있다: 디코딩된 픽처의 타일을 가리키는 변수 temporal_surfaces[planeIdx].tiles; 및 프리픽스 코딩 디코더가 모든 타일에 필요한지 여부를 지정하는 변수 temporal_surfaces[planeIdx].rle_only_flag. 이 경우, 데이터 청크는 타일이라고 지칭되는 더 작은 데이터 청크로 더 분할된다(예를 들어, 도 21a에, 그러나, 시간적 시그널링에 대해, 도시된 바와 같이- 시간적 시그널링은 추가 계층으로 볼 수 있음). 각각의 타일에 대해 다음 정보가 제공될 수 있다: 타일 데이터 청크의 크기를 지정하는 변수 temporal_surfaces[planeIdx].tiles[tileIdx].size; 및 청크의 시작을 지정하는 변수 temporal_surfaces[planeIdx].tiles[tileIdx].data. 이 경우 인덱스 planeIdx와 tileIdx는 청크가 속한 평면과 타일을 나타낸다. 이 프로세스의 출력은 위와 아래에서 더 자세히 설명된 바와 같이 엔트로피 디코딩된 시간적 신호 계수 그룹으로 TempSigSurface에 저장된다.
역시, 예시적인 엔트로피 디코더는 2개의 컴포넌트로 구성될 수 있다: 프리픽스 코딩 디코더 및 런-렝스 디코더. 이는 도 10a를 참조하여 위의 "예시적인 엔트로피 인코딩" 섹션에서 변환 계수와 관련하여 설명된 바와 같이 적용될 수 있다.
프리픽스 코딩 디코더 설명
예시적인 프리픽스 코딩 디코더의 특정 양태는 "예시적인 엔트로피 인코딩"이라는 명칭의 위의 섹션 및 도 10a 내지 도 10i에 관련한다.
특정 예에서, 변수 rle_only_flag가 1과 같으면, 프리픽스 코딩 디코더 프로세스가 스킵되고, 본 출원에 설명된 런-렝스 디코딩 프로세스가 호출된다. 변수 rle_only_flag가 0과 같으면 프리픽스 코딩 디코더가 적용된다.
프리픽스 코딩 디코더는 스트림 헤더 크기로부터 코드 길이를 판독함으로써 초기화될 수 있다. 31개를 초과하는 비-제로 값이 있는 경우 스트림 헤더는 도 10b에 도시된 바와 같다. 그렇지 않으면, 스트림 헤더는 도 10c에 도시되어 있는 바와 같이 배열될 수 있다. 빈도가 모두 0인 특별한 경우에, 스트림 헤더는 도 10d에 도시되어 있는 바와 같이 배열될 수 있다. 프리픽스 코딩 트리에 단 하나의 코드가 있는 특별한 경우에 스트림 헤더는 도 10e에 도시된 바와 같이 배열될 수 있다. 이러한 데이터 구조에 대한 추가적인 세부사항은 위의 "예시적인 엔트로피 인코딩" 섹션에서 찾을 수 있다.
초기화된 후, 프리픽스 코딩 디코더는 다음 단계를 수행할 수 있다:
1) 각각의 심볼에 대한 코드 길이를 설정;
2) 코드 길이로부터 심볼에 코드를 할당; 및
3) 길이가 동일한 코드의 서브세트를 검색하기 위한 테이블을 생성. 이 단계에서 테이블의 각각의 요소는 주어진 길이의 제1 인덱스와 대응하는 코드(예를 들어, firstIdx, firstCode 형태)를 기록하는 데 사용될 수 있다.
프리픽스 코딩 디코더 테이블 생성
앞서 설명된 바와 같은 단계 3), 예를 들어 프리픽스 코딩 디코더 테이블 생성의 간단한 예가 이제 아래의 심볼 테이블 및 도 28a 내지 도 28e를 참조하여 설명될 것이다.
주어진 심볼 세트에 대한 프리픽스 코딩 코드를 찾기 위해 프리픽스 코딩 트리가 생성될 수 있다. 아래의 테이블은 각각 상이한 빈도로 발생하는 6개의 심볼(A, B, C, D, E 및 F)을 갖는 가상의 예를 도시한다. 먼저, 심볼이 빈도별로 소팅된다. 이는 아래 테이블에 나타나 있다:
Figure pct00141
그 후, 2개의 가장 낮은 요소가 리스트에서 제거되고 부모 노드가 2개의 하위 요소의 빈도의 합인 빈도를 갖는 트리의 리프로 형성된다. 제1 부분 트리가 도 28a에 도시되어 있다. 그 후, 아래 테이블에 도시된 바와 같이 조합된 요소와 함께 새로운 소팅된 빈도 리스트가 생성된다.
Figure pct00142
그 후, 루프가 반복되어 도 28b에 도시된 바와 같이 가장 낮은 두 요소를 조합한다. 업데이트된 소팅된 빈도를 갖는 새로운 리스트는 아래와 같이 나타내어진다:
Figure pct00143
이 프로세스는 리스트에 단 하나의 요소만 남을 때까지 반복된다. 반복은 도 28c 및 도 28d와 아래의 3개의 연속적인 테이블에 나타나 있다.
Figure pct00144
Figure pct00145
Figure pct00146
트리가 구축되고나면 심볼에 대한 프리픽스 코딩 코드를 생성하기 위해 루트로부터 이 심볼까지 트리를 횡단하고, 좌측 분기를 선택할 때마다 0을 덧붙이고 우측 분기를 선택할 때마다 1을 덧붙인다. 이는 도 28e에 도시되어 있다. 여기에 제시된 가상의 예에서, 이는 아래 테이블에 명시된 바와 같이 다음의 코드를 제공한다:
Figure pct00147
심볼의 코드 길이는 그 대응하는 코드의 길이이다. 프리픽스 코딩 코드를 디코딩하기 위해 루트에서 시작하여 트리를 횡단하여 0이 판독되면 좌측 경로를, 1이 판독되면 우측 경로를 선택한다. 심볼은 리프에 도달할 때 발견된다.
타일 데이터 크기에 대한 프리픽스 코딩 디코더
이 섹션에서는 타일링된 데이터에 사용할 수 있는 프리픽스 코딩 디코더에 대해 설명한다. 이 경우, 디코더는 각각의 타일의 프리픽스 코딩 인코딩된 데이터 크기를 바이트별로 판독한다. 이 디코딩을 위한 상태 기계에는 2개의 상태가 있다: LSB 프리픽스 코드 상태 및 MSB 프리픽스 코드 상태. 구성에 의해 데이터의 제1 바이트 상태는 LSB 프리픽스 코드 상태로 보장된다. 오버플로우 플래그가 0인 경우 상태 기계는 LSB 프리픽스 코드 상태를 유지한다. 오버플로우 플래그가 1인 경우 상태 기계는 MSB 프리픽스 코드 상태로 전이된다. 디코더는 데이터의 다음 바이트의 상태를 결정하기 위해 이 상태 기계를 사용한다. 상태는 디코더에게 현재 데이터 바이트를 해석하는 방법을 알려준다. 2개의 상태는 도 10g에 예시된 것들일 수 있다.
LSB 프리픽스 코딩 상태는 비-제로 값의 7개 하위 비트를 인코딩할 수 있다. 이 상태에서, 바이트는 도 10g에 도시되어 있는 바와 같이 분할된다. 값이 데이터의 7 비트 내에 맞지 않으면 오버플로우 비트가 설정된다. 오버플로우 비트가 설정될 때, 다음 바이트의 상태는 MSB 프리픽스 코딩 상태가 된다. MSB 프리픽스 코딩 상태는 7 비트 데이터에 맞지 않는 값의 비트 8 내지 15를 인코딩한다. 바이트의 모든 8 비트는 데이터 비트일 수 있다(예를 들어, 런 비트가 없는 도 10h 및 도 10i와 유사함). 프리픽스 코딩 인코더에서 사용할 각각의 상태에 대한 빈도 테이블이 생성된다.
이 프로세스가 엔트로피 인코딩된 변환 계수를 참조하는 표면으로 호출되면 디코딩된 값은 nTilesL1 또는 nTilesL2 크기(각각 개선 서브 계층 1 및 서브 계층 2에 대한 타일 수)의 임시 버퍼 tmp_size_per_tile에 저장된다. 이들은 인덱스 planeIdx, levelIdx, layerIdx 및 tileIdx를 사용하여 다음과 같이 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].size에 맵핑될 수 있다:
Figure pct00148
이 프로세스가 엔트로피 인코딩된 변환 신호 계수 그룹을 참조하는 temporal_surfaces로 호출되면, 디코딩된 값은 nTilesL2 크기의 임시 버퍼 tmp_size_per_tile에 저장되고 다음과 같이 temporal_surfaces[planeIdx].tiles[tileIdx].size에 맵핑될 수 있다:
Figure pct00149
타일별 최종 비트 심볼 오프셋은 앞서 설명한 것과 동일한 프리픽스 코딩 디코딩 프로세스를 사용할 수 있다. 이 프로세스가 엔트로피 인코딩된 변환 계수를 참조하는 표면으로 호출되면 디코딩된 값은 nTilesL1 또는 nTilesL2 크기의 임시 버퍼 tmp_decoded_tile_prefix_last_symbol_bit_offset(각각 개선 서브 계층 1 및 서브 계층 2에 대한 타일 수)에 저장되고 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx]에 맵핑된다. 그 후, 변수 prefix_last_symbol_bit_offset이 다음과 같이 유도된다:
Figure pct00150
이 프로세스가 엔트로피 인코딩된 변환 신호 계수 그룹을 참조하는 temporal_surfaces로 호출되면 디코딩된 값은 크기 nTilesL2의 임시 버퍼 tmp_decoded_tile_prefix_last_symbol_bit_offset에 저장된다. 이들은 그 후, 다음과 같이 temporal_surfaces[planeIdx].tiles[tileIdx].prefix_last_symbol_bit_offset에 맵핑될 수 있다:
Figure pct00151
RLE 디코더
이제 예시적인 런-렝스 인코딩(RLE) 디코더가 설명될 것이다. 런-렝스 인코더 및 디코더에 대한 추가 세부사항은 또한 앞서 설명된 "예시적인 엔트로피 인코딩" 섹션 및 도 10a 내지 도 10i에서 찾을 수 있다.
RLE 디코더의 입력은 rle_only_flag가 0과 같은 경우 프리픽스 코딩 디코딩된 데이터의 바이트 스트림이거나 rle_only_flag가 1과 같은 경우 단지 원시 데이터의 바이트 스트림일 수 있다. 이 프로세스의 출력은 변수 planeIdx, levelIdx 및 layerIdx가 가리키는 청크에 속하는 양자화된 변환 계수의 스트림 또는 시간적 청크에 속하는 시간적 신호의 스트림이다.
계수 그룹을 디코딩할 때, RLE 디코더는 앞서 설명한 바와 같이 도 10f에 도시되어 있는 상태 기계(1050)를 사용할 수 있다. 런-렝스 상태 기계(1050)는 현재 심볼 또는 코드 워드에 대해 사용할 프리픽스 코딩 코드를 알기 위해 처리된 프리픽스 코딩 인코딩 및 디코딩에 의해 사용될 수 있다. RLE 디코더는 0의 시퀀스를 디코딩한다. 또한, 이는 프리픽스 코딩 트리를 구축하는 데 사용되는 빈도 테이블을 디코딩할 수 있다. RLE 디코더는 런-렝스로 인코딩된 데이터를 바이트별로 판독한다. 구성에 의해 데이터의 제1 바이트 상태는 RLC 잔차 LSB 상태(1051)가 되도록 보장된다. RLE 디코더는 데이터의 다음 바이트의 상태를 결정하기 위해 상태 기계(1050)를 사용한다. 상태는 RLE 디코더에 현재 데이터 바이트를 해석하는 방법을 알려준다. 3개의 상태(1051, 1052, 1053)에 대한 추가 세부사항은 위의 도 10f의 설명에서 제공된다. 도 10g 내지 도 10i에 도시되어 있는 바이트 인코딩도 참조한다. 프리픽스 코딩 인코더에서 사용하기 위해 각각의 상태에 대해 빈도 테이블이 생성될 수 있다. 디코더가 알려진 상태에서 시작하기 위해, 인코딩된 스트림 내의 제1 심볼은 항상 잔차일 것이다.
시간적 신호 계수 그룹에 대한 RLE 디코더는 유사한 방식으로 동작할 수 있다. 시간적 신호 계수 그룹에 대한 예시적인 RLE 디코더는 위의 섹션 제목 "시간적 예측 및 시그널링"에서 설명되었다. 시간적 신호 계수 그룹에 대한 RLE 디코더는 도 12e에 도시되어 있는 상태 기계(1280)와 유사한 상태 기계를 사용할 수 있다. 상태 기계(1280)는 현재 심볼 또는 코드 워드에 대해 사용할 프리픽스 코딩 코드를 알기 위해 처리된 프리픽스 코딩 인코딩 및 디코딩에 의해 사용될 수 있다. 시간적 신호 계수 그룹에 대한 RLE 디코더는 0의 시퀀스와 1의 시퀀스를 디코딩한다. 또한, 이는 프리픽스 코딩 트리를 구축하는 데 사용되는 빈도 테이블을 디코딩할 수 있다. 시간적 신호 계수 그룹에 대한 RLE 디코더는 수신된 런-렝스 인코딩된 데이터를 바이트별로 판독할 수 있다. 구성에 의해 데이터의 제1 바이트의 상태는 스트림의 제1 심볼의 실제 값으로 보장될 수 있다(예를 들어, 도 12e의 상태 1281). RLE 디코더는 데이터의 다음 바이트의 상태를 결정하기 위해 상태 기계(1280)를 사용할 수 있다. 상태는 RLE 디코더에 현재 데이터 바이트를 해석하는 방법을 알려준다. 도 12e를 참조하여 앞서 설명된 바와 같이, 시간적 신호 계수 그룹에 대한 RLE 디코더는 제1 심볼 상태에 추가하여 2개의 상태를 가질 수 있다: 도 12e의 상태 1283로서 도시되어 있는 RLC 0 런 상태 및 도 12e의 상태 1282로서 도시되어 있는 RLC 1 런 상태. 0 런 상태(1283)는 0 런 카운트의 7 비트를 인코딩한다. 카운트를 인코딩하는데 더 많은 비트가 필요한 경우, 런 비트는 하이이다. 0 런 상태에 대한 바이트의 런-렝스 인코딩은 도 10h 또는 10i에 도시되어 있는 것과 유사할 수 있다. 1 런 상태(1282)는 1 런 카운트의 7 비트를 인코딩한다. 카운트를 인코딩하는데 더 많은 비트가 필요한 경우, 런 비트는 하이이다. 1 런 상태에 대한 바이트의 런-렝스 인코딩은 또한 도 10h 또는 10i에 도시되어 있는 것과 유사할 수 있다. 프리픽스 코딩 인코더에서 사용하기 위해 각각의 상태에 대해 빈도 테이블이 생성될 수 있다. RLE 디코더가 알려진 상태(예를 들어, 상태 1281)에서 시작하기 위해 제1 심볼은 실제 값 0 또는 1을 포함할 수 있다.
시간적 신호 계수 그룹을 디코딩할 때 RLE 디코더는 시간적 신호 표면 TempSigSurface에 0 및 1 값을 기록한다. 이는 크기(PictureWidth / nTbS, PictureHeight / nTbS)를 가질 수 있고, 여기서 nTbS가 변환 크기이다.
도 12c 및 도 12d 그리고 도 13a 및 도 13b의 흐름도와 관련하여 설명된 인코딩이 사용될 수 있다. 이 경우, 시간적 신호의 디코딩은 다음 단계를 수반할 수 있다. temporal_tile_intra_signalling_enabled_flag가 1과 같고 TempSigSurface의 기록 위치(x, y)에 기록할 값이 1과 같고 x%(32/nTbS) == 0이고 y%(32/nTbS) == 0인 경우 (x + 32/nTbS) < (PictureWidth/nTbs)일 때 다음 기록 위치가 (x + 32/nTbS, y)로 이동하고, 그렇지 않으면 (0, y + 32/nTbS)로 이동한다. 이는 도 12d에 도시되어 있는 바와 같이 시간적 시그널링을 디코딩할 수 있고, 여기서 이 도면은 nTbs = 4를 갖는 4x4 변환을 위해 시간적 신호 표면에 값을 기록하는 시간적 신호 계수 그룹에 대한 RLE 디코더를 나타낼 수 있다.
특정 예에서, 다른 시그널링은 위 및 다른 예에서 시간적 시그널링에 대해 설명된 바와 같이 인코딩 및/또는 디코딩될 수 있다.
예를 들어, 일 경우에, 타일에 대한 entropy_enabled_flag는 이러한 방식으로 인코딩 및 디코딩될 수 있다. 이 경우, 각각의 타일의 entropy_enabled_flag 필드를 코딩하는 데 사용되는 런-렝스 상태 기계는 도 12e에 도시되어 있는 상태 기계(1280)와 유사한 방식으로 구성되고 위의 시간적 시그널링에 사용될 수 있다. RLE 디코더는 (동일한 상태 배열로) 위에서 시간적 시그널링에 대해 설명된 바와 같이 0의 시퀀스 및 1의 시퀀스를 다시 디코딩될 수 있다.
인코딩된 타일 entropy_enabled_flag를 사용하는 경우 RLE 데이터는 블록으로 조직될 수 있다. 각각의 블록은 4096 바이트의 출력 용량을 가질 수 있다. 이 경우 RLE 디코더는 다음과 같은 경우 새 블록으로 전환할 수 있다: 1) 현재 블록이 가득 참; 2) 현재 RLE 데이터가 런이고, 현재 블록에 5 바이트 미만이 남아 있다; 3) 현재 RLE 데이터가 LSB/MSB 쌍으로 이어지고, 현재 블록에 2 바이트 미만이 남음. 이 예에서, RLE 디코더는 0 및 1 값을 다음 크기의 임시 신호 표면 tmp_decoded_tile_entropy_enabled에 기록할 수 있다:
(nPlanes) x (nLevels) x (nLayers) x (nTilesL1+nTilesL2) x (no_enhancement_bit_flag == 0) + (temporal_signalling_present_flag == 1) x (nPlanes) x (nTilesL2)
이 경우, 결과적인 임시 신호 표면 tmp_decoded_tile_entropy_enabled는 다음과 같이 surfaces[planeIdx][levelIdx][layerIdx].tiles[tileIdx].entropy_enabled_flag 및 temporal_surfaces[planeIdx].tiles[tileIdx].entropy_enabled_flag에 맵핑될 수 있다.
Figure pct00152
지수 골롬 코드(Exp-Golomb Code)에 대한 파싱 프로세스
본 출원에 설명된 특정 예에서 데이터는 지수 골롬 코드로 인코딩될 수 있다. 이들은 0차일 수 있다. 이 섹션은 신택스 테이블에 있는 신택스 요소의 설명자가 ue(v)와 같을 때 호출될 수 있는 파싱 프로세스를 설명한다(예를 들어, 위의 "비트스트림 신택스" 섹션에 설명된 바와 같음).
예에서, 지수 골롬 코드 파싱 프로세스에 대한 입력은 원시 바이트 시퀀스 페이로드(RBSP)의 비트를 포함할 수 있다. 이 프로세스의 출력은 신택스 요소 값을 포함할 수 있다.
ue(v)로 코딩된 신택스 요소는 차수 0으로 지수 골롬 코딩될 수 있다. 이러한 신택스 요소에 대한 파싱 프로세스는 비트스트림의 현재 위치에서 시작하여 비-제로 제1 비트를 포함하여 그 까지의 비트를 판독하고 0과 같은 선행 비트 수를 카운팅하는 것으로 시작된다. 이 프로세스는 다음과 같이 지정될 수 있다:
Figure pct00153
이때, 변수 codeNum은 다음과 같이 할당될 수 있다:
codeNum = (2leadingZeroBits - 1) + read_bits(leadingZeroBits)
여기서 read_bits(leadingZeroBits)로부터 반환된 값은 최상위 비트가 먼저 기록되는 부호 없는 정수의 이진 표현으로 해석된다.
아래 테이블은 비트 스트링을 "프리픽스"와 "서픽스" 비트로 분리함으로써 0차 지수 골롬 코드의 예시적인 구조를 예시한 것이다. "프리픽스" 비트는 leadingZeroBits의 계산을 위해 위에서 지정한 바와 같이 파싱된 비트이며 테이블의 비트 스트링 열에 0 또는 1 중 어느 하나로 표시된다. "서픽스" 비트는 codeNum의 계산에서 파싱되는 비트이며 테이블에서 xi로 표시되어 있고, 여기서, i는 0에서 leadingZeroBits - 1까지의 범위(경계값 포함)에 있다. 각각의 xi는 0 또는 1 중 어느 하나와 같다.
Figure pct00154
아래 테이블은 codeNum 값에 대한 비트 스트링 할당을 명시적으로 예시한다.
Figure pct00155
이때, 신택스 요소의 값은 codeNum과 같다.
디코더의 상세한 예시적인 구현의 요약
앞서 설명한 예는 데이터가 논리적으로 청크로 조직된 비트스트림을 처리한다. 첫 번째, 각각의 청크는 엔트로피 디코딩된다. 즉, 방법은 각각의 청크를 검색하고 각각의 청크에 엔트로피 디코딩 동작을 적용하는 단계를 포함한다. 엔트로피 디코딩 동작의 예는 앞서 설명되었으며, 예를 들어 런-렝스 디코딩, 프리픽스 코딩 디코딩 또는 양자 모두를 포함할 수 있다. 그 다음, 방법은 엔트로피 디코딩된 양자화된 계수의 어레이를 출력할 수 있다. 런-렝스 코딩 동작은 심볼 세트에서 다음 심볼을 식별하고 데이터 값 또는 0의 런 중 어느 하나를 추출할 수 있다. 그 다음, 디코딩 동작은 데이터를 디코딩하기 위해 이들 값 및 0을 조합할 수 있다. 그 순서는 추출된 순서이거나 대안적으로 일부 미리 결정된 순서일 수 있다.
제1 개선 청크 레벨(예를 들어, 엔트로피 디코딩 이후의 레벨 1)에 대한 디코딩 프로세스의 예시적인 구현이 설명된다. 추가적인 개선 청크 레벨(예를 들어, 엔트로피 디코딩 이후의 레벨 2)에 대한 디코딩 프로세스의 예시적인 구현이 또한 설명된다.
방법은 제1 개선 레벨을 나타내는 엔트로피 디코딩된 양자화된 계수의 어레이를 검색하고 잔차의 어레이를 출력하는 단계를 포함할 수 있다. 방법은 베이스 디코더의 출력 샘플의 어레이를 검색하는 단계를 더 포함할 수 있다. 방법은 탈양자화된 계수 세트를 유도하기 위해 엔트로피 디코딩된 양자화된 계수의 어레이에 탈양자화 프로세스를 적용하고, 탈양자화된 계수 세트에 변환 프로세스를 적용하고, 필터 프로세스를 적용하여 제1 개선 레벨을 나타내는 잔차의 어레이를 어레이를 출력하는 단계를 더 포함할 수 있다. 그 다음, 방법은 잔차 어레이로부터 픽처를 재생성하는 단계를 더 포함할 수 있다. 방법은 시그널링된 파라미터에 따라 미리 결정된 변환 프로세스의 세트로부터 변환 프로세스를 적용하는 단계를 포함할 수 있다. 예를 들어, 변환 프로세스는 2x2 코딩 유닛 또는 4x4 코딩 유닛에 적용될 수 있다.
방법은 또한 추가 개선 레벨을 나타내는 엔트로피 디코딩된 양자화된 계수의 어레이를 검색하고 잔차의 어레이를 출력하는 단계를 포함할 수 있다. 방법은 추가 개선 레벨을 나타내는 엔트로피 디코딩된 양자화된 계수의 어레이에 대응하는 제1 개선 레벨의 잔차 어레이를 검색하는 단계를 더 포함할 수 있다. 방법은 제1 개선 레벨의 잔차 어레이에 업샘플링 프로세스를 적용하는 단계를 더 포함할 수 있다. 방법은 시간적으로 예측된 샘플의 어레이를 유도하기 위해 추가적인 개선 레벨을 나타내는 엔트로피 디코딩된 양자화된 계수의 어레이에 시간적 예측 프로세스를 적용하는 단계를 포함할 수 있다. 방법은 탈양자화된 계수 세트를 유도하기 위해 엔트로피 디코딩된 양자화된 계수의 어레이에 탈양자화 프로세스를 적용하는 단계, 변환된 계수 세트를 유도하기 위해 탈양자화된 계수 세트에 변환 프로세스를 적용하는 단계를 더 포함할 수 있다. 그 다음, 시간적으로 예측된 샘플의 어레이는 추가적인 이후의 개선을 위한 잔차의 어레이를 유도하기 위해 변환된 계수 세트와 조합될 수 있다. 그 다음, 방법은 잔차 어레이로부터 픽처를 재생성하는 단계를 더 포함할 수 있다. 방법은 시그널링된 파라미터에 따라 미리 결정된 변환 프로세스의 세트로부터 변환 프로세스를 적용하는 단계를 포함할 수 있다. 예를 들어, 변환 프로세스는 2x2 코딩 유닛 또는 4x4 코딩 유닛에 적용될 수 있다.
방법은 잔차를 예측하는 단계를 포함할 수 있다. 잔차를 예측하는 단계는 변환 프로세스의 일부로 수행될 수 있다. 잔차 예측 단계는 잔차를 수정하는 단계를 포함할 수 있다. 수정은 프레임에서 잔차의 위치에 기초하여 수행될 수 있다. 수정은 미리 결정된 값일 수 있다. 필터링 단계는 추가 개선 레벨에서도 적용될 수 있다. 유사하게, 시간적 예측은 제1 개선 레벨 프로세스에서도 적용될 수 있다.
앞서 설명된 방법이 탈양자화 프로세스, 변환 프로세스, 업샘플링 프로세스 및 필터 프로세스(및 다른 프로세스)의 예를 명시하지만, 설명된 프로세스는 필수적이지 않으며, 다른 현대의 프로세스가 설명된 단계를 수행하는 데 적용될 수 있다는 것을 이해할 것이다.
방법은 시간적 시그널링에 대해 동작하도록(예를 들어, 메타데이터를 사용하여 시간적 모드를 시그널링) 적용될 수 있다. 예를 들어, 인코딩된 데이터는 temporal_enabled 비트가 1과 같고 temporal_refresh_bit가 0인 경우, 및 layerIdx가 0인 경우 추가 시간적 표면이 처리되도록 수정될 수 있다. 픽처 개선 인코딩된 데이터에 대한 디코딩 프로세스는 특정 경우에 temporal_enabled 비트가 1이고 temporal_refresh_bit가 0인 경우 및 layerIdx가 0인 경우 추가 시간적 표면이 처리되도록 수정될 수 있다. 시간적 예측을 위한 디코딩 프로세스는 변수 TransTempSig 및 TileTempSig가 시간적 표면(예를 들어, 시간적 맵)으로부터 판독되도록 수정될 수 있다. temporal_embedded 비트가 1인 경우 TransTempSig 및 TileTempSig가 시간적 예측 프로세스에 대한 입력으로 공급될 수 있으며 이러한 프로세스는 타일 리프레시 프로세스가 호출되어야 하는지를 tileTempSig 어레이로부터 결정하도록 구성될 수 있다. 추가적으로, 이 경우, 디코딩은 TransTempSig가 0으로 설정된 경우 변환에 대한 시간적 처리를 호출하도록 구성될 수 있다.
신경망 업샘플러의 상세한 예
개요
본 섹션에서는 앞서 설명한 신경망 업샘플러의 상세한 구현예를 제공한다. 이러한 세부사항은 제한적인 것으로 고려해서는 안 된다.
신경망 업샘플러는 궁극적으로 알려진 범위의 정수 값의 2차원(2D) 행렬로 평탄화되는 3차원(3D) 텐서로서 정의된 중간 값으로 업샘플링 동작을 수행하는 함수 min_conv로 정의될 수 있다. 도 27에 도시되어 있는 서브 블록(2736 내지 2742)과 같이 앞서 설명된 다른 업샘플링 함수에 대해 동일한 인터페이스를 제공하도록 구성될 수 있다. 아래 단락에서는 타입, 동작 및 다른 함수에 대한 상향식 정의가 제공된다.
데이터 타입
이 하위 섹션에서는 신경망 업샘플러 구현에서 정의될 수 있는 일부 데이터 타입을 설명한다.
Figure pct00156
동작
이 하위 섹션에서는 신경망 업샘플러 구현에 사용할 수 있는 일부 함수를 설명한다.
Convolve2D_Add_Bias 함수는 바이어스를 갖는 2차원 컨볼루션을 제공하도록 정의될 수 있다. 이는 도 22c의 블록(2232 및 2236)을 구현하는 데 사용될 수 있다. Tensor3D_FP32 형태의 입력을 수신하고, Tensor4D_FP32 형태의 커널과 Tensor1D_FP32 형태의 바이어스를 적용하고, Tensor3D_FP32(input.size0, input.size1, kernel.size3) 형태의 출력을 제공할 수 있다. 이는 다음 함수로 정의될 수 있다:
Figure pct00157
LeakyRelu 함수는 비선형성을 적용할 수 있다. 이는 도 22c의 블록 2234를 구현하는 데 사용될 수 있다. Tensor3D_FP32 형태의 입력을 수신하고 Tensor3D_FP32(input.size0, input.size1, input.size2) 형태의 출력을 생성할 수 있다. 이는 다음과 같이 정의될 수 있다:
Figure pct00158
InverseDD_Flattening 함수는 업샘플링의 일부로 역(2x2) 변환을 적용할 수 있다. 이는 도 22c의 블록 2242를 구현하는 데 사용될 수 있다. Tensor3D_FP32 형태의 입력과 Tensor3D_FP32 형태의 ds(후자는 예측 평균 계산을 적용하는 데 사용하기 위해 더 낮거나 다운샘플링된 해상도 요소를 나타냄)의 입력을 수신할 수 있다. 출력은 Tensor3D_FP32(input.size0*2, input.size1*2, 1)의 형태로 제공된다. 이는 다음과 같이 정의될 수 있다
Figure pct00159
Integer_FP_Scaling 함수를 사용하여 정수 도메인과 부동 소수점 도메인 사이의 변환을 제공할 수 있다. 이는 도 22b의 블록 2222를 구현하는 데 사용될 수 있다. 이는 다음 변수를 입력으로 받을 수 있다: 입력, 알려진 도메인의 정수의 2D 행렬; min_int_value, 정수 도메인의 최소 유효값; max_int_value, 정수 도메인의 최대 유효값; scaling_offset, 부동 소수점 스케일링 오프셋; 및 scaling_divisor, 부동 소수점 스케일링 제수. 이는 Tensor3D_FP32(input.size0, input.size1, 1) 형태로 출력을 제공할 수 있다. 이는 다음과 같이 정의될 수 있다:
Figure pct00160
FP_Integer_Scaling 함수는 부동 소수점 및 정수 도메인 사이의 변환, 예를 들어, 위의 함수의 역을 제공하는 데 사용될 수 있다. 이는 도 22b의 블록 2224를 구현하는 데 사용될 수 있다. 이는 다음 변수를 입력으로 받을 수 있다: 입력, Tensor3D_FP32; min_int_value, 정수 도메인의 최소 유효값; 및 max_int_value, 정수 도메인의 최대 유효값. 이는 알려진 도메인의 정수의 2D 행렬 형태로 출력을 제공할 수 있다. 이는 다음과 같이 정의될 수 있다:
Figure pct00161
구성
이 섹션은 예시적인 신경망 업샘플러가 앞서 설명한 컴포넌트로 구성될 수 있는 방법을 나타낸다.
커널과 바이어스는 평탄화된 정점을 특정 형상의 텐서에 할당하여 정의할 수 있다.
Upsampler_Core 함수는 도 22a 내지 도 22d에서 2210으로 도시되어 있는 컴포넌트를 구현하기 위해 정의될 수 있다. 이는 Tensor3D_FP32 형태의 입력을 받고 Tensor3D_FP32(input.size0 * 2, input.size1 * 2, 1) 형태의 출력을 제공할 수 있다. 이는 위의 함수를 사용하여 다음과 같이 정의될 수 있다.
Figure pct00162
유사하게, 함수는 도 22a 및 도 22b의 완전한 예(2200 및 2220)를 구현하도록 정의될 수 있다. 이러한 예는 min_conv_upsampler 메인 함수로 구현될 수 있다. 이는 다음을 입력으로 받을 수 있다: 입력, 알려진 도메인의 정수로 구성된 2D 행렬; in_min_int_value, 입력 정수 도메인의 최소 유효값; in_max_int_value, 입력 정수 도메인의 최대 유효값; out_min_int_value, 출력 정수 도메인의 최소 유효값; out_max_int_value, 출력 정수 도메인의 최대 유효값; scaling_offset, 부동 소수점 스케일링 오프셋; 및 scaling_divisor, 부동 소수점 스케일링 제수. 출력은 알려진 도메인의 정수의 2D 행렬을 포함할 수 있다. 특정 경우에, 신경망 업샘플러는 서브 블록 2736 내지 2742의 인터페이스와 일치하는 입력 및 출력 인터페이스를 제공하도록 구성될 수 있으며, 여기서 임의의 추가 구성 데이터는 구성 파일, 구성 시그널링으로부터 판독되거나 및/또는 하드-코딩될 수 있다. min_conv_upsampler 함수는 다음과 같이 정의될 수 있다:
Figure pct00163
예시적인 조합된 베이스 및 개선 디코더
이 섹션에서는 조합된 베이스 및 개선 디코더의 예시적인 구현을 설명한다. 이 예는 (예를 들어, 개선 컴포넌트에 집중하는 이전 예와 비교하여) 베이스 디코더와 개선 디코더가 통합될 수 있는 방법을 예시한다. 본 예는 비트스트림 및 디코더 적합성을 검사하는 데 사용될 수 있는 HRD(가상 참조 디코더)에 대한 기반을 형성할 수 있다.
본 예에서, 용어 비트스트림은 이후 베이스 및 개선 인코딩된 데이터 모두의 조합된 비트스트림을 지칭하기 위해 사용된다. 예를 들어, 이 조합된 비트스트림은 다중화된 데이터를 포함할 수 있다. 비트스트림을 형성하는 NAL 유닛은 위의 "신택스" 및 "시멘틱스" 섹션에서 설명된 형식으로 고려될 수 있다.
동작시, 본 예의 비트스트림은 2가지 타입 중 하나에 할당될 수 있다. 이들은 도 29a의 예(2900)에 도시되어 있다. 이 섹션에서 타입 I 비트스트림(2902)으로 지칭되는 첫 번째 이러한 조합된 타입의 비트스트림은 비트스트림의 베이스 및 개선 양자 모두에 대해 비트스트림에서 모든 액세스 유닛에 대한 비디오 코딩 계층(VCL) NAL 유닛 및 필러 데이터 NAL 유닛만을 포함하는 NAL 유닛 스트림을 포함하고; 이 섹션에서 타입 II 비트스트림(2904 및 2906)이라고 지칭되는 두 번째 타입의 비트스트림은 비트스트림의 모든 액세스 유닛에 대해 VCL NAL 유닛 및 필러 데이터 NAL 유닛 이외에 다음 중 적어도 하나를 포함한다: 베이스 및/또는 개선을 위한 필러 데이터 NAL 유닛 이외의 추가 비-VCL NAL 유닛; 및 NAL 유닛 스트림으로부터 바이트 스트림을 형성하는leading_zero_8bits, zero_byte, start_code_prefix_one_3bytes, 및 trailing_zero_8bits 신택스 요소. 도 29a는 또한 NAL 유닛을 설명하는 섹션에서 앞서 설명된 바와 같이 NAL 유닛 스트림이 바이트 스트림 캡슐화(2908)를 제공할 수 있는 방법을 도시한다.
본 조합된 예시적인 디코더는 베이스 계층 디코더의 개선으로서 정의될 수 있으며, 여기서 베이스 계층 디코더는 자체의 별개의 참조 디코더를 가질 수 있다. 이 예에서, 비-VCL NAL 유닛의 신택스 요소(또는 신택스 요소의 일부에 대한 그 디폴트 값)는, 예를 들어 베이스 디코더의 필요에 따라 베이스 코덱에 대한 시멘틱 정의 지정될 수 있다. 비-VCL NAL 유닛은 SEI(Supplemental Enhancement Information) 및/또는 VUI(Video Usability Information)로 정의될 수 있다(예를 들어, 아래 섹션에서 설명됨). 특정 예에서, 2가지 타입의 디코더 파라미터 세트가 베이스 인코딩에서 사용될 수 있다. 디코더 파라미터 세트는 전역 구성 파라미터 세트/VUI 및 액세스 유닛 레벨의 것들, 예컨대, SEI의 것들 같이 시퀀스 시그널링 레벨에서 시그널링될 수 있다.
조합된 예시적인 디코더를 사용하여 비트스트림의 적합성을 검사하기 위해, VCL NAL 유닛에서 참조되는 전역 구성 파라미터 세트(또는 등가물) 및 픽처 파라미터 세트, 그리고 대응하는 버퍼링 주기 및 픽처 타이밍 SEI 메시지(또는 등가물)가 비트스트림에서(비-VCL NAL 유닛에 의해) 또는 다른 수단에 의해 적시에 조합된 디코더에 반송될 수 있다. 비-VCL NAL 유닛의 "존재"는 이러한 NAL 유닛(또는 단지 그 중 일부)이 본 출원에 설명되지 않은 다른 수단에 의해 디코더에 반송될 때 충족될 수 있다. 비트를 카운팅할 목적으로 비트스트림에 실제로 존재하는 적절한 비트만 카운팅될 수 있다. 예로서, 비트스트림에서의 존재 이외의 수단에 의해 반송되는 비-VCL NAL 유닛과 비트스트림에 존재하는 NAL 유닛의 동기화는, 인코더가 비트스트림으로 전달하기로 결정했다면 그 사이에 비-VCL NAL 유닛이 비트스트림에 존재할 비트스트림의 2개의 지점을 표시함으로써 달성될 수 있다. 비-VCL NAL 유닛의 콘텐츠가 비트스트림 내의 존재 이외의 소정의 수단에 의해 애플리케이션에 반송될 때, 비-VCL NAL 유닛 콘텐츠의 표현은 이 부록에 지정된 동일한 신택스를 사용하도록 요구되지 않을 수 있다. 조합된 디코더 정보가 비트스트림 내에 포함되는 경우, 비트스트림에 포함된 정보에만 기초하여 비트스트림의 적합성을 검증하는 것이 가능하다. 디코더 정보가 비트스트림에 존재하지 않는 경우, 모든 "독립형" 타입 I 비트스트림의 경우와 같이 조합된 디코더 데이터가 소정의 다른 수단에 의해 공급될 때 적합성이 검증될 수 있다.
도 29b는 개선된 베이스 디코더로도 지칭될 수 있는 예시적인 조합 디코더(2910)를 도시한다(예를 들어, "개선된" 부분이 본 출원에 설명된 개선 계층의 구현인 경우). 특정 경우에, 베이스 디코더는 레거시 디코더와 같은 하드웨어 디코더를 포함할 수 있고, "개선된" 부분은 (예를 들어, 로컬 프로세서에 의해 실행되는) 개선 계층의 소프트웨어 구현을 포함할 수 있다. 예시적인 조합 디코더(2910)는 베이스 디코더 및 개선 디코더(예를 들어, 개선 디코더는 본 출원의 다른 예에서 설명된 바와 같음) 양자 모두로부터의 요소의 논리적 조합으로 고려될 수 있다.
예시적인 조합 디코더(2910)는 스트림 스케줄러(2912), 디먹서(2914), 베이스 디코더(2920) 및 개선 디코더(2930)를 포함한다. 베이스 디코더(2920)는 차례로 베이스 코딩된 픽처 버퍼(2922), 베이스 디코딩 프로세스(2924), 베이스 크로핑 프로세스(2926), 및 베이스 디코딩된 픽처 버퍼(2928)를 포함한다. 개선 디코더(2930)는 개선 코딩된 픽처 버퍼(2932), 개선 디코딩 프로세스(2934)(도 27의 적어도 일부에 예시된 디코딩 프로세스를 포함할 수 있음), 및 개선 디코딩된 픽처 버퍼(2936)를 포함한다. 디코딩 프로세스(2924 및 2934)는 예를 들어 한 번에 하나의 픽처가 구현되는 순간 디코딩 프로세스일 수 있다. 예를 들어, 조합된 디코더(2910)에 대한 비트스트림 및 디코더 적합성 요건은 베이스 디코더(2920)를 참조하여 정의될 수 있으며, 예를 들어 개선 디코더(2930)의 버퍼링 및 타이밍은 베이스 디코더(2920)의 동작에 따라 달라질 수 있다. 많은 다른 종류의 베이스 코덱이 베이스 디코더(2920)를 구현하는 데 사용될 수 있다.
특정 베이스 인코딩 타입에 무관하게 베이스 디코더(2920)는 논리적으로 다음과 같이 동작하는 것으로 설명될 수 있다. 베이스 코딩된 픽처 버퍼(2932)로 흐르는 액세스 유닛과 관련된 데이터는, 예를 들어 지정된 도달 스케줄에 따라 디먹서(2914)를 통해 스트림 스케줄러(2912)에 의해 전달된다. 스트림 스케줄러(2912)는 수신된 비트스트림의 스케줄링을 제어하고 디먹서(2914)는 비트스트림을 베이스 및 개선 부분으로 분할한다. 스트림 스케줄러(2912) 및 디먹서(2914)는 모두 순간적일 수 있다. 디먹서(2914)는 인코딩된 데이터를 베이스 비트스트림과 개선 비트스트림 사이에서 분할한다고 말할 수 있다. 각각의 베이스 액세스 유닛과 관련된 데이터는 베이스 코딩된 픽처 버퍼(2922)에 의존하는 제거 시간에 순간 베이스 디코딩 프로세스(2924)에 의해 즉시 제거 및 디코딩될 수 있다. 순간 베이스 디코딩 프로세스(2924)는 개선 코딩된 픽처 버퍼(2932)로부터 개선 액세스 유닛의 제거를 트리거할 수 있다. 필요한 경우, 베이스 크로핑 프로세스(2926)를 통한 순간 크로핑 후에 베이스 디코딩된 픽처와 개선 코딩된 픽처 버퍼(2932) 액세스 유닛은 모두 개선 디코딩 프로세스(2934)에 공급한다. 개선 디코딩 프로세스(2934)는 개선 디코딩된 픽처 버퍼(2936)에 배치되는 개선된 디코딩된 픽처를 즉시 생성한다. 개선 디코더 픽처 버퍼(2936)는 디코딩된 비디오로서 제공될 수 있는 개선된 픽처(예를 들어, 위의 예시적인 디코더의 출력 및 도 27의 프로세스와 유사함)를 저장한다. 베이스 디코더(2920)측에서, 베이스 디코딩된 픽처 버퍼(2928)는 개선과 독립적으로, 예를 들어 참조 베이스 디코더의 적합성 요건을 준수하여 동일한 방식으로 동작한다. 픽처가 개선 디코딩된 픽처 버퍼(2936)에 배치될 때, 이는 베이스 디코딩된 픽처 버퍼(2928) 출력 시간에 개선 디코딩된 픽처 버퍼(2936)로부터 제거될 수 있다. 이러한 방식으로, 조합 디코딩은 베이스 디코딩 단독과 동일한 출력 타이밍 특성을 가질 수 있다. 이는 또한 디코딩된 베이스 비디오가 베이스 디코딩된 픽처 버퍼(2928)로부터 병렬로 판독될 수 있음을 의미하여, 예를 들어 네트워크 트래픽 또는 처리 자원 제약과 같은 스트리밍 문제가 있는 경우 개선된 출력으로부터 베이스 출력으로의 우수한 백오프(graceful back-off)를 허용한다.
예시적인 조합 디코더(2910)는 SEI 메시지에 대한 버퍼링 주기와 같은 베이스 디코더(2920) 파라미터에 의해 지정된 바와 같이 초기화될 수 있다. 개선 디코딩된 픽처 버퍼(2936)로부터의 출력 타이밍일 수도 있는 베이스 코딩된 픽처 버퍼(2922)로부터의 액세스 유닛의 제거 타이밍 및 베이스 디코딩된 픽처 버퍼(2928)로부터의 출력 타이밍은 픽처 타이밍 또는 등가 명세에서 지정될 수 있다. 특정 액세스 유닛과 관련된 모든 타이밍 정보는 액세스 유닛의 베이스 코딩된 픽처 버퍼(2922) 제거 시간 이전에 도달하도록 구성될 수 있다. 일반적으로 비트스트림을 생성하는 데 사용되는 모든 프레임 속도 및 클록이 비트스트림에서 시그널링된 값과 일치한다고 가정하지만 실제 시스템에서 이들 각각은 실제로 시그널링되거나 지정된 값으로부터 변할 수 있다.
예시적인 조합 디코더에 대한 추가 세부사항
이들 예에서는 반올림 오차가 전파될 수 없도록 실제 값으로 산술을 수행한다고 가정한다. 예를 들어, 액세스 유닛의 제거 직전 또는 직후의 베이스 코딩된 픽처 버퍼(2922)의 비트 수는 반드시 정수일 필요는 없을 수 있다. 이들 예에서 변수 tc는 클록 틱이라고 지칭되며 다음과 같이 정의될 수 있다: tc = num_units_in_tick / time_scale. 디코딩 순서에서 n번째 액세스 유닛을 액세스 유닛 n으로 언급하며, 제1 액세스 유닛은 액세스 유닛 0이다. 마찬가지로, 픽처 n은 액세스 유닛 n의 코딩된 픽처 또는 디코딩된 픽처인 것으로 말할 수 있다. 이러한 예시적인 세부사항은 앞서 설명된 바와 같이 타입 I 및 타입 II 비트스트림 모두에 적용될 수 있다.
베이스 코딩된 픽처 버퍼(2922)에서의 비트스트림 도달의 타이밍은 베이스 디코더(2920) 비트스트림 도달의 타이밍에 의해 결정될 수 있다. 개선 코딩된 픽처 버퍼(2932)에 대한 비트스트림 도달의 타이밍은 다음과 같이 제약될 수 있다: 모든 n에 대해 tbaf(n) < tlaf(n), 여기서 tbaf(n)은 개선 비트스트림에서 액세스 유닛 n의 최종 도달 시간이고, tlaf(n)은 베이스 비트스트림에서 액세스 유닛 n의 최종 도달 시간이다. 이는 개선 데이터가 동일한 픽처를 참조하는 베이스 데이터보다 늦게 도달할 수 없다는 것을 의미한다.
tbr(n)으로 표시된 베이스 코딩된 픽처 버퍼(2922)로부터의 코딩된 픽처 제거의 타이밍은 베이스 디코더(2920) 코딩된 픽처 제거의 타이밍에 의해 결정될 수 있다. tlr(n)으로 표시된 개선 코딩된 픽처 버퍼(2932)로부터 코딩된 픽처 제거의 타이밍은 베이스 액세스 유닛 n이 베이스 디코더(2920)에서 디코딩된 시간일 수 있다. 그러나, 디코딩은 베이스 디코더(2920)에서 순간적이기 때문에, 두 시간이 일치할 수 있고, 즉, tlr(n) = tbr(n)일 수 있다. 실질적으로 말하면, 베이스 디코더(2920)로부터의 디코딩된 픽처는 개선 코딩된 픽처 버퍼(2932)로부터의 제거를 트리거하고 따라서 개선된 픽처의 디코딩을 트리거하는 데 사용될 수 있다.
개선 디코딩된 픽처 버퍼(2936)는 프레젠테이션 시간에 출력되기를 기다리는 픽처 저장 버퍼를 포함한다. 개선 디코딩된 픽처 버퍼(2936)는 예시적인 조합된 디코더(2910)에 대한 주(예를 들어, 유일한) 디코딩된 픽처 버퍼로서 취해질 수 있고, 즉, 개선된 픽처는 예시적인 조합된 디코더(2910)의 주(예를 들어, 유일한) 출력으로 고려될 수 있다. 예를 들어, 기준 베이스 픽처를 보유하는 베이스 디코딩된 픽처 버퍼(2928)의 동작은 (예를 들어, 베이스 디코더(2920)와 관련된 비디오 코딩 표준에 기초하여) 베이스 디코더에 대한 알려진 명세에 의해 결정될 수 있다. 개선 디코딩된 픽처 버퍼(2936)로부터의 픽처의 제거는 출력 시간, 예를 들어 베이스 디코더(2920)에 대해 지정된 바와 같은 프레젠테이션 시간에 기초할 수 있다. 픽처 n은 베이스 디코더(2920)에 의해 결정된 출력 시간 to(n)에 개선 디코딩된 픽처 버퍼(2936)로부터 출력될 수 있다. 이는 전형적으로 "디코딩된 픽처 버퍼 출력 지연"을 기초로 한다. 이 지연 또는 등가 시그널링의 세부사항은 베이스 디코더(본 문서의 초점이 아님)에 대한 명세에 의해 정의될 수 있다.
예시적인 조합 디코더(2910)에 대한 예시적인 비트스트림은 위에서 명시된 신택스, 시멘틱스 및 제약을 준수할 수 있다. 코딩된 픽처 버퍼 오버플로우는 코딩된 픽처 버퍼의 총 비트 수가 코딩된 픽처 버퍼 크기보다 더 큰 것을 조건으로 지정될 수 있다. 코딩된 픽처 버퍼 언더플로우는 제거 시간이 액세스 유닛에 대한 최종 도달 시간 미만인 것을 조건으로 지정될 수 있다. 베이스 및 개선 코딩된 픽처 버퍼(2922, 2932)는 코딩된 픽처 버퍼 오버플로우 및 언더플로우 중 하나 이상을 방지하도록 구성될 수 있다. 임의의 디코딩된 픽처가 개선 디코딩된 픽처 버퍼(2936)에 추가된 직후, 개선 디코딩된 픽처 버퍼(2936)의 충만도는 개선 디코딩된 픽처 버퍼(2936) 크기보다 더 작거나 같도록 제약될 수 있다.
모든 참조 픽처는 베이스 디코딩 예측을 위해 필요할 때 (내부) 베이스 디코딩된 픽처 버퍼(2928)에서 때때로 이용가능할 수 있다. 각각의 픽처는 개선 디코딩된 픽처 버퍼(2936)에 전혀 저장되지 않거나 예시적인 조합 디코더(2910) 명세에 따라 개선 디코딩된 픽처 버퍼(2936)로부터 제거되지 않는 한, 그 개선 디코딩된 픽처 버퍼(2936) 출력 시간에 개선 디코딩된 픽처 버퍼(2936)에 존재할 것이다. 픽처의 출력 시간과 출력 순서에서 바로 뒤따르는 픽처의 출력 시간 사이의 차이는 비트스트림에서 시그널링될 수 있는 프로파일 및 레벨과 같은 동작 지점에 대한 예시적인 조합 디코더(2910)의 제약을 충족하도록 구성될 수 있다.
특정 경우에, 예시적인 조합 디코더는 VCL NAL 유닛에서 참조되는 모든 베이스 디코더 관련 파라미터 세트 및 적절한 버퍼링 주기 및 픽처 타이밍 메타데이터가 비트스트림에서(비-VCL NAL 유닛에 의해) 또는 외부 수단에 의해 적시에 디코더에 반송된다면, 현재 섹션에서 설명된 바를 준수하는 비트스트림을 성공적으로 디코딩할 수 있을 수 있다.
예시적인 조합 디코더는 정의된 출력 타이밍 및 출력 순서 요구 사항을 만족하도록 구성될 수 있다. 조합된 디코더 구현의 적합성을 검사하기 위해, 테스트 비트스트림은 스트림 스케줄러(2912)에 의해 베이스 디코더 및 개선 디코더 모두에 전달될 수 있다. 특정 경우에, 베이스 디코더가 알려진 명세에 따라 구성되는 경우, 개선 디코더가 테스트될 수 있다.
보충 개선 정보
이 섹션에서는 SEI(Supplemental Enhancement Information) 메시지 페이로드에 대한 예시적인 신택스 및 시멘틱스에 대한 일반적인 설명을 제공한다. 본 출원에 설명된 예에서, SEI 메시지는 예를 들어 디스플레이될 재구성된 비디오에 대한 컬러 및 광 레벨에 관련한 정보를 전달하는 데 사용될 수 있다.
SEI 메시지는 디코딩, 디스플레이 또는 다른 목적과 관련된 프로세스를 지원하는 데 사용될 수 있다. 그러나 디코딩 프로세스에 의해 루마 또는 크로마 샘플을 구성하기 위서는 SEI 메시지가 필요하지 않을 수 있다. 따라서, SEI 메시지의 사용은 증가된 기능을 가능하게 하는 선택적 변형으로 볼 수 있다. SEI 메시지 정보는 비트스트림 처리 및 출력 타이밍을 검사하는 데에도 사용될 수 있다. SEI 메시지는 본 출원에서 설명되지 않은 다른 수단에 의해 디코더(위의 조합된 디코더의 예를 포함함)에 반송될 수 있다. 비트스트림에 존재할 때 SEI 메시지는 위의 "프로세스 페이로드 - 전역 구성"이라는 명칭의 섹션에 설명된 및/또는 이 섹션에서 아래에 설명되어 있는 신택스 및 시멘틱스를 따를 수 있다. SEI 메시지의 콘텐츠가 본 출원에 설명된 예시적인 비트스트림 내의 존재 이외의 소정 수단에 의해 반송될 때, SEI 메시지의 콘텐츠의 표현은 이 섹션에서 명시된 신택스를 사용할 필요가 없다. 비트를 카운팅할 목적으로 비트스트림에 실제로 존재하는 적절한 비트만 카운팅될 수 있다.
SEI 페이로드 신택스
일반적 SEI 메시지 신택스의 예는 아래 테이블에 지정되어 있다. 신택스는 위의 섹션에 제공된 신택스에 대해 설명된 동일한 규약에 따라 설명된다.
Figure pct00164
위에 나타나 있는 바와 같이, SEI 메시지는 마스터링 디스플레이 컬러 볼륨에 대한 정보를 반송할 수 있다. 마스터링 디스플레이 컬러 볼륨 SEI 메시지 신택스는 아래 테이블에 설명된 바와 같을 수 있다:
Figure pct00165
SEI 메시지는 또한 콘텐츠 광 레벨과 관련된 정보를 반송할 수 있다.
콘텐츠 광 레벨 정보에 대한 예시적인 신택스는 아래 테이블에 지정되어 있다:
Figure pct00166
SEI 메시지 신택스는 또한 예비 정보와 관련된 부분을 가질 수 있다. 예비 SEI 메시지 신택스의 예가 아래에 설명되어 있다.
Figure pct00167
SEI 페이로드 시멘틱스
이 섹션은 이전에 위에서 설명한 "시멘틱스" 섹션의 규약에 따라 일부 일반적인 SEI 페이로드 시멘틱스를 설명한다. 이러한 "시멘틱스"는 위의 신택스에서 언급된 특정 변수의 의미 및 기능과 관련된 정보로 고려될 수 있다. 이전과 마찬가지로 변수 이름과 의미 및 기능의 세부사항은 비제한적이며 보다 일반적인 기능의 예로서 제공된다는 점에 유의해야 한다.
SEI 메시지를 사용하는 특정 구현에서 reserved_payload_extension_data는 비트스트림에 존재하지 않을 수 있다. 예시적인 디코더는 이 변수의 존재와 값을 무시하도록 구성될 수 있다. 존재하는 경우, reserved_payload_extension_data의 길이(비트 단위)는 8 * payloadSize - nEarlierBits - nPayloadZeroBits - 1과 같을 수 있으며, 여기서 nEarlierBits는 reserved_payload_extension_data 신택스 요소에 선행하는 sei_payload( ) 신택스 구조의 비트 수이고, nPayloadZeroBits는 sei_payload( ) 신택스 구조의 끝에서 payload_bit_equal_to_zero 신택스 요소의 수이다.
특정 예에서, payload_bit_equal_to_one는 1과 동일할 수 있고 payload_bit_equal_to_zero는 0과 동일할 수 있다.
각각의 SEI 메시지에 대한 시멘틱스 및 지속성 범위는 각각의 특정 SEI 메시지에 대한 시멘틱스 명세에 지정될 수 있다. 마스터링 디스플레이 컬러 볼륨 및 콘텐츠 광 레벨 정보 SEI 메시지에 대해, 지속성 범위는 SEI 메시지를 포함하는 CVS(코딩된 비디오 시퀀스)일 수 있다.
마스터링 디스플레이 컬러 볼륨 SEI 메시지
마스터링 디스플레이 컬러 볼륨 SEI 메시지는 관련 비디오 콘텐츠에 대한 마스터링 디스플레이로 고려되는 디스플레이의 컬러 볼륨 또는 색역(예를 들어, 원색, 백색 점 및 휘도 범위)- 예를 들어, 비디오 콘텐츠를 작성하는 동안 시청에 사용된 디스플레이의 컬러 볼륨 -을 식별하는 데 사용될 수 있다. 설명된 마스터링 디스플레이는 표시된 마스터링 컬러 볼륨을 사용하도록 구성된 3색 가산 디스플레이 시스템일 수 있다. 마스터링 디스플레이 컬러 볼륨 SEI 메시지는 표시된 값을 결정하는 데 사용되는 측정 방법 및 절차를 식별하거나 마스터링 환경에 대한 임의의 설명을 제공하지 않을 수 있다. 또한 설명된 마스터링 디스플레이의 컬러 볼륨과 다른 컬러 볼륨을 사용하는 디스플레이의 창의적 의도를 보전하기 위한 적절한 컬러 변환에 대한 정보를 제공하지 않을 수 있다. 이 SEI 메시지에서 반송된 정보는 그 내용이 본 출원에 참조로 통합되어 있는 영화 및 텔레비전 엔지니어 협회 표준 SMPTE ST 2086(2018)의 사용에 대응하는 목적에 적합할 수 있다.
마스터링 디스플레이 컬러 볼륨 SEI 메시지가 특정 계층의 코딩된 비디오 시퀀스의 임의의 픽처에 대해 존재할 때, 마스터링 디스플레이 컬러 볼륨 SEI 메시지는 코딩된 비디오 시퀀스의 제1 픽처에 대해 존재할 수 있다. 마스터링 디스플레이 컬러 볼륨 SEI 메시지는 현재 픽처로부터 코딩된 비디오 시퀀스의 종료시까지 디코딩 순서로 현재 계층에 대해 지속될 수 있다. 동일한 코딩된 비디오 시퀀스에 적용되는 모든 마스터링 디스플레이 컬러 볼륨 SEI 메시지는 동일한 콘텐츠를 가질 수 있다.
ISO 11664-1에 명시된 바와 같은 x의 CIE(International Commission on Illumination) 1931 정의(또한 ISO 11664-3 및 CIE 15 참조)에 따르면 변수 display_primaries_x[c]는 5 내지 37,000의 범위(경계값 포함)에 있을 때 마스터링 디스플레이의 원색 성분 c의 정규화된 x 색도 좌표를 0.00002 증분으로 지정하는 데 사용될 수 있다. display_primaries_x[c]가 5 내지 37,000의 범위(경계값 포함)가 아닐 때 마스터링 디스플레이의 원색 성분 c의 정규화된 x 색도 좌표는 알 수 없거나 지정되지 않거나 다른 수단으로 지정될 수 있다.
유사하게, 변수 display_primaries_y[c]는 5에서 42,000까지의 범위(경계값 포함)에 있을 때 ISO 11664-1에 지정된 바와 같은 y의 CIE 1931 정의(또한 ISO 11664-3 및 CIE 15 참조)에 따라 0.00002 증분으로 마스터링 디스플레이의 원색 성분 c의 정규화된 y 색도 좌표를 지정하는 데 사용될 수 있다. display_primaries_y[c]가 5 내지 42,000의 범위(경계값 포함)가 아닐 때 마스터링 디스플레이의 원색 성분 c의 정규화된 y 색도 좌표는 알 수 없거나 지정되지 않거나 다른 수단으로 지정될 수 있다.
적색, 녹색 및 청색 원색을 사용하는 마스터링 디스플레이를 설명하기 위해, 0과 같은 인덱스 값 c는 녹색 원색에 대응하여야 하고, 1과 같은 c는 청색 원색에 대응하여야 하고, 2와 같은 c는 적색 원색에 대응해야 하는 것으로 제안된다.
변수 white_point_x는 5에서 37,000까지의 범위(경계값 포함)에 있을 때 ISO 11664-1에 지정된 바와 같은 x의 CIE 1931 정의(또한 ISO 11664-3 및 CIE 15 참조)에 따라 정규화된 0.00002 증분으로 마스터링 디스플레이의 백색 점의 정규화된 x 색도 좌표를 지정하는 데 사용될 수 있다. white_point_x가 5에서 37,000까지의 범위(경계값 포함)에 있지 않을 때, 마스터링 디스플레이의 백색 점의 정규화된 x 색도 좌표는 알 수 없는 것으로 표시되거나, 지정되지 않거나 또는 다른 수단에 의해 지정될 수 있다.
변수 white_point_y는 5에서 42,000까지의 범위(경계값 포함)에 있을 때 ISO 11664-1에 지정된 바와 같은 y의 CIE 1931 정의(또한 ISO 11664-3 및 CIE 15 참조)에 따라 정규화된 0.00002 증분으로 마스터링 디스플레이의 백색 점의 정규화된 y 색도 좌표를 지정하는 데 사용될 수 있다. white_point_y가 5에서 42,000까지의 범위(경계값 포함)에 있지 않을 때, 마스터링 디스플레이의 백색 점의 정규화된 y 색도 좌표는 알 수 없는 것으로 표시되거나, 지정되지 않거나 또는 다른 수단에 의해 지정될 수 있다.
SMPTE ST 2086(2018)은 마스터링 디스플레이 원색 및 백색 점에 대한 정규화된 x 및 y 색도 좌표 값이 소수점 네자리로 표현되도록 지정한다. 이는 5의 배수인 신택스 요소 display_primaries_x[c], display_primaries_y[c], white_point_x 및 white_point_y의 값과 호환된다. 본 출원에서 설명된 범위 외부의 값을 사용하는 예는 표준 ANSI/CTA 861-G(2016)이며, 이는 백색 점에 대해 (0,0)의 정규화된(x, y) 색도 좌표 값을 사용하여 백색 점 색도를 알 수 없음을 표시한다.
max_display_mastering_luminance 변수는 50,000에서 100,000,000 범위에 있을 때 마스터링 디스플레이의 공칭 최대 디스플레이 휘도를 제곱 미터당 0.0001 칸델라 단위로 지정할 수 있다. max_display_mastering_luminance가 50,000 내지 100,000,000의 범위에 있지 않을 때, 마스터링 디스플레이의 공칭 최대 디스플레이 휘도는 알 수 없거나, 지정되지 않거나, 다른 수단에 의해 지정되는 것으로 표시될 수 있다. SMPTE ST 2086(2018)은 마스터링 디스플레이의 공칭 최대 디스플레이 휘도가 제곱 미터당 1 칸델라의 배수로 지정되도록 지정한다. 이는 10,000의 배수인 신택스 요소 max_display_mastering_luminance의 값과 호환적이다. 역시, 본 출원에서 설명된 범위 외부의 값을 사용하는 예는 ANSI/CTA 861-G(2016)에 지정된 것들이며, 이는 마스터링 디스플레이의 공칭 최대 디스플레이 휘도에 대해 값 0을 사용하여 마스터링 디스플레이의 공칭 최대 디스플레이 휘도가 알 수 없다는 것을 나타낸다.
min_display_mastering_luminance 변수는 1에서 50,000 범위에 있을 때 제곱 미터당 0.0001 칸델라 단위로 마스터링 디스플레이의 공칭 최소 디스플레이 휘도를 지정하는 데 사용할 수 있다. min_display_mastering_luminance가 1 내지 50,000의 범위에 있지 않을 때, 마스터링 디스플레이의 공칭 최대 디스플레이 휘도는 알 수 없거나, 지정되지 않거나 또는 다른 수단에 의해 지정되는 것으로 표시될 수 있다. max_display_mastering_luminance가 50,000과 같을 때, min_display_mastering_luminance는 50,000과 같지 않도록 제한될 수 있다. SMPTE ST 2086(2018)은 마스터링 디스플레이의 공칭 최소 디스플레이 휘도가 여기에 설명된 범위와 호환되는 제곱 미터당 0.0001 칸델라의 배수로 지정되어야 한다고 지정한다. 본 출원에서 설명된 범위 외부의 값을 사용하는 하나의 예는 ANSI/CTA 861-G(2016)에 설명된 것들이며, 이는 마스터링 디스플레이의 공칭 최소 디스플레이 휘도에 대해 값 0을 사용하여 마스터링 디스플레이의 공칭 최소 디스플레이 휘도가 알 수 없다는 것을 나타낸다. 시멘틱스가 여기에 지정된 범위 외부의 값을 잠재적으로 사용하는 또 다른 예는 SMPTE ST 2086(2018)이며, 이는 지정된 범위 외부의 값을 사용하여 마스터링 디스플레이의 블랙 레벨 및 대비가 PLUGE(picture line-up generation equipment)를 사용하여 조절될 수 있다는 것을 나타낼 수 있는 것을 나타낸다. 최소 휘도에서, 마스터링 디스플레이는 백색 점과 동일한 공칭 색도를 갖는 것으로 고려될 수 있다.
콘텐츠 광 레벨 정보 SEI 메시지 시멘틱스
콘텐츠 광 레벨 정보 SEI 메시지는 코딩된 비디오 시퀀스의 픽처의 공칭 목표 밝기 광 레벨에 대한 상한을 식별하는 데 사용될 수 있다. 이 SEI 메시지에서 반송된 정보는 디스플레이 디바이스에 대한 출력 비디오를 구성하는 데 사용될 수 있다.
콘텐츠 광 레벨 정보 SEI 메시지의 시멘틱스는 제곱 미터당 칸델라 단위로 코딩된 비디오 시퀀스의 픽처에 대한 선형 광 도메인에서 적색, 녹색 및 청색 원색 강도의 4:4:4 표현에서 샘플 값과 관련하여 정의될 수 있다. 그러나, 이 SEI 메시지 자체는 디코딩된 픽처의 샘플 값을 픽처에 대한 선형 광 도메인에서 적색, 녹색 및 청색 원색 강도의 4:4:4 표현에서 샘플로 변환하기 위한 변환 프로세스를 식별하지 않을 수 있다. colour_primaries, transfer_characteristics, matrix_coeffs 및 크로마 재샘플링 필터 힌트 SEI 메시지와 같은 다른 신택스 요소는 존재하는 경우 이러한 변환 프로세스의 식별을 지원할 수 있다.
ER, EG 및 EB로 표시되는 대응하는 4:4:4 표현에서 루마 샘플의 위치에 대한 선형 광 도메인에서 적색, 녹색 및 청색 원색 강도가 주어지면 최대 성분 강도는 EMax = Max(ER, Max(EG, EB))로서 정의될 수 있다. 이때, 자극에 대응하는 광 레벨은 적색, 녹색 및 청색에 대한 모든 3가지 원색 강도에 대해 EMax의 동일한 진폭에 대응하는 CIE 1931 휘도로 정의될 수 있다(피크 백색과 관련된 공칭 휘도 레벨을 반영하는 적절한 스케일링을 동반- 예를 들어, 일반적으로 transfer_characteristics가 16과 같을 때 피크 백색을 제곱 미터당 10,000 칸델라와 관련시키도록 스케일링됨). ER, EG 및 EB에서 대응하는 CIE 1931 휘도로 직접 변환하기 보다는 각각의 샘플 위치에서 최대값 EMax가 이 정의에서 사용되기 때문에, 한 위치의 CIE 1931 휘도는 경우에 따라 표시된 광 레벨 미만일 수 있다. 이 상황은 예를 들어 ER 및 EG가 매우 작고 EB가 클 때 발생하며, 이 경우 표시된 광 레벨은 (ER, EG, EB) 트리플릿과 관련된 실제 CIE 1931 휘도보다 훨씬 더 크다. 동일한 코딩된 비디오 시퀀스에 적용되는 모든 콘텐츠 광 레벨 정보 SEI 메시지는 동일한 콘텐츠를 가질 수 있다.
varimax_content_light_level 변수는 0과 같지 않을 때 선형 조명에서 제곱 미터당 칸델라 단위로 코딩된 비디오 시퀀스의 픽처에 대한 적색, 녹색 및 청색 원색 강도(선형 광 도메인에서)의 4:4:4 표현에서 모든 개별 샘플 사이의 최대 조명 레벨의 상한을 나타내는 데 사용될 수 있다. 0과 같을 때, 어떠한 이러한 상한도 max_content_light_level에 의해 표시될 수 없다.
max_pic_average_light_level 변수는 0과 동일하지 않을 때 제곱 미터당 칸델라 단위로 CLVS의 임의의 개별 픽처에 대해 적색, 녹색 및 청색 원색 강도(선형 광 도메인에서)의 4:4:4 표현에서 샘플 사이의 최대 평균 조명 레벨의 상한을 나타내는 데 사용될 수 있다. 0과 같을 때, 어떠한 이러한 상한도 max_pic_average_light_level에 의해 표시될 수 없다. 더 긴 크로핑된 디코딩된 픽처 내에서 넓은 픽처 형상비를 갖는 비디오 콘텐츠의 "레터박스" 인코딩에 대한 것과 같이 시각적으로 관련된 영역이 전체 크로핑된 디코딩된 픽처에 대응하지 않는 경우, 표시된 평균은 시각적으로 관련된 영역인 내에서만 수행될 수 있다.
예비 SEI 메시지 시멘틱스
예비 SEI 메시지는 향후 하위 호환 용도를 위해 예비된 데이터로 구성된다. 디코더는 예를 들어 예비 SEI 메시지에 포함된 정보를 사용할 수 있는 기능을 가진 디코더가 제공될 때까지 예비 SEI 메시지를 무시하도록 구성될 수 있다.
비디오 사용성 정보
본 섹션은 VUI(Video Usability Information) 파라미터 세트에 대한 예시적인 신택스 및 시멘틱스에 대한 간단한 설명을 제공한다. 이러한 파라미터는 설명된 예의 선택적 변형에서 제공될 수 있다. 예를 들어, VUI 파라미터는 본 출원에 설명된 디코딩 프로세스에 의해 루마 또는 크로마 샘플을 구성하는 데 필요하지 않을 수 있고 예시적인 디코더는 동작하기 위해 VUI 파라미터를 처리하는 데 필요하지 않을 수 있다. 일부 VUI 파라미터는 비트스트림 및 출력 타이밍을 검사하는 데 사용할 수 있다. VUI 파라미터는 이 문서에서 설명하지 않은 다른 수단을 통해 디코더(조합 디코더 포함)로 반송될 수 있다. 비트스트림에 존재할 때 VUI 파라미터는 아래에 설명된 신택스 및 시멘틱스를 따를 수 있다. VUI 파라미터의 콘텐츠가 비트스트림 내의 존재 이외의 일부 수단에 의해 애플리케이션에 대해 반송될 때 VUI 파라미터의 콘텐츠의 표현은 다른 신택스를 사용할 수 있다. 비트를 카운팅할 목적으로 비트스트림에 실제로 존재하는 적절한 비트만 카운팅될 수 있다.
VUI 파라미터 신택스
VUI 파라미터의 예시적인 신택스는 아래 테이블에 설명되어 있다. 위의 예의 규약이 사용된다.
Figure pct00168
Figure pct00169
VUI 파라미터 시멘틱스
이제 일부 예시적인 VUI 파라미터 시멘틱스에 대한 간단한 설명이 제공될 것이다.
변수 aspect_ratio_info_present_flag는 1과 같으면 aspect_ratio_idc가 존재함을 지정하기 위해 사용될 수 있다. aspect_ratio_info_present_flag가 0과 같으면 이는 aspect_ratio_idc가 존재하지 않음을 나타낼 수 있다.
변수 aspect_ratio_idc, sar_width 및 sar_height는 참조로 본 출원에 통합되어 있는 ITU-T H.273 | ISO/IEC 23091-2의 섹션 8.6에 지정된 바와 같은 SampleAspectRatio, SarWidth 및 SarHeight 각각의 의미를 가질 것이다.
변수 overscan_info_present_flag는 1과 같으면 overscan_appropriate_flag가 존재함을 나타내기 위해 사용될 수 있다. overscan_info_present_flag가 0과 같거나 존재하지 않는 경우, 비디오 신호에 대한 선호 디스플레이 방법은 지정되지 않은 것으로 고려될 수 있다.
변수 overscan_appropriate_flag는 1과 같으면 크로핑된 디코딩된 픽처 출력이 오버스캔을 사용한 디스플레이에 적합하다는 것을 나타내는 데 사용될 수 있다. overscan_appropriate_flag가 0과 같으면, 이는 크로핑된 디코딩된 픽처 출력이 오버스캔을 사용하여 디스플레이되지 않도록 크로핑된 디코딩된 픽처 출력이 픽처의 크로핑 직사각형의 에지까지 전체 영역에서 시각적으로 중요한 정보를 포함한다는 것을 나타낼 수 있다. 대신, 이들은 디스플레이 영역과 크로핑 직사각형 사이의 정확한 일치를 사용하거나 언더스캔을 사용하는 것 중 어느 하나로 디스플레이해야 한다. 예를 들어, 변수 overscan_appropriate_flag에 대한 1의 값은 엔터테인먼트 텔레비전 프로그래밍 또는 화상 회의에서 사람들의 라이브 뷰에 사용될 수 있고 overscan_appropriate_flag에 대한 0의 값은 컴퓨터 화면 캡처 또는 보안 카메라 콘텐츠에 사용될 수 있다.
video_signal_type_present_flag 변수는 1과 같으면 video_format, video_full_range_flag 및 colour_description_present_flag 변수가 존재한다는 것을 지정하는 데 사용될 수 있다. video_signal_type_present_flag가 0과 같으면, 이는 video_format, video_full_range_flag 및 colour_description_present_flag 변수가 존재하지 않음을 지정할 수 있다.
변수 video_format는 예를 들어 본 출원에 설명된 예에 따라 코딩되기 전의 픽처의 원래 비디오 형식을 나타내기 위해 사용될 수 있다. 예시적인 비디오 형식이 아래 테이블에 설명되어 있다. 특정 경우에, video_format가 존재하지 않는 경우, video_format 값은 5와 동일한 것으로 추론될 수 있다.
Figure pct00170
video_full_range_flag 변수는 E'Y, E'PB 및 E'PR 또는 E'R, E'G 및 E'B 아날로그 성분 신호로부터 유도된 루마 및 크로마 신호의 블랙 레벨 및 범위를 나타내는 데 사용될 수 있다. video_full_range_flag 신택스 요소가 존재하지 않는 경우, video_full_range_flag의 값은 0과 동일한 것으로 추론될 수 있다.
colour_description_present_flag 변수가 1과 같으면 colour_primaries, transfer_characteristics 및 matrix_coefficients 변수가 존재함을 지정할 수 있다. colour_description_present_flag가 0과 같은 경우, colour_primaries, transfer_characteristics 및 matrix_coefficients 변수가 존재하지 않는 것으로 가정될 수 있다.
colour_primaries 변수는 ITU-T H.273 | ISO/IEC 23091-2의 섹션 8.1에 지정된 바와 같은 ColourPrimaries의 의미를 가질 수 있다. 변수 transfer_characteristics는 ITU-T H.273 | ISO/IEC 23091-2의 섹션 8.2에 지정된 바와 같은 TransferCharacteristics의 의미를 가질 수 있다. 변수 matrix_coefficients는 ITU-T H.273 | ISO/IEC 23091-2의 섹션 8.3에 지정된 바와 같은 MatrixCoefficients의 의미를 가질 수 있다.
변수 chroma_loc_info_present_flag는 1과 같으면 변수 chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field가 존재함을 지정할 수 있다. chroma_loc_info_present_flag가 0과 같으면, 이는 변수 chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field가 존재하지 않음을 지정할 수 있다. chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field 변수는 도 30에 도시된 바와 같이 상단 필드와 하단 필드에 대한 크로마 샘플의 위치를 지정한다. chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field의 값은 0 내지 5의 범위(경계값 포함)에 있을 수 있다. chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field가 존재하지 않는 경우, chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field의 값은 0과 동일한 것으로 추론될 수 있다. 프로그레시브 소스 자료를 코딩할 때 chroma_sample_loc_type_top_field와 chroma_sample_loc_type_bottom_field는 동일한 값을 가질 수 있다. chroma_sample_loc_type_top_field 및 chroma_sample_loc_type_bottom_field의 함수로서 상단 및 하단 필드에 대한 크로마 샘플의 위치는 도 30에 도시되어 있다.
변수 timing_info_present_flag는 1과 같으면 변수 num_units_in_tick, time_scale 및 fixed_pic_rate_flag가 비트스트림에 존재함을 지정할 수 있다. timing_info_present_flag가 0과 같으면, 이는 num_units_in_tick, time_scale 및 fixed_pic_rate_flag가 비트스트림에 존재하지 않음을 지정할 수 있다.
변수 num_units_in_tick는 클록 틱 카운터의 1 증분(클록 틱이라 지칭됨)에 대응하는 주파수 time_scale Hz에서 동작하는 클록의 시간 유닛의 수를 나타낼 수 있다. num_units_in_tick 변수는 0보다 크다. 클록 틱은 코딩된 데이터에서 표현될 수 있는 최소 시간 간격이다. 예를 들어, 비디오 신호의 클록 주파수가 60,000 ÷ 1001 Hz일 때, time_scale는 60,000과 같을 수 있고 num_units_in_tick는 1001과 같을 수 있다(조합 디코더 섹션의 예에 의해 표시된 바와 같음). time_scale 변수는 1초에 경과하는 시간 유닛의 수를 나타내는 데 사용할 수 있다. 예를 들어, 27MHz 클록을 사용하여 시간을 측정하는 시간 좌표계는 27,000,000의 time_scale을 갖는다. 역시, time_scale는 0보다 크도록 제약될 수 있다.
변수 fixed_pic_rate_flag가 1과 같으면 출력 순서에서 임의의 2개의 연속 픽처의 디코더 출력 시간 사이의 시간적 거리가 아래에 설명된 바와 같이 제약됨을 나타내기 위해 사용될 수 있다(앞서 설명된 조합 디코더의 예를 포함함). fixed_pic_rate_flag가 0과 같으면 출력 순서에서 임의의 2개의 연속 픽처의 디코더 출력 시간 사이의 시간적 거리에 이러한 제약이 적용되지 않음을 나타낼 수 있다. 픽처 사이의 시간적 거리를 볼 때, n이 출력되는 n번째 픽처(출력 순서)를 나타내고, 픽처 n은 출력되는 비트스트림(출력 순서)의 최종 픽처가 아닌 각각의 픽처 n에 대해, △tfi,dpb(n)의 값은 △tfi,dpb(n) = △to,dpb(n) χ DeltaTfiDivisor로 지정될 수 있다. 픽처 n을 포함하는 코딩된 비디오 시퀀스에 대해 fixed_pic_rate_flag가 1과 같을 때, △tfi,dpb(n)에 대해 계산된 값은, 다음 픽처 nn에 대해 다음의 조건 중 어느 하나 또는 양자 모두가 참일 때, 위의 예시적인 조합된 디코더에 대한 섹션에서 지정된 바와 같이 tc와 같을 수 있다(픽처 n을 포함하는 코딩된 비디오 시퀀스에 대해 tc의 값을 사용함): 1) 첫 번째 경우, 픽처 nn이 픽처 n과 동일한 코딩된 비디오 시퀀스에 있음; 및 2) 두 번째 경우, 픽처 nn이 다른 코딩된 비디오 시퀀스에 있고 fixed_pic_rate_flag가 픽처 nn을 포함하는 코딩된 비디오 시퀀스에서 1과 같으며, num_units_in_tick χ time_scale의 값이 양자 모두의 코딩된 비디오 시퀀스에 대해 동일함.
변수 bitstream_restriction_flag는 1과 같으면 코딩된 비디오 시퀀스 비트스트림 제한 파라미터의 세트가 존재한다는 것을 지정하는 데 사용될 수 있다. 코딩된 비디오 시퀀스 비트스트림 제한 파라미터의 예는 아래에 설명되어 있다. bitstream_restriction_flag가 0과 같으면, 이는 코딩된 비디오 시퀀스 비트스트림 제한 파라미터의 동일한 세트가 존재하지 않음을 지정할 수 있다.
코딩된 비디오 시퀀스 비트스트림 제한 파라미터의 하나의 예는 max_bytes_per_pic_denom이다. 이는 코딩된 비디오 시퀀스의 임의의 코딩된 픽처와 관련된 VCL NAL 유닛의 크기의 합이 초과되어서는 안 되는 바이트 수를 나타낼 수 있다. NAL 유닛 스트림에서 픽처를 나타내는 바이트 수는 이러한 목적을 위해 픽처에 대한 VCL NAL 유닛 데이터의 총 바이트 수(즉, VCL NAL 유닛에 대한 NumBytesInNALunit 변수의 총계)로서 지정될 수 있다. max_bytes_per_pic_denom의 값은 0에서 16까지의 범위(경계값 포함)에 있을 수 있다. max_bytes_per_pic_denom에 따라 다수의 제한이 있을 수 있다. max_bytes_per_pic_denom이 0과 같으면 어떠한 한계도 표시되지 않을 수 있다. 그렇지 않으면(즉, max_bytes_per_pic_denom이 0과 같지 않을 때), 코딩된 픽처는 코딩된 비디오 시퀀스에서 다음 바이트 수보다 많게 표현되지 않는다: (PicSizeInMbs * RawMbBits) χ (8 * max_bytes_per_pic_denom). 특정 예에서, max_bytes_per_pic_denom 신택스 요소가 존재하지 않을 때, max_bytes_per_pic_denom의 값은 2와 동일한 것으로 추론될 수 있다.
코딩된 비디오 시퀀스 비트스트림 제한 파라미터의 다른 예는 max_bits_per_mb_denom이다. 이는 코딩된 비디오 시퀀스의 임의의 픽처에서 임의의 매크로블록에 대한 macroblock_layer( ) 데이터의 코딩된 비트의 최대 수를 표시하는 데 사용될 수 있다. max_bits_per_mb_denom의 값은 0에서 16까지의 범위(경계값 포함)에 있을 수 있다. max_bytes_per_mb_denom에 따라 다수의 제한이 있을 수 있다. max_bits_per_mb_denom이 0과 같은 경우 어떠한 한계도 지정되지 않을 수 있다. 그렇지 않으면(즉, max_bits_per_mb_denom이 0과 같지 않은 경우), 코딩된 macroblock_layer( )는 비트스트림에서 다음 비트 수보다 많게 표현될 수 없다: (128 + RawMbBits) χ max_bits_per_mb_denom. entropy_coding_mode_flag에 따라 macroblock_layer( ) 데이터의 비트는 다음과 같이 카운팅될 수 있다: entropy_coding_mode_flag가 0과 같으면, macroblock_layer( ) 데이터의 비트 수는 매크로블록에 대한 macroblock_layer( ) 신택스 구조의 비트 수에 의해 주어질 수 있으며; 그렇지 않으면(즉, entropy_coding_mode_flag가 1과 같을 때), 매크로블록에 대한 macroblock_layer( ) 데이터의 비트 수는 매크로블록과 관련된 macroblock_layer( )를 파싱할 때 read_bits(1)가 호출된 횟수(예를 들어, 위의 엔트로피 코딩 예에서 정의됨)로 주어질 수 있다. max_bits_per_mb_denom이 존재하지 않는 경우, 이는 1과 동일한 것으로 추론될 수 있다.
예시적인 코딩된 비디오 시퀀스 비트스트림 제한 파라미터 log2_max_mv_length_horizontal 및 log2_max_mv_length_vertical은 코딩된 비디오 시퀀스의 모든 픽처에 대해 ¼ 루마 샘플 유닛으로 디코딩된 수평 및 수직 모션 벡터 성분의 최대 절대값을 으로 표시하기 위해 각각 사용될 수 있다. n의 값은 모션 벡터 성분의 어떠한 값도 ¼ 루마 샘플 변위의 단위로 -2n 내지 2n - 1의 범위(경계값 포함)를 초과하지 않는다는 것을 주장할 수 있다. log2_max_mv_length_horizontal의 값은 0에서 16까지의 범위(경계값 포함)에 있을 수 있다. log2_max_mv_length_vertical의 값은 0에서 16까지의 범위(경계값 포함)에 있을 수 있다. log2_max_mv_length_horizontal이 존재하지 않는 경우, log2_max_mv_length_horizontal 및 log2_max_mv_length_vertical의 값은 16과 동일한 것으로 추론될 수 있다. 특정 예에서, 디코딩된 수직 또는 수평 모션 벡터 성분의 최대 절대값은 또한 위의 예에서 설명된 바와 같이 프로파일 및 레벨 한계에 의해 제약될 수 있다.
변수 num_reorder_pics는 디코딩 순서에서 코딩된 비디오 시퀀스에서 임의의 프레임, 상보적 필드 쌍 또는 쌍이 아닌 필드에 선행하고, 출력 순서로 그를 뒤따르는 프레임, 상보적 필드 쌍 또는 쌍이 아닌 필드의 최대 수를 나타내는 데 사용될 수 있다. num_reorder_pics의 값은 0에서 max_dec_pic_buffering까지의 범위(경계값 포함)에 있을 수 있다. num_reorder_pics 신택스 요소가 존재하지 않는 경우, num_reorder_pics 값의 값은 max_dec_pic_buffering와 동일한 것으로 추론될 수 있다. max_dec_pic_buffering 변수는 디코딩된 픽처 버퍼(예를 들어, 도 29b의 2936)의 필요한 크기를 픽처 저장 버퍼의 단위로 지정하는 데 사용될 수 있다. 코딩된 비디오 시퀀스는 픽처 타이밍 SEI 메시지의 dpb_output_delay에 의해 지정된 출력 시간에서 디코딩된 픽처의 출력을 가능하게 하기 위해 Max(1, max_dec_pic_buffering) 픽처 저장 버퍼를 초과하는 크기를 갖는 디코딩된 픽처 버퍼를 필요로 하지 않을 수 있다. max_dec_pic_buffering의 값은 num_ref_pics 내지 MaxDpbSize(앞서 설명된 바와 같은 프로파일 및/또는 레벨에 지정됨)의 범위(경계값 포함)에 있을 수 있다. max_dec_pic_buffering 신택스 요소가 존재하지 않는 경우, max_dec_pic_buffering의 값은 MaxDpbSize와 동일한 것으로 추론될 수 있다.
예시적인 진술
다음의 진술은 본 출원에 설명되고 예시된 본 발명의 바람직한 또는 예시적인 양태를 설명한다.
인코딩된 스트림이 입력 비디오를 재구성하기 위해 조합될 수 있도록, 입력 비디오를 복수의 인코딩된 스트림으로 인코딩하는 방법은 전체 해상도 입력 비디오를 수신하는 단계; 다운샘플링된 비디오를 생성하기 위해 전체 해상도 입력 비디오를 다운샘플링하는 단계; 베이스 인코딩된 스트림을 생성하기 위해 제1 코덱을 사용하여 다운샘플링된 비디오의 인코딩을 지시하는 단계; 재구성된 비디오를 생성하기 위해 인코딩된 비디오로부터 비디오를 재구성하는 단계; 재구성된 비디오를 입력 비디오와 비교하는 단계; 및 비교에 기초하여 하나 이상의 추가 인코딩된 스트림을 생성하는 단계를 포함할 수 있다.
재구성된 비디오와 비교되는 입력 비디오는 다운샘플링된 비디오일 수 있다. 예시적인 방법에 따르면, 재구성된 비디오를 입력 비디오와 비교하는 단계는 재구성된 비디오를 다운샘플링된 비디오와 비교하여 제1 잔차 세트를 생성하는 단계를 포함하고, 하나 이상의 추가 인코딩된 스트림을 생성하는 단계는 제1 잔차 세트를 인코딩하여 제1 레벨 인코딩된 스트림을 생성하는 단계를 포함한다. 재구성된 비디오와 비교한 입력 비디오는 전체 해상도 입력 비디오일 수 있으며, 재구성된 비디오는 업샘플링될 수 있다. 업샘플링은 신경망 업샘플러를 적용하는 것을 포함할 수 있다. 신경망 업샘플러는 본 출원의 임의의 예에서 설명된 바와 같이 적용될 수 있다. 신경망 업샘플러는 2-계층 컨볼루션 신경망을 포함할 수 있다. 업샘플러는 2개의 컨볼루션 신경망 계층 사이의 비선형성을 포함할 수 있다. 컨볼루션 신경망은 대응하는 재구성된 비디오가 주어지면 전체 해상도 입력 비디오를 예측하도록 훈련될 수 있다. 신경망 업샘플러는 커널 가중치 및 바이어스 세트를 나타내는 파라미터 세트에 의해 파라미터화될 수 있다.
예시적인 방법에 따르면, 재구성된 비디오를 입력 비디오와 비교하는 단계는 업샘플링된 재구성된 비디오를 생성하기 위해 재구성된 비디오를 업샘플링하는 단계; 및 업샘플링된 재구성된 비디오를 전체 해상도 입력 비디오와 비교하여 제2 잔차 세트를 생성하는 단계를 포함할 수 있고, 하나 이상의 추가 인코딩된 스트림을 생성하는 단계는 제2 차이를 인코딩하여 제2 레벨 인코딩된 스트림을 생성하는 단계를 포함한다.
일 예에서, 방법은 앞서 정의된 예시적인 방법에 따라 베이스 인코딩된 스트림, 제1 레벨 인코딩된 스트림 및 제2 레벨 인코딩된 스트림을 생성할 수 있다. 제1 레벨 인코딩된 스트림 및 제2 레벨 인코딩된 스트림 각각은 인코딩된 베이스 스트림을 개선시키기 위해 디코더에 의해 사용되는 개선 데이터를 포함할 수 있다.
예시적인 방법에 따르면, 제1 잔차 세트를 인코딩하는 단계는 계수 세트를 생성하기 위해 잔차 세트에 변환을 적용하는 단계; 양자화된 계수 세트를 생성하기 위해 양자화 연산을 계수에 적용하는 단계; 및 양자화된 계수에 인코딩 동작을 적용하는 단계를 포함할 수 있다. 변환은 예를 들어 이산 코사인 변환 또는 웨이블릿 변환일 수 있다. 대안적인 예에서, 변환은 요소의 블록을 방향 성분으로 분해하는 작은 변환(예를 들어, 2x2 커널 또는 4x4 커널을 사용함)일 수 있다. 예를 들어, 2x2 커널은 아다마르 변환일 수 있다. 변환에 대한 더 자세한 내용은 예를 들어 본 출원에 참조로 포함된 특허 출원 PCT/EP2013/059847 또는 PCT/GB2017/052632에서 찾을 수 있다. 추가적인 예에서, 인코더는 예를 들어 2x2 커널과 4x4 커널 사이에서 사용될 상이한 변환 사이에서 선택할 수 있다. 이는 잔차를 인코딩하는 방식의 추가적인 유연성을 가능하게 한다. 선택은 변환할 데이터의 분석에 기초할 수 있다.
양자화는 예를 들어 선형 양자화일 수 있다. 선형 양자화기는 가변 크기의 데드 존을 사용할 수 있다. 인코딩 동작은 예를 들어 엔트로피 인코더일 수 있고 런-렝스 인코딩 및/또는 허프만/프리픽스 인코딩을 포함할 수 있다.
예시적인 방법에 따르면, 제2 잔차 세트를 인코딩하는 단계는 계수 세트를 생성하기 위해 제2 잔차 세트에 변환을 적용하는 단계; 양자화된 계수 세트를 생성하기 위해 양자화 연산을 계수에 적용하는 단계; 및 양자화된 계수에 인코딩 동작을 적용하는 단계를 포함할 수 있다. 역시, 변환은 예를 들어 이산 코사인 변환 또는 웨이블릿 변환일 수 있다. 대안적인 예에서, 변환은 요소의 블록을 방향 성분으로 분해하는 작은 변환(예를 들어, 2x2 커널 또는 4x4 커널을 사용함)일 수 있다. 예를 들어, 2x2 커널은 아다마르 변환일 수 있다. 변환에 대한 더 자세한 내용은 예를 들어 본 출원에 참조로 포함된 특허 출원 PCT/EP2013/059847 또는 PCT/GB2017/052632에서 찾을 수 있다. 추가적인 예에서, 인코더는 예를 들어 2x2 커널과 4x4 커널 사이에서 사용될 상이한 변환 사이에서 선택할 수 있다. 이는 잔차를 인코딩하는 방식의 추가적인 유연성을 가능하게 한다. 선택은 변환할 데이터의 분석에 기초할 수 있다.
제1 잔차 세트 및 제2 잔차 세트는 그에 적용된 상이한 변환을 가질 수 있고 선택은 미리 결정되거나 프로세스 동안 선택될 수 있다. 사용된 변환은 헤더에서 시그널링될 수 있다. 역시, 양자화는 예를 들어 선형 양자화일 수 있다. 선형 양자화기는 가변 크기의 데드 존을 사용할 수 있다. 인코딩 동작은 예를 들어 엔트로피 인코더일 수 있고 런-렝스 인코딩 및/또는 허프만/프리픽스 인코딩을 포함할 수 있다.
잔차는 두 비디오 또는 프레임 사이의 차이일 수 있다.
제1 잔차 세트를 인코딩하는 단계는 제1 잔차 세트의 사전 분석에 기초하여 제1 잔차 세트를 순위화하는 단계; 및 변환 및 인코딩될 잔차의 서브세트를 선택하는 단계를 포함할 수 있다. 이는 잔차 필터링의 한 형태로 볼 수 있으며, 추가 처리를 위해 잔차의 서브세트를 선택하기 위해 다른 일반적인 필터링 접근법이 적용될 수 있다. 일 예에서, 방법은 제1 잔차 세트를 분석하고, 분석에 기초하여 다음 단계를 수행하거나 수행하지 않는 것을 포함한다: 제1 잔차 세트를 순위화하는 단계; 및 변환 및 인코딩될 잔차의 서브세트를 선택하는 단계. 일 예에서, 방법은 제1 잔차 세트를 분석하는 단계; 제1 잔차 세트를 순위화하는 단계; 및 순위화 및/또는 선택 단계가 분석에 기초하여 차등적으로 수행되도록 변환 및 인코딩될 잔차의 서브세트를 선택하는 단계를 포함한다. 예시적인 방법에 따르면, 변환을 적용하는 단계는 잔차의 선택된 서브세트에 대해 수행된다.
제2 잔차 세트를 인코딩하는 단계는 또한 제2 잔차 세트의 사전 분석에 기초하여 제2 잔차 세트를 순위화하는 단계; 및 변환 및 인코딩될 잔차의 서브세트를 선택하는 단계를 포함할 수 있다. 이는 역시 잔차 필터링의 한 형태로 볼 수 있으며, 추가 처리를 위해 잔차의 서브세트를 선택하기 위해 다른 일반적인 필터링 접근법이 적용될 수 있다. 일 예에서, 방법은 제2 잔차 세트를 분석하고, 분석에 기초하여 다음 단계를 수행하거나 수행하지 않는 것을 포함한다: 제2 잔차 세트를 순위화하는 단계; 및/또는, 변환 및 인코딩될 잔차의 서브세트를 선택하는 단계. 일 예에서, 방법은 제2 잔차 세트를 분석하는 단계; 제2 잔차 세트를 순위화하는 단계; 및 순위화 및/또는 선택 단계가 분석에 기초하여 차등적으로 수행되도록 변환 및 인코딩될 잔차의 서브세트를 선택하는 단계를 포함한다. 예시적인 방법에 따르면, 변환을 적용하는 단계는 잔차의 선택된 서브세트에 대해 수행된다.
인코딩된 스트림은 디코딩을 용이하게 하기 위해 인코딩 프로세스의 양태를 나타내는 파라미터를 포함하는 하나 이상의 헤더를 수반할 수 있다. 예를 들어, 헤더는 사용된 코덱, 적용된 변환, 적용된 양자화, 및/또는 다른 디코딩 파라미터를 포함할 수 있다.
특정 예에서, 양자화 단계는 계수 및/또는 변환될 데이터, 예를 들어 잔차 데이터의 분석에 기초하여 양자화를 적응시키는 단계를 포함할 수 있다. 특정 예에서 양자화 단계에서 사용되는 분포는 적응될 수 있다.
제1 잔차 세트를 인코딩하는 단계는 시간적 버퍼로부터 시간적 계수 세트를 도출하는 단계; 및 계수 세트로부터 시간적 계수 세트를 감산하는 단계를 포함할 수 있다. 제2 잔차 세트를 인코딩하는 단계는 시간적 버퍼로부터 시간적 계수 세트를 도출하는 단계; 및 계수 세트로부터 시간적 계수 세트를 감산하는 단계를 포함할 수 있다.
순위화 및 선택 단계가 잔차 데이터에 어떻게 적용될 수 있는지, 시간적 계수를 감산 단계가 어떻게 수행될 수 있는지, 그리고 또한 양자화가 어떻게 적응될 수 있는지가 앞서 설명되었다. 이들 단계 각각은 인코더의 전체 성능을 개선하기 위해 미리 결정되고 선택적으로 적용될 수 있거나 입력 비디오, 다운샘플링된 비디오, 재구성된 비디오, 업샘플링된 비디오 또는 위의 임의의 조합의 분석에 기초하여 적용될 수 있다. 단계는 미리 결정된 규칙 세트에 기초하여 선택적으로 적용될 수 있거나 성능 분석 또는 피드백을 기초로 결정적으로 적용될 수 있다.
예시적인 방법에 따르면, 제1 코덱은 하드웨어 기반 코덱이고, 바람직하게는 제1 코덱은 AVC, HEVC, AV1, VP8, 또는 VP9이다.
임의의 위의 예에서, 양자화 연산은 양자화 행렬로부터 양자화 파라미터를 적용하는 것을 포함할 수 있고, 여기서, 각각의 잔차 세트에 대해 상이한 양자화 행렬이 사용된다.
임의의 위의 예에서, 인코딩 방법은 하나 이상의 추가 인코딩된 스트림 중 하나 이상에 시그널링 정보를 추가하는 단계를 더 포함할 수 있으며, 시그널링 정보는 상기 인코딩된 스트림의 일부가 입력 비디오의 특정 타일과 관련됨을 표시한다.
임의의 위의 예에서, 업샘플링은 적어도 코딩 유닛에 대한 업샘플링된 값을 예측하기 위해 컨볼루션 신경망을 사용하는 것을 포함할 수 있다.
본 개시의 일 양태에 따르면, 인코딩된 스트림을 조합하여 입력 비디오를 재구성할 수 있도록 입력 비디오를 복수의 인코딩된 스트림으로 인코딩하는 방법이 있고, 이 방법은: 전체 해상도 입력 비디오를 수신하는 단계; 전체 해상도 입력 비디오보다 더 낮은 해상도에서 베이스 인코딩된 스트림을 생성하는 단계; 베이스 인코딩된 스트림과 함께 전체 해상도 입력 비디오를 재구성하는 데 사용하기 위한 하나 이상의 추가 인코딩된 스트림에 대한 시간적 모드를 결정하는 단계; 및 시간적 모드에 기초하여 시간적 버퍼를 선택적으로 적용함으로써 하나 이상의 추가 인코딩된 스트림을 생성하는 단계를 포함한다.
방법은 시간적 버퍼를 사용하지 않는(또는 예를 들어, 0의 시간적 버퍼 값을 사용하는) 제1 시간적 모드 및 시간적 버퍼를 사용하는(예를 들어, 시간적 버퍼 내의 적어도 하나의 비-제로 값을 사용하는) 제2 시간적 모드 중 하나로 시간적 모드를 결정하는 단계를 포함할 수 있다. 시간적 버퍼는 시간적 예측을 적용하는 데 사용될 수 있다. 방법은 인코더에서, 복수의 코딩 유닛에 대한 시간적 모드 메타데이터를 획득하는 단계; 획득된 시간적 모드 메타데이터에 기초하여 복수의 코딩 유닛에 대한 인코딩에 사용할 시간적 모드를 결정하는 단계; 및 결정된 시간적 모드 및 획득된 시간적 모드 메타데이터에 기초하여 복수의 코딩 유닛에 대한 시간적 모드 시그널링 데이터를 생성하는 단계를 포함할 수 있다.
시간적 예측은 현재 변환된 계수 세트로부터 시간적 버퍼 내에 저장된 탈양자화된 변환된 계수 세트를 감산하는 것에 의해 인코더에서 적용될 수 있다. 현재 변환된 계수 세트는 전체 해상도 입력 비디오 내의 현재 프레임과 관련될 수 있고 탈양자화된 변환된 계수 세트는 전체 해상도 입력 비디오 내의 이전 프레임과 관련될 수 있다.
특정 예에서, 시간적 모드를 결정하는 단계는 비용 함수를 추정하는 단계를 포함할 수 있다. 비용 함수는 전체 해상도 입력 비디오 및 하나 또는 하나 이상의 추가 인코딩된 스트림의 함수를 포함할 수 있다. 비용 함수는 양자 모두의 시간적 모드를 사용하여 하나 이상의 추가 인코딩된 스트림을 인코딩하고 각각의 시간적 모드에 대해 결정된 하나 이상의 메트릭을 비교함으로써 평가될 수 있다. 비용 함수는 프레임의 하나 이상의 부분, 예를 들어 하나 이상의 코딩 유닛에 대해 평가될 수 있다.
특정 예에서, 시간적 모드를 결정하는 단계는 프레임에 대한 시간적 리프레시 파라미터를 설정하는 단계를 포함할 수 있다. 시간적 리프레시 파라미터는 시간적 버퍼의 리프레시, 예를 들어 버퍼 내의 하나 이상의 값의 제로화를 시그널링하기 위해 사용될 수 있다. 특정 예에서, 타일별 기반의 시간적 리프레시가 인코더에서의 시간적 시그널링을 사용하여 명령될 수 있다.
특정 예에서, 시간적 버퍼를 사용하는 제2 시간적 모드에서, 시간적 리프레시 파라미터는 제1 시간적 모드와 관련된 처리에 일시적으로 영향을 미치도록 구성될 수 있다.
특정 예에서, 예를 들어 본 출원의 임의의 진술에 설명된 바와 같은 인코더는 네트워크를 통해, 예를 들어 원격 서버 디바이스로부터 구성 파라미터를 수신할 수 있다. 특정 예에서, 인코더는 추가적으로 또는 대안적으로 원격 서버 디바이스에 구성 파라미터를 송신할 수 있다. 구성 파라미터는 이러한 진술 중 임의의 하나에 설명된 바와 같이 인코더의 동작을 구성할 수 있다.
입력 비디오를 인코딩하는 예시적인 방법은 제1 해상도에서 입력 비디오를 수신하는 단계; 하나 이상의 각각의 해상도에서 입력 비디오와 하나 이상의 재구성된 비디오 사이의 차이에 기초하여 하나 이상의 잔차를 생성하는 단계; 선택된 잔차 모드에 기초하여 하나 이상의 잔차를 수정하는 단계; 및 하나 이상의 수정된 잔차로부터 하나 이상의 인코딩된 스트림을 생성하는 단계를 포함할 수 있다.
방법은 제2 해상도에서 다운샘플링된 비디오를 생성하기 위해 입력 비디오를 다운샘플링하는 단계; 베이스 인코딩된 스트림을 생성하기 위해 제1 코덱을 사용하여 다운샘플링된 비디오를 인코딩하는 단계; 재구성된 비디오를 생성하기 위해 인코딩된 비디오로부터 비디오를 재구성하는 단계; 재구성된 비디오를 입력 비디오와 비교하는 단계; 및 비교에 기초하여 하나 이상의 추가 인코딩된 스트림을 생성하는 단계를 포함할 수 있다.
방법에서, 하나의 잔차 세트는 제1 해상도(예를 들어, 레벨 1)에 있을 수 있고, 하나의 잔차 세트는 제2 해상도(예를 들어, 레벨 2)에 있을 수 있다. 특정 경우에, 베이스 계층은 제1 해상도(예를 들어, 레벨 1) 또는 제1 해상도보다 더 낮은 추가적인 제3 해상도(예를 들어, 레벨 0)에 있을 수 있다. 다운샘플링 및/또는 업샘플링은 시그널링된 파라미터에 따라 하나 이상의 차원에서 선택적으로 적용되거나 전혀 적용되지 않을 수 있다.
일 예에서, 하나 이상의 잔차를 수정하는 단계는 잔차 가중치 세트를 수신하는 단계; 및 잔차 가중치의 세트를 잔차 세트에 적용하여 수정된 잔차를 생성하는 단계를 포함한다. 이 방법은 임계값 세트를 사용하여 수정된 잔차를 임계화하는 단계를 더 포함할 수 있다. 특정 예에서, 잔차 가중치의 세트 및 임계값 세트 중 하나 이상이 입력 비디오의 분류에 기초하여 결정된다. 특정 예에서, 잔차 가중치의 세트는 원격 위치로부터 수신되는 잔차 마스크를 포함한다. 특정 예에서, 잔차 가중치의 세트 및 임계값 세트 중 하나 이상이 잔차의 그룹에 적용된다.
입력 비디오를 인코딩하는 추가적인 예시적인 방법은 제1 해상도에서 입력 비디오를 수신하는 단계; 하나 이상의 하이브리드 비디오 스트림에 대한 원하는 비트 레이트를 획득하는 단계; 하나 이상의 각각의 해상도에서 입력 비디오와 하나 이상의 재구성된 비디오 사이의 차이에 기초하여 하나 이상의 잔차를 생성하는 단계; 원하는 비트 레이트에 기초하여 하나 이상의 잔차에 대한 양자화 파라미터를 결정하는 단계; 양자화 파라미터에 기초하여 하나 이상의 잔차를 양자화하는 단계; 및 하나 이상의 양자화된 잔차로부터 하나 이상의 인코딩된 스트림을 생성하는 단계를 포함할 수 있다.
방법은 제2 해상도에서 다운샘플링된 비디오를 생성하기 위해 입력 비디오를 다운샘플링하는 단계; 베이스 인코딩된 스트림을 생성하기 위해 제1 코덱을 사용하여 다운샘플링된 비디오를 인코딩하는 단계; 재구성된 비디오를 생성하기 위해 인코딩된 비디오로부터 비디오를 재구성하는 단계; 재구성된 비디오를 입력 비디오와 비교하는 단계; 및 비교에 기초하여 하나 이상의 추가 인코딩된 스트림을 생성하는 단계를 더 포함할 수 있다.
역시, 앞서 설명한 바와 같이 잔차 세트는 다른 공간 해상도에 있을 수 있다.
양자화 파라미터를 결정하는 단계는 하나 이상의 인코딩된 스트림 및 베이스 인코딩된 스트림을 수신하는 버퍼의 상태를 수신하고 양자화 파라미터를 결정하기 위해 이 상태를 사용하는 단계를 포함할 수 있다. 이 단계는 또한 또는 대안적으로 베이스 인코딩 계층의 상태를 베이스 인코딩된 스트림으로 수신하는 단계 및 양자화 파라미터를 결정하기 위해 이 상태를 사용하는 단계를 포함할 수 있다. 양자화 파라미터는 각각의 프레임, 잔차 및/또는 잔차 그룹에 대해 결정된다. 일 경우에, 프레임에 대한 양자화 파라미터는 이전 양자화 파라미터 세트를 사용하여 프레임에 대한 목표 데이터 크기 및 프레임에 대한 현재 데이터 크기에 기초하여 결정될 수 있다. 일 경우에, 양자화 파라미터는 이전 양자화 파라미터 세트에 기초한다. 일 경우에, 방법은 인코더의 현재 상태에 기초하여 결정된 양자화 파라미터를 캡핑하는 단계를 포함한다. 일 경우에, 양자화 파라미터는 양자화를 위한 단계-폭을 결정하는 데 사용된다. 일 경우에, 양자화 파라미터는 Q 값을 포함하고, 여기서 양자화를 위한 단계-폭은 Q 값의 역함수이다.
일 예에서, 방법은 다음 중 하나 이상을 포함한다: 베이스 인코딩된 스트림을 전송하는 단계; 제1 레벨 인코딩된 스트림을 전송하는 단계; 및 제2 레벨 인코딩된 스트림을 전송하는 단계.
본 개시의 추가 양태에 따르면 디코딩 방법이 제공된다.
복수의 인코딩된 스트림을 재구성된 출력 비디오로 디코딩하는 예시적인 방법은 제1 베이스 인코딩된 스트림을 수신하는 단계; 제1 출력 비디오를 생성하기 위해 제1 코덱에 따라 제1 베이스 인코딩된 스트림을 디코딩하는 단계; 하나 이상의 추가 인코딩된 스트림을 수신하는 단계; 잔차 세트를 생성하기 위해 하나 이상의 추가 인코딩된 스트림을 디코딩하는 단계; 및 디코딩된 비디오를 생성하기 위해 제1 비디오와 잔차 세트를 조합하는 단계를 포함한다.
일 예에서, 방법은 헤더로부터 복수의 디코딩 파라미터를 검색하는 단계를 포함한다. 디코딩 파라미터는 인코딩 프로세스에 포함된(및/또는 디코딩 프로세스에 적용되는) 절차적 단계를 나타낼 수 있다.
일 예에서, 잔차 세트를 생성하기 위해 하나 이상의 추가 인코딩된 스트림을 디코딩하는 단계는 엔트로피 디코딩 동작을 적용하는 단계; 탈양자화 연산을 적용하는 단계; 및 역변환 동작을 적용하여 잔차 세트를 생성하는 단계를 포함한다.
일 예에서, 잔차 세트를 생성하기 위해 하나 이상의 추가 인코딩된 스트림을 디코딩하는 단계는 시간적 버퍼로부터 병치된 잔차에 기초하여 잔차의 서브세트를 예측하는 단계를 포함한다. 이는 시간적 버퍼의 콘텐츠를 추가하는 것을 포함할 수 있다.
일 예에서, 방법은 제1 레벨 인코딩된 스트림을 수신하는 단계 및 제2 레벨 인코딩된 스트림을 수신하는 단계를 포함할 수 있다. 이 예에서, 잔차 세트를 생성하기 위해 하나 이상의 추가 인코딩된 스트림을 디코딩하는 단계는 제1 잔차 세트를 유도하기 위해 제1 레벨 인코딩된 스트림을 디코딩하는 단계를 포함하고; 디코딩된 비디오를 생성하기 위해 제1 비디오와 잔차 세트를 조합하는 단계는, 제1 잔차 세트를 제1 출력 비디오와 조합하여 제2 출력 비디오를 생성하는 단계; 업샘플링된 제2 출력 비디오를 생성하기 위해 제2 출력 비디오를 업샘플링하는 단계; 제2 잔차 세트를 유도하기 위해 제2 레벨 인코딩된 스트림을 디코딩하는 단계; 및 제2 잔차 세트를 제2 출력 비디오와 조합하여 재구성된 출력 비디오를 생성하는 단계를 포함한다.
일 예에서, 업샘플링된 제2 출력 비디오를 생성하기 위해 제2 출력 비디오를 업샘플링하는 단계는 업샘플링된 제2 출력 비디오의 블록이 업샘플링된 제2 출력 비디오의 대응하는 블록으로 유도되는 제1 잔차 세트의 요소로부터 유도된 값을 추가하는 단계를 포함한다. 블록은 2x2 블록일 수 있다. 이 추가 단계는 헤더에 포함된 신호 또는 미리 결정된 값에 기초하여 선택적으로 수행될 수 있다.
일 예에서, 제1 잔차 세트를 유도하기 위해 제1 레벨 인코딩된 스트림을 디코딩하는 단계는 엔트로피 디코딩 동작을 적용하는 단계; 탈양자화 연산을 적용하는 단계; 및 제1 잔차 세트를 생성하기 위해 역변환 동작을 적용하는 단계를 포함한다. 이 예에서, 제1 잔차 세트를 유도하기 위해 제1 레벨 인코딩된 스트림을 디코딩하는 단계는 마스크를 잔차 블록에 적용하도록 구성된 디블로킹 필터와 같은 필터를 적용하는 단계를 포함할 수 있다. 마스크는 미리 정의된 가중치 세트에 따라 가중될 수 있다.
일 예에서, 제2 잔차 세트를 유도하기 위해 제2 레벨 인코딩된 스트림을 디코딩하는 단계는 엔트로피 디코딩 동작을 적용하는 단계; 탈양자화 연산을 적용하는 단계; 및 제2 잔차 세트를 생성하기 위해 역변환 동작을 적용하는 단계를 포함한다. 역변환 동작은 위에서 정의된 동작의 역 동작일 수 있거나 실질적으로 거울상 동작일 수 있다. 즉, 2x2 블록 또는 4x4 블록 변환이 선택적으로 적용될 수 있다. 변환은 디코딩 방법에 의해 검출되거나 헤더에서 시그널링될 수 있다. 2x2 변환이 사용되는 경우, 변환된 잔차 블록이 예측되는 잔차 값을 추가함으로써 계수가 수정될 수 있다. 4x4 변환을 사용하는 경우 4개의 잔차의 평균 값을 추가하여 계수를 수정한다.
방법은 재구성된 출력을 디스플레이하거나 출력하는 단계를 더 포함할 수 있다.
추가 양태에 따르면, 헤더 및 페이로드를 포함하는 인코딩된 데이터 세트로 데이터 세트를 인코딩하기 위한 장치가 제공될 수 있다. 장치는 위의 단계에 따라 입력 비디오를 인코딩하도록 구성된다. 장치는 상기 양태 중 임의의 것의 방법을 수행하도록 구성된 프로세서를 포함할 수 있다.
추가 양태에 따르면, 헤더 및 페이로드를 포함하는 데이터 세트로부터 재구성된 비디오로 데이터 세트를 디코딩하기 위한 장치가 제공될 수 있다. 장치는 위의 단계에 따라 출력 비디오를 디코딩하도록 구성된다. 장치는 상기 양태 중 임의의 것의 방법을 수행하도록 구성된 프로세서를 포함할 수 있다.
인코더 및 디코더도 제공될 수 있다.
본 발명의 다른 양태에 따르면, 프로세서에 의해 실행될 때 프로세서로 하여금 상기 양태의 방법 중 임의의 것을 수행하게 하는 컴퓨터 판독 가능 매체가 제공될 수 있다.
위의 디코딩 예 중 임의의 하나에서, 디코딩 방법은 하나 이상의 타일을 식별하는 헤더 정보를 추출하기 위해 제1 및 제2 레벨 중 하나 이상에서 인코딩된 데이터 스트림을 파싱하는 단계; 및 헤더 정보에 기초하여 인코딩된 데이터 스트림을 선택적으로 디코딩하는 단계를 포함할 수 있다.
본 개시의 일 양태에 따르면, 하나 이상의 인코딩된 스트림을 재구성된 출력 비디오로 디코딩하는 방법이 있으며, 이 방법은 제1 베이스 인코딩된 스트림을 수신하는 단계; 제1 코덱에 따라 제1 베이스 인코딩된 스트림을 디코딩하여 제1 출력 비디오를 생성하는 단계; 하나 이상의 추가 인코딩된 스트림을 수신하는 단계; 하나 이상의 추가 인코딩된 스트림의 하나 이상의 부분에 대한 시간적 모드를 나타내는 데이터를 수신하는 단계; 시간적 모드를 나타내는 데이터를 디코딩하고 하나 이상의 추가 인코딩된 스트림에 대해 하나 이상의 개별 시간적 버퍼를 구성하는 단계; 하나 이상의 시간적 버퍼로부터의 데이터를 디코딩된 하나 이상의 추가 인코딩된 스트림에 선택적으로 적용하는 것을 포함하여, 잔차 세트를 생성하기 위해 하나 이상의 추가 인코딩된 스트림을 디코딩하는 단계; 및 디코딩된 비디오를 생성하기 위해 제1 비디오와 잔차 세트를 조합하는 단계를 포함한다.
인코딩 방법에 적용되는 변형은 디코딩 방법에 대응하는 방식으로 적용될 수 있다.
일 예에서, 방법은 프레임에 대한 시간적 리프레시를 나타내는 시간적 시그널링을 수신하는 단계; 및 프레임에 대한 디코딩된 데이터와 관련하여 하나 이상의 시간적 버퍼 중 하나로부터의 데이터를 선택적으로 적용하기 전에, 시간적 버퍼 내의 값을 제로화(예를 들어, 시간적 "리프레시")하는 단계를 더 포함한다.
일 예에서, 하나 이상의 시간적 버퍼로부터의 데이터를 디코딩된 하나 이상의 추가 인코딩된 스트림에 선택적으로 적용하는 단계는 표시되는 제2 시간적 모드에 응답하여 하나 이상의 시간적 버퍼 중 하나로부터 데이터를 감산하지 않고, 표시되는 제1 시간적 모드에 응답하는 하나 이상의 시간적 버퍼 중 하나로부터 데이터를 감산하는 단계를 포함한다. 일 예에서, 하나 이상의 추가 인코딩된 스트림의 하나 이상의 부분에 대한 시간적 모드를 나타내는 데이터는 코딩 유닛당 비트를 포함한다.
특정 예에서 사용된 규약
본 출원에 설명된 특정 예는 비디오 코딩 기술에 대한 일반적인 표기법을 사용한다. 예를 들어, 표기법은 프로그래밍 기능 및 수학적 연산 중 하나 이상을 언급하기 위해 본 출원에서 사용된다. 본 출원에 사용된 특정 수학 연산자는 C 프로그래밍 언어에서 사용되는 규약과 유사한 방식으로 제공된다. 특정 예에서, 정수 제산 및 산술 시프트 연산의 결과는 아래에 설명된 바와 같이 정의되고, 지수화 및 실수 값 제산과 같은 추가 연산이 정의된다. 번호매김 및 카운팅 규약은 일반적으로 0부터 시작하고, 예를 들어 "첫 번째"는 0번째와 등가이고 "두 번째"는 1번째와 등가인 등이다.
예에서 산술 연산자는 다음과 같은 일반적인 표기법을 사용한다.
Figure pct00171
일반적인 로직 연산자도 사용된다. 다음 로직 연산자는 다음과 같이 정의된다:
x && y - x 및 y의 부울 로직 "논리곱(and)"
x | | y - x 및 y의 부울 로직 "논리합(or)"
! - 부울 로직 "부정(not)"
x ? y : z - x가 참이거나 0이 아닌 경우 y의 값으로 평가되고; 그렇지 않으면, z 값으로 평가된다.
관계 연산자에는 또한 일반적인 의미를 갖가지며, 예를 들어 다음과 같다: > - 보다 큼; >= - 크거나 같음; < - 보다 작음; <= - 작거나 같음; = = - 같음; != - 같지 않음.
관계 연산자가 신택스 요소 또는 값 "na" (적용 가능하지 않음)가 할당된 변수에 적용될 때 값 "na"는 신택스 요소 또는 변수에 대한 고유한 값으로 처리될 수 있다. 값 "na"는 임의의 다른 값과 같지 않은 것으로 고려된다.
다음 비트 연산자(bit-wise operator)가 또한 예에서 사용된다:
& 비트별 "논리곱". 정수 인수에 대해 동작할 때 이는 정수 값의 2의 보수 표현에 대해 동작한다. 다른 인수보다 적은 비트를 포함하는 이진 인수에 대해 동작할 때 0과 같은 더 상위의 비트를 추가하여 더 짧은 인수를 확장한다.
| 비트별 "논리합". 정수 인수에 대해 동작할 때 이는 정수 값의 2의 보수 표현에 대해 동작한다. 다른 인수보다 적은 비트를 포함하는 이진 인수에 대해 동작할 때 0과 같은 더 상위의 비트를 추가하여 더 짧은 인수를 확장한다.
^ 비트별 "배타적 논리합" . 정수 인수에 대해 동작할 때 이는 정수 값의 2의 보수 표현에 대해 동작한다. 다른 인수보다 적은 비트를 포함하는 이진 인수에 대해 동작할 때 0과 같은 더 상위의 비트를 추가하여 더 짧은 인수를 확장한다.
x >> y y 이진수만큼의 x의 2의 보수 정수 표현의 산술 우측 시프트. 이 함수는 음이 아닌 정수 값 y에 대해서만 정의된다. 우측 시프트의 결과로 최상위 비트(MSB)로 시프트된 비트는 시프트 연산 이전의 x의 MSB와 동일한 값을 갖는다.
x << y y 이진수만큼의 x의 2의 보수 정수 표현의 산술 좌측 시프트. 이 함수는 음이 아닌 정수 값 y에 대해서만 정의된다. 좌측 시프트의 결과로 최하위 비트(LSB)로 시프트된 비트는 0과 같은 값을 갖는다.
다음 산술 연산자도 사용된다: = - 할당 연산자; + + - 증분, 즉, x+ +는 x = x + 1과 등가이다(어레이 인덱스에서 사용되는 경우 이는 증분 연산 이전의 변수 값으로 평가될 수 있음); - - - 감분, 즉, x- - 는 x = x - 1과 등가이다(어레이 인덱스에서 사용되는 경우 감분 연산 이전의 변수 값으로 평가될 수 있음); += - 지정된 양만큼 증분, 즉, x += 3은 x = x + 3과 등가이고 x += (-3)은 x = x + (-3)과 등가이다; -= - 지정된 양만큼 감분, 즉, x -= 3은 x = x - 3과 등가이고 x -= (-3)은 x = x - (-3)과 등가이다.
값 범위는 다음과 같은 표기법을 사용하여 지정될 수 있다: x = y..z 또는 x = y to z, 여기서 x는 y에서 시작하여 z까지(경계값 포함)의 정수 값을 취하며 x, y, z는 정수이고 z는 y보다 크다.
다음 수학 함수는 특정 예시적인 계산에서도 사용된다.
Abs( x ) =
Figure pct00172
Ceil( x ) x 이상인 가장 작은 정수.
Clip3( x, y, z ) =
Figure pct00173
Floor( x ) x 이하의 가장 큰 정수.
Ln( x ) x의 자연 로그(밑이 e인 로그, 여기서 e는 자연 로그 밑수 2.718 281 828...)이다.
Log10( x ) x의 밑이 10인 로그이다.
Min( x, y ) =
Figure pct00174
Max( x, y ) =
Figure pct00175
Round( x ) = Sign( x ) * Floor( Abs( x ) + 0.5 )
Sign( x ) =
Figure pct00176
Sqrt( x ) = >
Figure pct00177
표현식의 우선 순위 순서가 괄호를 사용하여 명시적으로 표시되지 않는 경우 다음 규칙이 적용될 수 있다: 더 높은 우선 순위의 연산은 더 낮은 우선 순위의 임의의 연산보다 먼저 평가되고; 동일한 우선 순위의 연산은 좌측에서 우측으로 순차적으로 평가된다. 아래 테이블은 특정 예시적인 연산의 선호 순위를 나타낸다(예를 들어, 최고위로부터 최저위로, 여기서, 테이블에서 더 높은 위치가 더 높은 우선 순위를 나타냄 - 이는 C 프로그래밍 언어에서 사용되는 우선 순위 순서와 동일할 수 있음).
Figure pct00178
본 출원의 예에서 비트스트림의 설명에서, 비트스트림의 신택스 요소는 굵은 글씨로 표현될 수 있다. 신택스 요소는 그 이름(예를 들어, 모두 소문자 문자, 밑줄 문자 포함)과 그 코딩된 표현 방법에 대한 하나의 설명자로 설명될 수 있다. 본 출원에 설명된 디코딩 프로세스는 신택스 요소의 값 및 이전에 디코딩된 신택스 요소의 값에 따라 거동하도록 구성될 수 있다. 신택스 요소의 값이 신택스 테이블이나 텍스트에서 사용될 때, 이는 일반적 글씨(즉, 굵은 글씨가 아님)로 나타날 수 있다.
경우에 따라 신택스 테이블은 신택스 요소 값에서 유도된 다른 변수의 값을 사용할 수 있다. 이러한 변수는 신택스 테이블 또는 텍스트에에서 임의의 밑줄 문자 없이 소문자 문자와 대문자 문자를 혼합한 이름으로 나타난다. 대문자 문자로 시작하는 변수는 현재 신택스 구조 및 모든 종속 신택스 구조의 디코딩을 위해 유도된다. 대문자 문자로 시작하는 변수는 변수의 근원 신택스 구조를 언급하지 않고 이후 신택스 구조에 대한 디코딩 프로세스에서 사용될 수 있다. 소문자 문자로 시작하는 변수는 유도된 해당 조항 내에서만 사용될 수 있다.
경우에 따라, 신택스 요소 값 또는 변수 값에 대한 "니모닉(mnemonic)" 이름이 그 수치 값과 상호 교환적으로 사용된다. 때때로 "니모닉" 이름은 관련된 어떠한 수치 값도 없이 사용된다. 값과 이름의 연관성은 본문에 지정되어 있다. 이름은 밑줄 문자로 구분된 하나 이상의 문자 그룹으로 구성된다. 각각의 그룹은 대문자 문자로 시작하며 더 많은 대문자 문자를 포함할 수 있다. 이름은 예시로만 제공되며 구현 시 다른 이름을 사용할 수 있음을 유의하여야 한다.
비트스트림에서 현재 위치의 속성을 지정하는 함수는 신택스 함수라고 지칭될 수 있다. 이러한 함수는 예에서 지정되며 비트스트림으로부터 디코딩 프로세스가 판독할 다음 비트의 위치의 표시를 갖는 비트스트림 포인터의 존재를 가정할 수 있다. 신택스 함수는 신택스 요소 이름으로 구성될 수 있으며 쉼표로 구분된(2개 이상의 변수의 경우) 0개 이상의 변수 이름(정의용) 또는 값(사용용)을 포함하는 좌측 및 우측 둥근 괄호로 끝날 수 있는 그 이름으로 설명될 수 있다.
신택스 함수가 아닌 함수(예를 들어, 수학 함수)는 대문자 문자로 시작하고 임의의 밑줄 문자 없이 소문자와 대문자 문자가 혼합되어 있으며 쉼표로 구분된(2개 이상의 변수의 경우), 0개 이상의 변수 이름(정의용) 또는 값(사용용)을 포함하는 좌측 및 우측 괄호로 끝나는 그 이름으로 설명될 수 있다.
1차원 어레이는 리스트라고 지칭될 수 있다. 2차원 어레이는 행렬이라고 지칭될 수 있다. 어레이는 신택스 요소 또는 변수 중 어느 하나일 수 있다. 어레이의 인덱싱에 대한 예에서 하첨자 또는 대괄호가 사용된다. 행렬의 시각적 도시와 관련하여 제1 하첨자는 행(수직) 인덱스로 사용되고 제2 하첨자는 열(수평) 인덱스로 사용된다. 인덱싱을 위해 하첨자가 아니라 대괄호를 사용하는 경우 인덱싱 순서는 반대가 될 수 있다. 따라서, 수평 위치 x 및 수직 위치 y에 있는 행렬 S의 요소는 S[x][y] 또는 Syx 중 어느 하나로 표시될 수 있다. 행렬의 단일 열은 리스트라 지칭될 수 있고, 행 인덱스를 생략하여 표시할 수 있다. 따라서, 수평 위치 x에 있는 행렬 s의 열은 리스트 S[x]로 지칭될 수 있다.
어레이의 행과 열에 있는 엔트리 값의 명세는 { {...} {...} }로 표시할 수 있고, 여기서 각각의 내부 괄호 쌍은 오름차순 열 순서로 행 내의 요소 값을 지정하고 행은 오름차순 행 순서로 순서화된다. 따라서, 행렬 S를 { { 1 6 } { 4 9 } }와 같게 설정하면 S[0][0]은 1과 같게 설정되고, S[1][0]이 6과 같게 설정되고, S[0][1]은 4와 같게 설정되고 S[1][1]은 9와 같게 설정된다는 것을 지정한다.
이진 표기법은 예에서 비트 값 스트링을 작은 따옴표로 묶음으로써 표시된다. 예를 들어, '01000001'은 그 두 번째 비트와 그 최종 비트(최상위 비트로부터 최하위 비트까지 카운팅)만 1과 같은 8 비트 스트링을 나타낸다. 16진 표기법은 16진법 숫자에 "0x" 접두어를 붙여 표시하며, 이는 비트 수가 4의 정수배인 경우 이진 표기법 대신 사용될 수 있다. 예를 들어, 0x41은 그 두 번째 비트와 그 최종 비트(최상위 비트로부터 최하위 비트까지 카운팅)만 1과 같은 8 비트 스트링을 나타낸다. 작은 따옴표로 묶이지 않고 "0x" 접두어가 붙지 않은 수치 값은 십진수 값으로 고려될 수 있다. 0과 같은 값은 테스트 명령문에서 거짓 조건을 나타낼 수 있다. 참의 값은 0과는 다른 임의의 값으로 표현될 수 있다.
본 출원에 제시된 의사코드 예에서, 다음 형태로 수학적으로 설명된 로직 연산의 명령문은:
if( 조건 0 )
명령문 0
else if( 조건 1 )
명령문 1
...
else/* 나머지 조건에 대한 정보 주석 */
명령문 n
다음과 같은 방식으로 설명될 수 있다:
.. 다음과 같은/... 다음이 적용된다:
조건 0인 경우, 명령문 0
그렇지 않고, 조건 1인 경우, 명령문 1
...
그렇지 않으면 (나머지 조건에 대한 정보 주석), 명령문 n
본문에서 다음과 같은 명령문 "If ... Otherwise, if ... Otherwise, ..."이 바로 뒤에 "If ... "가 이어지는 상태로 "... 다음과 같은" 또는 "... 다음이 적용된다"와 같이 사용될 수 있다. 이 "If ... Otherwise, if ... Otherwise, ..."의 마지막 조건은 항상 "Otherwise, ..."이다. 사이에 끼여 있는 "If ... Otherwise, if ... Otherwise, ..." 명령문은 "... 다음과 같은" 또는 "... 다음이 적용된다"를 마지막 "Otherwise, ..."와 매칭시켜서 식별될 수 있다.
특정 의사코드 예에서 다음 형식으로 수학적으로 설명되는 로직 연산의 설명은:
if( 조건 0a && 조건 0b )
명령문 0
else if( 조건 1a | | 조건 1b )
명령문 1
...
else
명령문 n
다음과 같은 방식으로 설명될 수 있다:
... 다음과 같음/... 다음이 적용된다:
다음 조건이 모두 참이면 명령문 0:
조건 0a
조건 0b
그렇지 않고, 다음 조건 중 하나 이상이 참이면 명령문 1:
조건 1a
조건 1b
...
그렇지 않으면, 명령문 n
특정 의사코드 예에서 다음 형식으로 수학적으로 설명되는 로직 연산의 설명은:
if( 조건 0 )
명령문 0
if( 조건 1 )
명령문 1
다음과 같은 방식으로 설명될 수 있다:
조건 0일 때, 명령문 0
조건 1일 때, 명령문 1
예에서, 신택스 요소의 디코딩을 설명하기 위해 프로세스가 사용된다. 프로세스는 별도로 설명된 명세 및 호출을 가질 수 있다. 현재 신택스 구조 및 종속 신택스 구조와 관련된 신택스 요소 및 대문자 변수는 프로세스 명세 및 호출에서 이용가능할 수 있다. 프로세스 명세는 또한 명시적으로 입력으로 지정된 소문자 변수를 가질 수 있다. 각각의 프로세스 명세는 명시적으로 지정된 출력을 가질 수 있다. 출력은 대문자 변수 또는 소문자 변수 중 어느 하나일 수 있는 변수이다. 프로세스를 호출할 때 변수 할당은 다음과 같이 지정된다: 호출하는 변수와 프로세스 명세가 동일한 이름을 갖지 않으면 변수는 프로세스 명세의 소문자 입력 또는 출력 변수에 명시적으로 할당되고; 그렇지 않으면(호출 시 변수와 프로세스 명세가 동일한 이름을 가짐), 할당이 암시된다. 프로세스의 명세에서 특정 코딩 블록은 특정 코딩 블록의 어드레스와 동일한 값을 갖는 변수 이름으로 참조될 수 있다.
인코더 및 디코더 모두에서, 예를 들어 스트리밍 서버 또는 클라이언트 디바이스에서 구현되거나 데이터 저장소로부터 디코딩하는 클라이언트 디바이스에서, 본 출원에 설명된 방법, "컴포넌트" 및 프로세스는 코드(예를 들어, 소프트웨어 코드) 및/또는 데이터로서 구현될 수 있다. 인코더 및 디코더는 데이터 압축 분야에서 잘 알려진 바와 같이 하드웨어 또는 소프트웨어로 구현될 수 있다. 예를 들어, 특별히 프로그래밍된 그래픽 처리 유닛(GPU) 또는 특별히 설계된 FPGA(Field Programmable Gate Array)를 사용하는 하드웨어 가속은 특정 효율성을 제공할 수 있다. 완전성을 위해, 이러한 코드 및 데이터는 하나 이상의 컴퓨터 판독 가능 매체에 저장될 수 있으며, 이는 컴퓨터 시스템에서 사용하기 위한 코드 및/또는 데이터를 저장할 수 있는 임의의 디바이스 또는 매체를 포함할 수 있다. 컴퓨터 시스템이 컴퓨터 판독 가능 매체에 저장된 코드 및/또는 데이터를 판독하고 실행할 때, 컴퓨터 시스템은 컴퓨터 판독 가능 저장 매체에 저장된 데이터 구조 및 코드로 구현된 방법 및 프로세스를 수행한다. 특정 실시예에서, 본 출원에 설명된 방법 및 프로세스의 단계 중 하나 이상은 프로세서(예를 들어, 컴퓨터 시스템 또는 데이터 저장 시스템의 프로세서)에 의해 수행될 수 있다.
일반적으로, 본문에 설명되거나 도면에 예시된 기능 중 임의의 기능은 소프트웨어, 펌웨어(예를 들어, 고정 로직 회로), 프로그램 가능 또는 프로그램 불가 하드웨어, 또는 이러한 구현의 조합을 사용하여 구현될 수 있다. 본 출원에서 사용된 "컴포넌트" 또는 "기능"이라는 용어는 일반적으로 소프트웨어, 펌웨어, 하드웨어 또는 그 조합을 나타낸다. 예를 들어, 소프트웨어 구현의 경우 "컴포넌트" 또는 "기능"이라는 용어는 처리 디바이스 또는 디바이스에서 실행될 때 지정된 작업을 수행하는 프로그램 코드를 지칭할 수 있다. 별개의 유닛으로의 컴포넌트와 기능의 예시된 분리는 이러한 소프트웨어 및/또는 하드웨어 및 작업의 실제 또는 개념적 물리적 그룹화 및 할당을 반영할 수 있다.
참조 문헌
다음 참조 문헌은 그 전체가 참조로 본 출원에 통합된다. "Call for Proposals for Low Complexity Video Coding Enhancements" ISO/IEC JTC1/SC29/WG11 N17944, Macao, CN, Oct. 2018; 및 "Requirements for Low Complexity Video Coding Enhancements" ISO/IEC JTC1/SC29/WG11 N18098, Macao, CN, Oct. 2018.
다음 특허 및 특허 출원의 내용은 그 전체가 참조로 본 출원에 통합된다 : US 8,977,065; US 8,948,248; US 8,711,943; US 9,129,411; US 8,531,321; US 9,510,018; US 15/296,633; US 13/188,237; US 9,300,980; US 9,628,817; US 15/479,966; US 9,626,772; US 15/459,883; PCT/EP2013/059833; PCT/EP2013/059847; PCT/EP2013/059880; PCT/EP2013/059853; PCT/EP2013/059885; PCT/EP2013/059886; PCT/IB2014/060716; PCT/GB2016/053736; PCT/GB2016/050632; PCT/GB2017/050405; PCT/GB2017/050584; PCT/GB2017/050673; PCT/GB2017/052141; PCT/GB2017/052142; PCT/GB2017/052348; PCT/GB2017/052349; PCT/GB2017/052631; PCT/GB2017/052632; PCT/GB2017/052633; PCT/GB2017/052631; GB 1615265.4; PCT/GB2017/052632; GB 1615266.2; PCT/GB2017/052633; GB 1615267.0; PCT/GB2017/053716; GB 1621117.9; GB 1707373.5; GB 1708447.6; GR 20170100431; PCT/EP2018/075603; EP 17386045.3; PCT/EP2018/082350; EP 17386046.1; PCT/GB2018/053551; EP 17386047.9; GB 1720365.4; GB 18000934.0; EP 18386002.2; PCT/GB2018/053552; GB 1806926.0; GB 1811594.9; GB 1811651.7; GB 1811933.9; GB 1812407.3; PCT/GB2018/053546; GB 1812708.4; GB 1812709.2; GB 1812710.0; GB 1815437.7; PCT/GB2018/053555; PCT/GB2018/053547; PCT/GB2018/053554; PCT/GB2018/053548; GB 1816172.9; GB 1816469.9; GB 1820473.5; GB 1900511.5; GB 1817783.2; GB 1817780.8; GB 1817781.6; GB 1817784; GB 1902008.0; PCT/GB2017/052141; GB 1612583.3; EP 17752417.0; PCT/GB2017/052142; GB 1612858.8; PCT/GB2017/052348; GB 1613689.7; PCT/GB2017/052349; GB 1613697.0.
본 개시는 또한 그 내용 전체가 참조로서 통합되는 하기 영국 특허 출원에 관련한다: GB1903844.7, GB1904014.6, GB1904492.4, GB1905325.5, GB1909701.3, GB1909724.5, GB1909997.7, GB1910674.9, GB1911467.7, GB1911546.8, GB1914215.7, GB1914414.6, GB1914634.9, GB1915553.0, GB1916090.2, GB1918099.1, GB2000430.5, GB2000483.4, GB2000600.3, GB2000668.0, GB2001408.0, 및 US 62/984,261.
부록
본 부록은 신경망 업샘플러 커널에 대한 예시적인 테스트 값을 설명한다:
us_layer1_kernel : Tensor4D_FP32(3, 3, 1, 16) = {-1.41084030e-01f, 9.31098983e-02f, -1.34773910e-01f, -2.28807237e-02f, 6.85299039e-02f, -2.61796445e-01f, 4.50513251e-02f, -9.27503034e-02f, 3.51776704e-02f, -3.75421681e-02f, 3.48821692e-02f, -1.97652541e-02f, 5.42435385e-02f, 5.53956255e-02f, -6.69758171e-02f, 1.53271168e-01f, -3.73172164e-02f, 3.56322676e-02f, -2.16064841e-01f, -1.82147045e-02f, -1.44671440e-01f, 1.02563798e-01f, -1.91772074e-01f, 8.01544413e-02f, 4.77155223e-02f, -4.41845991e-02f, 3.30503732e-02f, 5.62866703e-02f, -7.71014858e-03f, -5.44822868e-03f, 8.70354474e-02f, 9.19423345e-03f, -1.16019882e-02f, 8.42235386e-02f, -9.52602625e-02f, 7.36623770e-03f, -3.09397113e-02f, 5.15783429e-02f, 1.29244000e-01f, -7.07662245e-03f, 2.48695776e-01f, 5.73697016e-02f, -5.06149009e-02f, 1.11225368e-02f, -3.72100696e-02f, -1.78759713e-02f, -3.08060925e-03f, 6.27207085e-02f, -3.85343991e-02f, 8.60163271e-02f, 1.07082412e-01f, 2.21030377e-02f, -9.23042446e-02f, 1.19127659e-02f, -2.95122224e-03f, 7.40718320e-02f, 3.72054316e-02f, -2.86619030e-02f, -6.61083236e-02f, -7.86441267e-02f, -4.92218025e-02f, -1.57362640e-01f, -5.06451167e-03f, 4.98885463e-04f, -9.27802455e-03f, 9.82660893e-03f, 5.41823693e-02f, 4.07200307e-02f, 2.75054220e-02f, -2.07493678e-01f, 2.15178132e-02f, -9.22169983e-02f, -1.15027346e-01f, -2.64864620e-02f, -5.67401797e-02f, -9.97813195e-02f, 1.03374301e-02f, 1.84954870e-02f, 7.86372870e-02f, -4.30381410e-02f, -6.68329298e-02f, -2.96362638e-02f, 1.10683285e-01f, 5.43097965e-02f, -1.94774847e-02f, -9.17459559e-03f, 1.44741684e-01f, 4.55530323e-02f, -1.22463793e-01f, 1.09305903e-01f, 1.26978466e-02f, -2.51851287e-02f, -4.69901972e-02f, 1.45491347e-01f, 1.06764054e-02f, -2.37240605e-02f, 3.65678407e-02f, 3.79142314e-02f, 7.28409737e-02f, 1.65885806e-01f, 1.60030782e-01f, 2.10506301e-02f, -5.24207354e-02f, -1.57678679e-01f, 5.13638146e-02f, 2.96306182e-02f, -1.49404295e-02f, 2.26740912e-03f, -2.00474024e-01f, -4.17368114e-02f, 6.52428120e-02f, 1.36250272e-01f, -9.53990966e-02f, -9.28792655e-02f, -1.54301003e-01f, 2.28194874e-02f, 6.45937026e-02f, -4.95569259e-02f, 1.39574781e-01f, -2.63163131e-02f, -9.63334218e-02f, -1.88225329e-01f, -6.68186843e-02f, 4.45094369e-02f, 1.86352968e-01f, -1.04716487e-01f, -1.31562442e-01f, -1.21508308e-01f, 3.38261202e-02f, 1.31264895e-01f, 4.67112437e-02f, 5.16150929e-02f, 3.52771990e-02f, -2.98504204e-01f, 2.31798831e-03f, 8.31564218e-02f, 6.71869377e-03f, -1.92980317e-03f, 3.54144014e-02f, 1.25442013e-01f, -5.69025893e-03f, -2.42539141e-02f, -3.59425023e-02f, -1.77264456e-02f}
us_layer2_kernel : Tensor3D_FP32(3, 3, 16, 4) = {6.33245381e-03f, -1.04955370e-02f, -7.64640868e-02f, 1.04394630e-01f, -1.12143323e-01f, 8.84293765e-02f, 4.21205387e-02f, 5.64377718e-02f, 5.26978858e-02f, -7.51010850e-02f, 4.34068143e-02f, -1.94638863e-01f, 2.15833232e-01f, -1.13282958e-03f, 1.32124677e-01f, 3.43414620e-02f, -9.80699062e-02f, -1.09704457e-01f, -4.03996333e-02f, -1.35718092e-01f, 2.95123621e-03f, -5.81902452e-02f, 5.18400222e-02f, -9.05640125e-02f, 1.50605440e-01f, -1.21687643e-01f, 2.08101258e-01f, -5.10746613e-02f, 1.46442071e-01f, -7.29629695e-02f, -1.39488146e-01f, 1.37462586e-01f, -8.10248703e-02f, -6.19493499e-02f, 2.21347332e-01f, -2.34334439e-01f, 4.30567451e-02f, 2.13719338e-01f, 7.92161897e-02f, 1.51598938e-02f, 3.00818868e-02f, -7.42932607e-04f, -1.31590351e-01f, 1.85781255e-01f, -4.65347711e-03f, -2.43773490e-01f, 2.63357293e-02f, -3.25426925e-03f, 6.67467117e-02f, 1.94742084e-01f, 2.88871527e-02f, 4.39467095e-02f, -4.63892408e-02f, -6.06723763e-02f, 2.23232135e-02f, -2.14727566e-01f, 9.72462539e-03f, -1.12323351e-01f, -1.25625610e-01f, 1.10242918e-01f, 7.58204609e-02f, 3.76487561e-02f, 7.56741092e-02f, 1.42208323e-01f, -8.56551304e-02f, 2.67496526e-01f, 2.43334547e-02f, -3.68960761e-02f, 6.51121214e-02f, -2.92595550e-02f, -1.19445384e-01f, -1.25117391e-01f, -7.94723704e-02f, -5.52651063e-02f, 1.09263748e-01f, 1.82550594e-01f, -1.60724610e-01f, -7.59197548e-02f, 7.49233365e-02f, 9.94861498e-02f, -1.82569046e-02f, 1.47254029e-02f, -4.44847643e-02f, -1.22822165e-01f, -1.12555832e-01f, 1.12247109e-01f, -2.84761079e-02f, -2.05388162e-02f, -3.50958928e-02f, 1.39616013e-01f, 1.06154449e-01f, -9.16776657e-02f, -1.43141896e-01f, 5.20549566e-02f, 9.52381566e-02f, -8.75469595e-02f, -1.01462469e-01f, 1.74522754e-02f, 6.82789385e-02f, 6.29173890e-02f, -1.14021309e-01f, -1.21160626e-01f, 4.30294387e-02f, 6.43974990e-02f, -1.54791161e-01f, -7.69131184e-02f, -2.84353886e-02f, -1.07519612e-01f, -6.58828169e-02f, -4.02578823e-02f, 1.59347877e-01f, -1.79592725e-02f, 4.52463748e-03f, -6.50652871e-02f, -2.73805093e-02f, -4.24853638e-02f, 1.44114226e-01f, 6.71110675e-03f, -2.06886873e-01f, 2.48743650e-02f, 1.20029775e-02f, 1.20832704e-01f, -1.36132706e-02f, 7.27911815e-02f, -1.91886991e-01f, 2.49870382e-02f, -1.22994900e-01f, 1.25552088e-01f, 7.47941881e-02f, -1.24070607e-01f, -1.49875551e-01f, -1.32682770e-01f, -5.30838082e-03f, 1.52762681e-01f, 9.25363675e-02f, -7.15189055e-02f, -1.01389468e-01f, 5.05505055e-02f, -1.03882123e-02f, 1.28126472e-01f, -7.02821603e-03f, -1.97356284e-01f, 1.68811291e-01f, 5.53274043e-02f, -2.48444341e-02f, 1.94187909e-02f, -4.13846411e-02f, -7.51732737e-02f, 2.85033844e-02f, 1.01955794e-03f, 4.56635170e-02f, 1.33634806e-02f, 4.91224751e-02f, -3.14815827e-02f, 9.61789337e-04f, -1.16922125e-01f, 2.18285043e-02f, 1.55752704e-01f, -4.31438908e-03f, -1.07203368e-02f, 8.30481574e-03f, -3.36630940e-02f, 2.73541231e-02f, -1.78011596e-01f, -4.73164655e-02f, 2.51824018e-02f, 2.30563991e-02f, 2.32195966e-02f, 1.17772520e-01f, -1.89441293e-02f, 6.15934245e-02f, -1.53331179e-02f, 1.30198702e-01f, 4.11545672e-02f, 2.47499924e-02f, 4.14127409e-02f, 6.30946383e-02f, -1.77980904e-02f, -1.13194898e-01f, -6.81287348e-02f, 9.88358445e-03f, 1.80843398e-01f, 1.69518907e-02f, -4.47042324e-02f, -1.41637605e-02f, -4.90729660e-02f, -4.22141738e-02f, -1.18456043e-01f, -3.59974802e-02f, 1.42708300e-02f, 7.37891272e-02f, -5.33544794e-02f, 1.51815116e-01f, -1.00672627e-02f, -4.77370955e-02f, -7.70068616e-02f, -1.41694620e-01f, 8.36707354e-02f, 1.37744760e-02f, 3.00155342e-01f, 8.57121795e-02f, -2.12971136e-01f, 1.16683885e-01f, 9.42589417e-02f, 5.13079911e-02f, 1.54281944e-01f, -1.14778113e-02f, -1.42881781e-01f, -1.06360398e-01f, -2.64805615e-01f, -1.30332038e-02f, -1.29198700e-01f, 1.57558769e-01f, 6.28474914e-03f, 3.20065171e-01f, 1.11988215e-02f, 2.52308279e-01f, -1.86741650e-01f, -4.85163517e-02f, -5.77348322e-02f, 1.73906848e-01f, 1.11191697e-01f, -1.61423609e-01f, -1.13434017e-01f, 1.26967236e-01f, -1.67516507e-02f, -8.22124407e-02f, -2.10107844e-02f, -4.70526442e-02f, 6.00312762e-02f, 7.18277246e-02f, 3.13637517e-02f, 8.93386975e-02f, -4.44040587e-03f, -9.51816216e-02f, -1.47718236e-01f, 1.65281538e-02f, 1.34988986e-02f, 4.80517782e-02f, -9.65404958e-02f, 1.40959471e-02f, -5.53384759e-02f, -2.72534061e-02f, 2.62833294e-02f, -1.63816914e-01f, -1.44624650e-01f, 1.20901503e-02f, 1.19794615e-01f, -1.90997720e-02f, 2.63831951e-02f, 2.54842728e-01f, 2.25048333e-01f, -1.80821672e-01f, -2.93815229e-02f, 4.37161446e-01f, -9.82301533e-02f, -2.29180112e-01f, -3.88183445e-02f, 2.15006188e-01f, 1.71044737e-01f, -2.52068818e-01f, -1.54835969e-01f, -3.57184321e-01f, 9.19836760e-02f, 1.14235722e-01f, -8.07379335e-02f, -1.67503044e-01f, 6.62510023e-02f, 2.49479741e-01f, 9.48333964e-02f, 2.80678682e-02f, 1.67486027e-01f, 4.44321126e-01f, 8.31490234e-02f, 6.48184270e-02f, -2.35687494e-01f, -2.02227533e-01f, -2.80010372e-01f, -1.42441705e-01f, 3.73379216e-02f, 1.37202099e-01f, 2.14403048e-01f, -1.90773681e-02f, -9.54359546e-02f, 1.38671203e-02f, -4.14732248e-02f, -1.44975752e-01f, 1.23142749e-01f, -1.20386019e-01f, 4.30736458e-03f, 5.40281534e-02f, 3.68678905e-02f, 1.17263041e-01f, -1.19504638e-01f, 1.65910080e-01f, -7.93663561e-02f, -1.59859478e-01f, 1.30104035e-01f, -5.12327775e-02f, -2.69437507e-02f, 1.61378413e-01f, -1.66682631e-01f, 1.42815737e-02f, 5.91942258e-02f, -1.15488388e-01f, 2.47667190e-02f, -9.60654020e-02f, 2.30389591e-02f, 1.45454630e-01f, -3.83892208e-01f, -3.48924100e-02f, 4.94621575e-01f, 1.31215930e-01f, -6.45582676e-02f, -1.89624280e-01f, -3.26677948e-01f, 2.26888824e-02f, 2.70347863e-01f, 1.80545300e-02f, -2.58584153e-02f, 7.51152560e-02f, 1.55662745e-02f, -7.55750090e-02f, 4.64267656e-02f, 1.06840938e-01f, 1.46118030e-01f, -4.89563830e-02f, 9.93431360e-02f, -8.55714828e-02f, -1.25848889e-01f, 9.04214382e-02f, -9.83981043e-02f, -4.19425853e-02f, -2.18845248e-01f, 1.04291327e-01f, 6.04276434e-02f, 8.47627819e-02f, -3.19354013e-02f, 8.96960199e-02f, -3.80666740e-02f, -1.27697840e-01f, 1.16602555e-01f, -4.86721471e-02f, -2.00404078e-02f, 4.33820358e-04f, -2.41963007e-02f, 9.44377333e-02f, -1.13402940e-01f, 1.54441983e-01f, -6.21834993e-02f, 4.79655601e-02f, 4.17957872e-01f, -1.27584010e-01f, -2.16431364e-01f, -1.97374937e-03f, -1.03103267e-02f, -1.05308145e-01f, -2.78487382e-03f, -8.74692127e-02f, 1.03021942e-01f, -1.22398764e-01f, 1.63182363e-01f, 2.23339215e-01f, 1.51619781e-02f, 7.75940064e-03f, 6.13315478e-02f, -4.63349745e-02f, -1.91256031e-01f, 3.04002315e-02f, -1.40351385e-01f, -2.58211717e-02f, 1.63556337e-01f, -2.15994790e-01f, -9.37260315e-02f, -1.20724082e-01f, -4.86935265e-02f, 1.69598863e-01f, -1.40344262e-01f, -1.56492554e-02f, -2.93590613e-02f, 1.77454203e-01f, 8.86754468e-02f, 1.39782295e-01f, 2.29205061e-02f, -8.31865966e-02f, 5.12111038e-02f, 6.50634468e-02f, -7.25559192e-03f, 1.56966560e-02f, -3.29366811e-02f, -9.51480940e-02f, -1.12466224e-01f, 1.34184808e-01f, -1.85190514e-02f, -3.44241038e-02f, 2.88441102e-03f, -5.22443093e-02f, 2.76800275e-01f, 1.55083425e-02f, -1.13139518e-01f, -7.82907307e-02f, 4.04207148e-02f, -1.59765586e-01f, 5.68327047e-02f, 4.52976860e-02f, 8.98251608e-02f, 5.77608645e-02f, -2.05498159e-01f, 1.92694310e-02f, 1.09445862e-01f, -1.07486919e-01f, 7.74176270e-02f, -2.34839320e-02f, -5.87587990e-02f, -1.99952766e-01f, 4.88866828e-02f, 1.57094464e-01f, -1.27639011e-01f, 1.18134432e-01f, 1.65418327e-01f, 1.58160459e-02f, -1.03516594e-01f, 1.08604118e-01f, 1.09552778e-01f, -3.01288702e-02f, 8.92308801e-02f, 8.78076479e-02f, 1.80325642e-01f, -9.63688716e-02f, -9.48763043e-02f, 1.11239254e-01f, -4.57538664e-02f, -4.64903936e-02f, 3.62795852e-02f, -5.44275902e-02f, 1.01453766e-01f, -9.68999565e-02f, -1.00147367e-01f, 5.05828746e-02f, 2.01076120e-02f, 5.09904325e-02f, 1.33387849e-01f, -5.86754940e-02f, -1.65975168e-02f, 4.78810892e-02f, 1.21149577e-01f, -7.68746883e-02f, -5.41327521e-02f, -4.08202820e-02f, 1.82107426e-02f, -5.09710722e-02f, -5.78883253e-02f, 1.38597578e-01f, 3.97315472e-02f, -2.34697051e-02f, -2.68342383e-02f, 2.48119142e-02f, -8.64342414e-03f, -4.07836251e-02f, 1.35181723e-02f, -7.78336450e-02f, -6.26475587e-02f, 2.00905893e-02f, -7.39092985e-03f, 8.39750767e-02f, -3.35541144e-02f, 9.86860469e-02f, -5.70620932e-02f, 1.22933879e-01f, 3.65988240e-02f, -7.83327147e-02f, -7.11319670e-02f, 2.32027974e-02f, -4.73497249e-02f, -5.38150817e-02f, -3.65512967e-02f, 7.89038390e-02f, -2.66834069e-02f, -5.64240888e-02f, 9.18125920e-03f, 9.88172740e-02f, 1.68722551e-02f, -3.53356823e-02f, 6.53948868e-03f, 2.15070993e-02f, -1.80628616e-02f, 5.74403107e-02f, 2.17355173e-02f, -1.06472000e-01f, -7.84658045e-02f, 1.07785119e-02f, 7.12645650e-02f, -1.06326915e-01f, 8.08671042e-02f, -1.16083669e-02f, -1.47858467e-02f, 4.62195612e-02f, -7.65818432e-02f, -1.30814165e-01f, 2.88332235e-02f, 1.27556264e-01f, 8.22251067e-02f, -6.34733262e-03f, -7.01304227e-02f, 3.80594051e-03f, -1.34418413e-01f, 5.87879531e-02f, 5.80505729e-02f, 1.25298798e-02f, 1.09685898e-01f, 9.59879681e-02f, 6.36788923e-03f, -4.68046330e-02f, -8.04987028e-02f, -4.46980670e-02f, 8.05985257e-02f, -4.70111426e-03f, 5.59057631e-02f, -2.30870675e-02f, 8.69351998e-02f, -8.31296518e-02f, 2.41797008e-02f, -7.99082890e-02f, 7.62604401e-02f, -6.23388402e-02f, -9.75745544e-03f, -8.23382512e-02f, -1.53752863e-02f, 2.88945399e-02f, -5.37200831e-02f, 7.93552771e-02f, 1.27886273e-02f, -6.05425425e-02f, 4.45702150e-02f, -2.06603259e-02f, 6.89669549e-02f, -5.95158935e-02f, 1.64563283e-02f, 8.36538225e-02f, -1.00081436e-01f, -5.99694774e-02f, 1.94207013e-01f, -1.56761464e-02f, 5.23252152e-02f, -9.26710591e-02f, 3.59066613e-02f, 8.66876543e-02f, -2.03602433e-01f, -1.17385782e-01f, -1.16631761e-01f, 1.08733520e-01f, 4.69735153e-02f, 2.89963130e-02f, -8.44228715e-02f, 9.93011221e-02f, 6.87584355e-02f, 1.75104663e-02f, -6.64295256e-02f, -1.04675546e-01f, 1.42710879e-01f, -6.27391338e-02f, 1.29736781e-01f, -1.96640640e-01f, 1.07235387e-02f, -4.66577187e-02f, 1.23463459e-02f, 5.20261303e-02f, -9.65078082e-03f, -3.33436802e-02f, 5.92316538e-02f, 8.82986933e-02f, -1.29388183e-01f, 1.37113631e-01f, -1.02152310e-01f, 8.08595307e-03f, 9.42398533e-02f}
us_layer1_bias: Tensor1D_FP32() = {-2.71837250e-03f, 1.00593327e-03f, -2.91983772e-04f, 1.41876517e-05f, -6.10931893e-04f, -4.02250531e-04f, -9.47722219e-05f, -3.40876228e-04f, -5.34553546e-03f, 3.56744719e-03f, -2.54383660e-04f, -2.86490074e-04f, -6.41522696e-03f, -4.42847200e-02f, -3.19198221e-02f, 2.24299170e-03f}
us_layer2_bias: Tensor1D_FP32() = {-1.33045786e-03f, -2.39597703e-03f, 1.86161429e-03f, 3.07592891e-05f}

Claims (26)

  1. 입력 비디오를 복수의 인코딩된 스트림으로 인코딩하는 방법에 있어서, 상기 인코딩된 스트림은 상기 입력 비디오를 재구성하기 위해 조합될 수 있고, 상기 방법은,
    전체 해상도 입력 비디오를 수신하는 단계;
    다운샘플링된 비디오를 생성하기 위해 상기 전체 해상도 입력 비디오를 다운샘플링하는 단계;
    베이스 인코딩된 스트림을 생성하기 위해 베이스 코덱을 사용하여 상기 다운샘플링된 비디오의 인코딩을 지시하는 단계;
    재구성된 비디오를 생성하기 위해 상기 베이스 인코딩된 스트림의 디코딩을 지시하는 단계;
    제1 잔차(residual) 세트를 생성하기 위해 상기 재구성된 비디오를 상기 다운샘플링된 비디오와 비교하는 단계;
    제1 레벨 인코딩된 스트림을 생성하기 위해 상기 제1 잔차 세트를 인코딩하는 단계;
    디코딩된 제1 잔차 세트를 생성하기 위해 상기 제1 잔차 세트를 디코딩하는 단계;
    상기 디코딩된 제1 잔차 세트를 상기 재구성된 비디오에 적용하여 보정된 재구성된 비디오를 생성하는 단계;
    업샘플링된 재구성된 비디오를 생성하기 위해 상기 보정된 재구성된 비디오를 업샘플링하는 단계;
    제2 잔차 세트를 생성하기 위해 상기 업샘플링된 재구성된 비디오를 상기 전체 해상도 입력 비디오와 비교하는 단계; 및
    상기 입력 비디오의 현재 프레임과 이전 프레임 사이의 차이를 인코딩하기 위해 시간적 버퍼(temporal buffer)를 적용하는 것을 포함하여, 제2 레벨 인코딩된 스트림을 생성하기 위해 상기 제2 잔차 세트를 인코딩하는 단계를 포함하고,
    상기 제1 및 제2 잔차의 인코딩은 상기 베이스 코덱과는 상이한 개선 코덱으로 수행되고,
    상기 베이스 인코딩된 스트림, 상기 제1 레벨 인코딩된 스트림 및 상기 제2 레벨 인코딩된 스트림은 상기 전체 해상도 입력 비디오의 인코딩을 제공하는, 방법.
  2. 청구항 1에 있어서, 각각의 잔차 세트를 인코딩하는 단계는,
    계수 세트를 생성하기 위해 상기 잔차 세트에 변환을 적용하는 단계;
    양자화된 계수 세트를 생성하기 위해 상기 계수 세트에 양자화 연산(quantization operation)을 적용하는 단계; 및
    상기 양자화된 계수 세트에 엔트로피 인코딩 동작을 적용하는 단계를 포함하는, 방법.
  3. 청구항 2에 있어서,
    상기 입력 비디오는 복수의 연속적인 프레임으로 분해되고, 입력 비디오의 프레임은 하나 이상의 관련된 컬러 평면을 가지며,
    상기 방법은 프레임 단위로 복수의 관련된 컬러 평면 각각에 대해 수행되고,
    각각의 잔차 세트를 인코딩하는 단계는 주어진 프레임의 주어진 컬러 평면에 대해:
    잔차 세트의 해상도에서 2 x 2 또는 4 x 4 화소(picture element) 세트와 관련된 2 x 2 또는 4 x 4 코딩 유닛으로서 잔차 세트를 배열하는 단계; 및
    상기 주어진 프레임의 다른 코딩 유닛과 독립적으로 각각의 코딩 유닛을 인코딩하는 단계를 포함하는, 방법.
  4. 청구항 3에 있어서, 변환을 적용하는 단계는 상기 계수 세트가 방향성 성분의 세트를 포함하도록 대응하는 2 x 2 또는 4 x 4 아다마르 변환 커널(Hadamard transform kernel)을 적용하는 단계를 포함하는, 방법.
  5. 청구항 2 내지 4 중 어느 한 항에 있어서, 양자화 연산을 적용하는 단계는 가변 크기의 데드 존을 사용하는 선형 양자화기를 적용하는 단계를 포함하는, 방법.
  6. 청구항 2 내지 5 중 어느 한 항에 있어서, 엔트로피 인코딩 동작을 적용하는 단계는 런-렝스 인코딩(run-length encoding) 및/또는 허프만 인코딩(Huffman encoding) 중 하나 이상을 적용하는 단계를 포함하는, 방법.
  7. 청구항 2 내지 6 중 어느 한 항에 있어서, 디코더에 대한 상기 인코딩의 파라미터를 지정하는 하나 이상의 헤더를 생성하는 단계를 포함하고, 상기 파라미터는,
    베이스 코덱 파라미터;
    변환 파라미터; 및
    양자화 파라미터 중 하나 이상을 포함하는, 방법.
  8. 청구항 2 내지 7 중 어느 한 항에 있어서, 시간적 버퍼를 적용하는 단계는,
    상기 시간적 버퍼로부터 시간적 계수 세트를 도출하는 단계; 및
    상기 제2 계수 세트로부터 상기 시간적 계수 세트를 감산하는 단계를 포함하는, 방법.
  9. 청구항 1 내지 8 중 어느 한 항에 있어서, 상기 제1 잔차 세트 및 상기 제2 잔차 세트 중 하나 이상으로부터 주어진 잔차 세트를 인코딩하는 단계는,
    상기 주어진 잔차 세트의 사전 분석에 기초하여 상기 주어진 잔차 세트를 순위화하는 단계; 및
    인코딩될 상기 주어진 잔차 세트의 서브세트를 선택하는 단계- 상기 인코딩은 상기 주어진 잔차 세트를 후속하여 변환하는 단계를 포함함 -를 포함하는, 방법.
  10. 청구항 1 내지 9 중 어느 한 항에 있어서, 업샘플링은 신경망 업샘플러를 적용하는 것을 포함하는, 방법.
  11. 청구항 10에 있어서, 상기 신경망 업샘플러는 2개의 컨볼루션 신경망 계층 사이에 비선형성을 갖는 2-계층 컨볼루션 신경망을 포함하고, 상기 컨볼루션 신경망은 대응하는 재구성된 비디오가 주어지면 상기 전체 해상도 입력 비디오를 예측하도록 훈련되는, 방법.
  12. 청구항 1 내지 11 중 어느 한 항에 있어서,
    복수의 코딩 유닛에 대한 시간적 모드(temporal mode) 메타데이터를 획득하는 단계;
    상기 획득된 시간적 모드 메타데이터에 기초하여 상기 복수의 코딩 유닛에 대한 인코딩에 사용할 시간적 모드를 결정하는 단계; 및
    상기 결정된 시간적 모드 및 상기 획득된 시간적 모드 메타데이터에 기초하여 상기 복수의 코딩 유닛에 대한 시간적 모드 시그널링 데이터를 생성하는 단계를 포함하는, 방법.
  13. 청구항 1 내지 12 중 어느 한 항에 있어서,
    프레임에 대한 하나 이상의 시간적 리프레시 파라미터(refresh parameter)를 설정하는 단계- 상기 시간적 리프레시 파라미터는 상기 디코더에 상기 시간적 버퍼의 리프레시를 시그널링하는 데 사용됨 -를 포함하는, 방법.
  14. 청구항 1 내지 13 중 어느 한 항에 있어서,
    상기 베이스 인코딩된 스트림, 상기 제1 레벨 인코딩된 스트림 및 상기 제2 레벨 인코딩된 스트림을 조합하여 조합된 스트림을 생성하는 단계; 및
    상기 조합된 스트림을 디코더로 전송하는 단계를 포함하는, 방법.
  15. 복수의 인코딩된 스트림을 재구성된 출력 비디오로 디코딩하는 방법에 있어서,
    제1 베이스 인코딩된 스트림을 수신하는 단계;
    제1 출력 비디오를 생성하기 위해 베이스 코덱을 사용하여 상기 제1 베이스 인코딩된 스트림의 디코딩을 지시하는 단계;
    제1 레벨 인코딩된 스트림을 수신하는 단계;
    제1 잔차 세트를 생성하기 위해 개선 코덱을 사용하여 상기 제1 레벨 인코딩된 스트림을 디코딩하는 단계- 상기 개선 코덱은 베이스 코덱과 상이함 -;
    제1 재구성된 비디오를 생성하기 위해 상기 제1 잔차 세트를 상기 제1 출력 비디오와 조합하는 단계;
    제2 레벨 인코딩된 스트림을 수신하는 단계;
    제2 잔차 세트를 재구성하기 위해 상기 제2 레벨 인코딩된 스트림으로부터 도출된 데이터에 시간적 버퍼를 적용하는 것을 포함하여, 제2 잔차 세트를 생성하기 위해 상기 개선 코덱을 사용하여 상기 제2 레벨 인코딩된 스트림을 디코딩하는 단계;
    업샘플링된 재구성된 비디오를 생성하기 위해 상기 제1 재구성된 비디오를 업샘플링하는 단계; 및
    원래 인코딩된 전체 해상도 입력 비디오의 재구성된 버전을 포함하는 제2 재구성된 비디오를 생성하기 위해 상기 제2 잔차 세트를 상기 업샘플링된 재구성된 비디오와 조합하는 단계를 포함하는, 방법.
  16. 청구항 15에 있어서,
    상기 제1 및 제2 레벨 인코딩된 스트림 중 하나 이상과 관련된 하나 이상의 헤더로부터 복수의 디코딩 파라미터를 검색하는 단계를 포함하고,
    상기 디코딩 파라미터는 상기 디코딩 동작을 구성하는 데 사용되는, 방법.
  17. 청구항 15 또는 16에 있어서, 상기 제1 및 제2 레벨 인코딩된 스트림 각각을 디코딩하는 단계는,
    엔트로피 디코딩 동작을 적용하는 단계;
    상기 엔트로피 디코딩 동작으로부터 도출된 데이터에 탈양자화 연산을 적용하는 단계; 및
    상기 잔차 세트를 생성하기 위해 상기 탈양자화 연산으로부터 도출된 데이터에 역변환 동작을 적용하는 단계를 포함하는, 방법.
  18. 청구항 15 내지 17 중 어느 한 항에 있어서, 상기 제1 재구성된 비디오를 업샘플링하는 단계는,
    상기 업샘플링된 재구성된 비디오의 블록이 도출된 상기 제1 잔차 세트의 요소 값을 상기 업샘플링된 재구성된 비디오의 대응하는 블록에 추가하는 단계를 포함하는, 방법.
  19. 청구항 15 내지 18 중 어느 한 항에 있어서,
    상기 입력 비디오는 복수의 연속적인 프레임으로 분해되고, 입력 비디오의 프레임은 하나 이상의 관련된 컬러 평면을 가지며,
    상기 방법은 프레임 단위로 복수의 관련된 컬러 평면 각각에 대해 수행되고,
    각각의 잔차 세트를 디코딩하는 단계는 주어진 프레임의 주어진 컬러 평면에 대해:
    잔차 세트의 해상도에서 2 x 2 또는 4 x 4 화소 세트와 관련된 2 x 2 또는 4 x 4 코딩 유닛으로서 잔차 세트를 배열하는 단계; 및
    상기 주어진 프레임의 다른 코딩 유닛과 독립적으로 각각의 코딩 유닛을 디코딩하는 단계를 포함하는, 방법.
  20. 청구항 15 내지 19 중 어느 한 항에 있어서, 상기 시간적 버퍼를 적용하는 단계는,
    제2 시간적 모드가 표시되는 것에 응답하여 상기 시간적 버퍼로부터의 데이터를 상기 제2 레벨 인코딩된 스트림으로부터 디코딩된 데이터에 추가하는 단계를 포함하는, 방법.
  21. 인코더에 있어서,
    입력 비디오를 수신하는 입력 비디오 인터페이스;
    상기 입력 비디오를 다운샘플링하는 다운샘플러;
    디코딩된 베이스 인코딩된 스트림을 수신하기 위한 베이스 코덱 인터페이스- 상기 베이스 인코딩된 스트림은 상기 다운샘플링된 입력 비디오에 베이스 코덱을 적용하여 생성됨 -;
    상기 다운샘플링된 입력 비디오로부터 상기 디코딩된 베이스 인코딩된 스트림을 감산하여 제1 잔차 세트를 생성하는 제1 잔차 생성기;
    제1 레벨 인코딩된 스트림을 생성하기 위해 상기 제1 잔차 세트를 인코딩하는 제1 레벨 인코더;
    디코딩된 제1 잔차 세트를 획득하기 위해 상기 제1 레벨 인코딩된 스트림을 디코딩하는 제1 레벨 디코더;
    보정된 재구성된 비디오를 생성하기 위해 상기 디코딩된 베이스 인코딩된 스트림에 상기 디코딩된 제1 잔차 세트를 추가하는 합산 컴포넌트;
    업샘플링된 재구성된 비디오를 생성하기 위해 상기 보정된 재구성된 비디오를 업샘플링하는 업샘플러;
    상기 입력 비디오로부터 상기 업샘플링된 재구성된 비디오를 감산함으로써 제2 잔차 세트를 생성하는 제2 잔차 생성기;
    제2 레벨 인코딩된 스트림을 생성하기 위해 상기 제2 잔차 세트를 인코딩하는 제2 레벨 인코더;
    시간적 예측이 상기 제2 잔차 세트에 적용될 것인지 여부를 결정하기 위한 시간적 선택 컴포넌트; 및
    상기 제2 레벨 인코딩된 스트림을 생성할 때 상기 제2 잔차 세트에 시간적 예측을 적용하기 위한 시간적 버퍼를 포함하고,
    상기 제1 레벨 인코더 및 상기 제2 레벨 인코더는 상기 베이스 코덱과는 상이한 개선 코덱을 구현하고,
    상기 베이스 인코딩된 스트림, 상기 제1 레벨 인코딩된 스트림 및 상기 제2 레벨 인코딩된 스트림은 상기 전체 해상도 입력 비디오의 인코딩을 제공하는, 인코더.
  22. 청구항 21에 있어서,
    상기 제1 레벨 인코더 및 상기 제2 레벨 인코더 중 각각의 하나 이상에 의한 상기 제1 잔차 세트 및 상기 제2 잔차 세트 중 하나 이상의 선택적 순위화 및 필터링을 지시하는 잔차 모드 선택 컴포넌트를 포함하는, 인코더.
  23. 청구항 21 또는 청구항 22에 있어서, 상기 제1 레벨 인코더 및 상기 제2 레벨 인코더 각각은
    2 x 2 또는 4 x 4 아다마르 변환을 적용하기 위한 변환 컴포넌트;
    양자화 컴포넌트; 및
    런-렝스 인코딩 및 허프만 인코딩 중 하나 이상을 적용하기 위한 엔트로피 인코딩 컴포넌트를 포함하는, 인코더.
  24. 디코더에 있어서,
    베이스 인코딩된 스트림의 디코딩된 버전을 수신하기 위한 베이스 레벨 인터페이스- 상기 베이스 인코딩된 스트림은 베이스 코덱을 사용하여 디코딩됨 -;
    제1 레벨 인코딩된 스트림 및 제2 레벨 인코딩된 스트림을 수신하기 위한 개선 레벨 인터페이스
    제1 잔차 세트를 획득하기 위해 상기 제1 레벨 인코딩된 스트림을 디코딩하는 제1 레벨 디코더;
    제1 재구성된 비디오를 생성하기 위해 베이스 인코딩된 스트림의 상기 디코딩된 버전에 상기 제1 잔차 세트를 추가하는 제1 합산 컴포넌트;
    업샘플링된 재구성된 비디오를 생성하기 위해 상기 제1 재구성된 비디오를 업샘플링하는 업샘플러;
    제2 잔차 세트를 획득하기 위해 상기 제2 레벨 인코딩된 스트림을 디코딩하는 제2 레벨 디코더;
    상기 제1 및 제2 레벨 인코딩된 스트림 중 하나 이상을 수반하는 헤더 정보를 사용하여 상기 제2 잔차 세트에 시간적 예측이 적용될지 여부를 결정하기 위한 시간적 선택 컴포넌트;
    상기 제2 레벨 인코딩된 스트림을 디코딩할 때 상기 제2 잔차 세트에 시간적 예측을 적용하기 위한 시간적 버퍼; 및
    원래 인코딩된 전체 해상도 입력 비디오의 재구성된 버전을 포함하는 제2 재구성된 비디오를 생성하기 위해 상기 제2 잔차 세트를 상기 업샘플링된 재구성된 비디오에 추가하는 제2 합산 컴포넌트를 포함하는, 디코더.
  25. 청구항 24에 있어서, 상기 제1 레벨 디코더 및 상기 제2 레벨 디코더 각각은
    런-렝스 인코딩 및 허프만 인코딩 중 하나 이상을 적용하기 위한 엔트로피 디코딩 컴포넌트;
    탈양자화 컴포넌트; 및
    2 x 2 또는 4 x 4 아다마르 역변환을 적용하기 위한 역변환 컴포넌트를 포함하는, 디코더.
  26. 적어도 하나의 프로세서에 의해 실행될 때, 상기 적어도 하나의 프로세서로 하여금 청구항 1 내지 20 중 어느 한 항의 방법을 수행하게 하는 명령어를 저장하는 비일시적 컴퓨터 판독 가능 저장 매체.
KR1020217033585A 2019-03-20 2020-03-18 낮은 복잡도 향상 비디오 코딩 KR20220003511A (ko)

Applications Claiming Priority (45)

Application Number Priority Date Filing Date Title
GBGB1903844.7A GB201903844D0 (en) 2019-03-20 2019-03-20 A method of encoding and decoding a video
GB1903844.7 2019-03-20
GB1904014.6 2019-03-23
GBGB1904014.6A GB201904014D0 (en) 2019-03-23 2019-03-23 Video coding technology
GBGB1904492.4A GB201904492D0 (en) 2019-03-29 2019-03-29 Video coding technology
GB1904492.4 2019-03-29
GB1905325.5 2019-04-15
GBGB1905325.5A GB201905325D0 (en) 2019-04-15 2019-04-15 Video coding technology
GBGB1909701.3A GB201909701D0 (en) 2019-07-05 2019-07-05 Video coding technology
GB1909701.3 2019-07-05
GBGB1909724.5A GB201909724D0 (en) 2019-07-06 2019-07-06 Video coding technology
GB1909724.5 2019-07-06
GBGB1909997.7A GB201909997D0 (en) 2019-07-11 2019-07-11 Encapsulation structure
GB1909997.7 2019-07-11
GBGB1910674.9A GB201910674D0 (en) 2019-07-25 2019-07-25 Video Coding Technology
GB1910674.9 2019-07-25
GBGB1911467.7A GB201911467D0 (en) 2019-08-09 2019-08-09 Video coding technology
GB1911467.7 2019-08-09
GBGB1911546.8A GB201911546D0 (en) 2019-08-13 2019-08-13 Video coding technology
GB1911546.8 2019-08-13
GB201914215A GB201914215D0 (en) 2019-10-02 2019-10-02 Video coding technology
GB1914215.7 2019-10-02
GB201914414A GB201914414D0 (en) 2019-10-06 2019-10-06 Video coding technology
GB1914414.6 2019-10-06
GB1914634.9 2019-10-10
GB201914634A GB201914634D0 (en) 2019-10-10 2019-10-10 Video coding technology
GB1915553.0 2019-10-25
GB201915553A GB201915553D0 (en) 2019-10-25 2019-10-25 Video Coding technology
GBGB1916090.2A GB201916090D0 (en) 2019-11-05 2019-11-05 Video coding technology
GB1916090.2 2019-11-05
GB1918099.1 2019-12-10
GBGB1918099.1A GB201918099D0 (en) 2019-12-10 2019-12-10 Video coding technology
GBGB2000430.5A GB202000430D0 (en) 2020-01-12 2020-01-12 Video Coding technologies
GB2000430.5 2020-01-12
GB2000483.4 2020-01-13
GBGB2000483.4A GB202000483D0 (en) 2020-01-13 2020-01-13 Video coding technology
GB2000600.3 2020-01-15
GBGB2000600.3A GB202000600D0 (en) 2020-01-15 2020-01-15 Video coding technology
GB2000668.0 2020-01-16
GBGB2000668.0A GB202000668D0 (en) 2020-01-16 2020-01-16 Video coding technology
GB2001408.0 2020-01-31
GBGB2001408.0A GB202001408D0 (en) 2020-01-31 2020-01-31 Video coding technology
US202062984261P 2020-03-02 2020-03-02
US62/984,261 2020-03-02
PCT/GB2020/050695 WO2020188273A1 (en) 2019-03-20 2020-03-18 Low complexity enhancement video coding

Publications (1)

Publication Number Publication Date
KR20220003511A true KR20220003511A (ko) 2022-01-10

Family

ID=72519683

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217033585A KR20220003511A (ko) 2019-03-20 2020-03-18 낮은 복잡도 향상 비디오 코딩

Country Status (8)

Country Link
US (3) US20220400270A1 (ko)
EP (2) EP3942813B1 (ko)
KR (1) KR20220003511A (ko)
CN (2) CN114503573A (ko)
AU (1) AU2020243405A1 (ko)
CA (1) CA3133887A1 (ko)
GB (33) GB2618718B (ko)
WO (2) WO2020188271A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024076141A1 (ko) * 2022-10-05 2024-04-11 엘지전자 주식회사 포스트 디코딩 필터에 기반한 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장하는 기록 매체

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020188237A1 (en) * 2019-03-20 2020-09-24 V-Nova International Ltd Residual filtering in signal enhancement coding
WO2021122365A1 (en) * 2019-12-19 2021-06-24 Telefonaktiebolaget Lm Ericsson (Publ) Output process disable indicator
US11356706B2 (en) 2020-01-08 2022-06-07 Qualcomm Incorporated Storage and delivery of video data for video coding
KR20230015391A (ko) * 2020-05-22 2023-01-31 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 서브-비트스트림 추출에서 코딩된 비디오의 핸들링
GB2599341A (en) 2020-07-28 2022-04-06 V Nova Int Ltd Management system for multilayer encoders and decoders and method thereof
US11647212B2 (en) 2020-09-30 2023-05-09 Qualcomm Incorporated Activation function design in neural network-based filtering process for video coding
GB202016115D0 (en) 2020-10-10 2020-11-25 V Nova Int Ltd Management of aspect ratio in hierarchical coding schemes
US20220159278A1 (en) * 2020-11-16 2022-05-19 Qualcomm Incorporated Skip convolutions for efficient video processing
GB2601368B (en) 2020-11-27 2023-09-20 V Nova Int Ltd Video decoding using post-processing control
GB2601362B (en) 2020-11-27 2023-08-16 V Nova Int Ltd Video encoding using pre-processing
GB2601364B (en) 2020-11-27 2023-09-06 V Nova Int Ltd Decoding a video stream within a browser
GB2601484A (en) 2020-11-27 2022-06-08 V Nova Int Ltd Decoding a video stream on a client device
US11558617B2 (en) 2020-11-30 2023-01-17 Tencent America LLC End-to-end dependent quantization with deep reinforcement learning
US20210105466A1 (en) * 2020-12-18 2021-04-08 Intel Corporation Offloading video coding processes to hardware for better density-quality tradeoffs
US11948271B2 (en) * 2020-12-23 2024-04-02 Netflix, Inc. Machine learning techniques for video downsampling
CN116803079A (zh) * 2021-01-13 2023-09-22 华为技术有限公司 视频和相关特征的可分级译码
WO2022173440A1 (en) * 2021-02-12 2022-08-18 Google Llc Parameterized noise synthesis for graphical artifact removal
GB202103498D0 (en) * 2021-03-12 2021-04-28 V Nova Int Ltd Processing of residuals in video coding
US11818353B2 (en) * 2021-05-13 2023-11-14 Qualcomm Incorporated Reduced complexity transforms for high bit-depth video coding
GB202107036D0 (en) 2021-05-17 2021-06-30 V Nova Int Ltd Secure decoder and secure decoding methods
FR3124671B1 (fr) * 2021-06-25 2023-07-07 Fond B Com Procédés de décodage et de codage d’une image, dispositifs et signal associés
WO2023055759A1 (en) * 2021-09-29 2023-04-06 Op Solutions, Llc Systems and methods for scalable video coding for machines
GB2607123B (en) 2021-10-25 2023-10-11 V Nova Int Ltd Enhancement decoding implementation and method
GB2613015A (en) 2021-11-22 2023-05-24 V Nova Int Ltd Decoding a multi-layer video stream using a joint packet stream
WO2023089340A1 (en) 2021-11-22 2023-05-25 V-Nova International Ltd Processing a multi-layer video stream
GB2614054A (en) 2021-12-17 2023-06-28 V Nova Int Ltd Digital image processing
GB2613886A (en) 2021-12-20 2023-06-21 V Nova Int Ltd Synchronising frame decoding in a multi-layer video stream
WO2023135410A1 (en) 2022-01-11 2023-07-20 V-Nova International Ltd Integrating a decoder for hierarchical video coding
WO2023135420A1 (en) 2022-01-12 2023-07-20 V-Nova International Ltd Secure enhancement decoding implementation
US11838513B2 (en) * 2022-01-14 2023-12-05 Meta Platforms Technologies, Llc Progressive transmission of detailed image data via video compression of successive subsampled frames
WO2023158649A1 (en) * 2022-02-17 2023-08-24 Op Solutions, Llc Systems and methods for video coding for machines using an autoencoder
GB2614763B (en) 2022-03-29 2024-05-01 V Nova Int Ltd Upsampling filter for applying a predicted average modification
GB2611131B (en) 2022-03-31 2023-11-22 V Nova Int Ltd Pre-analysis for video encoding
GB2617319A (en) * 2022-03-31 2023-10-11 V Nova Int Ltd Low complexity enhancement video coding with signal element modification
GB2611129B (en) 2022-03-31 2024-03-27 V Nova Int Ltd Signal processing with overlay regions
GB202205618D0 (en) 2022-04-14 2022-06-01 V Nova Int Ltd Extended reality encoding
GB202205928D0 (en) 2022-04-22 2022-06-08 V Nova Int Ltd Methods, bitstreams, apparatuses, computer programs and computer-readable media
GB2619096A (en) 2022-05-27 2023-11-29 V Nova Int Ltd Enhancement interlacing
WO2024003577A1 (en) 2022-07-01 2024-01-04 V-Nova International Ltd Applications of layered encoding in split computing
WO2024016106A1 (en) * 2022-07-18 2024-01-25 Intel Corporation Low-complexity enhancement video coding using multiple reference frames
GB2620922A (en) * 2022-07-22 2024-01-31 V Nova Int Ltd Data processing in an encoding process
GB2620994A (en) 2022-08-22 2024-01-31 V Nova Int Ltd Encoding and decoding of pre-processing renditions of input videos
US20240098285A1 (en) 2022-09-20 2024-03-21 V-Nova International Limited Method for decoding a video stream
WO2024065464A1 (en) * 2022-09-29 2024-04-04 Intel Corporation Low-complexity enhancment video coding using tile-level quantization parameters
US11695965B1 (en) 2022-10-13 2023-07-04 Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. Video coding using a coded picture buffer
GB2620996A (en) 2022-10-14 2024-01-31 V Nova Int Ltd Processing a multi-layer video stream
GB2620655A (en) 2022-11-01 2024-01-17 V Nova Int Ltd Image processing using residual frames and differential frames
GB2624478A (en) * 2023-03-24 2024-05-22 V Nova Int Ltd Method of decoding a video signal
CN116156170B (zh) * 2023-04-24 2024-04-16 北京中星微人工智能芯片技术有限公司 数据流的发送方法、装置、电子设备和存储介质
CN116366868B (zh) * 2023-05-31 2023-08-25 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种并发视频包过滤方法、系统及储存介质
CN117335929B (zh) * 2023-12-01 2024-02-20 十方星链(苏州)航天科技有限公司 一种卫星地面站多路并发编码调制通信终端及通信方法

Family Cites Families (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6957350B1 (en) * 1996-01-30 2005-10-18 Dolby Laboratories Licensing Corporation Encrypted and watermarked temporal and resolution layering in advanced television
US5790839A (en) * 1996-12-20 1998-08-04 International Business Machines Corporation System integration of DRAM macros and logic cores in a single chip architecture
US5901304A (en) * 1997-03-13 1999-05-04 International Business Machines Corporation Emulating quasi-synchronous DRAM with asynchronous DRAM
KR100244769B1 (ko) * 1997-06-26 2000-02-15 전주범 스케일러빌리티를 갖는 간 윤곽선 부호화 방법 및 장치
KR100240770B1 (ko) * 1997-07-11 2000-01-15 이형도 에너지보상/역보상기능을개선한스케러블부호화기및그방법
JPH11289542A (ja) * 1998-02-09 1999-10-19 Matsushita Electric Ind Co Ltd 画像符号化装置、画像符号化方法、および画像符号化プログラムを記録した記録媒体
US6765962B1 (en) * 1999-12-02 2004-07-20 Sarnoff Corporation Adaptive selection of quantization scales for video encoding
US6826232B2 (en) * 1999-12-20 2004-11-30 Koninklijke Philips Electronics N.V. Fine granular scalable video with embedded DCT coding of the enhancement layer
KR20020070362A (ko) * 1999-12-22 2002-09-06 제너럴 인스트루먼트 코포레이션 공간 스케일성 및 시뮬캐스트 코딩을 이용한 멀티캐스트환경의 비디오 압축
US7477688B1 (en) * 2000-01-26 2009-01-13 Cisco Technology, Inc. Methods for efficient bandwidth scaling of compressed video data
US7095782B1 (en) * 2000-03-01 2006-08-22 Koninklijke Philips Electronics N.V. Method and apparatus for streaming scalable video
US7751473B2 (en) * 2000-05-15 2010-07-06 Nokia Corporation Video coding
US6771703B1 (en) * 2000-06-30 2004-08-03 Emc Corporation Efficient scaling of nonscalable MPEG-2 Video
US7016412B1 (en) * 2000-08-29 2006-03-21 Koninklijke Philips Electronics N.V. System and method for dynamic adaptive decoding of scalable video to balance CPU load
WO2002035854A1 (en) * 2000-10-24 2002-05-02 Eyeball Networks Inc. Dct-based scalable video compression
JP3703088B2 (ja) * 2001-06-08 2005-10-05 日本ビクター株式会社 拡張画像符号化装置及び拡張画像復号化装置
US7263124B2 (en) * 2001-09-26 2007-08-28 Intel Corporation Scalable coding scheme for low latency applications
WO2003036979A1 (en) * 2001-10-26 2003-05-01 Koninklijke Philips Electronics N.V. Spatial scalable compression scheme using adaptive content filtering
US7729421B2 (en) * 2002-02-20 2010-06-01 International Business Machines Corporation Low latency video decoder with high-quality, variable scaling and minimal frame buffer memory
US7391807B2 (en) * 2002-04-24 2008-06-24 Mitsubishi Electric Research Laboratories, Inc. Video transcoding of scalable multi-layer videos to single layer video
US7072394B2 (en) * 2002-08-27 2006-07-04 National Chiao Tung University Architecture and method for fine granularity scalable video coding
KR20060105409A (ko) * 2005-04-01 2006-10-11 엘지전자 주식회사 영상 신호의 스케일러블 인코딩 및 디코딩 방법
US20070064937A1 (en) * 2003-11-28 2007-03-22 Van Leest Adriaan J Method and apparatus for encoding or decoding a bitstream
US7369610B2 (en) * 2003-12-01 2008-05-06 Microsoft Corporation Enhancement layer switching for scalable video coding
EP1692872A1 (en) * 2003-12-03 2006-08-23 Koninklijke Philips Electronics N.V. System and method for improved scalability support in mpeg-2 systems
KR20050078099A (ko) * 2004-01-30 2005-08-04 삼성전자주식회사 적응적으로 키 프레임을 삽입하는 비디오 코딩 장치 및 방법
US7697608B2 (en) * 2004-02-03 2010-04-13 Sony Corporation Scalable MPEG video/macro block rate control
US20050259729A1 (en) * 2004-05-21 2005-11-24 Shijun Sun Video coding with quality scalability
KR100679011B1 (ko) * 2004-07-15 2007-02-05 삼성전자주식회사 기초 계층을 이용하는 스케일러블 비디오 코딩 방법 및 장치
CN101213840B (zh) * 2005-02-18 2011-02-02 汤姆森许可贸易公司 从低分辨率图像导出高分辨率图像的编码信息的方法以及实现该方法的编码和解码设备
KR100732961B1 (ko) * 2005-04-01 2007-06-27 경희대학교 산학협력단 다시점 영상의 스케일러블 부호화, 복호화 방법 및 장치
KR100878811B1 (ko) * 2005-05-26 2009-01-14 엘지전자 주식회사 비디오 신호의 디코딩 방법 및 이의 장치
JP4934139B2 (ja) * 2005-08-30 2012-05-16 トムソン ライセンシング Ieee802.11無線ローカル・エリア・ネットワーク上でのスケーラブル・ビデオ・マルチキャストのためのクロス・レイヤ最適化
JP2007081720A (ja) * 2005-09-13 2007-03-29 Sanyo Electric Co Ltd 符号化方法
WO2007081134A1 (en) * 2006-01-09 2007-07-19 Lg Electronics Inc. Inter-layer prediction method for video signal
JP2007266750A (ja) * 2006-03-27 2007-10-11 Sanyo Electric Co Ltd 符号化方法
EP1933564A1 (en) * 2006-12-14 2008-06-18 Thomson Licensing Method and apparatus for encoding and/or decoding video data using adaptive prediction order for spatial and bit depth prediction
US8737474B2 (en) * 2007-06-27 2014-05-27 Thomson Licensing Method and apparatus for encoding and/or decoding video data using enhancement layer residual prediction for bit depth scalability
KR101365596B1 (ko) * 2007-09-14 2014-03-12 삼성전자주식회사 영상 부호화장치 및 방법과 그 영상 복호화장치 및 방법
KR101365597B1 (ko) * 2007-10-24 2014-02-20 삼성전자주식회사 영상 부호화장치 및 방법과 그 영상 복호화장치 및 방법
CN101459835A (zh) * 2007-12-12 2009-06-17 上海摩波彼克半导体有限公司 认知无线电网络中提高跨层多媒体传输质量的方法
US8711948B2 (en) * 2008-03-21 2014-04-29 Microsoft Corporation Motion-compensated prediction of inter-layer residuals
US9571856B2 (en) * 2008-08-25 2017-02-14 Microsoft Technology Licensing, Llc Conversion operations in scalable video encoding and decoding
US9338466B2 (en) * 2008-10-15 2016-05-10 France Telecom Method and device for coding an image sequence implementing blocks of different size, signal, data medium, decoding method and device, and computer programs corresponding thereto
JP2011199396A (ja) * 2010-03-17 2011-10-06 Ntt Docomo Inc 動画像予測符号化装置、動画像予測符号化方法、動画像予測符号化プログラム、動画像予測復号装置、動画像予測復号方法、及び動画像予測復号プログラム
TWI416961B (zh) * 2010-04-02 2013-11-21 Univ Nat Chiao Tung 用於可調式視訊編碼系統之選擇性移動向量預測方法、移動估測方法及其裝置
US20110268175A1 (en) * 2010-04-30 2011-11-03 Wai-Tian Tan Differential protection of a live scalable media
EP2664151A4 (en) * 2011-01-14 2016-01-20 Vidyo Inc HIGH-COATED SYNTAX FOR TIMELY SCALABILITY
US10873772B2 (en) * 2011-07-21 2020-12-22 V-Nova International Limited Transmission of reconstruction data in a tiered signal quality hierarchy
US8977065B2 (en) 2011-07-21 2015-03-10 Luca Rossato Inheritance in a tiered signal quality hierarchy
US9129411B2 (en) 2011-07-21 2015-09-08 Luca Rossato Upsampling in a tiered signal quality hierarchy
US8948248B2 (en) 2011-07-21 2015-02-03 Luca Rossato Tiered signal decoding and signal reconstruction
US8531321B1 (en) 2011-07-21 2013-09-10 Luca Rossato Signal processing and inheritance in a tiered signal quality hierarchy
US8711943B2 (en) 2011-07-21 2014-04-29 Luca Rossato Signal processing and tiered signal encoding
US20130028324A1 (en) * 2011-07-29 2013-01-31 National Chiao Tung University Method and device for decoding a scalable video signal utilizing an inter-layer prediction
US9300980B2 (en) 2011-11-10 2016-03-29 Luca Rossato Upsampling and downsampling of motion maps and other auxiliary maps in a tiered signal quality hierarchy
US9510018B2 (en) 2011-11-23 2016-11-29 Luca Rossato Signal analysis and generation of transient information
JP6303176B2 (ja) 2012-01-18 2018-04-04 ロッサト、ルカ 信号をデコードする方法、コンピュータプログラム及びデコーダ
EP2837190A1 (en) * 2012-04-11 2015-02-18 Motorola Mobility LLC Signaling of temporal motion vector predictor (mvp) flag for temporal prediction
EA201492099A1 (ru) 2012-05-14 2015-04-30 Лука Россато Разложение остаточных данных при кодировании, декодировании и реконструкции сигнала в многоуровневой иерархии
KR102001415B1 (ko) * 2012-06-01 2019-07-18 삼성전자주식회사 다계층 비디오 코딩을 위한 레이트 제어 방법, 이를 이용한 비디오 인코딩 장치 및 비디오 신호 처리 시스템
US9124899B2 (en) * 2012-09-28 2015-09-01 Sharp Laboratories Of America, Inc. Motion derivation and coding for scaling video
GB2509702B (en) * 2013-01-04 2015-04-22 Canon Kk Video coding
JP6290924B2 (ja) * 2013-01-07 2018-03-07 ノキア テクノロジーズ オサケユイチア ビデオ・コーディングおよびデコーディングのための方法と装置
US9148667B2 (en) * 2013-02-06 2015-09-29 Qualcomm Incorporated Intra prediction mode decision with reduced storage
US9749627B2 (en) * 2013-04-08 2017-08-29 Microsoft Technology Licensing, Llc Control data for motion-constrained tile set
JP6457488B2 (ja) * 2013-04-15 2019-01-23 ロッサト、ルカ ハイブリッド上位互換性のあるデータストリームをデコードするための方法
GB2516224A (en) * 2013-07-11 2015-01-21 Nokia Corp An apparatus, a method and a computer program for video coding and decoding
GB2516424A (en) * 2013-07-15 2015-01-28 Nokia Corp A method, an apparatus and a computer program product for video coding and decoding
US10567804B2 (en) * 2014-01-08 2020-02-18 Qualcomm Incorporated Carriage of HEVC extension bitstreams and buffer model with MPEG-2 systems
JP5753595B2 (ja) * 2014-01-30 2015-07-22 株式会社Nttドコモ 動画像予測符号化装置、動画像予測符号化方法、動画像予測符号化プログラム、動画像予測復号装置、動画像予測復号方法、及び動画像予測復号プログラム
US10448029B2 (en) * 2014-04-17 2019-10-15 Qualcomm Incorporated Signaling bit depth values for 3D color prediction for color gamut scalability
FI20165114A (fi) * 2016-02-17 2017-08-18 Nokia Technologies Oy Laitteisto, menetelmä ja tietokoneohjelma videokoodausta ja videokoodauksen purkua varten
US9836820B2 (en) * 2016-03-03 2017-12-05 Mitsubishi Electric Research Laboratories, Inc. Image upsampling using global and local constraints
FI20165256L (fi) * 2016-03-24 2017-09-25 Nokia Technologies Oy Laitteisto, menetelmä ja tietokoneohjelma videokoodaukseen ja -dekoodaukseen
GB2553086B (en) 2016-07-20 2022-03-02 V Nova Int Ltd Decoder devices, methods and computer programs
GB2552353B (en) * 2016-07-20 2022-04-20 V Nova Int Ltd Apparatuses, methods, computer programs and computer-readable media
GB2553556B (en) * 2016-09-08 2022-06-29 V Nova Int Ltd Data processing apparatuses, methods, computer programs and computer-readable media
GB2554686A (en) * 2016-10-04 2018-04-11 Nokia Technologies Oy An apparatus, a method and a computer program for video coding and decoding
EP3668101B1 (en) * 2017-08-10 2024-03-20 Saturn Licensing, LLC Transmission device, transmission method, reception device, and reception method
GB2573486B (en) 2017-12-06 2022-12-21 V Nova Int Ltd Processing signal data using an upsampling adjuster
US10623736B2 (en) * 2018-06-14 2020-04-14 Telefonaktiebolaget Lm Ericsson (Publ) Tile selection and bandwidth optimization for providing 360° immersive video

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024076141A1 (ko) * 2022-10-05 2024-04-11 엘지전자 주식회사 포스트 디코딩 필터에 기반한 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장하는 기록 매체

Also Published As

Publication number Publication date
GB2619184A (en) 2023-11-29
GB202312636D0 (en) 2023-10-04
GB2619434B (en) 2024-03-27
GB2619431A (en) 2023-12-06
GB2618718A (en) 2023-11-15
GB2618720B (en) 2024-03-13
GB202311828D0 (en) 2023-09-13
GB2618478A (en) 2023-11-08
GB2619432B (en) 2024-04-03
GB2619627A (en) 2023-12-13
GB202312676D0 (en) 2023-10-04
GB202303563D0 (en) 2023-04-26
GB2618722A (en) 2023-11-15
GB202312554D0 (en) 2023-10-04
EP3942813B1 (en) 2024-05-01
GB2619185B (en) 2024-04-03
GB2619431B (en) 2024-02-21
WO2020188273A1 (en) 2020-09-24
GB202312599D0 (en) 2023-10-04
GB202312663D0 (en) 2023-10-04
GB202312662D0 (en) 2023-10-04
WO2020188271A1 (en) 2020-09-24
GB2618721A (en) 2023-11-15
GB2618929B (en) 2024-05-08
GB2599507B (en) 2023-04-26
US20220400270A1 (en) 2022-12-15
EP3942813A1 (en) 2022-01-26
GB202114964D0 (en) 2021-12-01
GB2618717A (en) 2023-11-15
GB202312674D0 (en) 2023-10-04
GB2619629B (en) 2024-05-15
GB2617790B (en) 2024-03-13
GB2620500B (en) 2024-05-15
GB2618478B (en) 2024-03-13
GB2617783A (en) 2023-10-18
GB2599507A (en) 2022-04-06
GB202312675D0 (en) 2023-10-04
GB202114968D0 (en) 2021-12-01
GB202312673D0 (en) 2023-10-04
GB2618720A (en) 2023-11-15
GB2618719B (en) 2024-03-13
GB2618723A (en) 2023-11-15
GB2619630A (en) 2023-12-13
GB2599805A (en) 2022-04-13
EP3942817A1 (en) 2022-01-26
GB2619628A (en) 2023-12-13
US11792440B2 (en) 2023-10-17
GB202312622D0 (en) 2023-10-04
GB202312582D0 (en) 2023-10-04
GB2618716B (en) 2024-03-13
GB2619432A (en) 2023-12-06
GB2619631A (en) 2023-12-13
GB2620499B (en) 2024-04-03
GB202312670D0 (en) 2023-10-04
GB2619631B (en) 2024-04-03
GB2618714B (en) 2024-03-13
GB2620499A (en) 2024-01-10
GB202312596D0 (en) 2023-10-04
GB2619628B (en) 2024-04-03
GB2619436B (en) 2024-02-28
GB2620500A (en) 2024-01-10
CA3133887A1 (en) 2020-09-24
GB202312624D0 (en) 2023-10-04
GB2618716A (en) 2023-11-15
GB2617784B (en) 2024-01-10
GB2619630B (en) 2024-04-10
GB2619434A (en) 2023-12-06
GB202312606D0 (en) 2023-10-04
GB202312595D0 (en) 2023-10-04
GB2619435B (en) 2024-02-21
GB2619435A (en) 2023-12-06
US20240098312A1 (en) 2024-03-21
GB2619430A (en) 2023-12-06
GB202312660D0 (en) 2023-10-04
GB2619436A (en) 2023-12-06
GB2619627B (en) 2024-02-28
GB202312680D0 (en) 2023-10-04
GB202311597D0 (en) 2023-09-13
GB2618717B (en) 2024-02-07
US20220159311A1 (en) 2022-05-19
GB2618722B (en) 2024-04-24
GB2614983A (en) 2023-07-26
GB2614983B (en) 2024-02-14
GB202312666D0 (en) 2023-10-04
GB2618479A (en) 2023-11-08
GB202312658D0 (en) 2023-10-04
GB202312555D0 (en) 2023-10-04
GB2618718B (en) 2024-03-13
GB2619185A (en) 2023-11-29
GB202312644D0 (en) 2023-10-04
GB2617783B (en) 2024-02-07
GB2619184B (en) 2024-04-03
GB2619629A (en) 2023-12-13
GB202312655D0 (en) 2023-10-04
GB2618714A (en) 2023-11-15
GB2617784A (en) 2023-10-18
GB2618721B (en) 2024-03-13
GB202312647D0 (en) 2023-10-04
GB202312672D0 (en) 2023-10-04
GB2618929A (en) 2023-11-22
GB2619430B (en) 2024-02-21
GB2618723B (en) 2024-03-06
GB202312591D0 (en) 2023-10-04
GB2617790A (en) 2023-10-18
GB202312623D0 (en) 2023-10-04
AU2020243405A1 (en) 2021-10-14
GB2618719A (en) 2023-11-15
GB202311598D0 (en) 2023-09-13
GB2618479B (en) 2024-03-13
CN114503573A (zh) 2022-05-13
CN114467304A (zh) 2022-05-10
GB2599805B (en) 2023-09-06

Similar Documents

Publication Publication Date Title
KR20220003511A (ko) 낮은 복잡도 향상 비디오 코딩
CN113168718A (zh) 调色板解码的方法和装置
JP2022529763A (ja) エンコーダ、デコーダ、および対応するイントラ予測方法
US20220385911A1 (en) Use of embedded signalling for backward-compatible scaling improvements and super-resolution signalling
JP2023508060A (ja) ビデオコーディングのためのクロスコンポーネント適応ループフィルタリング
JP7372465B2 (ja) シーケンスパラメータセット内でのサブピクチャのシグナリングのためのエンコーダ、デコーダ、および対応する方法
KR20220127351A (ko) 하이 레벨 신택스를 시그널링하는 것에 관한 인코더, 디코더 및 대응하는 방법
KR20220036948A (ko) 비디오 코딩에서 잔차의 양자화
JP2023520326A (ja) エンコーダ、デコーダ、および対応する方法
GB2619186A (en) Low complexity enhancement video coding