KR20210145719A - 상이한 압축 레벨의 비디오 코딩을 위한 부가 정보 - Google Patents

상이한 압축 레벨의 비디오 코딩을 위한 부가 정보 Download PDF

Info

Publication number
KR20210145719A
KR20210145719A KR1020217019696A KR20217019696A KR20210145719A KR 20210145719 A KR20210145719 A KR 20210145719A KR 1020217019696 A KR1020217019696 A KR 1020217019696A KR 20217019696 A KR20217019696 A KR 20217019696A KR 20210145719 A KR20210145719 A KR 20210145719A
Authority
KR
South Korea
Prior art keywords
blocks
video
frame
side information
block
Prior art date
Application number
KR1020217019696A
Other languages
English (en)
Inventor
아담 에이치. 리
나다니엘 데이비드 니글
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20210145719A publication Critical patent/KR20210145719A/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/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/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/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
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • 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
    • H04N19/14Coding unit complexity, e.g. amount of activity or edge presence estimation
    • 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/167Position within a video image, e.g. region of interest [ROI]
    • 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/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/192Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive
    • H04N19/194Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive involving only two passes
    • 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/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/533Motion estimation using multistep search, e.g. 2D-log search or one-at-a-time search [OTS]
    • 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)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

효율적인 비디오 압축을 수행하기 위한 시스템들, 장치들, 및 방법들이 개시된다. 비디오 처리 시스템은 비디오 스트림을 무선 링크를 통해 수신기로 보내는 송신기를 포함한다. 송신기는 프로세서 및 인코더를 포함한다. 프로세서는 비디오 프레임의 렌더링된 픽셀들의 블록들을 생성하고, 프로세서가 비디오 프레임의 소정의 영역에 대한 압축 레벨이 바로 이웃하는 블록들에 대한 압축 레벨과 상이하다고 예측할 때, 프로세서는 부가 정보를 생성한다. 부가 정보는 비디오 프레임에서의 소정의 영역의 위치 및 압축 레벨 차이를 야기하는 콘텐츠의 유형을 식별한다. 프로세서는 렌더링된 비디오 정보 및 부가 정보를 동반 메타데이터로서 인코더에 보낸다. 인코더는 수신된 부가 정보에 기초하여 인코딩 파라미터들을 업데이트하고, 업데이트된 인코딩 파라미터들에 기초하여 렌더링된 소정의 영역을 압축한다.

Description

상이한 압축 레벨의 비디오 코딩을 위한 부가 정보
비디오 처리 알고리즘들은 복잡하고 많은 상이한 기능들을 포함한다. 높은 계산 요구 사항들을 충족시키기 위해 고급 프로세서들이 사용된다. 비디오 처리 복잡도는 디스플레이 해상도가 증가됨에 따라 증가된다. 또한, 고화질 비디오 인코딩 애플리케이션들이 소비자 시장에서 급속하게 성장하고 있다. 나아가, 비디오 처리는 이용 가능한 데이터 대역폭이 감소되고 처리가 실시간으로 발생함에 따라 더 복잡해진다. 예를 들어, 가상 현실(virtual reality; VR) 게이밍 애플리케이션들과 같은 VR 애플리케이션들이 점점 인기를 얻고 있다.
VR 애플리케이션들에 대해, 무선 통신 링크는 컴퓨터(또는 다른 디바이스)로부터 가상 현실(VR) 헤드셋(또는 머리에 착용하는 디스플레이(head mounted display; HMD))으로 비디오 스트림을 보낸다. VR 비디오 스트림을 무선으로 송신하면 컴퓨터와 HMD를 착용한 사용자 사이에 케이블 연결이 필요하지 않으므로 사용자가 제한 없이 움직일 수 있다. VR 비디오 콘텐츠는 통상적으로 사용자를 위한 몰입형 환경을 만들고 높은 시야를 가능하게 하기 위해 렌즈를 통해 시청된다. 비디오 압축은 이미 복잡한 프로세스이지만, 최종 사용자가 인지하는 비디오 품질 저하를 최소화하면서 저대역폭 무선 링크를 통한 VR 비디오 전송으로 비디오 압축이 더 어려워진다.
상기의 관점에서, 효율적인 비디오 압축을 수행하기 위한 효율적인 방법들 및 시스템들이 요구된다.
본 명세서에 설명된 방법들 및 메커니즘들의 이점들은 첨부 도면들과 함께 이하의 설명을 참조함으로써 더 잘 이해될 수 있으며, 첨부 도면들에서:
도 1은 비디오 처리 시스템의 일 실시 예의 블록도이다.
도 2 는 비디오 처리 시스템의 또 다른 실시 예의 블록도이다.
도 3 은 비디오 프레임에서의 동심원 영역들의 일 실시 예의 블록도이다.
도 4 는 비디오 인코더의 일 실시 예의 블록도이다.
도 5는 비디오 인코딩 로직의 일 실시 예의 블록도이다.
도 6은 효율적인 비디오 렌더링을 수행하기 위한 방법의 일 실시 예의 흐름도이다.
도 7은 효율적인 비디오 압축을 수행하기 위한 방법의 일 실시 예의 흐름도이다.
도 8은 비디오 프레임에서의 블록들의 프레임간 의존성의 일 실시 예의 블록도이다.
도 9은 비디오 프레임에서의 블록들의 프레임간 의존성의 일 실시 예의 블록도이다.
도 10은 효율적인 비디오 압축을 수행하기 위한 방법의 일 실시 예의 흐름도이다.
도 11은 비디오 프레임에서의 블록들의 프레임간 의존성의 일 실시 예의 블록도이다.
도 12은 비디오 프레임에서의 블록들의 프레임간 의존성의 일 실시 예의 블록도이다.
도 13은 효율적인 비디오 압축을 수행하기 위한 방법의 일 실시 예의 흐름도이다.
본 발명은 다양한 수정들 및 대안적인 형태들이 가능하지만, 도면들에서는 구체적인 실시 예들이 예로서 도시되고 본 명세서에서는 이를 더 상세하게 설명한다. 하지만, 도면들 및 이에 대한 상세한 설명은 본 발명을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 반대로 본 발명은 첨부된 청구항들에 의해 정의되는 바와 같은 본 발명의 범위 내에 속하는 모든 수정들, 균등물들 및 대안 예들을 커버한다.
이하의 설명에서는, 본 명세서에서 제시되는 방법들 및 메커니즘들에 대한 완전한 이해를 제공하기 위해 많은 구체적인 세부 사항들이 제시된다. 그러나, 당업자는 다양한 실시 예들이 이러한 구체적인 세부 사항들 없이도 실시될 수 있다는 것을 인식해야 한다. 일부 사례들에서, 주지되어 있는 구조들, 구성요소들, 신호들, 컴퓨터 프로그램 명령어들, 및 기술들은 본 명세서에서 설명되는 접근법들을 모호하게 하는 것을 방지하기 위해 상세하게 제시되지 않는다. 도시의 단순성 및 명료성을 위해, 도면들에 도시된 요소들은 반드시 일정한 비율로 그려지지 않았다고 이해될 것이다. 예를 들어, 일부 요소들의 치수들은 다른 요소들에 비해 과장될 수 있다.
다양한 실시 예들에서, 비디오 처리 시스템은 비디오 스트림을 무선 링크를 통해 수신기로 보내는 송신기를 포함한다. 송신기는 프로세서 및 비디오 인코더(또는 인코더)를 포함한다. 일부 구현들에서, 프로세서는 GPU 이고, 프로세서는 비디오 프레임의 픽셀들의 다수의 블록들을 생성한다. 생성된 픽셀들의 블록들은 비디오 프레임의 렌더링된 픽셀들의 블록들에 대응한다. 다양한 실시 예들에서, 프로세서는 비디오 프레임의 하나 이상의 블록을 포함하는 소정의 영역에 대한 압축 레벨이 소정의 영역 외부에 위치된 비디오 프레임의 바로 이웃하는 블록들에 대한 압축 레벨과 상이하다는 것을 나타내는 소프트웨어 힌트 및 하드웨어 힌트 중 하나 이상을 수신한다. 이러한 힌트를 수신하는 것에 응답하여, 프로세서는 소정의 영역에 대한 부가 정보를 생성한다. 일부 실시 예들에서, 바로 이웃하는 블록들은 별도의 대응하는 부가 정보를 갖는 별도의 영역에 포함된다. 다른 실시 예들에서, 바로 이웃하는 블록들은 별도의 대응하는 부가 정보를 갖는 별도의 영역에 포함되지 않는다. 예를 들어, 일부 경우들에서, 바로 이웃하는 블록들은 장면의 배경에 포함된다.
부가 정보는 비디오 프레임에서의 소정의 영역의 위치를 식별하고 소정의 영역에 대한 기하학적 설명을 포함한다. 또한, 부가 정보는 소정의 영역 내의 콘텐츠의 유형을 식별한다. 콘텐츠의 유형의 예들은 움직이는 객체들이 있는 영역, 포비티드 영역(foveated region), 초점(point of focus), 고대비 에지들이 있는 영역 등이다. 일부 실시 예들에서, 콘텐츠의 유형은 소정의 영역의 압축 레벨을 나타낸다. 다른 실시 예들에서, 부가 정보는 소정의 영역에 대한 압축 레벨을 특정하는 별도의 표시를 포함한다. 또 다른 실시 예들에서, 부가 정보는 특정 인코딩 파라미터에 대한 절대값을 특정하는 표시를 포함하며, 이는 나중에 소정의 영역 내의 블록들의 인코딩 동안 특정 인코딩 파라미터의 값을 설정(set)하거나 치환(override)하는 데 사용된다. 비디오 인코더에서의 로직은 비디오 인코더에서 하나 이상의 블록에 의해 생성된 특정 인코딩 파라미터의 값을 부가 정보에 특정된 절대값으로 대체한다. 특정 인코딩 파라미터들의 예들은 비디오 인코더에서 양자화 블록에 의해 사용되는 양자화 파라미터(quantization parameter; QP) 및 비디오 인코더에서 엔트로피 인코딩 블록에 의해 인코딩될 심볼들의 길이이다.
나아가, 다른 실시 예들에서, 부가 정보는 특정 인코딩 파라미터에 대한 상대값을 특정하는 표시를 포함하며, 이는 나중에 소정의 영역 내의 블록들의 인코딩 동안 특정 인코딩 파라미터의 값을 업데이트하는 데 사용된다. 비디오 인코더에서의 로직은 비디오 인코더에서 하나 이상의 블록에 의해 생성된 특정 인코딩 파라미터의 값을 부가 정보에 특정된 상대량만큼 업데이트한다. 다양한 설계들에서, 상대량은 백분율의 양 또는 차이의 양이다. 일부 예들에서, 상대량은 플러스의 양(예를 들어, 25% 증가)인 반면, 다른 예들에서, 상대량은 마이너스의 양(예를 들어, 5만큼의 QP 감소 또는 3 비트만큼의 심볼 길이 감소)이다.
일 실시 예에서, 부가 정보는 비디오 프레임의 렌더링된 픽셀들의 블록들과 함께 메타데이터로서 저장된다. 일부 설계들에서, 프로세서는 HDMI(High Definition Multimedia Interface) 규격, DisplayPort(DP) 규격, 또는 다른 규격에 따라 비디오 프레임에 부가 정보를 보낸다. 다른 실시 예들에서, 프로세서는 부가 정보를 렌더링된 비디오 정보와 별도로 메타데이터로서 인코더에 보낸다. 일부 설계들에서, 프로세서는 USB(universal serial bus) 인터페이스, PCIe(Peripheral Component Interconnect Express) 인터페이스, 또는 다른 인터페이스를 사용하여 부가 정보를 보낸다. 다양한 실시 예들에서, 인코더는 전술된 바와 같이 수신된 부가 정보에 기초하여 하나 이상의 인코딩 파라미터를 대체하거나 업데이트한다.
일부 실시 예들에서, 인코더가 수신된 부가 정보로부터, 영역이 바로 이웃하는 블록들의 압축 레벨보다 더 작은 압축 레벨을 갖는다고 결정할 때, 인코더는 부가 정보가 수신되지 않았다면 생성되었을 양자화 파라미터의 값 및 바로 이웃하는 블록들의 양자화 파라미터의 값 각각으로부터 양자화 파라미터를 감소시킨다. 전술된 바와 같이, 일 실시 예에서, 감소는 수신된 부가 정보에서의 영역에 대해 특정된 절대값 또는 상대값에 기초한다. 인코더가 수신된 부가 정보로부터, 영역이 바로 이웃하는 블록들의 압축 레벨보다 더 작은 압축 레벨을 갖는다고 결정할 때, 일부 실시 예들에서, 인코더는 부가 정보가 수신되지 않았다면 사용되었을 빠른 탐색(fast search)이 아니라, 모션 추정 동안 탐색 영역에서 영역의 전역 탐색(full search)을 수행한다. 또한, 일부 실시 예들에서, 인코더는 부가 정보를 수신하는 것으로 인해 산술 엔트로피 코딩 알고리즘들에 의해 생성되는 분율들의 정밀도를 증가시킨다. 수신된 부가 정보에 기초하여 인코딩 파라미터들을 업데이트하는 다른 예도 가능하고 고려된다.
다양한 예들에서, 비디오 인코더는 N개의 선행하는 프레임을 고려하고 M개의 후속하는 프레임을 고려함으로써(여기서 N 및 M 각각은 0이 아닌 양의 정수임) 프레임 X에 대한 하나 이상의 인코딩 파라미터를 대체하거나 업데이트한다. 다시 말해, 일부 실시 예들에서, 프레임 X와 같은(여기서 X는 0이 아닌 양의 정수임) 소정의 프레임에 대한 부가 정보는 하나 이상의 다른 프레임의 부가 정보로부터의 정보를 포함한다. 예를 들어, 프레임 X에 대한 부가 정보는 프레임 X-N으로부터(여기서 N은 X보다 작음) 프레임 X+M까지의 부가 정보의 일부분을 포함한다. 일 예에서, 장면은 하늘을 가로질러 비행하는 비행기를 포함한다. 소프트웨어 힌트 또는 하드웨어 힌트는 장면 내에서 비행기를 초점, 그리고 이에 따라, 영역으로서 식별한다. 일 예에서, 프레임 X-1의 블록 14는 창공인 반면, 프레임 X의 블록 14는 비행기의 앞부분이다.
프레임 X-1에 대한 부가 정보는 프레임 X-1에서의 영역(비행기)의 위치 정보 및 기하학적 치수들을 포함한다. 일 실시 예에서, 프레임 X-1에 대한 부가 정보 또한 프레임 X에서의 영역(비행기)의 위치 정보 및 기하학적 치수들을 포함한다. 이에 따라, 비디오 인코더는 블록 14가 프레임 X-1에서의 배경에서의 창공로부터 프레임 X 에서의 비행기의 앞부분(영역의 좌측 에지)으로 전이한다는 것을 인식한다. 비디오 인코더는 불연속적인 급격한 업데이트들을 제거하는 방식으로 양자화 파라미터(QP)와 같은 인코딩 파라미터들을 업데이트한다. 예를 들어, 단일 프레임에 대한 부가 정보를 사용할 때, 창공의 배경인 프레임 X-1, 블록 14에 대한 QP는 20이고, 비행기의 앞부분인 프레임 X, 블록 14에 대한 QP는 8이다. 20에서 8로의 QP의 급격한 변화가 있다. QP의 급격한 변화로 인해 시청자는 스크린 상에서 깜빡거림을 볼 수 있다.
일 실시 예에서, 비디오 인코더는 두 개의 연속적인 프레임들 사이에 QP의 급격한 변화를 포함하는 것이 아니라, 다수의 프레임들에 걸쳐 블록 14에 대한 QP를 결정하기 위해 평균화 공식으로서 사용되는 가중합을 생성한다. 일 예에서, 비디오 인코더는 블록 14에 대한 QP를 4개의 이전 프레임들에 걸쳐 업데이트하고, (20 - 8)/4이 3이므로, QP를 3 스텝으로 20에서 8로 감소시킨다. 여기서, 프레임들 X-N 내지 X 각각은 동일한 가중치 1을 가진다. 이러한 예에서, 비디오 인코더는 QP를 프레임들 X-4 내지 X에 걸쳐 20, 17, 14, 11 및 8이 되도록 생성한다. 다시 말해, 비디오 인코더는 프레임 X-4, 블록 14에 대한 QP를 20이 되도록, 그리고 프레임 X-3, 블록 14에 대한 QP를 17이 되도록, 그리고 프레임 X-2, 블록 14에 대한 QP를 14가 되도록, 그리고 프레임 X-1, 블록 14에 대한 QP를 11이 되도록, 그리고 프레임 X, 블록 14에 대한 QP를 8이 되도록 생성한다. 두 개의 프레임들 사이에서 블록에 대한 QP의 급격한 변화는 없다. 예를 들어 프레임 X, 블록 14가 비행기의 꼬리(영역의 우측 에지)이고, 프레임 X+1, 블록 14가 창공 배경일 때 후속 프레임들에 대해 유사한 접근법이 사용된다.
이하의 설명에서, 도 1 및 도 2는 프레임에서 영역들을 식별하기 위해 부가 정보를 사용하며 영역들의 식별에 기초하여 인코딩 파라미터들이 업데이트되는 비디오 처리 시스템들을 설명한다. 도 3은 프레임에서의 동심원 영역들과 같은 영역들의 예들을 설명한다. 도 4 내지 도 5는 인코딩 파라미터들을 업데이트하기 위해 부가 정보를 사용하는 비디오 인코더 및 비디오 인코딩 로직을 설명한다. 도 6 내지 도 7은 인코딩 파라미터들을 업데이트하기 위해 부가 정보를 사용하기 위한 방법들을 설명한다. 도 1 내지 도 7은 소정의 프레임에 대한 인코딩 파라미터들을 업데이트하기 위해 부가 정보를 사용하는 비디오 인코딩 로직을 설명하지만, 설명되는 회로부 및 로직은 또한 다른 프레임들의 정보에 기초하여서도 인코딩 파라미터들을 업데이트할 수 있다. 도 8 내지 도 9 및 도 11 내지 도 12는 소정의 비디오 프레임에서의 블록들의 프레임간 의존성을 설명한다. 도 10 및 도 13은 인코딩 파라미터들을 업데이트하기 위해 주변 프레임들의 부가 정보를 사용하기 위한 방법들을 설명한다.
도 1을 참조하면, 비디오 처리 시스템(100)의 일 실시 예의 블록도가 도시된다. 비디오 처리 시스템(100)(또는 시스템(100))은 적어도, 제한된 대역폭 연결로 서로 통신하도록 동작 가능한 제1 통신 디바이스(예를 들어, 송신기(110)) 및 제2 통신 디바이스(예를 들어, 수신기(160))를 포함한다. 일부 실시 예들에서, 제한된 대역폭 연결은 유선 연결이다. 다른 실시 예들, 이를테면 도시된 실시 예에서, 제한된 대역폭 연결은 무선 연결이다. 송신기(110) 및 수신기(160)는 또한 송수신기들이라고도 지칭될 수 있음에 유의한다. 송신기(110) 및 수신기(160)는 임의의 유형의 통신 디바이스들 및/또는 컴퓨팅 디바이스들을 나타낸다. 예를 들어, 다양한 구현들에서, 송신기(110) 및/또는 수신기(160)는 모바일 폰, 태블릿, 데스크톱 컴퓨터, 랩톱 컴퓨터, 서버, 머리에 착용하는 디스플레이(HMD), 텔레비전, 또 다른 유형의 디스플레이, 라우터, 또는 다른 유형들의 컴퓨팅 또는 통신 디바이스들 중 하나이다.
다양한 설계들에서, 송신기(110)는 프레임(140)에 대응하는 렌더링된 정보와 같은 비디오 정보를 수신기(160)로 보낸다. 프레임(140)이 호수 상의 요트의 그림을 묘사하지만, 다른 예들에서, 프레임(140)은 스포츠 이벤트의 장면, 비디오 게임의 장면 등과 같은 매우 다양한 시각적 정보에 대한 정보를 포함한다. 송신기(110)는 처리 장치들(120) 및 메모리(150)를 구현하기 위한 임의의 수 및 유형의 프로세서 및 메모리 디바이스를 포함한다. 예를 들어, 처리 장치들(120)은 다양한 프로세서들을 사용한다. 프로세서들의 예들은 범용 중앙 처리 장치(CPU)(122), 그래픽 처리 장치(GPU)(124), 가속 처리 장치(APU), 주문형 집적 회로(ASIC), 필드 프로그래머블 어레이(FGPA), 비디오 인코더(126) 등이다. 메모리(150)는 하나 이상의 다양한 유형들의 동기식 랜덤 액세스 메모리(SRAM), 다양한 유형들의 동적 랜덤 액세스 메모리(DRAM), 하드 디스크 드라이브(HDD)들, 고체 상태 드라이브(SSD)들 등을 사용한다.
다양한 구현들에서, 송신기(110)는 상위 레벨 상호 연결 및 칩 통신을 위해, 통신 패브릭(또는 패브릭)을 사용한다. 패브릭은 도시의 용이함을 위해 도시되지 않는다. 다양한 실시 예들에서, 상이한 유형들의 트래픽은 패브릭을 통해 독립적으로 흐른다. 패브릭은 단일 물리적 패브릭 버스가 다수의 오버레이 가상 채널들, 또는 상이한 유형의 트래픽을 각각 전달하는 전용 소스 및 목적지 버퍼들을 포함할 수 있게 함으로써 독립적인 흐름을 지원한다. 각 채널은 상이한 채널들에서의 트랜잭션들 간의 의존성 없이 독립적으로 흐름이 제어된다.
CPU(122)는 다양한 미리 정의된 범용 명령어 세트들 중 하나에 따라 명령어들을 실행하기 위한 회로부를 갖는 하나 이상의 프로세서 코어를 사용한다. 일부 설계들에서, 프로세서 코어들은 명령어들의 비순차적 스케줄링 및 실행과 조합된 동시 멀티 스레딩 기술들을 사용한다. GPU(124)는 단일 명령어 다중 데이터 워드(single instruction multiple data word; SIMD) 마이크로 아키텍처에서 다수의 병렬 실행 레인들을 사용한다. 다수의 병렬 실행 레인들은 또한 SIMD 유닛들 또는 SIMD 레인들이라고도 지칭된다. SIMD 레인들은 락스텝(lockstep)으로 동작한다. SIMD 레인들 각각은 데이터의 유닛을 데이터의 다른 유닛들과 독립적으로 독립적으로 처리하지만, 다른 SIMD 레인들에 의해 사용되는 것과 동일한 시퀀스의 동작들 또는 커맨드들을 사용한다. 일 예에서, GPU에서의 운영 체제 스케줄러 및 커맨드 프로세서 중 하나 이상은 SIMD 레인들에 대한 커맨드들을 스케줄링한다.
일부 구현들에서, GPU(124)는 픽셀 처리 파이프라인을 포함한다. 다른 구현들에서, 픽셀 처리 파이프라인은 GPU(124) 외부에 위치된다. SIMD 레인들 및 픽셀 처리 파이프라인 중 하나 이상은 픽셀 값 계산, 버텍스 변환(vertex transformations), 및 다른 그래픽 동작들 이를테면 색상 관리(color management), 주변 적응 픽셀(ambient-adaptive pixel; AAP) 수정, 동적 백라이트 제어(dynamic backlight control; DPB), 패널 감마 보정(panel gamma correction), 및 디더(dither)를 수행한다. 다양한 구현들에서, 처리 장치들(120)은 비디오 스트림을 수신기(160)로 송신하기 전에 비디오 스트림을 인코딩(즉, 압축)하기 위한 비디오 인코더(126)를 포함한다. 다양한 구현들에서, 비디오 인코더(126)(또는 인코더(126))는 펌웨어와 같은 하드웨어 및/또는 소프트웨어의 임의의 적합한 조합을 사용하여 구현된다. 인코더(126)는 비트들을 비트스트림으로 생성하고 이것들을 버퍼에 저장한다.
인코더(126)는 압축되지 않은 렌더링된 비디오 정보를 수신하고 비트들을 표준 비디오 압축 규격을 따르는 압축된 포맷의 비트스트림의 형태로 생성한다. 압축 규격 또는 표준의 예들은 다양한 독점 맞춤 설계 코덱들, MPEG-2 Part 2, MPEG-4 Part 2, H.264 (MPEG-4 Part 10), H.265(4K 비디오의 압축을 지원하기 위한 고효율 비디오 코딩), Theora, RealVideo RV40, VP9, 및 AV1이다. 인코더(126)에 의해 제공되는 압축은 통상적으로 손실이 있어서, 출력되는 압축된 비디오 정보에는 원래의 렌더링된 비압축 비디오 정보에 존재하는 정보의 일부가 없다. 비디오 정보는 통상적으로 프레임들로 분할되고, 프레임들은 때때로 매크로블록(macroblock) 또는 블록들로 분할된다. 압축의 손실 특성으로 인해, 인코더(126)는 사용자가 볼 때 디스플레이 디바이스 상에 묘사되는 장면의 시각적 품질 저하를 최소화하면서 원래의 렌더링된 비압축 비디오 정보의 어느 정보를 제거할 것인지를 결정한다. 예를 들어, 인코더(126)는 블록 또는 프레임 비디오 정보의 어느 영역들을 더 높은 압축비들로 압축하고 어느 영역들을 더 낮은 압축비들로 압축할 것인지를 결정한다. 또한, 압축 알고리즘들은 비트율에 의해 결정되는 비디오를 나타내는 데 사용되는 데이터의 양을 추적하면서, 또한 언더플로우 및 오버플로우 상태들을 피하기 위해 압축된 비디오 정보를 저장하는 버퍼들의 저장 레벨들도 추적한다. 따라서, 인코더(126)는 타겟 압축비를 달성하고, 비디오 전송의 레이턴시를 최소화하고, 출력 데이터를 저장하는 버퍼들의 오버플로우 및 언더플로우 상태들을 방지하며, 디스플레이 디바이스 상에서 사용자 주관적 이미지 품질을 최대화하면서 수신된 렌더링된 비디오 정보의 압축을 지원하기 위해 많은 과제들에 직면한다.
다양한 실시 예들에서, CPU(122) 및 GPU(124) 중 하나 이상은 인코더(126)가 수신한 비디오 정보의 압축을 보조하기 위한 부가 정보(130)를 인코더(126)에 보낸다. 일부 실시 예들에서, CPU(122) 및 GPU(124) 중 하나 이상은 부가 정보(130)의 콘텐츠를 인코더(126)로 직접 보낸다. 다른 실시 예들에서, CPU(122) 및 GPU(124) 중 하나 이상은 부가 정보(130)의 콘텐츠를 저장한 메모리 위치들을 가리키는 어드레스 정보를 보낸다. 이에 따라, 인코더(126)는 렌더링된 비압축 비디오 정보(또는 비디오 정보를 저장한 메모리 위치를 가리키는 어드레스)를 수신한다. 또한, 인코더(126)는 부가 정보(130)(또는 부가 정보(130)를 저장한 메모리 위치를 가리키는 어드레스)를 수신한다. 일부 실시 예들에서, 인코더(126)는 특정 프레임(또는 프레임의 다수의 블록들 중의 블록)에 대한 렌더링된 비압축 비디오 정보 및 부가 정보(130)를 동시에 수신한다. 예를 들어, 인코더(126)는 특정 프레임에 대한 압축되지 않은 렌더링된 픽셀 정보를 수신하고 특정 프레임에 대한 부가 정보(130)는 프레임 픽셀 정보의 메타데이터 섹션들에 저장된다. 따라서, 특정 프레임과 연관된 부가 정보(130)는 특정 프레임에 대한 픽셀 정보와 함께 보내진다.
부가 정보(130)는 인코더(126)가 수신된, 렌더링된 픽셀 데이터로부터 도출하고 시스템(100)에 대한 타이밍 요건들을 충족시키기 어려운 정보를 포함한다. 일부 경우들에서, 인코더(126)가 부가 정보(130)의 일부 구성요소들을 도출하는 것이 가능하지 않다. 따라서, 인코더(126)에 의해 수행되는 압축은 인코더(126)가 부가 정보(130)를 생성하려고 시도하지 않고도 부가 정보(130)에 의해 더 효율적으로 된다. 인코더(126)는 부가 정보(130)를 사용하여 어느 영역들을 압축할 것인지를 결정하고 압축비를 적절하게 설정한다. 본 명세서에서 사용될 때, 「압축량(amount of compression)」은 「압축 레벨(compression level)」 또는 「압축비(compression ratio)」라고도 지칭된다. 압축 레벨 또는 압축비가 클수록, 압축량은 많아진다. 유사하게, 압축 레벨 또는 압축비가 작을수록, 압축량은 적어진다. 다양한 실시 예들에서, 프레임(140)과 같은 특정 프레임에 대한 부가 정보(130)는 포비티드 영역, 고대비 에지들을 포함하는 영역, 및 초점의 표시들을 포함한다.
본 명세서에서 사용될 때, 용어 "초점"은 사용자가 프레임을 보고 있을 때 각 눈이 초점을 맞출 것으로 예상되는 프레임의 부분으로서 정의된다. 일부 경우들에서, "초점"은 눈이 가리키는 위치를 검출하는 시선 추적 센서에 적어도 부분적으로 기초하여 결정된다. 다른 경우들에서, "초점"은 프레임 데이터의 콘텐츠에 기초하여 결정된다. 예를 들어, 비디오 게임으로부터의 장면에서, 스크린 상의 초점은 사용자의 게임 제어 하에 있는 사용자의 객체(예를 들어, 경주차, 군인, 축구 선수)이다. 일 구현에서, 인코더(126)는 부가 정보(130)를 사용하여 배경의 객체들 및 또한 초점이 아닌 다른 객체들에 대해 더 높은 압축비들을 사용할 것을 결정한다. 또한, 인코더(126)는 부가 정보(130)를 사용하여 프레임(140)내의 초점(142)과 같은 초점인 영역 내의 객체들에 대해 더 낮은 압축비들을 사용할 것을 결정한다.
일부 실시 예들에서, 인코더(126)는 초점 범위에 대한 압축비 범위를 선택한다. 일 실시 예에서, 부가 정보(130)는 1차 초점에 대한 정보뿐만 아니라 2차 초점, 3차 초점 등과 같은 비-1차 초점들에 대한 정보도 포함한다. 일 예에서, 1차 초점은 비디오 게임에서 사용자의 객체(예를 들어, 경주차, 군인, 축구 선수)이다. 2차 초점은 상대 플레이어의 객체, 스크린의 하단에 통계 데이터를 디스플레이하는 스크롤바 등 중 하나이다. 1차 초점에 대해, 인코더(126)는 최저 압축비를 선택한다. 2차 초점에 대해, 인코더(126)는 중간 범위 압축비를 선택한다. 3차 초점에 대해, 하나가 있다면, 인코더(126)는 2차 초점의 압축비와 최고 압축비 사이의 압축비를 선택한다. 배경과 같은 임의의 초점에 위치되지 않는 객체들에 대해, 인코더(126)는 최고 압축비를 선택한다.
일부 구현들에서, 송신기(110) 및 수신기(160)는 비허가 60 기가헤르츠(GHz) 주파수 대역을 통해 무선으로 통신한다. 60 GHz 주파수 대역과 같은 극고주파(extremely high frequency; EHF) 대역들 내에서 작동되는 무선 통신 디바이스들은 비교적 작은 안테나들을 사용하여 신호들을 송신 및 수신할 수 있다. 예를 들어, 일 구현에서, 송신기(110) 및 수신기(160)는 IEEE(Institute of Electrical and Electronics Engineers) 802.11ad 표준(즉, WiGig)에 따라 통신한다. 다른 구현들에서, 송신기(110) 및 수신기(160)는 표준에 따르든 그렇지 않든 간에, 다른 주파수 대역들을 통해 그리고/또는 다른 무선 통신 프로토콜들을 준수함으로써 무선으로 통신한다. 예를 들어, 사용될 수 있는 다른 무선 통신 프로토콜들은 Bluetooth®, 다양한 무선 로컬 영역 네트워크들(WLAN들), IEEE(Institute of Electrical and Electronics Engineers) 802.11 표준들에 기초한 WLAN들(즉, WiFi), 모바일 원격 통신 표준들(예를 들어, CDMA, LTE, GSM, WiMAX) 등을 포함하지만, 이에 제한되지는 않는다.
일 구현에서, 비디오 처리 시스템(100)은 렌더링된 가상 환경의 프레임들을 송신기(110)로부터 수신기(160)로 무선으로 송신하기 위한 가상 현실(VR) 애플리케이션을 실행한다. 다른 구현들에서, 비디오 처리 시스템(100)은 본 명세서에서 설명되는 방법들 및 메커니즘들을 이용하는 다른 유형들의 애플리케이션들을 포함한다. 일 구현에서, 송신기(110)는 적어도 라디오 주파수(RF) 송수신기 모듈(114), 처리 장치들(120), 메모리(150), 및 안테나(112)를 포함한다. RF 송수신기 모듈(114)은 RF 신호들을 송신 및 수신한다. 일 구현에서, RF 송수신기 모듈(114)은 60 GHz 대역에서 하나 이상의 채널을 통해 신호들을 무선으로 송신 및 수신하도록 동작 가능한 mm-파 송수신기 모듈이다. RF 송수신기 모듈(114)은 기저대역 신호들을 무선 송신을 위한 RF 신호들로 변환하고, RF 송수신기 모듈(114)은 RF 신호들을 송신기(110)에 의한 데이터의 추출을 위해 기저대역 신호들로 변환한다.
RF 송수신기 모듈(114)은 예시를 위해 단일 유닛으로서 도시된다는 점에 유의한다. 다른 구현들에서, 송신기(110)는 RF 송수신기 모듈(114)의 구현에 따라 임의의 수의 상이한 유닛(예를 들어, 칩)을 포함한다고 이해되어야 한다. 송신기(110)는 또한 RF 신호들을 송신 및 수신하기 위한 안테나(112)를 포함한다. 안테나(112)는 라디오 신호들의 송신 및 수신의 방향성을 변경하도록 구성될 수 있는 페이즈드 어레이(phased array), 단요소 안테나, 스위치드 빔 안테나 세트 등과 같은 하나 이상의 안테나를 나타낸다. 일례로서, 안테나(112)는 안테나 어레이 내의 각 안테나에 대한 진폭 또는 위상이 어레이 내의 다른 안테나들과 독립적으로 구성될 수 있는 하나 이상의 안테나 어레이를 포함한다. 안테나(112)가 송신기(110) 외부에 있는 것으로 도시되지만, 다른 구현들에서, 안테나(112)는 송신기(110) 내에 내부적으로 포함된다. 또한, 다른 실시 예들에서, 송신기(110)는 도면을 모호하게 하는 것을 방지하기 위해 도시되지 않은 임의의 수의 다른 구성요소에 포함된다. 송신기(110)와 유사하게, 수신기(160) 내에 구현되는 구성요소들은 적어도 RF 송수신기 모듈(164), 프로세서(170), 디코더(172), 메모리(180), 및 안테나(162)를 포함하며, 이것들은 송신기(110)에 대해 상술된 구성요소들과 유사하다. 수신기(160)는 또한 다른 구성요소들(예를 들어, 디스플레이)을 포함하거나 이것들에 결합될 수 있다고 이해되어야 한다.
이제 도 2를 참조하면, 비디오 처리 시스템(200)의 일 실시 예의 블록도가 도시된다. 전술된 회로부 및 로직은 동일하게 번호가 매겨진다. 도시된 실시 예에서, 비디오 처리 시스템(200)은 무선 가상 현실(VR) 시스템(200)이다. 비디오 처리 시스템(200)(또는 시스템(200))은 적어도 컴퓨터(210) 및 머리에 착용하는 디스플레이(HMD)(220)를 포함한다. 컴퓨터(210)는 임의의 유형의 컴퓨팅 디바이스를 나타낸다. 컴퓨터 디바이스의 예들은 하나 이상의 프로세서, 메모리 디바이스, 입력/출력(I/O) 디바이스, RF 구성요소, 안테나, 및 개인용 컴퓨터 또는 다른 컴퓨팅 디바이스를 나타내는 다른 구성요소들이다. 다른 구현들에서는, 개인용 컴퓨터 이외에, 머리에 착용하는 디스플레이(HMD)(220)에 무선으로 비디오 데이터를 보내기 위한 다른 컴퓨팅 디바이스들이 이용된다. 예를 들어, 컴퓨터(210)는 게임 콘솔, 스마트폰, 셋톱 박스, 텔레비전 세트, 비디오 스트리밍 디바이스, 웨어러블 디바이스, 테마 파크 놀이 기구의 부품 등일 수 있다. 또한, 다른 구현들에서, HMD(220)는 컴퓨터, 데스크톱, 텔레비전, 또는 HMD 또는 다른 유형의 디스플레이에 연결된 수신기로서 사용되는 다른 디바이스일 수 있다.
컴퓨터(210) 및 HMD(220)은 각각 무선으로 통신하기 위한 회로부 및/또는 구성요소를 포함한다. 컴퓨터(210)가 외부 안테나를 갖는 것으로 도시되어 있지만, 이는 단지 비디오 데이터가 무선으로 보내지고 있다는 것을 예시하기 위해 도시되어 있다는 점에 유의한다. 다른 실시 예들에서, 컴퓨터(210)는 컴퓨터(210)의 외부 케이스 내부에 안테나를 가진다고 이해되어야 한다. 또한, 컴퓨터(210)는 유선 전력 연결을 사용하여 구동될 수 있지만, HMD(220)는 통상적으로 배터리로 구동된다. 대안적으로, 컴퓨터(210)는 배터리로 구동되는 랩톱 컴퓨터(또는 또 다른 유형의 디바이스)일 수 있다.
일 구현에서, 컴퓨터(210)는 HMD(220)를 착용한 사용자에게 제시될 VR 환경의 표현을 동적으로 렌더링하는 CPU(122) 및 GPU(124) 중 하나 이상과 같은 회로부를 포함한다. 예를 들어, CPU(122)는 VR 환경을 렌더링하기 위한 명령어들로 소프트웨어 애플리케이션을 실행하고, CPU(122)는 렌더링 커맨드들을 GPU(124)에 보내며 인코딩(압축) 커맨드들을 인코더(126)에 보낸다. 다른 구현들에서, 컴퓨터(210)는 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 디지털 신호 프로세서(digital signal processor; DSP), 또는 다른 프로세서 유형들을 포함하여, 다른 유형들의 프로세서들을 포함한다.
다양한 실시 예들에서, 인코더(126)는 다양한 프로세서 유형들 중 하나 이상으로부터 부가 정보(130)를 수신한다. 인코더(126)는 부가 정보(130)를 사용하여 프레임에서의 렌더링된 비디오 정보를 효율적인 방식으로 압축한다. 예를 들어, 인코더(126)는 부가 정보(130)를 사용하여 프레임 비디오 정보의 어느 영역들을 더 높은 압축비들로 압축하고 어느 영역들을 더 낮은 압축비들로 압축할 것인지를 결정한다. 일부 실시 예들에서, 정보(130)는 프레임에 대한 관련 렌더링된 정보(렌더링된 픽셀들의 블록들)와 함께 저장되고 프레임에 대한 렌더링된 정보(렌더링된 픽셀들의 블록들)와 함께 인코더(126)로 보내지는 메타데이터이다.
일부 실시 예들에서, 부가 정보(130)는 특정 인코딩들을 저장하는 렌더링된 픽셀들의 블록의 메타데이터에서의 하나 이상의 필드를 포함하고, 인코더(126)에서의 로직은 이들 필드들을 디코딩한다. CPU(122)는 CPU(122) 상에서 실행되는 소프트웨어 애플리케이션으로부터 또는 HMD(220)와 같은 외부 하드웨어로부터, 초점을 특정하는 표시를 수신한다. 일부 실시 예들에서, 표시는 또한 초점으로서 지정된 영역의 기하학적 치수들을 포함한다. 다른 실시 예들에서는, GPU(124)가 초점으로서 지정된 영역의 기하학적 치수들을 결정한다. 일 예에서, CPU(122)는 HMD(220)로부터 포비티드 영역의 표시를 수신하고, HMD(220)는 스크린의 좌측으로부터 2200 픽셀 및 스크린의 하단으로부터 위로 1300 픽셀에 위치되는 포비티드 영역과 같은 위치 정보를 보낸다. 이 영역은 수평 방향으로 측정한 반경이 700 픽셀인 원이다. 다른 예들에서, 거리들은 스크린 폭의 백분율 또는 다양한 다른 유닛들로서 측정된다. 일부 실시 예들에서, 정보가 포비티드 영역에 대응한다는 것을 표시하기 위해 특정 식별자들이 사용된다. 식별자들은 또한 제공되는 치수들의 유형을 표시한다. 다른 실시 예들에서는, 값들의 배치 또는 순서가 곧 나올 데이터가 포비티드 영역에 대응하는지 여부 또는 영역에 대한 어느 치수들이 설정되고 있는지를 표시한다.
또 다른 예에서, CPU(122)는 비디오 게임과 같은 소프트웨어 애플리케이션을 실행하고, 소프트웨어 애플리케이션이 초점의 표시를 제공한다. 이러한 표시는 중심이 스크린의 좌측으로부터 800 픽셀 및 스크린의 하단으로부터 위로 900 픽셀에 위치된 영역을 특정한다. 이 영역은 수평 방향으로 측정한 장축이 600 픽셀이고 수직 방향으로 측정한 단축이 200 픽셀인 타원이다. 인코더(126)가 이러한 영역에 대응하는 부가 정보(130)를 수신할 때, 인코더(126)는 이러한 영역의 렌더링된 픽셀들에 대한 압축비를 감소시킨다. 일부 실시 예들에서, 부가 정보(130)는 고대비 영역을 식별한다. 고대비 영역의 일례는 특히 영역들 사이의 경계가 비-수평 방향으로 배향될 때, 장면의 하나의 영역으로부터 장면의 이웃하는 영역으로의 평균 색상의 급격한 변화이다. 일 실시 예에서, 소프트웨어 애플리케이션은 고대비 영역의 표시를 CPU(122)에 제공한다. 또 다른 실시 예에서는, GPU(124)가 고대비 영역을 결정한다. 일 예에서, 고대비 영역은 스크린의 좌측으로부터 2100 픽셀 및 스크린의 하단으로부터 위로 1500 픽셀에 위치된 영역에 존재한다. 이 영역은 수직 방향으로 측정한 장축이 300 픽셀이고, 수평 방향으로 측정한 단축이 100픽셀인 원형이다. 이러한 고대비 영역에 대해, 인코더(126)는 렌더링된 픽셀 데이터에 대한 압축비를 감소시킨다.
정보(130)에서 예들로서 원 및 타원의 형상들이 사용되지만, 정보(130)는 다양한 다른 형상들 및 대응하는 치수들을 사용하는 것이 가능하고 고려된다. 예를 들어, 일부 실시 예들에서, 정보(130)는 포비티드 영역을 표시하기 위해 3-차원(3-D)방향 벡터를 포함한다. 다른 실시 예들에서, 정보(130)는 제1 값이 부가 정보의 유형을 표시하는 유형 값이고 제2 값이 제1 값에 의해 표시된 부가 정보에 대한 값을 소정의 유닛들로 표시하는 값들의 쌍들을 포함한다. 또 다른 실시 예들에서는, 값들의 리스트에서의 위치가 부가 정보의 유형을 표시한다.
일 실시 예에서, 인코더(126)는 현재 처리되고 있는 픽셀들이 부가 정보(130)에 의해 식별되는 영역 내에 위치되는지 여부에 기초하여 인코딩 파라미터들을 동적으로 조정한다. 일부 실시 예들에서, 인코더(126)는 부가 정보(130)에 의해 식별된 영역들 중 어느 영역과도 교차하지 않는 수평 비디오 라인들의 부분들에 대한 압축비들을 증가시킨다. 이에 반해, 인코더(126)는 부가 정보(130)에 의해 식별된 영역들 중 임의의 영역과 교차하는 수평 비디오 라인들의 부분들에 대한 압축비들을 감소시킨다. 일 실시 예에서, 인코더(126)는 또한 식별된 영역을 사용하여 압축비들을 얼마나 감소시킬 것인지를 결정한다. 전술된 바와 같이, 일 실시 예에서, 인코더(126)는 1차 초점의 영역에 대한 렌더링된 픽셀 데이터가 더 많이 수신기로 보내질 수 있게 하기 위해 2차 및 3차 초점들의 영역들에 대해서보다 1차 초점의 영역에 대해 압축비들을 더 많이 감소시킨다.
일부 실시 예들에서, 부가 정보(130)는 특정 인코딩 파라미터에 대한 절대값을 특정하는 표시를 포함하며, 이는 나중에 소정의 영역 내의 블록들의 인코딩 동안 특정 인코딩 파라미터의 값을 설정 또는 치환하는 데 사용된다. 비디오 인코더(126)에서의 로직은 비디오 인코더(126)에서 하나 이상의 블록에 의해 생성된 특정 인코딩 파라미터의 값을 부가 정보에 특정된 절대값으로 대체한다. 특정 인코딩 파라미터들의 예들은 비디오 인코더에서 양자화 블록에 의해 사용되는 양자화 파라미터(quantization parameter; QP) 및 비디오 인코더에서 엔트로피 인코딩 블록에 의해 인코딩될 심볼들의 길이이다.
다른 실시 예들에서, 부가 정보(130)는 특정 인코딩 파라미터에 대한 상대값을 특정하는 표시를 포함하며, 이는 나중에 소정의 영역 내의 블록들의 인코딩 동안 특정 인코딩 파라미터의 값을 업데이트하는 데 사용된다. 비디오 인코더(126)에서의 로직은 비디오 인코더(126)에서 하나 이상의 블록에 의해 생성된 특정 인코딩 파라미터의 값을 부가 정보에 특정된 상대량만큼 업데이트한다. 다양한 설계들에서, 상대량은 백분율의 양 또는 차이의 양이다. 일부 예들에서, 상대량은 플러스의 양(예를 들어, 25% 증가)인 반면, 다른 예들에서, 상대량은 마이너스의 양(예를 들어, 5만큼의 QP 감소 또는 3 비트만큼의 심볼 길이 감소)이다.
전술된 바와 같이, 일부 실시 예들에서, 부가 정보는 비디오 프레임의 렌더링된 픽셀들의 블록들과 함께 메타데이터로서 저장된다. 일부 설계들에서, 프로세서들(122-124) 중 하나 이상은 HDMI(High Definition Multimedia Interface) 규격, DisplayPort(DP) 규격, 또는 다른 규격에 따라 비디오 프레임에 부가 정보(130)를 인코더(126)로 보낸다. 다른 실시 예들에서, 프로세서들(122-124) 중 하나 이상은 부가 정보(130)를 렌더링된 비디오 정보와 별도로 메타데이터로서 인코더(126)에 보낸다. 일부 설계들에서, 프로세서들(122-124) 중 하나 이상은 USB(universal serial bus) 인터페이스, PCIe(Peripheral Component Interconnect Express) 인터페이스, 또는 다른 인터페이스를 사용하여 부가 정보(130)를 보낸다.
수신기 디바이스로 돌아가서, HMD(220)는 컴퓨터(210)에 의해 보내진 압축된 비트스트림을 수신 및 디코딩하기 위한 회로부를 포함하여 렌더링된 VR 환경의 프레임들을 생성한다. 이어서 HMD(220)는 생성된 프레임들을 HMD(220) 내에 통합되는 디스플레이로 구동한다. HMD(220) 상에 디스플레이되는 각 이미지 내에서, HMD(220)의 우측(225R) 상에 디스플레이되고 있는 장면(225R)은 초점 영역(230R)을 포함하는 한편, HMD(220)의 좌측 상에 디스플레이되고 있는 장면(225L)은 초점 영역(230L)을 포함한다. 이들 초점 영역들(230R 및 230L)은 HMD(220)의 확장된 우측(225R) 및 좌측(225L) 내의 원들에 의해 각각 표시된다.
일 구현에서, 우반 및 좌반 프레임들 내의 초점 영역들(230R 및 230L)의 위치들 각각은 HMD(220) 내의 시선 추적 센서들에 기초하여 결정된다. 또 다른 구현에서, 초점 영역들(230R 및 230L)의 위치들은 사용자가 보고 있을 것으로 예상되는 곳에 기초하여 VR 애플리케이션에 의해 특정된다. 초점 영역들(230R 및 230L)의 크기는 구현에 따라 달라질 수 있음에 유의한다. 예를 들어, 일 구현에서, HMD(220)가 사용자의 각 눈들의 시선이 지향되는 곳에 기초하여 초점이 맞는 영역을 추적하기 위한 시선 추적 센서들을 포함한다면, 초점 영역들(230R 및 230L)은 상대적으로 더 작을 수 있다. 그렇지 않고, HMD(220)가 시선 추적 센서들을 포함하지 않고 초점 영역들(230R 및 230L)이 사용자가 통계적으로 가장 보고 있을 것 같은 곳에 기초하여 결정된다면, 초점 영역들(230R 및 230L)은 상대적으로 더 클 수 있다. 다른 구현들에서는, 다른 인자들이 초점 영역들(230R 및 230L)의 크기들이 조정되게 할 수 있다.
일 구현에서, 인코더(126)는 초점 영역들(230R 및 230L) 내의 블록들에 대해 최저 압축량을 사용하여 이들 영역들 내의 픽셀들에 대해 최고 주관적 시각적 품질 및 최고 레벨의 디테일을 유지한다. "블록들"은 본 명세서에서 "슬라이스들"이라고도 지칭될 수 있음에 유의한다. 본 명세서에서 사용될 때, "블록"은 연접 픽셀들의 그룹으로서 정의된다. 예를 들어, 일 구현에서, 블록은 디스플레이되고 있는 이미지에서 정사각형을 형성하는 8x8 연접 픽셀들의 그룹이다. 다른 구현들에서는, 다른 형상들 및/또는 다른 크기들의 블록들이 사용된다. 초점 영역들(230R 및 230L)의 외부에서, 인코더(126)는 더 높은 압축량을 사용한다. 이러한 접근법은 각 눈이 넓은 시야를 갖지만 눈이 넓은 시야 내의 작은 영역에만 초점을 맞추는 사람의 시각계를 이용한다. 눈과 뇌가 시각 데이터를 인식하는 방식에 기초하여, 사람은 통상적으로 초점 영역 외부의 영역에서 더 낮은 품질을 알아차리지 못할 것이다.
일 구현에서, 인코더(126)는 블록이 초점 영역으로부터 멀수록 이미지 내의 블록을 인코딩하는 데 사용되는 압축량을 증가시킨다. 예를 들어, 제1 블록이 초점 영역으로부터 제1 거리에 있고 제2 블록이 초점 영역으로부터 제2 거리에 있으며, 제2 거리가 제1 거리보다 큰 경우, 인코더는 제1 블록보다 더 높은 압축율을 사용하여 제2 블록을 인코딩할 것이다. 이는 제2 블록이 압축 해제되어 사용자에게 디스플레이될 때 제2 블록이 제1 블록에 비해 더 적은 디테일을 갖게 할 것이다. 일 구현에서, 인코더(126)는 소정의 블록을 인코딩할 때 사용되는 양자화 강도 레벨을 증가시킴으로써 사용되는 압축량을 증가시킨다. 예를 들어, 일 구현에서, 양자화 강도 레벨은 양자화 파라미터(QP) 설정을 사용하여 특정된다. 다른 구현들에서, 인코더(126)는 다른 인코딩 설정들의 값들을 변경함으로써 블록을 인코딩하는 데 사용되는 압축량을 증가시킨다. 예를 들어, 인코더(126)가 부가 정보(130)로부터 특정 픽셀들이 1차 초점에서의 풀잎들 또는 고대비 에지들의 다른 예들에 대응한다고 결정할 때, 인코더(126)는 이러한 특정 픽셀들에 대한 압축량을 감소시킨다.
이제 도 3을 참조하면, 절반 프레임의 초점 영역 외부의, 상이한 압축 레벨들에 대응하는, 동심원 영역들(300)의 도해의 일 실시 예가 도시된다. 일부 실시 예들에서, 영역(305)은 초점 영역이다. 예를 들어, 일 실시 예에서, 영역(305)은 머리에 착용하는 디스플레이(HMD)에서의 시선 추적 센서에 의해 결정되는 포비티트 영역이다. 또 다른 실시 예에서, 영역(305)은 GPU 또는 다른 유형의 프로세서에 의해, 고대비 에지들을 포함하는 것으로 결정되는 영역이다. 또 다른 실시 예에서, 영역(305)은 GPU 또는 다른 유형의 프로세서에 의해, 처즘을 포함하는 것으로 결정되는 영역이다. 임의의 경우들에서, GPU 또는 다른 유형의 프로세서는 영역(305)에 대해 사용할 압축 레벨이 바로 이웃하는 영역(310)과 같은 주변 영역들에 대해 사용할 압축 레벨과 상이하다고 결정한다.
도해에서 각 박스는 절반 프레임의 슬라이스를 나타내며, 슬라이스는 임의의 수의 - 구현에 따라 달라짐 - 픽셀을 포함한다. 스크린의 각 절반에서, 각 슬라이스의 고시점으로부터의 거리가 도 3 하단의 식(335)을 사용하여 결정된다. 식(335)에서, sb는 슬라이스 크기이다. 일 구현에서, sb는 8 또는 16 중 어느 하나이다. 다른 구현들에서, sb는 다른 크기들일 수 있다. 변수 x오프셋 및 y오프셋은 슬라이스(x, y)가 이미지의 왼쪽 위에 대한 것이고 x시선 및 y시선이 스크린의 각 절반의 중심에 대한 것이라는 사실에 대해 조정된다. 또한 x오프셋 및 y오프셋 각각에는 (sb * xi, sb * yi)가 각 슬라이스의 왼쪽 위라는 사실을 처리하기 위해 슬라이스_크기를 2로 나눈 값이 더해지고 목표는 각 슬라이스의 중심이 각 반경의 내부에 속하는지 또는 외부에 속하는지를 결정하는 것이다.
이어서, 식(335)을 사용하여 di 2를 계산한 후, di 2는 슬라이스가 어느 압축 영역에 속하는지를 결정하기 위해 "N"개의 반경들(r0, r1, r2, ... rN)(여기서 N은 양의 정수임) 각각의 제곱과 비교된다. 도 3에 도시된 구현에서, N은 5와 같지만, 이는 단지 예시를 위해 도시된 것이라고 이해되어야 한다. 예를 들어, 이러한 구현에서, 영역(305)은 화살표(r5)에 의해 표시된 반경을 갖는 초점 영역이다. 영역(310)은 화살표(r4)에 의해 표시된 반경을 갖는 초점 영역에 인접한 영역이다. 영역(315)은 화살표(r3)에 의해 표시된 반경을 갖는 다음 더 큰 영역이다. 영역(320)은 화살표(r2)에 의해 표시된 반경을 갖는 다음 더 큰 영역이다. 영역(325)은 화살표(r1)에 의해 표시된 반경을 갖는 다음 더 큰 영역이고, 영역(330)은 화살표(r0)에 의해 표시된 반경을 갖는 도해(300)에서 도시된 가장 큰 영역이다. 또 다른 구현에서, N은 64와 같지만, 다른 구현들에서, N은 다양한 다른 적합한 정수 값들 중 임의의 값일 수 있다.
초점 영역(305)의 중심으로부터 소정의 슬라이스까지의 거리에 기초하여(또는 소정의 슬라이스까지의 거리 제곱에 기초하여), 인코더는 소정의 슬라이스가 어느 압축 영역에 속하는지를 결정한다. 일 구현에서, 슬라이스가 속하는 영역이 식별되면, 영역 식별자(ID)가 조회 테이블에 인덱싱하기 위해 사용된다. 조회 테이블에는 N개의 반경이 저장된다. 일 구현에서, 반경 제곱 값들이 하드웨어 승수기에 대한 필요성을 제거하기 위해 조회 테이블에 저장된다. 일 구현에서, 반경 제곱 값들은 엔트리 0이 가장 큰 원을 특정하고, 엔트리 1이 두 번째로 큰 원을 특정하는 등등이도록 단조적으로 감소하는 순서로 프로그래밍된다.
일 구현에서, 조회 테이블로부터의 출력은 슬라이스에 대한 전체 타겟 압축 크기이다. "영역(region) ID"는 본 명세서에서 "구역(zone) ID"라고도 지칭될 수 있다. 타겟 크기는 웨이블릿 슬라이스들이 처리됨에 따라 추후 사용을 위해 FIFO 버퍼에 기입되기 전에 압축비(또는 c_ratio) 값으로 크기 조정된다. c_ratio의 일부(some) 함수에 의한 크기 조정은 더 작은 타겟 슬라이스 크기들을 생성하며, 이는 감소된 무선 주파수(RF) 링크 용량에 적합하다. 다양한 실시 예들에서, (도 1 및 도 2의) 부가 정보(130)와 같은 부가 정보는 소정의 슬라이스까지의 거리들을 포함한다.
이제 도 4를 참조하면, 인터페이스(들)(412)를 통해 수신되는 부가 정보(410)를 사용하여 압축을 동적으로 조정하는 비디오 인코더(400)의 일 실시 예의 일반화된 블록도가 도시된다. 다양한 실시 예들에서, 비디오 인코더(400)는 (도 1 및 도 2 의)인코더(126)와 같다. 비디오 인코더(400)(또는 인코더(400))는 인터페이스(들)(412)를 통해 입력 비디오 데이터(402)를 수신하고 출력 비디오 데이터(440) - 입력 비디오 데이터(402)의 압축된 버전 - 를 생성한다. 다양한 실시 예들에서, 하나 이상의 버스 등과 같은, 인터페이스(들)(412)는 부가 정보(410) 및 비디오 데이터(402)를 수신하기 위한 임의의 적합한 회로부를 포함한다. 일부 실시 예들에서, 부가 정보(410) 및 비디오 데이터(402)를 수신하기 위해 별도의 인터페이스 회로부(412)가 사용된다. 다른 실시 예들에서는, 부가 정보(410) 및 비디오 데이터(402) 둘 모두를 수신하기 위해 조합된 인터페이스 회로부가 사용된다. 이러한 다양한 실시 예들이 가능하고 고려된다. 다양한 구현들에서, 인코더(400)는 다양한 비디오 압축 표준들 및 수신된 부가 정보(410)중 하나에 기초하여 입력 비디오 데이터(402)를 압축한다. 인코더(400)는 인코딩 스테이지들(420) 및 비트율 제어기(450)를 포함한다. 특정 로직 블록들이 설명되지만, 다른 실시 예들에서, 로직 블록들(422-458) 중 하나 이상이 사용되지 않고, 하나 이상의 추가적인 로직 블록이 추가된다.
다양한 설계들에서, 인코더(400)는 입력 비디오 데이터(402)를 렌더링된 데이터로서 수신한다. 예를 들어, 외부 GPU는 CPU로부터 수신되는 렌더링 커맨드들에 기초하여 프레임에 대한 픽셀들의 다수의 블록들을 생성한다. 다양한 설계들에서, 인코더(400)는 출력 비디오 데이터(440)를 비트스트림으로서 생성한다. 본 명세서에서 사용될 때, "비트스트림"은 비트들의 시퀀스이다. 일부 경우들에서, 인코더의 출력 비트스트림은 "비트율(bitrate)"로서 측정되며, 이는 시간 단위당 생성되거나 처리되는 비트 수이다. 예를 들어, 일부 설계들에서, 비트율은 초당 킬로비트(kbps) 단위 또는 초당 메가비트(mbp) 단위로 표현된다. 인코딩 스테이지들(420) 내에 그리고 비트율 제어기(450)와 인코딩 스테이지들(420)의 사이에 위치된 피드백 루프들은 출력 비디오 데이터(440)에 대한 비트율을 설정한다. 피드백 루프들은 이러한 비트율이 디스플레이 상에서 사용자에게 열악한 주관적 품질 이미지를 생성하는 하한 아래로 떨어지지 않도록 한다. 피드백 루프들은 또한 출력 비트율이 외부 인자들에 의해 설정된 상한을 초과하는 것도 방지한다. 외부 인자의 일 예는 이용 가능한 링크 대역폭이다. 외부 인자의 또 다른 예는 외부 버퍼(도시되지 않음)의 저장 이용량이다. 인코더(400)는 외부 버퍼에 대한 언더플로우 또는 오버플로우를 야기하지 않는 방식으로 출력 비디오 데이터(440)를 생성한다.
인코딩 스테이지들(420)은 다수의 로직 블록들을 포함한다. 비디오 압축 동안, 인코더(400)는 프레임 내의 공간적 리던던시를 결정하고 프레임들 사이의 시간적 리던던시를 결정한다. 로직 블록(422)은 프레임에서의 임의의 검출된 모션을 추정하고 임의의 추정된 모션을 보상하기 위한 로직을 포함한다. 일부 설계들에서, 현재 프레임의 처리를 위해 얼마나 많은 이전 프레임들을 저장할 것인지를 결정하는 사용자 정의 저장 한도가 설정된다. 로직 블록(422)은 모션 추정 알고리즘에 기초하여 입력 비디오 데이터(402)에서의 현재 프레임의 데이터를 하나 이상의 이전 프레임의 데이터와 비교한다. 사용자 또는 소프트웨어 애플리케이션의 알고리즘은 하나, 둘 또는 다른 수의 이전 프레임을 저장하기 위해 사용할 프레임 버퍼 크기를 정의한다. 많은 설계들에서, 이러한 저장 파라미터는 비디오 콘텐츠를 인코딩하기 전에 설정되는 파라미터이다. 이러한 저장 파라미터에 대한 설정이 클수록, 프레임 버퍼에 저장된 이전 프레임 수가 많아지고 비디오 압축 동안 프레임 버퍼에서 소비되는 저장 공간의 양이 많아진다.
로직 블록(422)은 다양한 모션 추정 알고리즘들 중 하나를 사용하여 현재 프레임과 하나 이상의 이전 프레임 사이의 시간적 리던던시들을 결정한다. 모션 추정 알고리즘은 프레임을 블록들로 분할하고 때때로 블록들을 서브 블록들로 분할한다. 블록들 또는 서브 블록들은 16 픽셀 x 16 픽셀, 8 픽셀 x 8 픽셀, 4 픽셀 x 4 픽셀 등과 같은 다양한 크기들 중 하나를 가진다. 서브 블록들이 작아지고 모션 추정에 사용되는 서브 블록들이 많을수록, 모션 추정 알고리즘이 복잡한 모션을 나타내는 데 양호하다. 그러나, 처리 시간(레이턴시), 데이터 저장 공간 및 알고리즘 복잡도의 양은 모두 추가적으로 증가한다.
입력 비디오 데이터(402)에 제공된 프레임의 영역이 공통 배경 또는 다른 매끄러운 영역으로서 식별되는 많은 때에, 모션 추정 알고리즘은 16 픽셀 x 16 픽셀 블록들을 사용한다. 입력 비디오 데이터(402)에 제공된 프레임의 영역이 디스플레이의 시청자에게 높은 디테일을 제공하는 것으로서 식별될 때, 모션 추정 알고리즘은 4 픽셀 x 4 픽셀 서브 블록을 사용한다. 일부 실시 예들에서, 로직 블록(422)에서의 모션 추정 알고리즘은 디스플레이의 시청자에게 높은 시각적 디테일을 제공하는 영역들을 결정하기 위해 부가 정보(410)를 사용한다. 이에 따라, 모션 추정 알고리즘은 수신된 부가 정보(410)에 기초하여 이러한 영역들에서 더 작고 더 많은 서브 블록들을 사용하는 것을 선택한다. 일부 실시 예들에서, 모션 추정에 다수의 이전 프레임들의 사용은 가상 현실(VR) 애플리케이션들에 대한 것과 같은 인코딩 프로세스에 허용될 수 없는 레이턴시를 도입한다. 이에 따라, 모션 벡터들을 사용한 시간적 레이턴시의 식별이 제거된다.
모션 추정 알고리즘은 참조 프레임에서, 탐색 영역 - 탐색 윈도우라고도 지칭됨 - 을 결정한다. 일 예에서, 참조 프레임은 입력 비디오 데이터(402)에서의 데이터를 갖는 현재 프레임과 비교되는 바로 이전의 프레임이다. 참조 프레임에서의 탐색 영역은 수평 비디오 라인들에 그리고 수직으로 열들에 위치되는 다수의 블록들 또는 서브 블록들을 포함한다. 모션 추정 알고리즘은 현재 프레임에서 블록 또는 서브 블록을 선택하고 참조 프레임에서 최상의 매칭 블록 또는 서브 블록에 대해 탐색 영역을 탐색한다. 최상의 매칭 블록 또는 서브 블록을 결정하기 위해, 모션 추정 알고리즘은 블록들 또는 서브 블록들 각각에 대한 모션 벡터들을 계산한다. 모션 추정 알고리즘은 4 픽셀 x 4 픽셀 서브 블록에 대해 16개의 모션 벡터들을 계산한다.
모션 추정 알고리즘이 탐색 영역 내의 모든 블록 또는 서브 블록을 탐색한다면, 이는 전역 탐색 또는 완전 탐색(exhaustive search) 모션 추정 알고리즘이라고 지칭된다. 모션 추정 알고리즘이 블록들 또는 서브 블록들 중 일부를 스킵한다면, 이는 빠른 탐색 모션 추정 알고리즘이라고 지칭된다. 일부 실시 예들에서, 로직 블록(422)은 수신된 부가 정보(410)를 사용하여 수신된 부가 정보(410)에 기초해 모션 추정 알고리즘에서 완전 탐색을 사용할 것인지 또는 빠른 탐색을 사용할 것인지를 결정한다. 예를 들어, 부가 정보(410)가 고대비 에지들을 갖는 영역, 포비티드 영역인 영역, 및 압축 레벨이 영역에 바로 이웃하는 블록들의 압축 레벨보다 작은 경우 등을 식별한다면, 로직 블록(422)은 탐색 영역에 다수의 작은 서브 블록들이 있는 완전 모션 추정 알고리즘을 사용한다.
로직 블록(422)에 대한 상기한 단계들은 참조 프레임에서의 어느 블록 또는 서브 블록이 현재 프레임 내의 선택된 블록 또는 서브 블록과 가장 유사한 외관(또는 모션 벡터들에 기초하여 가장 작은 계산된 에러)을 갖는지를 예측한다. 유사한 예측들이 현재 프레임 내의 이웃 블록들 또는 서브 블록들에 관하여 이루어진다. 일부 실시 예들에서, 인코더(400)는 모션 추정 대신에 또는 모션 추정에 추가하여 예측 모드 기법들(도시되지 않음)을 사용한다. 예측 기법들은 이전 프레임 및 현재 프레임에서의 블록들 또는 서브 블록들 사이의 공간적 리던던시들을 감소시키는 반면, 모션 추정 알고리즘은 시간적 리던던시들을 감소시킨다. 공간적 리던던시들을 감소시키는 예측 기법들에 의해, 각 블록 또는 서브 블록은 인트라 모드 예측 기법(intra-mode prediction scheme) 또는 인터 모드 예측 기법(inter-mode prediction scheme)으로 처리된다. 양 기법들에서, 예측 블록 또는 서브 블록은 재구성된 프레임에 기초하여 생성된다. 인코딩 스테이지들(420)은 로직 블록(422)으로부터 로직 블록들(424, 426 및 428)로의 순방향 경로를 포함한다. 인코딩 스테이지들(420)은 또한 로직 블록(422)으로부터 로직 블록들(424, 426, 430)로 그리고 다시 로직 블록(422)으로의 재구성 경로를 포함한다.
포함되는 경우, 인코더(400)에서의 재구성 경로는 로직 블록(430)을 포함한다. 로직 블록(430)은 역변환, 역양자화, 루프 필터 및 수신기측 상의 동작을 모방하는 모션 보상을 위한 로직을 포함한다. 공간적 및 시간적 리던던시들 중 하나 이상이 감소된 후, 예측 및/또는 모션 추정으로부터의 출력 블록 또는 서브 블록은 현재 프레임에서의 블록 또는 서브 블록으로부터 감산된다. 또한, 현재 프레임에서의 블록 또는 서브 블록과 현재 프레임에서의 이웃하는 블록들 또는 서브 블록들 간의 차이들이 결정된다. 이러한 감산들은 차이 블록 또는 서브 블록을 생성하며, 이는 로직 블록(424)에 의해 변환되고 로직 블록(426)에 의해 양자화되어 변환되고 양자화된 계수들의 세트를 생성한다. 이러한 계수들은 로직 블록(428)에 의해 재배열되고 엔트로피 인코딩된다. 일부 설계들에서, 로직 블록(424)은 모션 보상된 예측 차이 블록들 및 서브 블록들에 대해 이산 코사인 변환(discrete cosine transformation; DCT)을 수행한다.
로직 블록(426)은 스텝 크기로서 사용되는 양자화 파라미터(460)에 따라 압축된 DCT 계수들을 블록 단위로(또는 서브 블록 단위로) 양자화한다. 일 예에서, 특정 블록(또는 서브 블록)을 나타내는 DCT 계수 매트릭스에 양자화 스케일 코드가 곱해지고, 요소별로 양자화 매트릭스로 나눈 다음 반올림 이를테면 가장 가까운 정수로 반올림한다. 일부 실시 예들에서, 인코딩 스테이지들(420)은 다수의 유형들의 이용 가능한 양자화 블록들을 포함한다. 이용 가능한 양자화기들의 예들은 H.263 양자화기 및 MPEG-4 양자화기이다. 어느 양자화 블록 및 결과적인 양자화 스케일 코드를 사용할 것인지의 선택은 소프트웨어 애플리케이션에서 행해진 사용자 정의 선택 및/또는 부가 정보(410)에 기초한다. 일부 실시 예들에서, 선택은 초기에 소프트웨어 애플리케이션에서 행해진 사용자 정의 선택에 기초하지만, 선택은 부가 정보(410)에 기초하여 동적으로 업데이트된다.
비트율 제어기(450)는 양자화 파라미터(460)를 결정한다. 양자화 파라미터(460)는 스케일링 매트릭스를 생성하고 픽셀들의 소정의 블록(또는 서브 블록)으로부터 정보를 얼마나 제거할 것인지를 결정하는 데 사용된다. 통상적으로, 양자화 파라미터(460)에 대한 값의 범위 및 디폴트 값이 있다. 양자화 파라미터(460)가 일정한 값으로 유지될 때, 각 프레임으로부터 동일한 양의 정보가 제거된다. 일 예에서, 양자화 파라미터(460)에 대한 범위는 0 내지 50이며 디폴트 값은 23이다. 양자화 파라미터(460)가 20으로 선택되고 비디오 복잡도의 변화에도 불구하고 양자화 파라미터(460)를 20으로 유지한다면, 디스플레이 상에서 사용자에게 제공되는 주관적 시각적 품질은 악화된다. 부가 정보(410)내의 정보는 프레임에서의 모션의 표시, 고대비 에지들의 표시 등을 포함한다. 또한, 출력 비디오 데이터(440)에서의 비트율은 크게 달라진다. 이에 따라, 비트율 제어기(450)는 피드백 정보(462), 부가 정보(410) - 이용 가능한 비트율 제어기들(452-458) 중 하나를 선택하는 동작 모드를 포함함 -, 타겟 블록 비트스트림 길이 등에 기초하여 양자화 파라미터(460)를 변경하는 로직을 포함한다.
위의 예를 계속하면, 일부 실시 예들에서, 비트율 제어기(450)는 높은 모션을 갖는 것으로서 식별된 프레임들 내의 영역들에 대한 양자화 파라미터(460)를 20에서 22로 증가시킨다. 증가된 양자화 파라미터(460)는 이러한 영역들에 대해 더 많은 압축을 야기한다. 유사하게, 인코딩 스테이지(420)는 고대비 에지들, 포비티드 영역들 등을 갖지 않는 것으로서 식별된 프레임들 내의 영역들에 대해 증가된 양자화 파라미터(460)를 사용한다. 예에서, 비트율 제어기(450)는 모션이 없는 것으로서 식별된 프레임들 내의 영역들, 고대비 에지들, 포비티드 영역 등에 대한 양자화 파라미터(460)를 20에서 16으로 감소시킨다. 감소된 양자화 파라미터(460)는 이러한 영역들에 대해 더 적은 압축을 야기한다.
일부 설계들에서, 양자화 블록(426)에 의해 사용되는 등량의 양자화기 스텝 크기는 양자화 파라미터(460)와 로그 관계를 가진다. 다른 설계들에서, 등량의 양자화기 스텝 크기는 양자화 파라미터(460)와 선형 관계에 있거나 또 다른 관계를 가진다. 양자화 파라미터(460)가 증가할 때, 양자화기 스텝 크기도 증가한다. 양자화 파라미터(460)가 증가할 때, 디스플레이 상에 보여지는 출력 비디오 데이터(440)의 주관적 시각적 품질은 감소하고 출력 비디오 데이터(440)의 크기 또한 감소한다. 양자화 파라미터(460)가 감소할 때, 디스플레이 상에 보여지는 출력 비디오 데이터(440)의 주관적 시각적 품질은 개선되고 출력 비디오 데이터(440)의 크기는 증가한다.
양자화 파라미터(460)를 설정하기 위해, 비트율 제어기(450)는 비디오 비트율을 추정한다. 출력 비디오 데이터(440)에 대한 비디오 비트율은 단위 시간당 달성 블록 비트스트림 길이(442)에서의 비트 수이다. 비트율 제어기(450)는 출력 비디오 데이터(440)의 달성 블록 비트스트림 길이(442)에서의 비트 수(비트스트림의 크기)를 조정하기 위해 네트워크 이용 가능한 대역폭 및 수신된 입력 비디오 데이터(402)의 비디오 복잡도에 기초하여 비디오 비트율을 추정한다. 피드백 정보(462)는 인코딩 스테이지들(420)로부터의 비디오 복잡도를 비트율 제어기(450)에 관련시키기 위해 사용된다. 비트율 제어기(450)는 사용자를 위한 외부 디스플레이 상에 높은 시각적 품질 이미지들을 생성하기 위해 양자화 파라미터(460)를 조정함으로써 출력 비디오 데이터(440)의 달성 블록 비트스트림 길이(442)를 조정하려고 시도한다. 일부 설계들에서, 비트율 제어기(450)는 이러한 조절을 수행하면서 또한 외부 네트워크 대역폭을 출력 비디오 데이터(440)를 송신하게 유지하고 출력 비디오 데이터(440)를 저장하는 외부 비디오 버퍼에 대한 오버플로우 또는 언더플로우 상태들을 방지한다.
비트율 제어기(450)는 양자화 파라미터(460)를 선택하며, 이는 소정의 비디오 이미지 복잡도에 대해, 출력 비디오 데이터(440)에 대해 달성 블록 비트스트림 길이(442)를 결정한다. 다시, 단위 시간당 달성 블록 비트스트림 길이(442)에서의 비트 수는 출력 비디오 데이터(440)에 대한 비트율을 결정한다. 비트율 제어기(450)는 출력 비디오 데이터(440)의 출력 비트율을 조절하기 위해 비트율 제어기들(452-458)에서 구현되는 다양한 비트율 제어 알고리즘들 중 하나를 사용한다. 비트율 제어 알고리즘들의 예들은 고정 비트율(constant bitrate; CBR) 제어기(456), 가변 비트율(variable bitrate; VBR) 제어기(454), 지능형 고정 품질(intelligent constant quality; ICQ) 제어기(458) 및 품질 정의(또는 품질 기반) 가변 비트율(quality-defined variable bitrate; QVBR) 제어기(452)이다.
CBR 제어기(456)는 전체 프레임에 대해 달성 블록 비트스트림 길이(442)에서의 설정(또는 타겟) 비트 수를 유지한다. 일부 설계들에서는, 비트 수의 변화가 20% 이하로 제한된다. CBR 제어기(456)는 때때로 임계치 미만의 비디오 복잡도를 갖는 비디오 정보를 사용하는 것으로 추정되는 시스템들에서 비디오 프레임 데이터를 저장하기 위해 작은 외부 비디오 버퍼를 갖는 시스템들에서 사용된다. ICQ 제어기(458)는 주관적 시각적 품질이 높게 유지되지만, 파일 크기가 되도록 많이 감소되는 비디오 정보를 보관하는 시스템들에서 사용된다. ICQ 제어기(458)는 ICQ 품질 인자(quality factor)이라고도 지칭되는 항율 인자(constant rate factor; CRF)를 수신한다. 이러한 입력 파라미터는 값의 범위를 가진다. 예를 들어, 일부 설계들에서, 범위는 1 내지 51이며 더 낮은 값들은 더 낮은 양자화 파라미터(460)와 연관되고, 이에 따라, 비디오 정보로부터 더 적은 정보가 제거된다. 비디오 정보는 덜 압축된다. 이에 반해, 입력 파라미터 CRF의 값이 높을수록, 비디오 정보는 많이 압축된다. 달성 블록 비트스트림 길이(442)는 ICQ 제어기(458)에 대한 입력 파라미터 CRF를 조정함으로써 위아래로 조정된다.
CBR 제어기(456)와 대조적으로, VBR 제어기(454)는 전체 프레임에 대한 달성 블록 비트스트림 길이(442)에서의 비트 수를 변화시킨다. 특정 블록들에 대해, 비트 수의 편차는 CBR 제어기(456)에 의해 달성되는 편차를 초과한다. 일부 설계들에서, VBR 제어기(454)는 CRB 제어기(456)에 대한 20 퍼센트 이하와 비교해 300 퍼센트 편차를 허용한다. VBR 제어기(454)가 달성 블록 비트스트림 길이(442)의 높은 편차를 허용하지만, 시간에 걸쳐, VBR 제어기(454)는 CBR 제어기(456)로 달성되는 것과 필적하는 평균 달성 비트 스트림 길이(442)를 제공한다.
VBR 제어기(454)는 높은 비디오 복잡도, 포비티드 영역, 고대비 에지들 등을 갖는 프레임의 영역들에 더 높은 비트율을 제공하면서, 또한 이러한 특성들이 없는 프레임의 영역들에 더 낮은 비트율을 제공한다. 시간에 걸쳐 달성 블록 비트스트림 길이(442)를 합산하고 지속 시간으로 나누는 것은 통상적으로 타겟 비트율에 가까운 평균 비트율을 제공한다. CBR 제어기(456)와 달리, VBR 제어기(454)는 디코딩되기 전에 비디오 콘텐츠를 저장하기 위한 큰 외부 비디오 버퍼를 지원한다. ICQ 제어기(458)와 달리, VBR 제어기(454)는 외부 비디오 버퍼의 이용과 같은 피드백 정보(462)에 기초하여 달성 블록 비트스트림 길이(442)에 대한 타겟 값을 조정하는 것을 지원한다.
VBR 제어기(454)와 유사하게, QVBR 제어기(452)는 고대비 에지들을 갖는 영역, 포비티드 영역 등에 대해서와 같이 요구될 때 달성 블록 비트스트림 길이(442)를 변화시킨다. 그러나, VBR 제어기(454)와는 달리, QVBR 제어기(452)는 또한 ICQ 제어기(458)와 유사한 특정 품질 인자를 유지하려고 시도한다. ICQ 제어기(458)와 유사하게, QVBR 제어기(452)는 품질 인자(quality factor; QF)를 수신한다. 이러한 입력 파라미터는 값의 범위를 가진다. 예를 들어, QF에 대한 값의 범위는 일부 설계들에서는 0 내지 63이고, 다른 설계들에 대해서는 1 내지 100 등이다. QF 의 더 낮은 값들은 더 낮은 양자화 파라미터(460)와 연관되고, 이에 따라, 비디오 정보로부터 더 적은 정보가 제거된다. 더 낮은 QF로 비디오 정보는 덜 압축된다. 통상적으로, QVBR 제어기(452)는 게이밍 및 스트리밍 시스템들에서 사용된다.
인코딩 스테이지들(420)에서의 로직 블록들 및 비트율 제어기(450)에서의 다른 로직과 유사하게, 비트율 제어기들(452-458)은 회로부와 같은 하드웨어, 펌웨어 또는 사용자 정의 소프트웨어 애플리케이션들과 같은 소프트웨어, 및 하드웨어와 소프트웨어의 조합 중 하나 이상으로 구현된다. 비트율 제어기(450)에 네 가지 유형들의 비트율 제어기들(452-458)이 도시되어 있지만, 다른 실시 예들에서, 비트율 제어기(450)는 또 다른 수의 비트율 제어 알고리즘 및 다른 유형들의 비트율 제어 알고리즘들을 사용한다. 비트율 제어기들의 수 및 선택된 유형들에 관계 없이, 비디오 압축을 위해 실제로 선택되는 비트율 제어기의 유형 및 품질 인자(QF)와 같은 임의의 입력 파라미터들의 설정은 부가 정보(410)에 기초하여 행해진다.
엔트로피 코딩(428)은 양자화 블록(426)으로부터 수신되는 출력 비트스트림의 엔트로피 인코딩을 재배열하고 수행한다. 엔트로피 코딩 블록(428)은 수신된 비트스트림에서 비트들의 특정 시퀀스들을 식별한다. 이러한 비트들의 특정 시퀀스들 각각은 심볼로서 지칭된다. 엔트로피 코딩 블록(428)은 심볼들을 코드 워드들 또는 분율들과 같은 다른 값들로 대체한다. 엔트로피 코딩 알고리즘들의 유형들의 두 가지 예들은 허프만 코딩(Huffman coding) 및 산술 코딩(arithmetic coding)이다. 허프만 기반 코딩 알고리즘들은 테이블 조회에 기초하여 심볼들을 코드 워드들로 대체한다. 산술 기반 코딩 알고리즘들은 심볼들을 0과 1의 범위 사이의 분율로 대체한다. 하이브리드 접근법들은 테이블 조회 및 산술 연산의 단계들을 사용하여 조합되거나, 또는 연산 조건들에 기초하여 테이블 조회을 사용할 것인지 또는 산술 연산을 사용할 것인지를 선택한다.
허프만 기반 코딩 알고리즘들은 심볼들을 코드 워드들에 맵핑하기 위해 코드 워드들을 저장한 테이블에 액세스한다. 일부 설계들에서, 코드 워드들은 고정 길이(여기서 길이는 코드 워드에서 사용되는 비트 수임)를 가진다. 다른 설계들에서, 코드 워드들은 가변 길이 코드 워드들이다. 엔트로피 코딩 블록(428)은 심볼들을 나타내는 데 사용되는 평균 비트 수를 제한함으로써 비트스트림을 더 압축한다. 더 빈번하게 발생하는 심볼들은 더 작은 크기의 코드 워드들을 사용함으로써 더 압축된다. 덜 빈번하게 발생하는 심볼들은 더 큰 크기의 코드 워드들을 사용함으로써 덜 압축된다.
산술 기반 코딩 알고리즘들은 비트스트림의 심볼들 또는 다른 부분들(시퀀스들)을 0과 1 사이의 범위 내의, 또는 간격의 분율과 같은 수로 인코딩함으로써 허프만 기반의 코딩 알고리즘들과 상이하다. 정밀도는 생성된 분율들에 따라 달라진다. 더 많은 심볼들이 코딩될 때, 알고리즘은 더 높은 정밀도를 사용하여 시퀀스 식별자들을 나타낸다. 더 빈번하게 발생하는 심볼들은 0과 1 내의 더 큰 간격(범위)을 사용하여 압축된다. 예를 들어, 매우 빈번하게 발생하는 심볼에 대해, 알고리즘은 간격 0.3 내지 0.6을 선택한다. 덜 빈번하게 발생하는 심볼들은 0과 1 내의 더 작은 간격(범위)을 사용하여 압축된다. 예를 들어, 약하게 빈번하게 발생하는 심볼에 대해, 알고리즘은 간격 0.1 내지 0.2를 선택한다.
일부 설계들에서, 엔트로피 코딩 블록(428)에 대한 파라미터들은 심볼들을 테이블에 저장된 코드 워드들로 인코딩할 것인지 또는 심볼들을 산술 연산으로 인코딩할 것인지를 결정하기 위한 제1 파라미터들을 포함한다. 제2 파라미터는 사용되는 산술 연산들의 유형과 같은 산술 연산의 계산 복잡도 및 생성된 분율들에 사용되는 정밀량에 대한 임의의 한도를 결정한다. 일부 실시 예들에서, 엔트로피 인코딩 블록(428)은 디스플레이의 시청자에게 높은 시각적 디테일을 제공하는 영역들을 결정하기 위해 부가 정보(410)를 사용한다. 이에 따라, 엔트로피 인코딩 알고리즘(들)은 수신된 부가 정보(410)에 기초하여 이러한 영역들에서 더 높은 정밀도 및 더 복잡한 계산들을 선택한다.
이제 도 5를 참조하면, 비디오 인코딩 로직(500)의 일 실시 예의 블록도가 도시된다. 전술된 회로부 및 로직은 동일하게 번호가 매겨진다. 로직(520)은 조합 로직 및 순차 요소들을 위한 회로부와 같은 하드웨어, 펌웨어와 같은 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현된다. 로직(520)은 수신된 비디오 인코딩 파라미터들(510)(또는 입력 파라미터들(510))을 업데이트 또는 수정하는 것에 기초하여 업데이트된 비디오 인코딩 파라미터들(530)(또는 출력 파라미터들(530))을 생성한다. 수정은 부가 정보(130)에 기초한다. 입력 파라미터(510)는 다양한 비디오 인코딩 파라미터들을 포함한다. 비디오 인코더(400)에 대한 이전 설명은 이러한 입력 파라미터들(510) 이를테면 다수의 이용 가능한 양자화기들 중 하나의 선택, 맞춤 양자화기 매트릭스의 양자화기 스케일 코드의 선택, 양자화 파라미터(스텝 크기)의 선택, 엔트로피 코딩 알고리즘의 선택, 선택된 엔트로피 코딩 알고리즘에 대한 계산 복잡도 한도들의 선택, 및 산술 엔트로피 코딩 동안 분율들의 표현에 사용되는 정밀도의 선택을 설명한다.
비디오 인코더(400)에 대한 이전 설명은 입력 파라미터들(510)을 업데이트하기 위한 로직을 비디오 인코더(400)에 걸쳐 분산되어 있는 것으로서 설명한다. 여기, 비디오 인코딩 로직(500)에서, 로직(520)은 중앙 집중화된다. 다양한 실시 예들에서, 입력 파라미터들(510)을 업데이트하기 위한 로직은 중앙 집중되는 반면, 다른 실시 예들에서, 로직은 분산된다. 또 다른 실시 예들에서, 입력 파라미터들(510)을 업데이트하기 위한 로직(510)은 입력 파라미터들(510)의 제1 부분을 업데이트하기 위한 중앙 집중형 로직 및 입력 파라미터들(510)의 제2 부분을 업데이트하기 위한 분산형 로직 둘 다를 포함한다.
이제 도 6을 참조하면, 효율적인 비디오 렌더링을 수행하기 위한 방법(600)의 일 실시 예가 도시된다. 논의를 위해, 이러한 실시 예에서의 단계들(도 7에서의 단계들 뿐만 아니라)은 순차적인 순서로 도시된다. 그러나, 설명되는 방법들의 다양한 실시 예들에서, 설명되는 요소들 중 하나 이상의 요소가 동시에 또는 도시된 것과 상이한 순서로 수행되거나, 또는 완전히 생략됨에 유의한다. 또한 다른 추가 요소들도 목적하는 바에 따라 수행된다. 본 명세서에서 설명된 다양한 시스템들 또는 장치들 중 어느 하나가 방법들(600 및 700)을 구현하도록 구성된다.
프로세서가 비디오 프레임의 픽셀들의 다수의 블록들을 렌더링하기 위해 사용하기 위한 명령어들을 수신한다(블록 602). 다양한 구현들에서, 프로세서는 렌더링하기 위한 명령어들 및 픽셀들의 다수의 블록들을 수신하는 GPU이다. 프로세서는 비디오 프레임의 다수의 블록들 중 하나 이상의 블록을 갖는 영역을 렌더링하기 위해 선택한다(블록 604). 예를 들어, CPU는 렌더링하기 위한 객체들을 마킹하거나, 그렇지 않으면, 특정 객체들 및/또는 다수의 객체들을 포함하는 영역들이 시각적으로 유의한 속성들을 가진다는 것을 전달한다. 일부 설계들에서, CPU는 이러한 영역들을 태깅한다. 이러한 영역들은 포비티드 영역들, 예측된 초점들을 갖는 영역들 등을 포함한다.
영역을 렌더링한 후에, 프로세서는 선택된 영역에 대한 압축 레벨을 예측한다(블록 606). 전술된 바와 같이, CPU는 시각적으로 유의할 것으로 예측되는 객체들을 태깅하지만, CPU는 태깅된 객체가 프레임에 묘사된 장면에서 충분히 큰지 또는 초점에 놓여있는지는 인식하지 못한다. 일부 경우들에서, 렌더링 후에, GPU 는 이러한 결정들을 수행한다. 일 예에서, GPU는 태깅된 영역이 고대비 에지들을 포함하는지 여부를 결정한다. 또 다른 예에서, GPU는 태깅된 객체를 이전 프레임에서의 이의 위치와 비교하여 위치들이 임계치보다 더 많이 변경되었는지 여부를 결정한다. 이러한 경우에서, GPU는 태깅된 객체가 움직이는 객체라고 결정한다. 또 다른 예에서, GPU는 태깅된 객체 또는 객체들에 대해 프리렌더링 패스를 수행하고 딥 러닝 기술 또는 다른 기술을 통해 영역이 초점일 것으로 예측된다고 결정한다. 다양한 실시 예들에서, GPU는 고대비 에지들을 갖는 영역들, 예측된 초점들, 포비티드 영역들 등에 대해 낮은 압축 레벨을 예측한다. 또한, GPU는 움직이는 객체들을 갖는 영역들에 대해 높은 압축 레벨을 예측한다.
선택된 영역에 대한 예측된 압축 레벨이 선택된 영역 외부에 위치된 바로 이웃하는 블록들에 대한 압축 레벨과 동일하다면(조건부 블록 608의 "아니오" 분기), 마지막 영역이 선택되었는지 여부를 결정하기 위한 검사가 수행된다. 일부 경우들에서, 압축 레벨들을 비교할 때 임계치가 사용된다. 압축 레벨들 간의 차이가 임계치 내에 있다면, 선택된 영역의 압축 레벨과 선택된 영역 외부에 위치된 바로 이웃하는 블록들의 압축 레벨은 동일한 것으로 고려된다. 마지막 영역에 도달되지 않으면(조건부 블록 610의 "아니오" 분기), 방법(600)의 제어 흐름은 프로세서가 비디오 프레임의 다수의 블록들 중 하나 이상의 블록을 갖는 영역을 렌더링하기 위해 선택하는 블록 604로 복귀한다.
선택된 영역에 대한 예측된 압축 레벨이 선택된 영역 외부에 위치된 바로 이웃하는 블록들에 대한 압축 레벨과 상이하다면(조건부 블록 608의 "예" 분기), 프로세서는 비디오 프레임에서의 영역의 위치를 부가 정보와 같은 메타데이터에 삽입한다(블록 612). 다양한 실시 예들에서, 부가 정보는 비디오 프레임에 대한 렌더링된 픽셀들의 블록들과 함께 저장되는 메타데이터이다. 전술된 바와 같이, 부가 정보는 바로 이웃하는 픽셀들과 상이한 압축 레벨들을 갖는 프레임에서의 영역들을 표시하기 위한 다양한 포맷들 중 하나를 가진다.
프로세서는 영역과 바로 이웃하는 블록들 사이에 상이한 압축 레벨들을 야기하는 영역 내의 콘텐츠의 유형을 부가 정보에 삽입한다(블록 614). 콘텐츠의 유형의 예들은 고대비 에지들, 움직이는 객체들, 예측된 초점들, 포비티드 영역들 등이다. 그 후, 방법(600)의 제어 흐름은 프로세서가 상이한 압축 레벨을 갖는 마지막 영역이 렌더링되었는지 여부를 결정하는 조건부 블록 610으로 이동한다. 마지막 영역에 도달되면(조건부 블록 610의 "예" 분기), 프로세서는 비디오 프레임의 렌더링을 완료한다(블록 616). 예를 들어, 프로세서는 바로 이웃하는 픽셀들과 동일한 압축 레벨을 갖는 영역들을 렌더링한다. 그 후, 프로세서는 비디오 프레임의 렌더링된 픽셀들의 블록들 및 부가 정보를 비디오 인코더에 전달한다(블록 618). 전술된 바와 같이, 방법(600)(및 방법(700))에 대해 설명된 요소들 중 하나 이상의 요소는 동시에 또는 도시된 것과 상이한 순서로 수행된다. 이에 따라, 일부 실시 예들에서, 프로세서는 영역을 렌더링하는 것의 완료시에 렌더링된 픽셀들의 블록들 및 대응하는 부가 정보를 비디오 인코더에 전달한다. 이러한 실시 예들에서, 프로세서는 데이터를 비디오 인코더에 전달하기 전에 렌더링이 모든 영역들에 대해 완료되기를 기다리지 않는다. 이러한 경우들에서, 프로세서는 데이터를 파이프라인 방식으로 비디오 인코더에 전송한다.
이제 도 7을 참조하면, 효율적인 비디오 압축을 수행하기 위한 방법(700)의 일 실시 예가 도시된다. 인코더는 비디오 프레임의 렌더링된 픽셀들의 다수의 블록들을 수신한다(블록 702). 인코더는 또한 픽셀들의 이웃하는 블록들의 압축 레벨들과 상이한 예측 압축 레벨들을 갖는 비디오 프레임의 영역들 대한 정보를 저장한 부가 정보를 수신한다(블록 704). 일부 실시 예들에서, 부가 정보는 비디오 프레임에 대한 렌더링된 픽셀들의 블록들과 함께 저장되는 메타데이터이다. 인코더는 압축할 비디오 프레임의 렌더링된 픽셀들의 다수의 블록들 중의 블록을 선택한다(블록 706).
선택된 블록이 부가 정보에 의해 식별되는 영역 내에 위치되지 않으면(조건부 블록 708의 "아니오" 분기), 인코더는 타겟 압축 레벨에 기초하여 선택된 블록에 대한 인코딩 파라미터들을 업데이트한다(블록 710). 그러나, 선택된 블록이 부가 정보에 의해 식별되는 영역 내에 위치되면(조건부 블록 708의 "예" 분기), 인코더는 수신된 부가 정보에 기초하여 선택된 영역에 대한 인코딩 파라미터들을 업데이트한다(블록 712). 예를 들어, 인코더가 수신된 부가 정보로부터, 영역이 바로 이웃하는 블록들의 압축 레벨보다 더 큰 압축 레벨을 갖는다고 결정할 때, 일부 실시 예들에서, 인코더는 양자화 파라미터를 증가시킨다.
다른 예들에서, 인코더가 수신된 부가 정보로부터, 영역이 바로 이웃하는 블록들의 압축 레벨보다 더 작은 압축 레벨을 갖는다고 결정할 때, 일부 실시 예들에서, 빠른 탐색이 아니라, 모션 추정 동안 탐색 영역에서 영역의 전역 탐색을 수행한다. 또한, 일부 실시 예들에서, 인코더는 산술 엔트로피 코딩 알고리즘들에 의해 생성되는 분율들의 정밀도를 증가시킨다. 나아가, 일 실시 예에서, 인코더는 모션 추정에 사용할 블록들의 크기 및 수를 감소시킨다. 다른 실시 예들에서, 인코더는 (도 4의) 인코더(400) 및 (도 5의) 인코딩 파라미터들(510)에서 설명된 인코딩 파라미터들과 같은 다양한 다른 인코딩 파라미터들을 업데이트한다.
하나 이상의 인코딩 파라미터를 업데이트한 후에, 인코더는 업데이트된 인코딩 파라미터들에 기초하여 선택된 영역을 압축한다(블록 714). 프레임의 픽셀들의 마지막 블록에 도달되지 않으면(조건부 블록 716의 "아니오" 분기), 방법(700)의 제어 흐름은 블록 706으로 복귀하며 여기서 프레임의 다수의 블록들 중의 또 다른 블록이 선택된다. 그렇지 않고, 프레임의 픽셀들의 마지막 블록에 도달되면(조건부 블록 716의 "예" 분기), 인코더는 프레임의 압축을 완료한다(블록 718). 그 후, 인코더는 비디오 프레임의 압축된 픽셀들을 송신기로 보내며, 송신기는 압축된 비디오 정보를 디코딩하여 디스플레이 상에 디스플레이하기 위해 수신기로 보낸다.
이제 도 8을 참조하면, 비디오 프레임에서의 블록들의 프레임간 의존성(800)의 일 실시 예의 블록도가 도시된다. 다양한 실시 예들에서, 송신기는 프레임(840)에 대응하는 렌더링된 정보와 같은 비디오 정보를 수신기로 보낸다. 프레임(840)이 하늘을 나는 비행기의 그림을 묘사하지만, 다른 예들에서, 프레임(840)은 스포츠 이벤트의 장면, 비디오 게임의 장면 등과 같은 매우 다양한 시각적 정보에 대한 정보를 포함한다. 소프트웨어 힌트 또는 하드웨어 힌트는 장면 내에서 비행기를 초점(842), 그리고 이에 따라, 영역으로서 식별한다. 일부 실시 예들에서, 프레임(840)에 대한 부가 정보는 초점(842) - 비행기 - 의 표시를 포함한다. 프레임(840) 아래에는 프레임(840)에 묘사된 장면의 다양한 프레임들에 대한 인코딩 파라미터의 다수의 예들이 있다. 인코딩 파라미터의 예로서 양자화 파라미터(QP)가 도시되지만, 프레임들에 걸쳐 변화하는 하나 이상의 다른 인코딩 파라미터가 또한 가능하고 고려된다.
임의의 초점에 위치되지 않는 객체들, 이를테면 배경 하늘, 구름 및 아래 땅에 대해, 인코더는 초점(842)에 대한 압축비보다 더 높은 압축비를 선택한다. 도시된 바와 같이, 프레임(840)은 프레임 X(여기서 X는 0이 아닌 양의 정수임)이다. 다양한 실시 예들에서, 비디오 인코더는 N개의 선행하는 프레임을 고려하고 M개의 후속하는 프레임을 고려함으로써(여기서 N 및 M 각각은 0이 아닌 양의 정수임) 프레임(840)(프레임 X)에서의 소정의 블록에 대한 QP를 대체하거나 업데이트한다. 다시 말해, 일부 실시 예들에서, 프레임(842)(프레임 X)에 대한 부가 정보는 프레임 X-N으로부터(여기서 N은 X보다 작음) 프레임 X+M까지의 부가 정보의 일부분을 포함한다.
프레임(840)(프레임 X)에 대해, 블록 13(블록(844))은 창공이고, 블록 14(블록(846))는 초점(842) 내의 비행기의 앞부분이며, 블록 45(블록(848))는 초점(842) 내의 비행기의 꼬리이다. 그러나, 프레임 X-1에 대해, 블록 14는 비행기가 블록 14에 아직 도달하지 않았기 때문에, 창공이다. 유사하게, 프레임 X-N 내지 프레임 X-1에 대해, 블록 14는 창공이다. 일 예에서, 창공에 대한 QP는 20인 반면, 초점 영역(842)(비행기)에 대한 QP는 8이다. QP의 급격한 변화로 인해 시청자는 스크린 상에서 깜빡거림을 볼 수 있다.
두 개의 연속적인 프레임들 사이의 압축 레벨들의 급격한 변화를 피하기 위해, 비디오 인코더는 더 연속적인 방식으로 QP를 프레임들에 걸쳐 변경한다. 예를 들어, 비디오 인코더는 블록 14에 대한 QP를 다수의 프레임들에 걸쳐 결정하기 위해 평균화 공식으로서 사용되는 가중합을 생성한다. 도시된 예에서, N은 4이고 M은 4이므로, 비디오 인코더는 블록 14에 대한 QP를 4개의 이전 프레임들에 걸쳐 업데이트하고, (20 - 8)/4이 3이므로, QP를 3 스텝으로 20에서 8로 감소시킨다. 여기서, 프레임들 X-N 내지 X 각각은 동일한 가중치 1을 가진다. 이러한 예에서, 비디오 인코더는 QP를 프레임들 X-4 내지 X에 걸쳐 20, 17, 14, 11 및 8이 되도록 생성한다. 다시 말해, 비디오 인코더는 프레임 X-4, 블록 14에 대한 QP를 20이 되도록, 그리고 프레임 X-3, 블록 14에 대한 QP를 17이 되도록, 그리고 프레임 X-2, 블록 14에 대한 QP를 14가 되도록, 그리고 프레임 X-1, 블록 14에 대한 QP를 11이 되도록, 그리고 프레임 X, 블록 14에 대한 QP를 8이 되도록 생성한다. 두 개의 프레임들 사이에서 블록 14에 대한 QP의 급격한 변화는 없다. 프레임(840)(프레임 X) 직후의 프레임들에 대한 블록 14가 초점(842)(비행기)을 포함하므로, QP는 프레임 X 내지 프레임 X+4에 대한 블록 14에 대해 8로 유지된다.
이제 도 9를 참조하면, 비디오 프레임에서의 블록들의 프레임간 의존성(900)의 일 실시 예의 블록도가 도시된다. 전술된 비디오 정보는 동일하게 번호가 매겨진다. 도시된 예에서, N은 4이고 M은 4이므로, 비디오 인코더는 블록 45(블록(848))에 대한 QP를 4개의 댜음 프레임들에 걸쳐 업데이트하고, (20 - 8)/4이 3이므로, QP를 3 스텝으로 8에서 20으로 증가시킨다. 여기서, 프레임들 X-N 내지 X 각각은 동일한 가중치 1을 가진다. 이러한 예에서, 비디오 인코더는 QP를 프레임들 X 내지 X+4에 걸쳐 8, 11, 14, 17 및 20이 되도록 생성한다. 다시 말해, 비디오 인코더는 프레임 X, 블록 45에 대한 QP를 8이 되도록, 그리고 프레임 X+1, 블록 14에 대한 QP를 11이 되도록, 그리고 프레임 X+2, 블록 45에 대한 QP를 14가 되도록, 그리고 프레임 X+3, 블록 45에 대한 QP를 17이 되도록, 프레임 X+4, 블록 45에 대한 QP를 20이 되도록 생성한다. 두 개의 프레임들 사이에서 블록 14에 대한 QP의 급격한 변화는 없다. 프레임(840)(프레임 X) 직전의 프레임들에 대한 블록 45가 초점(842)(비행기)을 포함하므로, QP는 프레임 X-4 내지 프레임 X에 대한 블록(45)에 대해 8로 유지된다.
이제 도 10을 참조하면, 효율적인 비디오 압축을 수행하기 위한 방법(1000)의 일 실시 예가 도시된다. 인코더가 비디오 프레임의 다수의 블록들 중의 블록 A의 렌더링된 픽셀들을 수신한다(블록 1002). 인코더는 또한 픽셀들의 이웃하는 블록들의 압축 레벨들과 상이한 예측 압축 레벨들을 갖는 비디오 프레임의 영역들에 대한 정보를 저장한 부가 정보를 다수의 프레임들에 대해 수신한다(블록 1004). 블록 A가 프레임 X에서의 영역 전 마지막 선행 블록이라면(조건부 블록 1006의 "예" 분기), 비디오 인코더는 프레임들 X-N 내지 X+M에 대한 부가 정보에 기초하여 블록 A에 대한 인코딩 파라미터들을 업데이트한다. 다양한 실시 예들에서, 비디오 인코더는 도 8 및 도 9에서 이전에 예시된 단계들을 수행한다.
블록 A가 프레임 X에서의 영역 전 마지막 선행 블록이 아니고(조건부 블록 1006의 "아니오" 분기), 선택된 블록이 부가 정보에 의해 식별되는 영역 내에 위치되지 않으면(조건부 블록 1010의 "아니오" 분기), 인코더는 타겟 압축 레벨에 기초하여 선택된 블록에 대한 인코딩 파라미터들을 업데이트한다(블록 1014). 그러나, 선택된 블록이 부가 정보에 의해 식별되는 영역 내에 위치되면(조건부 블록 1010의 "예" 분기), 인코더는 수신된 부가 정보에 기초하여 선택된 영역에 대한 인코딩 파라미터들을 업데이트한다(블록 1012). 예를 들어, 인코더가 수신된 부가 정보로부터, 영역이 바로 이웃하는 블록들의 압축 레벨보다 더 큰 압축 레벨을 갖는다고 결정할 때, 일부 실시 예들에서, 인코더는 양자화 파라미터를 증가시킨다. 블록들 1008, 1012 및 1014 중 어느 하나에서 하나 이상의 인코딩 파라미터를 업데이트한 후에, 인코더는 업데이트된 인코딩 파라미터들에 기초하여 선택된 영역을 압축한다(블록 1016).
이제 도 11을 참조하면, 비디오 프레임에서의 블록들의 프레임간 의존성(1100)의 일 실시 예의 블록도가 도시된다. 전술된 비디오 프레임 정보는 동일하게 넘버링된다. 소프트웨어 힌트 또는 하드웨어 힌트는 장면 내에서 요트를 초점(142), 그리고 이에 따라, 영역으로서 식별한다. 일부 실시 예들에서, 프레임(140)에 대한 부가 정보는 초점(142) - 요트 - 의 표시를 포함한다. 프레임(140)이 물 위의 요트를 묘사하지만, 다른 예들에서, 프레임(140)은 스포츠 이벤트의 장면, 비디오 게임의 장면 등과 같은 매우 다양한 시각적 정보에 대한 정보를 포함한다. 프레임(140)은 또한 도시된 예에서 프레임 X라고도 지칭되고, 프레임(1140)(프레임 X+1)은 새로운 정보를 포함하며 이 중 어느 것도 프레임(140)(프레임 X)에서의 비디오 정보와 중첩되지 않는다. 이에 따라, 프레임 X와 프레임 X+1 사이에서 장면 컷이 발생한다.
프레임(140)(프레임 X) 및 프레임(1140)(프레임 X+1) 아래에는 프레임들(140 및 1140)에 묘사된 장면들의 다양한 프레임들에 대한 인코딩 파라미터의 다수의 예들이 있다. 인코딩 파라미터의 예로서 양자화 파라미터(QP)가 도시되지만, 프레임들에 걸쳐 변화하는 하나 이상의 다른 인코딩 파라미터가 또한 가능하고 고려된다. 임의의 초점에 위치되지 않는 객체들, 이를테면 배경 하늘, 물 및 땅에 대해, 인코더는 초점(142)(요트)에 대한 압축비보다 더 높은 압축비를 선택한다. 일 예에서, 초점(142)에 대한 QP는 8이고 프레임(140)에서의 배경 객체들에 대한 QP는 16이다. 프레임(1140)에서의 각 블록에 대한 QP는 22이다. 프레임(1140)에서의 장면은 상이한 비디오 설정들을 기술하는 텍스트를 갖는 비디오 구성 페이지이다. 예를 들어, 1920 x 1080의 비디오 해상도가 선택되고, 60 헤르츠(Hz)의 비디오 재생률이 선택되는 등이다.
프레임(1140)이 비디오 구성 페이지에 대한 텍스트 및 무지의 배경을 포함하므로, 비디오 인코더는 더 높은 압축 레벨, 그리고 이에 따라, 시청자에 대한 더 낮은 시각적 품질 및 더 높은 QP를 선택할 수 있다. 일 예에서, 비디오 인코더는 전체 프레임(1140)(프레임 X+1)에 대한 QP를, 프레임(140)(프레임 X)에서 사용된 QP 값들 8 및 16보다 더 높은 22로 업데이트한다. 그러나, 비디오 인코더는 프레임(1140)에 대한 부가 정보 없이, 프레임(1140)의 제1 블록을 인코딩하기 전에 프레임(1140)의 콘텐츠를 인식하지 못한다. 비디오 인코더는 프레임(140)(프레임 X) 및 프레임(1140)(프레임 X+1)에 대한 부가 정보를 사용하여, 프레임들 아래의 텍스트 박스들에 제시된 바와 같이 프레임(140)(프레임 X) 및 프레임(1140)(플레임 X+1) 각각에서의 블록들에 대한 QP를 업데이트할 수 있다.
도시된 예에서, N은 4이고 M은 4이므로, 비디오 인코더는 4개의 이전 프레임들에 걸쳐 초점(142)에 의해 정의된 영역 내의 블록 23(블록(190))에 대한 QP를 유지한다. 비디오 인코더는 프레임 X에서 QP를 8에서 10으로 증가시킨다. 프레임 X+1에서 장면 컷이 일어나지만, QP의 급격한 변화로 인해 시청자가 깜빡거림을 보는 것을 방지하기 위해, 인코더는 장면 컷이 일어날 때까지 여전히 M=4를 사용하여 QP를 조정한다. 프레임 X+1에서 장면 컷이 일어날 때, 전체 프레임의 몇 블록이 아니라, 프레임 X+1에서의 각 블록에 대해 급격한 변화가 있다. 이에 따라, 인코더는 프레임 X에 대해, (16 - 8)/4가 2이므로, 블록 23에 대한 QP를 2 스텝으로 업데이트한다. 여기서, 프레임들 X-4 내지 X 각각은 동일한 가중치 1을 가진다. 이러한 예에서, 비디오 인코더는 QP를 프레임들 X-4 내지 X에 걸쳐 8, 8, 8, 8 및 10이 되도록 생성한다. 프레임 X+1에서 장면 컷이 일어난 이후, QP의 10에서 16으로 2 스텝으로의 증분들은 사용되지 않는다. 프레임들 X+1 내지 X+4에 대해, 블록 23에 대한 QP는, 프레임들 X+1 내지 X +4에서의 각 블록에 대한 QP인 22이다.
이제 도 12을 참조하면, 비디오 프레임에서의 블록들의 프레임간 의존성(1200)의 일 실시 예의 블록도가 도시된다. 전술된 비디오 정보는 동일하게 번호가 매겨진다. 일부 실시 예들에서, 프레임(1240)에 대한 부가 정보는 초점(1242) - 요트 - 의 표시를 포함한다. 프레임(1240)이 물 위의 요트를 묘사하지만, 다른 예들에서, 프레임(1240)은 스포츠 이벤트의 장면, 비디오 게임의 장면 등과 같은 매우 다양한 시각적 정보에 대한 정보를 포함한다. 프레임(1240)은 또한 도시된 예에서 프레임 X-2이라고도 지칭되고, 프레임(1140)(프레임 X+1)은 새로운 정보를 포함하며 이 중 어느 것도 프레임 X(도시되지 않음)에서의 비디오 정보와 중첩되지 않는다. 따라서, 프레임 X와 프레임 X+1 사이에서 장면 컷이 발생하지만, 초점(1242)(요트)은 도 11에 도시된 이전 예보다 더 이른 시간에 장면 컷 이전에 블록 23을 지나 이동한다. 여기, 도 12에서, 초점(1242)(요트)는 도 11에 도시된 바와 같이 프레임 X에서가 아니라, 프레임 X-2에서 블록 23을 지나 이동한다.
도 12의 도시된 예에서, N은 4이고 M은 4이므로, 비디오 인코더는 블록 23(블록(1290))에 대한 QP를 장면 컷 이전 3개의 프레임들에 걸쳐 업데이트하고, (16 - 8)/4이 2이므로, QP를 2 스텝으로 8에서 14로 증가시킨다. 여기서, 프레임들 X-4 내지 X 각각은 동일한 가중치 1을 가진다. 이러한 예에서, 비디오 인코더는 QP를 프레임들 X-4 내지 X에 걸쳐 8, 8, 10, 12 및 14이 되도록 생성한다. 여기서, 프레임들 X-4 내지 X 각각은 동일한 가중치 1을 가진다. 프레임 X+1에서 장면 컷이 일어나지만, 블록 23에서의 QP의 급격한 변화로 인해 시청자가 깜빡거림을 보는 것을 방지하기 위해, 인코더는 장면 컷이 일어날 때까지 여전히 M=4를 사용하여 블록 23에 대한 QP를 조정한다. 프레임 X+1에서 장면 컷이 일어날 때, 전체 프레임의 몇 블록이 아니라, 프레임 X+1에서의 각 블록에 대해 급격한 변화가 있어 QP=22를 사용한다.
이제 도 13을 참조하면, 효율적인 비디오 압축을 수행하기 위한 방법(1300)의 일 실시 예가 도시된다. 인코더는 비디오 프레임 X의 렌더링된 픽셀들의 다수의 블록들을 수신한다(블록 1302). 인코더는 픽셀들의 이웃하는 블록들의 압축 레벨들과 상이한 예측 압축 레벨들을 갖는 영역들의 부가 정보를 다수의 프레임들에 대해 수신한다(블록 1304). 다양한 실시 예들에서, 수신된 부가 정보는 프레임 X에 대한, 프레임 X 이전 0 내지 N개의 프레임들에 대한, 그리고 프레임 X 이후 0 내지 M개의 프레임들에 대한 정보를 제공한다. 변수 X, N 및 M은 전술된 바와 같이 0이 아닌 양의 정수이다. 프레임 X가 장면 컷 전 M개의 프레임들 내에 있지 않으면(조건부 블록 1306의 "아니오" 분기), (만약에 있다면) 다음 장면 컷은 프레임 X 이후 M개의 프레임들을 초과한다. 이러한 경우에, 인코더는 프레임 X에 대한 부가 정보, 다른 프레임들로부터의 부가 정보, 및 타겟 압축 레벨 중 하나 이상에 기초하여 프레임 X의 블록 A에 대한 인코딩 파라미터들을 업데이트한다(블록 1308). 인코더는 프레임 X에서 식별되는 영역들의 수, 이용 가능한 부가 정보가 있는 프레임 X 이전의 프레임들의 수, 및 이용 가능한 부가 정보가 있는 프레임 X 이후의 프레임들의 수에 기초하여 프레임 X의 블록 A에 대한 인코딩 파라미터들을 업데이트하는 데 사용할 정보를 선택한다. 다양한 실시 예들에서, 비디오 인코더 (도 7 및 도 10 의) 방법들(700 및 1000)과 같은 이전의 방법들에서 예시된 단계들 중 하나 이상을 수행한다.
프레임 X가 장면 컷 전 M개의 프레임들 내에 있고(조건부 블록 1306의 "예" 분기), 프레임 X가 장면 컷과 연관된 새로운 장면의 제1 프레임이라면(조건부 블록 1310의"예" 분기), 프레임 X는 장면 컷 전 0 프레임들 내에 있다. 이러한 경우에, 인코더는 적어도 장면 컷과 연관된 새로운 장면의 부가 정보에 기초하여 프레임 X의 블록 A에 대한 인코딩 파라미터들을 업데이트한다(블록 1312). 프레임 X가 장면 컷과 연관된 새로운 장면의 제2 프레임 또는 이후의 프레임이면, 방법(1300)의 제어 흐름은 이전 조건 블록 1306 및 임의의 다른 다음 장면 컷에 기초하여 이동한다. 프레임 X가 장면 컷과 연관된 새로운 장면의 제1 프레임이 아니면(조건부 블록 1310의 "아니오" 분기), 프레임 X는 장면 컷에 연관된 새로운 장면 전 1 내지 M개의 프레임들 내에 있다. 이러한 경우에, 인코더는 적어도 프레임 X와 장면 컷의 제1 프레임 사이의 프레임들에 대한 부가 정보에 기초하여 프레임 X의 블록 A에 대한 인코딩 파라미터들을 업데이트한다(블록 1314). 다양한 실시 예들에서, 비디오 인코더는 도 11 및 도 12에서 이전에 예시된 단계들을 수행한다.
다양한 실시 예들에서, 전술된 방법들 및/또는 메커니즘들을 구현하는 데 소프트웨어 애플리케이션의 프로그램 명령어들은 사용된다. 프로그램 명령어들은 하드웨어의 거동을 C와 같은 고급 프로그래밍 언어로 기술한다. 대안적으로, Verilog와 같은 하드웨어 설계 언어(HDL)가 사용된다. 프로그램 명령어들은 비일시적인 컴퓨터 판독 가능 저장 매체 상에 저장된다. 많은 유형들의 저장 매체들이 이용 가능하다. 저장 매체에는 사용 동안 프로그램 명령어들 및 수반되는 데이터를 프로그램 실행을 위해 컴퓨팅 시스템에 제공하기 위해 컴퓨팅 시스템에 의해 액세스 가능하다. 컴퓨팅 시스템은 적어도 하나 이상의 메모리 및 프로그램 명령어들을 실행하는 하나 이상의 프로세서를 포함한다.
상술된 실시 예들은 단지 구현들의 비제한적인 예들이라는 것이 강조되어야 한다. 상기한 개시 내용이 완전히 이해되면, 당업자들에게 다수의 변경들 및 수정들이 명백해질 것이다. 다음의 청구항들은 이러한 모든 변경들 및 수정들을 포함하는 것으로 해석되도록 의도된다.

Claims (20)

  1. 시스템으로서,
    데이터를 수신하도록 구성된 인터페이스 회로부 및
    상기 인터페이스 회로부에 결합되는 인코더를 포함하며;
    상기 인코더는:
    비디오 프레임의 픽셀들의 복수의 블록들 및 상기 비디오 프레임의 픽셀들의 상기 복수의 블록들과 별도인 부가 정보를 수신하도록; 그리고
    상기 부가 정보에 기초하여, 소정의 영역이 상기 소정의 영역 외부의 바로 이웃하는 블록들의 제2 압축 레벨과 상이한 제1 압축 레벨을 갖는 상기 비디오 프레임의 상기 복수의 블록들 중의 하나 이상의 블록을 포함한다고 결정하는 것에 응답하여, 상기 제1 압축 레벨을 사용하여 상기 소정의 영역의 상기 하나 이상의 블록을 압축하도록 구성된 것인, 시스템.
  2. 제1항에 있어서, 상기 부가 정보에 기초하여, 상기 비디오 프레임의 상기 복수의 블록들의 각 블록이 상기 부가 정보에 의해 표시되는 제3 압축 레벨을 가진다고 결정하는 것에 응답하여, 상기 제3 압축 레벨을 사용하여 상기 비디오 프레임을 압축하는 것인, 시스템.
  3. 제1항에 있어서, 상기 소정의 영역의 상기 하나 이상의 블록을 압축하기 위해, 상기 인코더는 수신된 상기 부가 정보에 기초하여 하나 이상의 인코딩 파라미터를 업데이트하도록 더 구성된 것인, 시스템.
  4. 제3항에 있어서, 상기 하나 이상의 인코딩 파라미터를 업데이트하기 위해, 상기 인코더는:
    상기 인코더가 상기 부가 정보를 수신하지 않은 바와 같이 소정의 인코딩 파라미터를 생성하도록; 그리고
    상기 소정의 인코딩 파라미터를 상기 부가 정보에 기초한 상기 소정의 인코딩 파라미터의 값으로 대체하도록 더 구성된 것인, 시스템.
  5. 제3항에 있어서, 프로세서를 더 포함하며, 상기 소정의 영역이 상기 비디오 프레임에 존재한다는 것을 표시하는 소프트웨어 힌트 또는 하드웨어 힌트를 수신하는 것에 응답하여, 상기 프로세서는 상기 부가 정보를 생성하되, 상기 부가 정보는:
    상기 비디오 프레임에서의 상기 소정의 영역의 위치; 및
    상기 소정의 영역과 상기 바로 이웃하는 블록들 사이에 상이한 압축 레벨들을 야기하는 상기 소정의 영역 내의 콘텐츠의 유형을 포함하는 것인, 시스템.
  6. 제5항에 있어서, 상기 소정의 영역이 상기 비디오 프레임에서의 예측된 초점을 포함한다고 결정하는 것에 응답하여, 상기 프로세서는:
    상기 소정의 영역에 대한 압축 레벨이 상기 바로 이웃하는 블록들에 대한 압축 레벨보다 작다고 예측하도록; 그리고
    상기 유형의 콘텐츠가 상기 비디오 프레임에서의 상기 예측된 초점임을 특정하는 표시를 상기 부가 정보에 삽입하도록 더 구성된 것인, 시스템.
  7. 제3항에 있어서, 수신된 상기 부가 정보로부터, 상기 소정의 영역의 상기 복수의 블록들이 상기 바로 이웃하는 블록들의 압축 레벨보다 작은 압축 레벨을 가진다고 결정하는 것에 응답하여, 상기 인코더는 양자화 파라미터를 감소시키도록 더 구성된 것인, 시스템.
  8. 제5항에 있어서, 상기 부가 정보는:
    상기 비디오 프레임에 선행하는 N개의 비디오 프레임들에서의 상기 소정의 영역의 각 위치 - N은 0이 아닌 양의 정수임 -; 및
    상기 N개의 비디오 프레임들에서의 상기 소정의 영역에 선행하는 제1 블록의 하나 이상의 인코딩 파라미터를 더 포함하는 것인, 시스템.
  9. 제8항에 있어서, 상기 인코더는 상기 선행하는 N개의 비디오 프레임들에서의 상기 제1 블록에 대한 상기 하나 이상의 인코딩 파라미터의 가중합에 기초하여 상기 제1 블록에 대한 하나 이상의 인코딩 파라미터를 업데이트함으로써 상기 제1 블록을 압축하도록 더 구성된 것인, 시스템.
  10. 방법으로서,
    비디오 프레임의 픽셀들의 복수의 블록들 및 상기 비디오 프레임의 픽셀들의 상기 복수의 블록들과 별도인 부가 정보를 수신하는 단계; 및
    상기 부가 정보에 기초하여, 소정의 영역이 상기 소정의 영역 외부의 바로 이웃하는 블록들의 제2 압축 레벨과 상이한 제1 압축 레벨을 갖는 상기 비디오 프레임의 상기 복수의 블록들 중의 하나 이상의 블록을 포함한다고 결정하는 것에 응답하여, 상기 제1 압축 레벨을 사용하여 상기 소정의 영역의 상기 하나 이상의 블록을 압축하는 단계를 포함하는, 방법.
  11. 제10항에 있어서, 상기 소정의 영역의 상기 복수의 블록들을 압축하기 위해, 수신된 상기 부가 정보에 기초하여 하나 이상의 인코딩 파라미터를 업데이트하는 단계를 더 포함하는, 방법.
  12. 제11항에 있어서, 상기 소정의 영역이 상기 비디오 프레임에 존재한다는 것을 표시하는 소프트웨어 힌트 또는 하드웨어 힌트를 수신하는 것에 응답하여, 상기 방법은 프로세서가 상기 부가 정보를 생성하는 단계를 더 포함하되, 상기 부가 정보는:
    상기 비디오 프레임에서의 상기 소정의 영역의 위치; 및
    상기 소정의 영역과 상기 바로 이웃하는 블록들 사이에 상이한 압축 레벨들을 야기하는 상기 소정의 영역 내의 콘텐츠의 유형을 포함하는 것인, 시스템.
  13. 제12항에 있어서, 상기 소정의 영역이 상기 비디오 프레임에서의 예측된 초점을 포함하는 객체의 유형을 포함한다고 결정하는 것에 응답하여:
    상기 소정의 영역에 대한 압축 레벨이 상기 바로 이웃하는 블록들에 대한 압축 레벨보다 작다고 예측하는 단계; 및
    상기 유형의 콘텐츠가 상기 비디오 프레임에서의 상기 예측된 초점임을 특정하는 표시를 상기 부가 정보에 삽입하는 단계를 더 포함하는, 방법.
  14. 제11항에 있어서, 수신된 상기 부가 정보로부터, 상기 소정의 영역의 상기 복수의 블록들이 상기 바로 이웃하는 블록들의 압축 레벨보다 작은 압축 레벨을 가진다고 결정하는 것에 응답하여, 빠른 탐색(fast search)이 아니라, 모션 추정 동안 탐색 영역에서 상기 복수의 블록들의 전역 탐색(full search)을 수행하는 단계를 더 포함하는, 방법.
  15. 제11항에 있어서, 수신된 상기 부가 정보로부터, 상기 소정의 영역의 상기 복수의 블록들이 상기 바로 이웃하는 블록들의 압축 레벨보다 작은 압축 레벨을 가진다고 결정하는 것에 응답하여, 산술 엔트로피 코딩 알고리즘들에 의해 생성되는 분율들의 정밀도를 증가시키는 단계를 더 포함하는, 방법.
  16. 프로그램 명령어들을 저장하는 비일시적인 컴퓨터 판독 가능 저장 매체로서, 상기 프로그램 명령어들은 프로세서에 의해:
    비디오 프레임의 픽셀들의 복수의 블록들 및 상기 비디오 프레임의 픽셀들의 상기 복수의 블록들과 별도인 부가 정보를 수신하도록; 그리고
    상기 부가 정보에 기초하여, 소정의 영역이 상기 소정의 영역 외부의 바로 이웃하는 블록들의 제2 압축 레벨과 상이한 제1 압축 레벨을 갖는 상기 비디오 프레임의 상기 복수의 블록들 중의 하나 이상의 블록을 포함한다고 결정하는 것에 응답하여, 상기 제1 압축 레벨을 사용하여 상기 소정의 영역의 상기 하나 이상의 블록을 압축하도록 실행 가능한 것인, 비일시적인 컴퓨터 판독 가능 저장 매체.
  17. 제17항에 있어서, 상기 소정의 영역이 상기 비디오 프레임에 존재한다는 것을 표시하는 소프트웨어 힌트 또는 하드웨어 힌트를 수신하는 것에 응답하여, 상기 프로그램 명령어들은 프로세서에 의해, 수신된 상기 부가 정보에 기초하여 하나 이상의 인코딩 파라미터를 업데이트하도록 더 실행 가능한 것인, 비일시적인 컴퓨터 판독 가능 저장 매체.
  18. 제17항에 있어서, 상기 소정의 영역이 상기 비디오 프레임에 존재한다는 것을 표시하는 소프트웨어 힌트 또는 하드웨어 힌트를 수신하는 것에 응답하여, 상기 프로그램 명령어들은 프로세서에 의해, 상기 부가 정보를 생성하도록 실행 가능하되, 상기 부가 정보는:
    상기 비디오 프레임에서의 상기 소정의 영역의 위치; 및
    상기 소정의 영역과 상기 바로 이웃하는 블록들 사이에 상이한 압축 레벨들을 야기하는 상기 소정의 영역 내의 콘텐츠의 유형을 포함하는 것인, 비일시적인 컴퓨터 판독 가능 저장 매체.
  19. 제18항에 있어서, 상기 소정의 영역이 상기 비디오 프레임에서의 예측된 초점을 포함한다고 결정하는 것에 응답하여, 상기 프로그램 명령어들은 프로세서에 의해:
    상기 소정의 영역에 대한 압축 레벨이 상기 바로 이웃하는 블록들에 대한 압축 레벨보다 작다고 예측하도록; 그리고
    상기 유형의 콘텐츠가 상기 비디오 프레임에서의 상기 예측된 초점임을 특정하는 표시를 상기 부가 정보에 삽입하도록 실행 가능한 것인, 비일시적인 컴퓨터 판독 가능 저장 매체.
  20. 제17항에 있어서, 수신된 상기 부가 정보로부터, 상기 소정의 영역의 상기 복수의 블록들이 상기 바로 이웃하는 블록들의 압축 레벨보다 작은 압축 레벨을 가진다고 결정하는 것에 응답하여, 상기 프로그램 명령어들은 프로세서에 의해, 양자화 파라미터를 감소시키도록 더 실행 가능한 것인, 비일시적인 컴퓨터 판독 가능 저장 매체.
KR1020217019696A 2019-03-28 2020-04-01 상이한 압축 레벨의 비디오 코딩을 위한 부가 정보 KR20210145719A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/368,293 US11212537B2 (en) 2019-03-28 2019-03-28 Side information for video data transmission
US16/368,293 2019-03-28
PCT/US2020/026215 WO2020198756A1 (en) 2019-03-28 2020-04-01 Side information for video coding at different compression levels

Publications (1)

Publication Number Publication Date
KR20210145719A true KR20210145719A (ko) 2021-12-02

Family

ID=70465439

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217019696A KR20210145719A (ko) 2019-03-28 2020-04-01 상이한 압축 레벨의 비디오 코딩을 위한 부가 정보

Country Status (6)

Country Link
US (1) US11212537B2 (ko)
EP (1) EP3949401A1 (ko)
JP (1) JP7449941B2 (ko)
KR (1) KR20210145719A (ko)
CN (1) CN113767628A (ko)
WO (1) WO2020198756A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10939038B2 (en) * 2017-04-24 2021-03-02 Intel Corporation Object pre-encoding for 360-degree view for optimal quality and latency
CN113163185B (zh) * 2021-03-26 2023-03-07 复旦大学 基于异构计算的vr实时自适应传输系统及方法
US11886865B2 (en) * 2021-04-19 2024-01-30 Ford Global Technologies, Llc Enhanced data provision in a digital network

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11215498A (ja) * 1998-01-27 1999-08-06 Canon Inc 画像処理装置および画像処理方法およびプログラム記憶媒体
AU762996B2 (en) 1999-02-09 2003-07-10 Motorola Australia Pty Ltd An image compression system and method of determining quantisation parameters therefor
WO2000062543A1 (en) 1999-04-08 2000-10-19 New York University Extremely high resolution foveated display
JP2002300581A (ja) * 2001-03-29 2002-10-11 Matsushita Electric Ind Co Ltd 映像符号化装置、及び映像符号化プログラム
US7499594B2 (en) 2002-04-15 2009-03-03 At&T Intellectual Property 1, L.P. Multi-resolution predictive foveation for bandwidth reduction of moving images
JP3885704B2 (ja) * 2002-10-09 2007-02-28 コニカミノルタビジネステクノロジーズ株式会社 画像符号化装置
JP2011114493A (ja) * 2009-11-25 2011-06-09 Panasonic Corp 動きベクトル検出方法および動きベクトル検出装置
GB2539027B (en) * 2015-06-04 2019-04-17 Thales Holdings Uk Plc Video compression with increased fidelity near horizon
KR102511705B1 (ko) * 2015-11-16 2023-03-20 삼성전자주식회사 비디오 인코딩 방법, 이를 수행하는 비디오 인코더 및 이를 포함하는 전자 시스템
WO2017181429A1 (en) * 2016-04-22 2017-10-26 SZ DJI Technology Co., Ltd. Systems and methods for processing image data based on region-of-interest (roi) of a user
CN106162177B (zh) * 2016-07-08 2018-11-09 腾讯科技(深圳)有限公司 视频编码方法和装置
JP2018082407A (ja) * 2016-11-18 2018-05-24 富士通株式会社 動画像符号化装置、動画像符号化方法、および動画像符号化プログラム
US10535178B2 (en) 2016-12-22 2020-01-14 Advanced Micro Devices, Inc. Shader writes to compressed resources
US11025918B2 (en) * 2016-12-29 2021-06-01 Sony Interactive Entertainment Inc. Foveated video link for VR, low latency wireless HMD video streaming with gaze tracking
US20180220134A1 (en) 2017-02-02 2018-08-02 Peraso Technologies Inc. Video compression for non-uniform resolution requirements

Also Published As

Publication number Publication date
WO2020198756A8 (en) 2020-12-10
US20200314434A1 (en) 2020-10-01
WO2020198756A1 (en) 2020-10-01
CN113767628A (zh) 2021-12-07
JP2022525580A (ja) 2022-05-18
EP3949401A1 (en) 2022-02-09
JP7449941B2 (ja) 2024-03-14
US11212537B2 (en) 2021-12-28

Similar Documents

Publication Publication Date Title
JP6286718B2 (ja) 高効率な次世代ビデオコーディングのためのフレーム階層応答型量子化を使用する、コンテンツ適応ビットレートおよび品質管理
US9264708B2 (en) Method and apparatus for encoding and decoding coding unit of picture boundary
JP7449941B2 (ja) 異なる圧縮レベルでのビデオコーディングのためのサイド情報
US9591316B2 (en) Scalable video encoding rate adaptation based on perceived quality
US9883180B2 (en) Bounded rate near-lossless and lossless image compression
US20090207915A1 (en) Scalable motion search ranges in multiple resolution motion estimation for video compression
CN102396225B (zh) 用于可靠实时传输的图像和视频的双模式压缩
US10271056B2 (en) Encoding apparatus, encoding method and program
US9984504B2 (en) System and method for improving video encoding using content information
JP2007060164A (ja) 動きベクトル検出装置および動きベクトル検出方法
US20180184089A1 (en) Target bit allocation for video coding
KR20210090243A (ko) 포비티드 코딩의 슬라이스 크기 맵 제어
CN114631315A (zh) 图像编码方法和设备以及图像解码方法和设备
US10951892B2 (en) Block level rate control
NL2029548B1 (en) Determining adaptive quantization matrices using machine learning for video coding
US11418797B2 (en) Multi-plane transmission
CN116156168A (zh) 一种图像编解码方法及装置
JP6497874B2 (ja) 画像処理装置、画像処理方法、及びプログラム
JP2014003587A (ja) 画像符号化装置及びその方法
US20200053357A1 (en) Encoder and method for encoding
JP2013110466A (ja) 動画像符号化装置
JP2014179918A (ja) 動画像符号化装置、その制御方法、及び撮像装置
GB2613153A (en) Data codec method and apparatus

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X601 Decision of rejection after re-examination