KR20170095816A - 병렬 비디오 인코딩을 위한 레이트 제어 - Google Patents

병렬 비디오 인코딩을 위한 레이트 제어 Download PDF

Info

Publication number
KR20170095816A
KR20170095816A KR1020177012687A KR20177012687A KR20170095816A KR 20170095816 A KR20170095816 A KR 20170095816A KR 1020177012687 A KR1020177012687 A KR 1020177012687A KR 20177012687 A KR20177012687 A KR 20177012687A KR 20170095816 A KR20170095816 A KR 20170095816A
Authority
KR
South Korea
Prior art keywords
video frame
frame
bit rate
video
encoding
Prior art date
Application number
KR1020177012687A
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 KR20170095816A publication Critical patent/KR20170095816A/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/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
    • H04N19/436Methods 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 using parallelised computational arrangements
    • 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/115Selection of the code volume for a coding unit prior to 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/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/146Data rate or code amount at the encoder output
    • H04N19/15Data rate or code amount at the encoder output by monitoring actual compressed data size at the memory before deciding storage at the transmission buffer
    • 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/146Data rate or code amount at the encoder output
    • H04N19/152Data rate or code amount at the encoder output by measuring the fullness of the transmission buffer
    • 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/172Methods 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 picture, frame or field

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

병렬 비디오 인코더에서 버퍼 제한사항을 만족시킬 비디오 프레임을 인코딩하기 위해 목표 비트 수(목표 비트레이트)를 결정하는 시스템 및 방법이 개시된다. 주어진 인코딩 프로세스를 위한 양자화 파라미터(QP)는 목표 비트레이트에 기초하여 프레임에 대해 결정되어 적합한 평균 비트레이트를 유지할 수 있다. 일부 실시예에서, 하나 이상의 이전 프레임에 대해 사용된 비트레이트가 추정된다. 일부 실시예에서, 추정된 비트레이트에 기초하여 버퍼 충만도 업데이트가 이루어진다. 일부 실시예에서, 각 프레임에 목표로 하는 비트레이트는 프레임 타입, 이전 프레임(들)의 추정된 비트레이트 및 업데이트된 버퍼 충만도에 기초하여 결정된다.

Description

병렬 비디오 인코딩을 위한 레이트 제어{RATE CONTROL FOR PARALLEL VIDEO ENCODING}
우선권 주장
본 출원은 2014년 12월 11일 출원된 "병렬 비디오 인코딩을 위한 레이트 제어(RATE CONTROL FOR PARALLEL VIDEO ENCODING)"라는 명칭의 미국 특허 출원 제14/567,600호에 대한 우선권을 주장하며, 이 특허 출원은 전체가 본 명세서에서 참고 문헌으로 인용된다.
배경
시각적 품질은 많은 미디어 애플리케이션에서 사용자 경험의 중요한 양상이다. 미디어 압축/압축해제(코덱) 시스템에서, 시각적 품질은 주로 사용되는 압축 포맷을 기초로 할 수 있다. 비디오 인코더는 더 많은 정보가 주어진 대역폭을 통해 전송될 수 있도록 또는 주어진 메모리 공간에 저장될 수 있도록 비디오 정보를 압축한다. 그런 다음 압축된 신호 또는 데이터는 사용자에게 디스플레이를 위해 신호 또는 데이터를 디코딩하거나 압축해제하는 디코더를 통해 디코딩될 수 있다.
H.264/MPEG-4 최신 비디오 코팅(Advanced Video Coding, AVC) 표준, 고효율 비디오 코딩(High Efficiency Video Coding, HEVC) 표준 및 VP8(RF36386)/VP9와 같은 표준 코덱은 모든 표준을 따르는 디코더가 표준을 따라 압축된 비디오를 디코딩할 수 있도록 보장한다. 표준화된 코덱은 가설 참조 디코더(hypothetical reference decoder, HRD)라고 불리는 수신기 모델을 정의한다. 표준을 따르기 위하여, 인코더는 HRD로 디코딩 가능한 비트 스트림을 만들어야 한다. HRD는 코딩된 픽처 버퍼(coded picture buffer, CPB) 및 디코딩된 픽처 버퍼(decoded picture buffer, DPB)와 같은 하나 이상의 버퍼를 명시한다. HRD는 전송 비트레이트, 버퍼 크기 및 초기 디코더 버퍼 충만도(buffer fullness)에 의해 파라미터화된 누설 버킷 모델(leaky bucket model)을 사용할 수 있다. 비디오 데이터를 일정하거나 거의 일정한 비트레이트로 전송할 때 압축된 비디오의 비트레이트 변동을 수용하기 위해 인코더 및 디코더 측에서 버퍼링이 이용된다. 비트레이트 변동은, 예를 들어 프레임 타입(예를 들어, 인트라-코딩된 또는 인터-코딩된 프레임)의 함수로서 변동하는 주어진 비디오 프레임을 압축하는데 필요한 비트 수의 결과이다.
인코딩 기술을 통해 얻어지는 변환 계수는 양자화 파라미터(quantization parameter, QP)의 함수로서 양자화될 수 있다. QP 값이 클수록 품질은 낮아지지만 압축은 높아지는 반면, QP 값이 낮을수록 압축률은 떨어지지만 시각적 품질은 높아진다. QP는 HRD 버퍼 제약을 충족시키는 레이트 제어의 수단으로서 생성된 비트의 수(즉, 프레임 크기)를 제어하기 위해 주어진 프레임에 대해 조절될 수 있다. 전형적으로, 주어진 프레임에 대한 QP 값을 결정하는 역할을 하는 레이트 제어 모듈은 목표로 하는 비트레이트가 충족되고 버퍼 제약이 만족되도록 현재 프레임의 인코딩 프로세스를 제어하기 위해 이전에 인코딩된 프레임에 의해 사용된 비트의 수를 필요로 한다.
비디오 코덱의 복잡성이 계속 증가함에 따라, 병렬 처리는 비디오 인코딩 애플리케이션에서 더욱 중요해지고 있다. 그러나 병렬 인코딩 아키텍처에서, 이전에 인코딩된 프레임에 의해 사용된 비트의 수는 후속하여 인코딩된 프레임에 대한 QP 값을 결정하는 역할을 하는 레이트 제어 모듈에 이용 가능하지 않을 수 있다. 이와 같이, 시장에서는 병렬 비디오 인코더의 레이트 제어 기술 및 그러한 기술을 수행할 수 있는 시스템이 유리하다.
본 명세서에서 설명되는 재료는 첨부 도면에서 하나의 예의 형태로 예시되는 것이지 제한의 형태로 예시되는 것은 아니다. 설명을 단순화하고 명료하게 하기 위해, 도면에 예시된 요소는 반드시 축척하여 작성되는 것은 아니다. 예를 들어, 일부 요소의 치수는 명확성을 위해 다른 요소에 비해 과장될 수 있다. 또한, 적절하다고 간주되는 곳에서, 대응하거나 유사한 요소를 표시하기 위해 참조 부호가 도면 중에서 반복된다.
도 1a는 일부 실시예에 따른 병렬 비디오 인코딩 아키텍처의 개략도이다.
도 1b는 일부 실시예에 따른 병렬 비디오 인코더 아키텍처의 개략도이다.
도 2a는 일부 실시예에 따라 초기 비디오 프레임에 적합한 병렬 비디오 인코딩 레이트 제어 방법을 예시하는 흐름도이다.
도 2b는 일부 실시예에 따라 후속 비디오 프레임에 적합한 병렬 비디오 인코딩 레이트 제어 방법을 도시하는 흐름도이다.
도 3a, 도 3b 및 도 3c는 일부 실시예에 따라 직전 프레임의 크기를 추정하기 위한 기술을 예시하는 블록도이다.
도 3d는 일부 실시예에 따라 프레임 타입의 함수로서 직전 프레임의 크기를 추정하는 방법을 예시하는 흐름도이다.
도 3e는 일부 실시예에 따라 직전 프레임의 크기를 추정하기 위한 기술을 예시하는 블록도이다.
도 3f는 일부 실시예에 따라 직전 프레임의 크기를 추정하기 위한 복수의 기술 중에서 동적으로 선택하는 방법을 예시하는 흐름도이다.
도 4는 일부 실시예에 따라 병렬 비디오 인코딩 레이트 제어를 위해 구성된 레이트 제어 모듈을 예시하는 블록도이다.
도 5는 일부 실시예에 따라 병렬 비디오 인코딩 레이트 제어를 위해 구성된 레이트 제어 모듈을 포함하는 비디오 프로세싱 시스템을 나타내는 블록도이다.
도 6은 일부 실시예에 따른 그래픽 프로세서에 대한 실시예의 블록도이다.
도 7은 일부 실시예에 따른 그래픽 프로세싱 엔진의 다른 실시예의 블록도이다.
도 8은 본 발명의 일 실시예에 따른 데이터 프로세싱 시스템의 블록도이다.
도 9는 일부 실시예에 따라 마련된 예시적인 이동 디바이스의 도면이다.
하나 이상의 실시예가 첨부된 도면을 참조하여 설명된다. 특정 구성 및 배열이 도시되고 상세하게 논의되지만, 이것은 예시적인 목적을 위해서만 수행된다는 것을 이해하여야 한다. 관련 기술에서 통상의 지식을 가진 자라면 설명의 정신과 범위를 벗어나지 않는 다른 구성 및 배열이 가능하다는 것을 인식할 것이다. 관련 기술에서 통상의 지식을 가진 자에게는 본 명세서에서 설명된 기술 및/또는 배열이 본 명세서에 상세히 설명된 것 이외의 다양한 다른 시스템 및 애플리케이션에 이용될 수 있다는 것이 자명해질 것이다.
본 발명의 일부를 형성하고 예시적인 실시예를 예시하는 첨부 도면에 대한 다음의 상세한 설명이 참조된다. 또한, 다른 실시예가 이용될 수 있으며 청구된 주제의 범위를 벗어나지 않고 구조적 및/또는 논리적 변경이 이루어질 수 있음을 이해하여야 한다. 따라서, 다음의 상세한 설명은 제한적인 의미로 간주하지 않으며 청구된 주제의 범위는 첨부된 청구범위 및 그 균등물에 의해서만 정의된다.
다음의 설명에서, 많은 세부 사항이 설명되지만, 관련 기술에서 통상의 지식을 가진 자에게는 이러한 특정 세부 사항 없이 실시예가 실시될 수 있다는 것이 자명할 것이다. 공지된 방법 및 디바이스는 더 중요한 측면을 모호하게 하는 것을 피하기 위해 세부 형태보다는 블록도의 형태로 도시된다. 본 명세서 전체에 걸쳐 "실시예"또는 "일 실시예"에 대해 말하는 것은 실시예와 관련하여 설명된 특별한 특징, 구조, 기능 또는 특성이 적어도 하나의 실시예에 포함되어 있다는 것을 의미한다. 그러므로, 본 명세서 도처에서 "실시예에서" 또는 "일 실시예에서"라는 관용구가 출현한다고 하여 반드시 모두 다 동일한 실시예를 말하는 것은 아니다. 그뿐만 아니라, 실시예의 맥락에서 설명된 특별한 특징, 구조, 기능 또는 특성은 하나 이상의 실시예에서 임의의 적절한 방식으로 조합될 수 있다. 예를 들면, 제 1 실시예는 두 개의 실시예와 연관된 특별한 특징, 구조, 기능 또는 특성이 상호 배타적이지 않은 곳이면 어디서든 제 2 실시예와 조합될 수 있다.
예시적인 실시예의 설명 및 첨부된 청구범위에서 사용된 바와 같이, 단수 형태 "하나", "하나의", 및 "그"는 맥락이 분명하게 그렇지 않다고 표시하지 않는 한, 물론 복수의 형태를 포함하는 것으로 의도된다. 본 명세서에서 사용되는 "및/또는"이라는 용어는 연관된다고 열거된 하나 이상의 항목의 임의의 그리고 모든 가능한 조합을 말하며 이를 망라하는 것이라고 또한 이해될 것이다.
전체적인 설명과 및 청구범위에서 사용된 바와 같이, "적어도 하나" 또는 "하나 이상"이라는 용어에 의해 합쳐져 있는 항목의 리스트는 열거된 용어의 임의의 조합을 의미할 수 있다. 예를 들어, "A, B 또는 C 중 적어도 하나"라는 관용구는 A; B; C; A 및 B; A 및 C; B 및 C; 또는 A, B 및 C를 의미할 수 있다.
"연결된"및 "접속된"이라는 용어와 더불어 이들의 파생어는 본 명세서에서 구성요소 간의 기능적이거나 구조적인 관계를 서술하는 데 사용될 수 있다. 이들 용어는 서로 동의어로 의도되지 않는다는 것을 알아야 한다. 오히려, 특정 실시예에서, "접속된"은 두 개 이상의 요소가 서로 직접적으로 물리적, 광학적 또는 전기적으로 접촉하고 있다는 것을 나타내기 위해 사용될 수 있다. "결합된"은 두 개 이상의 요소가 서로 직접이든 (그들 사이의 다른 개재 요소를 사용하여) 간접이든 물리적, 광학적 또는 전기적 접촉을 하는 것 및/또는 두 개 이상의 요소가 (예를 들어, 인과 관계처럼) 서로 협동하거나 상호작용하고 있다는 것을 나타내는데 사용될 수 있다.
본 명세서에서 제공되는 상세한 설명의 일부분은 컴퓨터 메모리 내의 데이터 비트에 대한 연산의 알고리즘 및 기호적 측면에서 제시된다. 달리 구체적으로 언급하지 않는 한, 다음의 설명으로부터 명백한 바와 같이, 전체의 설명에서 "계산하는", "연산하는", "결정하는", "추정하는", "저장하는", "수집하는", "디스플레이하는", "수신하는", "통합하는", "발생하는", 또는 "업데이트하는" 등과 같은 용어를 활용하는 논의는 레지스터 및 메모리를 포함하는 컴퓨터 시스템의 회로 내의 물리적인 (전자적인) 양으로서 표현되는 데이터를 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그와 같은 정보 저장, 전송 또는 디스플레이 디바이스 내의 물리적인 양으로 유사하게 표현되는 다른 데이터로 조작하고 변환하는 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 작용 및 프로세스를 지칭하는 것이 인식된다.
다음의 설명은 예를 들어 시스템 온 칩(system-on-a-chip, SoC) 아키텍처와 같은 아키텍처에서 명확히 나타날 수 있는 실시예를 설명하지만, 본 명세서에서 설명된 기술 및/또는 배열의 구현은 특정 아키텍처 및/또는 컴퓨팅 시스템에 제한되지 않으며, 유사한 목적을 위한 임의의 아키텍처 및/또는 컴퓨팅 시스템에 의해 구현될 수 있다. 예를 들어, 복수의 집적 회로(integrated circuit, IC) 칩 및/또는 패키지, 및/또는 셋톱 박스, 스마트폰 등과 같은 다양한 컴퓨팅 디바이스 및/또는 소비자 전자(consumer electronic, CE) 디바이스를 사용하는 다양한 아키텍처는 본 명세서에서 설명되는 기술 및/또는 배열을 구현할 수 있다. 또한, 다음의 설명은 로직 구현, 시스템 컴포넌트의 타입 및 연관성, 로직 분할/통합 선택 등과 같은 많은 특정 세부 사항을 설명할 수 있지만, 청구된 주제는 그러한 특정 세부 사항 없이 실시될 수 있다. 그뿐만 아니라, 예를 들어, 제어 구조 및 전체 소프트웨어 명령어 시퀀스와 같은 일부 재료는 본 명세서에 개시된 재료를 모호하도록 하지 않기 위해 상세하게 도시되지 않을 수도 있다.
본 명세서에 개시된 재료의 특정 부분은 예를 들어 그래픽 프로세서의 논리 회로와 같은 하드웨어로 구현된다. 다른 특정 부분은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 본 명세서에 개시된 재료의 적어도 일부는 하나 이상의 프로세서 (그래픽 프로세서 및/또는 중앙 프로세서)에 의해 판독되고 실행될 수 있는 머신 판독 가능한 매체상에 저장된 명령어로서도 또한 구현될 수 있다. 머신 판독 가능한 매체는 머신 (예를 들어, 컴퓨팅 디바이스)에 의해 판독 가능한 형태로 정보를 저장 또는 전송하기 위한 임의의 매체 및/또는 메커니즘을 포함할 수 있다. 예를 들면, 머신 판독 가능한 매체는 판독 전용 메모리(read-only memory, ROM), 랜덤 액세스 메모리(Random Access Memory, RAM), 자기 디스크 저장 매체; 광저장 매체, 플래시 메모리 디바이스, 전기, 광학, 음향 또는 기타 유사한 비일시적인 유형의 매체를 포함할 수 있다.
본 명세서에서 설명되는 방법, 디바이스, 장치, 컴퓨팅 플랫폼 및 물품은 비디오 코딩과 관련된다. 하나 이상의 다른 비디오 프레임과 함께 병렬로 인코딩되는 비디오 프레임에 대한 QP 결정에서 이용되는 목표 비트 수 (즉, 목표 프레임 크기 또는 목표 비트레이트)를 결정하기 위해 하나 이상의 시스템, 장치, 방법 및 컴퓨터 판독 가능한 매체가 아래에서 설명된다. 하나 이상의 다른 비디오 프레임들과 평행하다. 다른 실시예에서, 시스템, 장치, 방법 또는 컴퓨터 판독 가능한 매체는 또한 결정된 QP에 기초하여 하나 이상의 인코딩된 비디오 데이터 스트림을 생성할 수 있다.
본 명세서에서 상세히 설명되는 일부 실시예에서, 병렬 비디오 인코더에서 HRD 버퍼 제약을 만족시키기 위해 낮은 복잡도의 레이트 제어가 제공된다. 하나의 비디오 인코딩 파이프라인에 의해 프레임 인코딩을 위해 사용된 실제 비트 수는 병렬 프레임 인코딩의 동기화의 함수로서 다른 프레임을 인코딩하는 다른 병렬 비디오 인코딩 파이프라인에 이용 가능하지 않을 수 있기 때문에, 직전 프레임에 의해 사용된 비트 수는 하나 이상의 방법에 의해 추정된다. 다른 실시예에서, 직전의 비디오 프레임 크기의 추정을 위해 이용된 기술은 프레임 동기화에 따라 변할 수 있는 직전의 비디오 프레임에 대한 정보의 이용 가능성의 함수로서 프레임 사이에서 동적으로 변한다. 이와 같이, 직전의 비디오 프레임 크기의 추정은 주어진 프레임에 대해 제 1 기술을 따르고, 후속 프레임에 대해서는 제 2 기술을 따를 수 있다. 다른 실시예에서, 버퍼 충만도는 직전 프레임에 대해 추정된 프레임 크기에 종속하는 방식으로 업데이트된다. 다른 실시예에서, 현재 프레임의 비트레이트는 현재 프레임 타입, 직전 프레임에 대해 추정된 비트레이트 및 업데이트된 버퍼 충만도의 함수로서 결정된다.
일부 실시예에서, 본 명세서의 실시예에 따라 결정된 현재 프레임에 대한 목표 비트레이트에 기초하여 결정되고 및/또는 수정된 QP는 비디오 데이터의 청크와 연관된 변환 계수를 양자화하는데 사용된다. 양자화된 변환 계수 및 양자화 파라미터는 이후 디코더에서 사용을 위한 비트 스트림으로 인코딩될 수 있다. 디코더는 임의의 공지된 기술에 따라 최종 사용자에게 프레젠테이션/디스플레이를 위한 프레임을 재생하기 위해 비트 스트림을 압축해제/디코딩할 수 있다.
도 1a는 일부 실시예에 따른 병렬 비디오 인코딩 아키텍처(100)의 개략도이다. 예시적인 실시예에서, 프레임(5, 10, 15)는 복수의 비디오 데이터 입력(102)으로서 병렬 인코더(101)에 수신된다. 일부 실시예에서, 프레임(5, 10, 15)는 예를 들면, 시계열과 연관된, 연속적인 비디오 프레임의 시퀀스(N, N+1, N+2) 등이다. 병렬 인코더(101)는 프레임(5, 10, 15)를 병렬로 인코딩하고, 대응하는 인코딩된 스트림(103, 104, 105)을 출력하는데, 인코딩된 스트림은 본 명세서의 실시예가 이런 측면으로 제한되지 않는 임의의 방식으로 나중에 결합 및/또는 다중화될 수 있다. 병렬 인코딩 아키텍처(100)는 예를 들어 임의의 업스트림 소스로부터 수신된 입력 비디오 프레임(5, 10, 15)을 인코딩하도록 구성된 비디오 압축-압축해제(코덱)에 의해 구현될 수 있다. 예시적인 실시예에서, 아키텍처(100)는 H.264/MPEG-4 AVC 표준, HEVC 표준, VP8 표준, VP9 표준과 같은 하나 이상의 표준과 호환 가능한 코덱에 의해 구현된다.
도 1b는 일부 실시예에 따른 병렬 비디오 인코더(101)를 상세히 예시하는 개략도이다. 병렬 비디오 인코더(101)는 세 개의 연속 비디오 프레임(N, N+1 및 N+2)을 병렬로 인코딩하도록 구성된 복수의 인코딩 파이프라인(107, 108 및 109)을 갖는다. 인코딩 파이프라인(107)은 입력 비디오 프레임(N)을 수신하도록 연결된 비디오 분석 모듈(110), 모듈(110)의 출력에 연결된 레이트 제어 모듈(120)과, 모듈(120)의 출력에 연결된 움직임 추정 및 모드 결정 모듈(130)과, 모듈(130)의 출력에 연결된 변환/양자화 및 엔트로피 인코딩 모듈(140)을 포함한다. 인코딩 파이프라인(108)은 또한 입력 비디오 프레임(N+1)을 수신하도록 연결된 비디오 분석 모듈(112)과, 모듈(112)의 출력에 연결된 레이트 제어 모듈(122)과, 모듈(122)의 출력에 연결된 움직임 추정 및 모드 결정 모듈(132)과, 모듈(132)의 출력에 연결된 변환/양자화 및 엔트로피 인코드 모듈(140)을 포함한다. 인코딩 파이프라인(109)은 또한 입력 비디오 프레임(N+2)를 수신하도록 연결된 비디오 분석 모듈 모듈(114)과, 모듈(114)의 출력에 연결된 레이트 제어 모듈(124)과, 모듈(124)의 출력에 연결된 움직임 추정 및 모드 결정 모듈(134)과, 모듈(134)의 출력에 연결된 변환/양자화 및 엔트로피 인코드 모듈(144)을 포함한다.
일부 실시예에서, 병렬 레이트 인코더의 인코딩 파이프라인은 연속적인 일련의 프레임 내의 프레임의 직전의 비디오 프레임을 인코딩하는데 사용된 비트 수에 대한 선험적 지식 없이 프레임을 인코딩한다. 도 1b에 도시된 예시적인 실시예에서, 각각의 레이트 제어 모듈(120, 122, 124)은 목표 비트레이트 입력 및 (N-2)번째 프레임을 인코딩하기 위해 사용된 프레임 크기(비트의 수)에 또한 연결된다. 예를 들어, 프레임(N-2)에 대한 비트의 수는 변환, 양자화 및 엔트로피 모듈(140)로부터 출력되어 레이트 제어 모듈(124)에 입력된다. 병렬 인코딩 아키텍처 내에서, 레이트 제어 모듈에 의해 현재 프레임(N)에 대하여 하나 이상의 레이트 제어 계산이 수행될 때, 프레임(N-1)에 대해 사용된 비트의 수는 변환, 양자화 및 엔트로피 모듈에 의해 아직 출력되지 않았기 때문에, 레이트 제어 모듈(120, 122, 124)에는 직전 프레임에서 사용된 비트의 수의 입력이 없다. 예시적인 아키텍처에서, 현재 프레임(N)을 처리하는 각각의 병렬 레이트 제어 모듈(120, 122, 124)이 현재 프레임의 직전 프레임의 직전 프레임(N-2)의 비트 크기를 입력으로서 수신하도록 파이프라인(107, 108, 109)끼리 동기화된다. 따라서, 레이트 제어 모듈(120)이 프레임(N)을 처리하기 시작할 때, 프레임(N-2)에 의해 사용된 비트의 수에 관한 정보만이 이용 가능하다. 유사하게, 레이트 제어 모듈(122)이 프레임(N+1)을 처리하기 시작할 때, 프레임(N-1)에 의해 사용된 비트 수에 관한 정보만이 이용 가능하다. 마지막으로, 레이트 제어 모듈(124)이 프레임(N+2)를 처리하기 시작할 때, 프레임(N)에 의해 사용된 비트 수에 관한 정보만이 이용 가능하다.
병렬 비디오 인코더(101)는 비디오 프레임의 직전 비디오 프레임을 인코딩하는데 비트 수를 사용하는 세 개의 병렬 비디오 인코딩 파이프라인을 예시한다. 그러나 병렬화는 (예를 들어 4 파이프라인까지) 확장될 수 있으며, 이 경우 비디오 프레임(N1)을 인코딩하는데 사용된 비트의 수를 선험적으로 알지 못하는 것에 부응하여 본 명세서에서 설명된 기술 및 시스템은 (예를 들어, (N-2) 프레임 인코딩 시 사용되는 비트의 부족을 처리하기 위해) 확장될 수 있다. 레이트 제어는 병렬화가 증가함에 따라 더 어려워지지만, (N-2) 프레임, (N-3) 프레임, 및 심지어 (N-4) 프레임에 대한 비트의 수를 추정하는 것은 병렬 인코더(101)의 맥락에서 프레임(N-1)에 대해 본 명세서에 설명된 기술 및 아키텍처를 추종하는 것이 가능할 수 있다.
일부 실시예에서, 현재 비디오 프레임을 처리하는 것은 이전 비디오 프레임을 처리하여 생성된 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 이전 비디오 프레임에 대한 비트의 수를 추정하는 것을 포함한다. 예를 들어, 도 1b 를 더 참조하면, 인코딩 파이프라인(109)에서, 레이트 제어 모듈(124)은 움직임 추정 및 모드 결정 모듈(132) 및/또는 레이트 제어 모듈(122) 및/또는 비디오 분석 모듈(112)로부터 이용 가능한 하나 이상의 중간 파라미터 또는 정보에 기초하여 결정되는 비디오 프레임(N+1)에 대한 비트의 수의 추정치를 사용하여 비디오 프레임(N+2)에 대한 목표 비트 수를 결정한다. 다른 실시예에서, 인코딩 파이프라인(108)으로부터의 중간 파라미터 또는 정보는 인코딩 파이프라인(109)으로부터 이용 가능한 정보 및/또는 중간 파라미터에 비교되어 비디오 프레임(N+2)에 대한 크기를 결정한다.
도 2a는 일부 실시예에 따라 초기 비디오 프레임에 적합한 병렬 비디오 인코딩 레이트 제어 방법(201)을 예시하는 흐름도이다. 방법(201)은 병렬 비디오 인코딩 레이트 제어의 부트스트랩핑 단계 동안 인코더(101)와 같은 병렬 인코더에 의해 수행될 수 있다. 방법(201)에서, 처음 두 프레임에 대한 목표 비트 수는 목표 비트레이트, 버퍼 제약 및 코딩 구조에 기초하여 결정된다. 코딩 구조는 다른 프레임 또는 프레임들을 참조하지 않고 예측된 인트라-프레임(intra-frame)(I-프레임) 및 다른 프레임 또는 프레임들을 참조하여 예측된 인터 예측된 프레임(inter-predicted frame)과 같은 픽처 그룹(Group of Picture, GOP)에서 발생할 수 있는 프레임 타입을 명시한다. 예측된 프레임은 이전 프레임 또는 프레임들을 참조하여 예측되고 다른 프레임의 예측에 사용하는데 이용 가능한 P-프레임과, 이전 또는 후속 프레임 또는 프레임들을 참조하여 예측되지만 다른 프레임의 예측에 사용하는데 이용 가능하지 않은 양방향 프레임(bi-directional frame)(B-프레임) 및/또는 다른 프레임 또는 프레임들을 참조하여 예측되고 계층적 코딩 구조에서 예측에 사용하는데 이용 가능한 참조 양방향 프레임(B-참조 프레임)을 더 포함할 수 있다.
프레임 1을 인코딩하기 위해, 동작(205)에서 목표 크기가 계산된다. 제 1 프레임은 항상 I-프레임이기 때문에, 제 1 프레임의 목표 크기는 통상 목표 평균 비트레이트의 수 배이다. 그 다음 동작(207)에서 임의의 공지된 기술(들)에 의해 버퍼 충만도가 결정된다. 동작(209)에서 임의의 공지된 기술(들)을 통해 QP가 결정된다. 동작(211)에서 인코딩 모드가 결정되고, 임의의 공지된 기술(들)에 의해 움직임 추정이 수행되며, 동작(213)에서 프레임 1은 임의의 공지된 기술(들)에 의해 변환 및 엔트로피 인코딩된다.
프레임 2를 인코딩하기 위해, 동작(215)에서 목표 크기는 동작(207)에서 결정된 버퍼 충만도 및 동작(209)에서 결정된 QP에 기초하여 계산된다. 일 예로, 길이에 있어서 L개 프레임의 픽처 그룹(GOP) 내의 IP 단독 코딩 구조의 경우, 평균 목표 비트레이트(T/프레임), 첫 P 프레임의 목표 레이트 또는 크기는 다음과 같다.
Figure pct00001
동작(217)에서, 제 2 프레임을 인코딩하기 이전의 버퍼 충만도는 다음과 같이 계산된다.
Figure pct00002
동작(219)에서, 대응하는 QP는 선택된 레이트 왜곡 모델의 목표 레이트에 기초하여 다음과 같이 결정된다.
Figure pct00003
일부 실시예에서, 모델 함수는 다음과 같이 주어진다.
Figure pct00004
여기서 c1 및 c2는 상수이다. 동작(221)에서 인코딩 모드가 결정되고 임의의 공지된 기술(들)에 의해 움직임 추정이 수행되며, 동작(223)에서 프레임 2는 임의의 공지된 기술(들)에 의해 변환 및 엔트로피 인코딩된다.
도 2b는 일부 실시예에 따라 제 3 및 후속 비디오 프레임(본 명세서에서 프레임(N)으로 표시됨)에 적합한 병렬 비디오 인코딩 레이트 제어 방법(202)을 도시하는 흐름도이다. 일부 실시예에서, 레이트 제어 모듈(예를 들어, 도 1b의 레이트 제어 모듈(120))은 주어진 병렬 인코딩 파이프라인에 수신된 각 프레임에 대해 방법(202)을 수행한다. 도 2b에 예시된 바와 같이, 동작(230)에서, 수신된 프레임(N)에 대한 공간 및 시간 예측 왜곡을 추정하기 위해 이용될 수 있는 비디오 분석이 수행된다. 일부 실시예에서, 공간 및 시간 복잡도 모두 다 동작(230)에서 결정될 수 있는 반면, 다른 실시예에서는 공간 또는 시간 복잡도 중 하나만이 결정될 수 있다. 공간 및/또는 시간 복잡도는 임의의 적절한 기술을 사용하여 결정될 수 있다. 일부 실시예에서, 시간 복잡도는 프레임(N)의 인터 예측 왜곡에 기초하여 추정된다. 인트라 예측 왜곡, 인터 예측 왜곡, 또는 양자 모두의 측정치는 절대 차이의 합(sum of absolute differences, SAD) 또는 왜곡의 합 등과 같은 통계적 측정치에 기초할 수 있다.
일부 실시예에서, 동작(233)에서 현재 프레임(N)은 동작(230)에서 수행된 분석 및 코딩 구조에 기초하여, 장면 전환 프레임, 골든 프레임(VP8/VP9), 장기 참조 프레임(AVC, HEVC), I-프레임, 또는 정규 인터-프레임(예를 들어, P 또는 B 프레임)일 것으로 결정된다. 동작(232)에서는 직전 프레임(N-1)에 대해 사용된 비트의 수가 추정된다. 일부 실시예에서, 동작(232)은 프레임 타입 결정 동작(233)과 동시에 수행된다. 일부 실시예에서, 프레임 크기 추정 동작(232)은 동작(232)이 수행될 때 중간 프레임 인코딩 파라미터 값으로서 레이트 제어 모듈에 이용 가능한 (N-1) 프레임 정보에 의존한다. (N-1) 프레임 크기를 추정하기 위한 많은 방법 중 하나 또는 다른 하나의 방법은 이용 가능한 (N-1) 프레임 정보에 입각하여 수행될 수 있다. 이전 비디오 프레임으로부터 이용 가능한 중간 파라미터를 나타내는 동기화 정보는 단계(232)에서 다양한 추정 알고리즘 사이에서 선택하는데 이용될 수 있다. 그러므로 프레임(N)과 프레임(N-1)을 병렬 인코딩하는 중에 동기화의 변동의 결과로서, 동작(232)에서는 프레임(N-1)의 크기 추정이 방법(202)의 제 1 반복에서 제 1 방식으로 진행할 수 있는 반면, 동작(232)에서는 프레임(N-1)의 크기 추정이 방법(202)의 제 2 반복에서 제 2 방식으로 진행할 수 있다.
도 3a, 3b 및 3c는 일부 실시예에 따라 직전 프레임(N-1)의 크기를 추정하기 위한 방법(301, 302, 303)을 예시하는 블록도이다. 방법(301, 302, 303) 중 임의의 방법은 프레임(N-1) 크기를 추정하기 위해 동작(232)에서 수행될 수 있다.
먼저 3a를 참조하면, 방법(301)에서, 프레임(N-1) 크기는 프레임(N-1)과 연관된 추정된 예측 왜곡(prediction distortion, PD)을 포함하는 중간 파라미터(357)에 기초하여 추정된다. 중간 파라미터(357)는 비디오 분석 동작(230)(도 2b)의 결과이다. 도 3a에 또한 예시된 바와 같이, (N-1) 크기는 또한 프레임(N-1)의 QP(중간 파라미터(359))에 기초하여 추정된다. 그러므로 방법(301)은 N 개의 인코딩 파이프라인이 프레임(N-1) 추정 동작(232)에 도달할 때까지 (N-1) 인코딩 파이프라인에서 비디오 분석 및 QP 결정이 수행되도록 두 개의 병렬 인코딩 파이프라인 사이의 동기화/지연이 필요하다. 도 3a에 또한 도시된 바와 같이, (N-1) 크기는 또한 프레임(N-2)에 대해 사용된 실제 비트 수(파라미터(355))를 포함하는 프레임(N-2) 정보에 기초하여 추정된다. 일부 실시예에서, (N-1) 크기는, 예를 들어, 프레임(N-2)와 연관된 추정된 PD(중간 파라미터(351)) 및 프레임(N-2) QP(중간 파라미터(353))를 포함하는 (N-2)를 인코딩하여 발생된 중간 파라미터에도 또한 기초하여 추정될 수 있다. 그 다음, (N-2) 프레임에 대한 실제 비트레이트는 (N-2) 및 (N-1) 프레임에 대해 추정된 PD 및 QP 값과 비교되어 프레임(N-1) 크기에 양호한 추정치에 도달할 수 있다. 일부 실시예에서, 프레임(N-1) 크기는 다음과 같이 추정된다.
Figure pct00005
다음으로 도 3b를 참조하면, 방법(302)에서 프레임(N-1) 크기는 프레임(N-1)과 연관된 실질 또는 실제 예측 왜곡(PD)인 중간 파라미터(367)에 기초하여 추정된다. 추정된 PD 대신에 실제 PD는 현재 프레임(N)에 대한 레이트 제어 계산을 수행하기 전에 프레임(N-1) 인코딩 모드(예를 들어, 스킵, 인트라, 인터 등) 및 움직임 추정이 이미 완료된 경우에 이용될 수 있다. 그러므로 도 3b에 또한 예시된 바와 같이, 프레임(N-1) 크기는 프레임(N-1) QP와 함께, 프레임(N-2)의 실제 비트 수, 프레임(N-2) QP를 포함하는 프레임(N-2) 중간 파라미터 및 프레임(N-2)의 실제 PD(중간 파라미터(361))의 함수로서 또는 이들에 기초하여 또한 결정될 수 있다.
일부 실시예에서, 도 3b에서 점선으로 예시된 바와 같이, 프레임(N-1) 크기는 또한 프레임(N-1)의 코딩 모드(중간 파라미터(371)) 및 프레임(N-1) 움직임 벡터 정보(중간 파라미터(373))에 적어도 부분적으로 기초하여 결정될 수 있다. 프레임(N-1)의 코딩 모드는 프레임(N-2)의 코딩 모드(예를 들어, 중간 파라미터(372, 374))와 비교될 수 있으며, 프레임(N-1)과 (N-2) 사이의 움직임 벡터 분포 변화는 또한 프레임(N-2)에서 사용된 실제 비트 수를 추가로 기초로 하여 프레임(N-1) 크기를 추정하는데 이용될 수 있다. 일례로서, 프레임(N-1) 크기는 스킵으로서 코딩된 블록의 수의 비율, 및/또는 인트라로서 코딩된 블록의 수의 비율, 및/또는 동일한 움직임 벡터를 가진 블록의 수의 비율에 기초하여 추정될 수 있다. 그러므로 만일 현재 프레임이 예를 들어 스킵으로서 코딩된 블록 중의 80%로 단순하다면, 나머지 20% (그 중 10%는 인트라 코딩되고 10%는 인터 코딩됨)에 대해 결정된 실질 예측 오차는 (N-1) 프레임 크기가 (N-2) 크기와 어떻게 비교될지를 추정하기 위해 (N-2) 프레임에 대한 유사한 파라미터 값과 비교될 수 있다.
다음으로 도 3c를 참조하면, 방법(303)에서, 프레임(N-1) 크기는 프레임(N-1)에 대해 결정된 목표 비트 수 및 (N-)2 프레임에 대해 추정된 이전 크기에 기초하여 추정된다. 일부 실시예에서, (N-1) 프레임 크기는 프레임(N-1)에 대해 결정된 목표 비트 수(중간 파라미터(373)), 프레임 (N-2)의 추정된 비트(중간 파라미터(371) 및 프레임 (N-2)에 대해 사용된 실제 비트 수에 기초하여 추정된다. 일부 실시예에서, (N-1) 프레임 크기는 다음과 같이 계산된다.
Figure pct00006
일부 실시예에서, 이전 프레임과 연관된 비트 수는 이전 프레임 타입에 적어도 부분적으로 기초하여 추정된다. 방법(301, 302, 303) 중 임의의 방법은 (N-1) 프레임이 적절한 타입을 갖게 되는 것에 또한 근거하여 수행될 수 있다. 그래서 프레임 타입을 갖지 않는 (N-1) 프레임의 크기는 대안적인 방식으로 추정될 수 있다. 도 3d는 일부 실시예에 따라 (N-1) 프레임 타입의 함수로서 직전 프레임(N-1)의 크기를 추정하는 방법(304)을 예시하는 흐름도이다. 방법(304)에서, (N-1) 프레임 타입이 결정되며, 만일 (N-1) 프레임이 인트라 코딩된 프레임 또는 장면 전환 프레임과 같은 키 프레임(key frame)이라면, 동작(375)에서 프레임(N-1)의 비트가 추정된다. 일부 실시예에서, 동작(375)에서, 프레임(N-1)의 비트레이트는 마지막 I-프레임에 대한 실제 비트레이트와, (N-1) 프레임에서의 왜곡 대 마지막 I-프레임의 비율과, 마지막 I-프레임에서의 QP 대 (N-1) 프레임의 QP의 비율의 함수로서 추정된다. 즉,
Figure pct00007
골든 프레임 대신 (N-1) 프레임에 응답하여, 방법(304)은 동작(377)으로 진행하며, 이 동작에서 프레임(N-1)의 비트레이트는 (N-1) 프레임에서의 왜곡 대 마지막 인터 골든 프레임에서의 왜곡의 비율 및 마지막 인터 골든 프레임에서의 QP와 (N-1) 프레임에서의 QP의 비율의 함수로서 추정된다. 즉,
Figure pct00008
두 수학식 7 및 8에서, 일부 실시예에서 적어도 프레임(N-1)에 대한 왜곡 값은 전술한 바와 같은 비디오 분석에 기초하여 추정된다. 다른 실시예에서, 최종 I-프레임에 대한 왜곡 값은 또한 그 프레임에 대해 수행된 비디오 분석 동작에 기초하여 추정된다. 다른 실시예에서, 실제 PD는 적어도 마지막 I-프레임에 대한 수학식 7에서 이용되며, 그러한 일부 실시예에서, (N-1) 프레임에 대한 실제 PD는 또한 병렬 프레임 인코딩 단계 간의 동기화에 의해 가능해짐으로써 이용 가능할 때 사용된다.
그 대신 프레임(N-1)이 첫 I-프레임 또는 첫 골든 프레임이면, 방법(304)은 동작(378)으로 진행하며, 이 동작에서 일부 실시예에서 (N-1)의 비트레이트는 프레임 비트레이트 목표로서 추정된다. 즉,
Figure pct00009
프레임(N-1) 타입에 대한 위의 조건 중 어느 것도 만족하지 않으면, (N-1) 프레임 비트는 또한 (N-2) 프레임 타입에 근거하여 추정된다. 일부 실시예에서, (N-2) 프레임이 I-프레임, 장면 전환 프레임, 골든 프레임과 같은 키 프레임이면, 방법(304)은 프레임(N-1)의 비트레이트가 수학식 9에 따라 추정되는 동작(378)으로 진행한다.
프레임(N-1) 또는 (N-2)에 관한 위의 프레임 타입 조건 중 어느 것도 만족하지 않으면, 동작(380)에서 (N-1) 프레임 크기가 결정되는데, 이 동작에서 방법(301, 302 또는 303) 중 임의의 방법은 (N-1) 프레임 인코딩에서 이용 가능한 중간 파라미터에 의존하여 수행될 수 있다.
일부 실시예에서, (N-1) 프레임 인코딩 파이프라인과 (N) 프레임 인코딩 파이프라인 사이의 동기화는 프레임(N-1)의 변환 및 양자화가 프레임(N)의 레이트 제어 이전에 이미 완료되도록 이루어질 수 있다. 그러한 실시예의 경우, 프레임(N-1)에 대해 사용된 비트 수는 도 3e에 예시된 방법(305)에 따라 추정될 수 있다. (N-1) 프레임 크기 추정 동작(232)은 논-제로 양자화 계수 및/또는 제로 계수의 하나 이상의 통계치를 포함하는 중간 파라미터(381)에 적어도 부분적으로 기초한다. 양자화 계수는 프레임(N-1)에 대한 실제 비트 수가 엔트로피 인코딩 이후에 알려지기 바로 전에 중간 파라미터로서 이용 가능하다.
전술한 바와 같이, (N-1) 프레임 인코딩 시 사용된 비트의 수를 추정하는 다양한 방법은 (N-1) 프레임에 관한 상이한 정보에 달렸다. 도 3f는 일부 실시예에 따라, 직전 프레임의 크기를 추정하는 복수의 기술 중에서 동적으로 선택하기 위한 방법(306)을 예시하는 흐름도이다. N-1:N 프레임 인코딩 동기화의 함수로서, 방법(306)은 프레임(N-1) 양자화 계수가 이용 가능해짐에 따라 방법(305)(도 3e)에 의해 프레임(N-1)의 크기를 추정하도록 진행한다. 대안으로, 방법(305)은 실제 PD가 이용 가능해짐에 따라 방법(302)에 의해 프레임(N-1) 크기를 추정하도록 진행한다. 대안으로, 방법(305)은 방법(301)에서 추정된 PD에 기초하여 프레임(N-1) 크기를 추정하도록 진행한다. 마지막으로, 프레임(N-1) 인코딩과 프레임(N) 인코딩 사이에 최소한의 지연이 존재하고 최소한의 (N-1) 프레임 정보가 프레임(N) 레이트 제어 단계에서 이용 가능하다면, 방법(305)은 방법(303)에 의해 프레임(N-1) 크기를 추정하도록 진행한다.
도 3a 내지 도 3f의 맥락에서 전술한 바와 같이 (N-1) 프레임 크기가 추정되면, 병렬 비디오 인코딩 레이트 제어 방법(202)(도 2b)은 버퍼 충만도가 (N-1)의 추정된 크기에 기초하여 업데이트되는 동작(235)으로 진행한다. 일부 실시예에서, 동작(235)에서 버퍼 충만도는 (N-2) 프레임에 대한 실제 비트레이트와 추정된 비트레이트 간의 차 및 (N-1) 프레임에 대해 추정된 비트레이트와 평균 비트레이트 간의 차의 함수에 기초하여 업데이트된다. 그러한 일 실시예에서, 버퍼 충만도는 다음과 같이 업데이트된다.
Figure pct00010
여기서 c4는 상수이다. 일부 실시예에서, c4는 BufferFullnessf[N-1]가 버퍼 크기의 절반보다 작을 때 1 내지 ~1.5의 범위에 있으며, BufferFullness[N-1]가 버퍼 크기의 절반보다 클 때, c4는 가변 비트레이트(variable bit rate, VBR) 인코딩의 경우 1이고, 고정 비트 레이트(constant bit rate, CBR)의 경우에는 0.9 내지 ~1의 범위에 있다.
일부 실시예에서, 현재 비디오 프레임(N)의 목표 비트레이트 결정은 현재 프레임 타입에 의존한다. 도 2b를 계속 참조하면, 병렬 비디오 인코딩 레이트 제어 방법(202)은 프레임(N)의 타입 및/또는 프레임(N-2)의 타입에 기초하여 현재 프레임(N)의 목표 비트 수를 결정하도록 진행한다. 프레임(N)이 정규의 인터 코딩된 프레임이 아닌 경우, 동작(237)에서 현재 프레임(N)의 목표 비트 수가 결정된다. 현재 프레임(N)이 인트라 프레임 또는 장면 전환 프레임이면, 동작(237)에서 그러한 프레임에 최적화된 임의의 목표 크기 결정 방법은 이전 GOP에 의해 사용된 비트 수 및 업데이트된 버퍼 충만도에 기초하여 프레임(N)의 목표 비트레이트를 결정하는데 사용될 수 있다. 본 기술에서 인트라 프레임 또는 장면 전환 프레임의 목표 크기를 결정하기 위한 많은 특화된 기술/알고리즘이 존재하며, 본 명세서의 실시예는 이러한 측면으로 제한되지 않는다. 마찬가지로, 대신에 현재 프레임(N)이 골든 프레임 또는 장기 참조 프레임이면, 동작(237)에서는 그러한 프레임에 적합한 임의의 키 프레임 목표 크기 결정 방법이 활용될 수 있다. 또한, 본 기술에서 골든 프레임 또는 장기 참조 프레임의 목표 크기를 결정하기 위한 많은 특화된 기술/알고리즘이 존재하며, 본 명세서의 실시예는 이러한 측면으로 제한되지 않는다.
일부 실시예에서, 현재 비디오 프레임(N)에 대한 목표 비트레이트 결정은 현재 프레임 타입 및 이전 프레임 타입 모두에 의존한다. 프레임(N)이 정규의 인터 코딩된 프레임(예를 들어, P 프레임, B 참조 프레임, 비참조 B 프레임 또는 일반적인 양방향 예측 P 프레임)인 경우, 동작(239 또는 242)에서 현재 프레임(N)의 목표 비트레이트는 프레임(N-2)가 키 프레임인지 아닌지에 따라 결정된다. (N-2) 프레임이 키 프레임이 아니면, 프레임(N)의 목표 비트레이트는 추정된 프레임(N-1) 비트레이트 및 프레임(N) 버퍼 충만도에 기초하여 결정된다. 일부 예시적인 실시예에서, 코딩 구조가 IP 단독 구조이며 (N-1) 프레임이 키 프레임인 경우, 동작(239)에서 프레임(N)의 목표 레이트는 다음과 같이 계산될 수 있다.
Figure pct00011
(N-1) 프레임이 키 프레임이 아닌 경우 IP 코딩을 위해, 일부 실시예에서, 그 대신에 P 프레임(N)의 목표 비트레이트는 동작(239)에서 다음과 같이 계산된다.
Figure pct00012
여기서 c5는, 예를 들어 0.1 내지 ~0.5의 범위의 상수이다.
대신에 (N-2) 프레임이 키 프레임이면, 동작(242)에서 목표 비트레이트는 (N-2) 프레임의 실제 비트레이트, 프레임(N-1)의 추정된 비트레이트 및 업데이트된 버퍼 충만도에 기초하여 결정된다. 예를 들면, 일부 실시예에서, IP 단독 코딩 구조에서, 동작(242)에서 P 프레임(N)의 목표 레이트는 다음과 같이 계산될 수 있다.
Figure pct00013
특히, 앞의 예시적인 실시예는 유사한 접근법을 사용하여 B 참조 프레임 및/또는 비참조 B 프레임을 포함하는 코딩 구조까지 용이하게 확장될 수 있다. 방법(202)을 각기 반복하여 완료한 다음, 현재의 프레임(N)은 결정된 목표 비트레이트에 기초하여 임의의 공지된 기술에 의해 양자화되고, 변환되고, 엔트로피 인코딩된다.
도 4는 일부 실시예에 따라 병렬 비디오 인코딩 레이트 제어를 위해 구성된 레이트 제어 모듈(120)을 상세히 예시하는 블록도이다. 레이트 제어 모듈(120)은 예를 들어, 병렬 비디오 인코딩 레이트 제어 방법(202)을 수행하기 위해 이용될 수 있다. 도 4에 예시된 바와 같이, 레이트 제어 모듈(120)은 비디오 분석 모듈(110)의 출력 포트에 연결되어 프레임(N)의 비디오 분석 정보를 수신하는 입력 포트를 포함한다. 레이트 제어 모듈(120)은 또한 현재 프레임의 프레임 타입을 결정하는 프레임 타입 결정 모듈(425)을 포함한다.
레이트 제어 모듈(120)은 또한 프레임(N)을 수신하도록 연결된 입력을 갖는 프레임 (N-1) 크기 추정 모듈(427)을 포함한다. 일부 실시예에서, 프레임(N-1) 크기 추정 모듈(427)은 또한 (N-2) 프레임의 추정된 비트 수를 수신하도록 연결된 입력을 포함한다. 일부 실시예에서, 프레임(N-1) 크기 추정 모듈(427)은 또한 실제 PD와 같은 (N-1) 프레임 정보 또는 레이트 제어 모듈(120) 외부에서 생성된 다른 중간 정보의 이용 가능성의 표시를 수신하도록 연결된다. 예를 들어, 도 4에 예시된 예시적인 실시예에서, 크기 추정 모듈(427)은 어플리케이션 계층 제어기(490)로부터 (N-1) 프레임 중간 파라미터 정보(491)를 수신하도록 연결된다. 일부 실시예에서, 프레임 (N-1) 크기 추정 모듈(427)은 도 3a 내지 도 3f의 맥락으로 본 명세서의 다른 곳에서 설명된 (N-1) 프레임 크기 추정 방법 중의 임의의 방법을 수행하는 로직을 포함한다.
프레임(Ν-1) 크기 추정 모듈(427)의 출력은 인코딩 버퍼 충만도 업데이트 모듈(429)의 입력에 연결된다. 일부 실시예에서, 인코딩 버퍼 충만도 업데이트 모듈(429)은 크기 추정 모듈(427)로부터 수신된 (N-1) 크기 추정치에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 로직을 포함한다. 목표 비트레이트 결정 모듈(431) 및 목표 비트레이트 결정 모듈(432)은, 예를 들어 도 2b의 맥락으로 전술한 기술을 추종하여, 프레임(Ν) 타입 및/또는 (N-2) 프레임의 함수로서 프레임(N)의 목표 크기를 결정하는데 선택적으로 활용된다. 목표 비트레이트 결정 모듈(431)은, 예를 들어 도 2b의 맥락으로 전술한 기술을 추종하여, I-프레임, 장면 전환 프레임, 골든 프레임 또는 장기 참조 프레임의 목표 크기를 결정하는 로직을 포함한다. 목표 비트레이트 결정 모듈(432)은, 예를 들어 도 2b의 맥락으로 전술한 기술을 추종하여, (N-1)의 추정된 비트 수 및/또는 (N-2) 프레임 비트 수에 기초하여 프레임(N) 목표 비트 수를 결정하는 로직을 포함한다. 레이트 제어 모듈(120)은 또한, 예를 들어 목표 비트레이트 결정 모듈(431) 또는 목표 비트레이트 결정 모듈(432)로부터의 출력에 기초하여, 프레임(N)의 목표 비트 수를 제공하도록 연결된 출력 포트를 포함한다.
도 5는 일부 실시예에 따라 배열되어 비디오를 병렬 인코딩하도록 구성된 예시적인 시스템(500)의 블록도이다. 도 5에 도시된 바와 같이, 시스템(500)은 그래픽 프로세싱 유닛(graphics processing unit, GPU)(501), 하나 이상의 중앙 처리 유닛(502) 및 메모리 저장소(503)를 포함할 수 있다. 도시된 바와 같이, GUI(501)는 복수의 병렬 레이트 제어 모듈(120) 및 복수의 병렬 변환, 양자화 및 엔트로피 인코딩 모듈(140)을 포함한다. 예시적인 시스템(500)에서, 전자 메모리(503)는 비디오 프레임 및/또는 비디오 비트스트림과 같은 비디오 콘텐츠를 저장할 수 있다.
그래픽 프로세싱 유닛(501)은 본 명세서에서 논의된 동작을 제공할 수 있는 임의의 개수 및 형태의 그래픽 프로세싱 유닛을 포함할 수 있다. 이러한 동작은 소프트웨어 또는 하드웨어 또는 이들의 조합을 통해 구현될 수 있다. 실시예에서, 그래픽 프로세싱 유닛(501)의 예시된 모듈은 로직 회로로 구현될 수 있다. 예를 들어, 그래픽 프로세싱 유닛(501)은 비디오 데이터를 조작하여 압축된 이미지 데이터를 생성하도록 전용된 회로를 포함할 수 있다. 중앙 처리 유닛(들)(502)은 시스템(500)에 대한 제어 및 다른 높은 수준의 기능을 제공할 수 있는 임의의 개수 및 형태의 프로세싱 유닛 또는 모듈을 포함할 수 있다. 메모리(503)는 휘발성 메모리(예를 들어, 스태틱 랜덤 액세스 메모리(Static Random Access Memory, SRAM), 다이나믹 랜덤 액세스 메모리(Dynamic Random Access Memory, DRAM) 등) 또는 비휘발성 메모리(예를 들어, 플래시 메모리 등) 등과 같은 임의의 형태의 메모리일 수 있다. 일부 실시예에서, 메모리(503)는 프레임 레벨의 중간 인코딩 파라미터, 양자화된 변환 계수, 추정된 프레임 크기, 또는 본 명세서에서 논의된 임의의 다른 비디오 데이터와 같은 비디오 데이터를 저장하도록 구성된다. 일부 비제한적인 실시예에서, 메모리(503)는 GPU(501)의 캐시 메모리에 의해 구현된다. 일부 실시예에서, 병렬 레이트 제어 모듈(120) 및 병렬 변환, 양자화 및 엔트로피 인코딩 모듈(140)은 그래픽 프로세싱 유닛(501)의 실행 유닛(execution unit, EU)을 통해 구현된다. 각각의 EU는 예를 들어, 광범위한 프로그래밍가능 논리 기능의 어레이를 제공할 수 있는 프로그램 가능한 로직 또는 회로를 포함할 수 있다. 일부 실시예에서, 병렬 레이트 제어 모듈(120) 및 병렬 변환, 양자화 및 엔트로피 인코딩 모듈(140)은 고정 기능 회로 등과 같은 전용 하드웨어로 구현될 수 있다. 고정 기능 회로는 고정된 목적 또는 기능을 위해 전용된 로직에 매핑될 수 있는 일련의 고정 기능 엔트리 포인트를 제공할 수 있다.
본 명세서에 설명된 시스템의 다양한 구성요소는 소프트웨어, 펌웨어 및/또는 하드웨어 및/또는 이들의 임의의 조합으로 구현될 수 있다. 예를 들어, 시스템(400) 또는 시스템(500)의 다양한 구성요소는, 예를 들면, 스마트 폰 또는 다른 이동 컴퓨팅 디바이스와 같은 예컨대 컴퓨팅 시스템에서 볼 수 있는 컴퓨팅 시스템 온 칩(SoC)의 하드웨어에 의해 적어도 부분적으로 제공될 수 있다. 본 기술에서 통상의 지식을 가진 자라면 본 명세서에 설명된 시스템이 대응하는 도면에 도시되지 않은 부가적인 구성요소를 포함할 수 있음을 인식할 수 있다. 예를 들어, 본 명세서에서 논의된 시스템은 명료하게 하기 위해 도시되지 않은 비트 스트림 멀티플렉서 또는 디멀티플렉서 모듈 등과 같은 부가적인 구성요소를 포함할 수 있다.
본 명세서에서 논의된 예시적인 방법을 구현하는 것이 예시된 순서로 도시된 모든 동작을 착수하는 것을 포함할 수 있지만, 본 개시는 이런 측면으로 제한되지 않으며, 다양한 예에서, 본 명세서에서 예시적인 프로세스를 구현하는 것은 도시된 동작, 예시된 것과 다른 순서로 수행되는 동작, 또는 추가 동작의 서브세트만을 포함할 수 있다.
또한, 본 명세서에 논의된 동작 중 임의의 하나 이상의 동작은 하나 이상의 컴퓨터 프로그램 제품에 의해 제공되는 명령어에 응답하여 수행될 수 있다. 이러한 프로그램 제품은, 예를 들어 프로세서에 의해 실행될 때, 본 명세서에 설명된 기능성을 제공할 수 있는 명령어를 제공하는 신호 내장 매체를 포함할 수 있다. 컴퓨터 프로그램 제품은 하나 이상의 머신 판독 가능한 매체의 임의의 형태로 제공될 수 있다. 따라서, 예를 들어, 하나 이상의 그래픽 프로세싱 유닛(들) 또는 프로세서 코어(들)를 포함하는 프로세서는 하나 이상의 머신 판독 가능한 매체에 의해 프로세서에 전달되는 프로그램 코드 및/또는 명령어 또는 명령어 집합에 응답하여 본 명세서의 예시적인 프로세스의 블록 중 하나 이상을 착수할 수 있다. 일반적으로, 머신 판독 가능한 매체는 본 명세서에서 설명된 디바이스 및/또는 시스템 중 어떤 것이 본 명세서에서 논의된 바와 같은 병렬 인코더(101), 레이트 제어 모듈(들)(102), 시스템(500) 및/또는 임의의 다른 모듈 또는 구성요소를 구현하게 할 수 있는 프로그램 코드 및/또는 명령어 또는 명령어 집합의 형태로 된 소프트웨어를 전달할 수 있다.
본 명세서에 설명된 임의의 구현예에서 사용된 바와 같이, "모듈"이라는 용어는 본 명세서에 설명된 기능성을 제공하도록 구성된 소프트웨어 로직, 펌웨어 로직, 하드웨어 로직, 및/또는 회로의 임의의 조합을 지칭한다. 소프트웨어는 소프트웨어 패키지, 코드 및/또는 명령어 집합 또는 명령어로서 구현될 수 있으며, 본 명세서에 설명된 임의의 구현예에서 사용되는 "하드웨어"는 예를 들면, 단일의 또는 임의의 조합으로 구성된, 하드웨어에 내장된 회로(hardwired circuit), 프로그램 가능한 회로, 상태 머신 회로, 고정 기능 회로, 실행 유닛 회로, 및/또는 프로그램 가능한 회로에 의해 실행되는 명령어를 저장하는 펌웨어를 포함할 수 있다. 모듈은 집합적으로 또는 개별적으로 더 큰 시스템의 일부, 예를 들어, 집적 회로(IC), 시스템 온 칩(SoC)을 형성하는 회로로서 구현될 수 있다.
도 6은 개별 그래픽 프로세싱 유닛일 수 있거나 또는 복수의 프로세싱 코어와 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(600)의 블록도이다. 일부 실시예에서, 그래픽 프로세서는 그래픽 프로세서상의 레지스터와의 메모리 매핑된 I/O 인터페이스를 통해 프로세서 메모리에 놓인 명령어와 통신한다. 일부 실시예에서, 그래픽 프로세서(600)는 메모리에 액세스하기 위해 메모리 인터페이스(614)를 포함한다. 메모리 인터페이스(614)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유된 외부 캐시, 및/또는 시스템 메모리와의 인터페이스일 수 있다.
일부 실시예에서, 그래픽 프로세서(600)는 또한 디스플레이 출력 데이터를 디스플레이 디바이스(620)에 전해주는 디스플레이 컨트롤러(602)를 포함한다. 디스플레이 컨트롤러(602)는 비디오 또는 사용자 인터페이스 요소의 여러 계층의 디스플레이 및 합성을 위한 하나 이상의 오버레이 플레인(overlay plain)용 하드웨어를 포함한다. 일부 실시예에서, 그래픽 프로세서(600)는 이것으로 제한되는 것은 아니지만, 예를 들어, MPEG-2와 같은 동화상 전문가 그룹(Moving Picture Experts Group, MPEG) 포맷, H.264/MPEG-4 AVC뿐만 아니라 영화 & 텔레비전 기술자 협회(Society of Motion Picture & Television Engineers, SMPTE) 421M/VC-1과 같은 최신 비디오 코딩(Advanced Video Coding, AVC) 포맷, 및 JPEG와 모션 JPEG(motion JEPF) 포맷과 같은 공동 영상 전문가 그룹(Joint Photographic Experts Group, JPEG) 포맷을 비롯한 하나 이상의 미디어 인코딩 포맷으로부터 또는 하나 이상의 미디어 인코딩 포맷 중에서 미디어를 인코딩, 디코딩 또는 트랜스코딩하는 비디오 코덱 엔진(606)을 포함한다.
일부 실시예에서, 그래픽 프로세서(600)는 예를 들어 비트 경계 블록 전송(bit-boundary block transfer)을 포함하는 2 차원(2D) 래스터라이저(two-dimensional (2D) rasterizer) 동작을 수행하는 블록 이미지 전송(block image transfer, BLIT) 엔진(604)을 포함한다. 그러나 일 실시예에서, 2D 그래픽 동작은 그래픽 프로세싱 엔진(graphics-processing engine, GPE)(610)의 하나 이상의 구성요소를 사용하여 수행된다. 일부 실시예에서, 그래픽 프로세싱 엔진(610)은 3차원 (3D) 그래픽 동작 및 미디어 동작을 비롯한 그래픽 동작을 수행하기 위한 계산 엔진이다.
일부 실시예에서, GPE(610)는 3D 프리미티브 형상(예를 들어, 직사각형, 삼각형 등)에 의거하여 작용하는 프로세싱 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하기 위한 3D 파이프라인(612)을 포함한다. 3D 파이프라인(612)은 요소 내에서 다양한 작업을 수행하는 프로그램 가능하고 고정된 기능 요소 및/또는 3D/미디어 서브시스템(615)에 대해 생성된 실행 스레드를 포함한다. 3D 파이프라인(612)은 미디어 동작을 수행하는데 사용될 수 있지만, GPE(610)의 실시예는 또한 비디오 후 처리 및 이미지 강화와 같은 미디어 동작을 수행하기 위해 특별히 사용되는 미디어 파이프라인(616)을 포함한다.
일부 실시예에서, 미디어 파이프라인(616)은 비디오 코덱 엔진(606) 대신 또는 비디오 코덱 엔진을 대신하여 비디오 디코드 가속화, 비디오 디인터레이싱 및 비디오 인코딩 가속화와 같은 하나 이상의 특화된 미디어 동작을 수행하는 고정 기능 또는 프로그램 가능한 로직 유닛을 포함한다. 일부 실시예에서, 미디어 파이프라인(616)은 3D/미디어 서브 시스템(615)에서 실행을 위해 스레드를 생성하는 스레드 생성 유닛을 더 포함한다. 생성된 스레드는 3D/미디어 서브시스템(615)에 포함된 하나 이상의 그래픽 실행 유닛에서 미디어 동작을 위한 연산을 수행한다.
일부 실시예에서, 3D/미디어 서브시스템(615)은 3D 파이프라인(612) 및 미디어 파이프라인(616)에 의해 생성된 스레드를 실행하기 위한 로직을 포함한다. 일 실시예에서, 파이프라인은 스레드 실행 요청을 3D/미디어 서브 시스템(615)에 전송하는데, 3D/미디어 서브 시스템은 사용 가능한 스레드 실행 자원에 다양한 요청을 중재 및 디스패칭하기 위한 스레드 디스패치 로직을 포함한다. 실행 자원은 3D 및 미디어 스레드를 처리하는 그래픽 실행 유닛의 어레이를 포함한다. 일부 실시예에서, 3D/미디어 서브시스템(615)은 스레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 일부 실시예에서, 서브시스템은 또한 스레드 사이에서 데이터를 공유하고 출력 데이터를 저장하기 위해 레지스터 및 어드레스 가능한 메모리를 비롯한 공유 메모리를 포함한다.
도 7은 일부 실시예에 따른 그래픽 프로세서의 그래픽 프로세싱 엔진(610)의 블록도이다. 일 실시예에서, GPE(610)는 도 6에 도시된 GPE(610)의 한 버전이다. 본 명세서의 임의의 다른 도면의 요소와 동일한 참조 부호(또는 명칭)를 갖는 도 7의 요소는 본 명세서의 다른 곳에서 기술된 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이것으로 제한되는 것은 아니다.
일부 실시예에서, GPE(610)는 GPE 3D 및 미디어 파이프라인(712, 716)에 커맨드 스트림을 제공하는 커맨드 스트리머(703)와 연결된다. 일부 실시예에서, 커맨드 스트리머(703)는 시스템 메모리, 또는 하나 이상의 내부 캐시 메모리 및 공유 캐시 메모리일 수 있는 메모리에 연결된다. 일부 실시예에서, 커맨드 스트리머(703)는 메모리로부터 커맨드를 수신하고 커맨드를 3D 파이프라인(712) 및/또는 미디어 파이프라인(716)으로 전송한다. 3D 파이프라인 및 미디어 파이프라인은 각각의 파이프라인 내의 로직을 통해 동작을 수행함으로써 또는 하나 이상의 실행 스레드를 실행 유닛 어레이(714)에 디스패치함으로써 커맨드를 처리한다. 일부 실시예에서, 실행 유닛 어레이(714)는 GPE(610)의 목표 전력 및 성능 레벨에 기초하여 가변 개수의 실행 유닛을 포함하는 정도로 스케일러블하다.
일부 실시예에서, 샘플링 엔진(730)은 메모리(예를 들어, 캐시 메모리 또는 시스템 메모리) 및 실행 유닛 어레이(714)와 연결된다. 일부 실시예에서, 샘플링 엔진(730)은 실행 어레이(714)가 메모리로부터 그래픽 및 미디어 데이터를 판독하게 하는 메모리 액세스 메커니즘을 실행 유닛 어레이(714)에 제공한다. 일부 실시예에서, 샘플링 엔진(730)은 미디어에 특화된 이미지 샘플링 동작을 수행하는 로직을 포함한다.
일부 실시예에서, 샘플링 엔진(730)의 특화된 미디어 샘플링 로직은 잡음 제거/디인터레이스 모듈(732)과, 움직임 추정 모듈(734)과, 이미지 스케일링 및 필터링 모듈(736)을 포함한다. 일부 실시예에서, 잡음 제거/디인터레이스 모듈(732)은 디코딩된 비디오 데이터에 대해 잡음 제거 또는 디인터레이스 알고리즘 중의 하나 이상을 수행하는 로직을 포함한다. 디인터레이스 로직은 인터레이스된 비디오 콘텐츠의 교대 필드를 단일 비디오 프레임으로 조합한다. 잡음 제거 로직은 비디오 및 이미지 데이터에서 데이터 잡음을 줄이거나 제거한다. 일부 실시예에서, 잡음 제거 로직 및 디인터레이스 로직은 움직임에 적응적이며 비디오 데이터에서 검출된 움직임의 양에 기초하여 공간 또는 시간 필터링을 사용한다. 일부 실시예에서, 잡음 제거/디인터레이스 모듈(732)은 (예를 들어, 움직임 추정 엔진(734) 내의) 전용 움직임 검출 로직을 포함한다.
일부 실시예에서, 움직임 추정 엔진(734)은 비디오 데이터에 대한 움직임 벡터 추정 및 예측과 같은 비디오 가속화 기능을 수행함으로써 비디오 동작의 하드웨어 가속화를 제공한다. 움직임 추정 엔진은 연속적인 비디오 프레임 사이의 이미지 데이터의 변환을 서술하는 움직임 벡터를 결정한다. 일부 실시예에서, 그래픽 프로세서 미디어 코덱은 비디오 움직임 추정 엔진(734)을 사용하여 그렇지 않았으면 범용 프로세서로 수행하기에는 너무 계산 량이 많을 수 있는 매크로 블록 레벨에서 비디오에 대해 연산을 수행한다. 일부 실시예에서, 일반적으로 움직임 추정 엔진(734)은 비디오 데이터 내의 움직임의 방향 또는 크기에 민감하거나 적응적인 비디오 디코딩 및 프로세싱 기능을 보조하는 그래픽 프로세서 구성요소에 이용 가능하다.
일부 실시예에서, 이미지 스케일링 및 필터링 모듈(736)은 생성된 이미지 및 비디오의 시각적 품질을 향상시키는 이미지 프로세싱 동작을 수행한다. 일부 실시예에서, 스케일링 및 필터링 모듈(736)은 샘플링 동작 동안 이미지 및 비디오 데이터를 처리한 다음에 실행 유닛 어레이(714)에 데이터를 제공한다.
일부 실시예에서, GPE(610)는 메모리에 액세스하는 부가적인 메커니즘을 그래픽 서브시스템에 제공하는 데이터 포트(744)를 포함한다. 일부 실시예에서, 데이터 포트(744)는 렌더링 목표 기록, 상수 버퍼 판독, 스크래치 메모리 공간 판독/기록 및 매체 표면 액세스를 비롯한 동작을 위한 메모리 액세스를 용이하게 한다. 일부 실시예에서, 데이터 포트(744)는 메모리로의 액세스를 캐싱하는 캐시 메모리 공간을 포함한다. 캐시 메모리는 단일 데이터 캐시일 수 있거나, 데이터 포트를 통해 메모리에 액세스하는 복수의 서브시스템의 복수의 캐시(예를 들어, 렌더링 버퍼 캐시, 상수 버퍼 캐시 등)로 분리될 수 있다. 일부 실시예에서, 실행 유닛 어레이(714) 내의 실행 유닛상에서 실행되는 스레드는 GPE(610)의 각 서브시스템을 연결하는 데이터 분배 상호접속부를 통해 메시지를 교환함으로써 데이터 포트와 통신한다.
도 8은 일부 실시예에 따른 데이터 프로세싱 시스템(800)의 블록도이다. 데이터 프로세싱 시스템(800)은 하나 이상의 프로세서(802) 및 하나 이상의 그래픽 프로세서(501)를 포함하며, 단일 프로세서 데스크톱 시스템, 멀티프로세서 워크스테이션 시스템, 또는 복수의 프로세서(802) 또는 프로세서 코어(807)를 갖는 서버 시스템일 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(800)은 이동형, 휴대형 또는 내장형 디바이스에서 사용하기 위한 시스템 온 칩(SoC) 집적 회로이다.
데이터 프로세싱 시스템(800)의 실시예는 서버 기반 게임 플랫폼, 게임 및 미디어 콘솔을 포함하는 게임 콘솔, 이동 게임 콘솔, 휴대용 게임 콘솔 또는 온라인 게임 콘솔을 포함하거나 그 내부에 통합될 수 있다. 일부 실시예에서, 데이터 프로세싱 시스템(800)은 이동 전화, 스마트 폰, 태블릿 컴퓨팅 디바이스 또는 이동 인터넷 디바이스이다. 데이터 프로세싱 시스템(800)은 또한 스마트 시계 착용 디바이스, 스마트 안경 디바이스, 증강 현실 디바이스 또는 가상 현실 디바이스와 같은 착용 가능한 디바이스를 포함하거나, 그 디바이스와 연결되거나 또는 그 디바이스 내에 통합될 수 있다. 일부 실시예에서, 데이터 프로세싱 시스템(800)은 하나 이상의 프로세서(802) 및 하나 이상의 그래픽 프로세서(501)에 의해 생성된 그래픽 인터페이스를 갖는 텔레비전 또는 셋톱 박스 디바이스이다.
일부 실시예에서, 하나 이상의 프로세서(802)는 각기 실행될 때 시스템 및 사용자 소프트웨어에 필요한 동작을 수행하는 명령어를 처리하는 하나 이상의 프로세서 코어(807)를 포함한다. 일부 실시예에서, 하나 이상의 프로세서 코어(80)는 각기 특정 명령어 집합(809)를 처리하도록 구성된다. 일부 실시예에서, 명령어 집합(809)은 복합 명령어 집합 컴퓨팅(Complex Instruction Set Computing, CISC), 축소 명령어 집합 컴퓨팅(Reduced Instruction Set Computing, RISC) 또는 매우 긴 명령어(very Long Instruction Word, VLIW)를 통한 컴퓨팅을 용이하게 할 수 있다. 복수의 프로세서 코어(807)는 각기 다른 명령어 집합을 용이하게 에뮬레이트할 수 있게 하는 명령어를 포함할 수 있는 상이한 명령어 집합(809)을 처리할 수 있다. 프로세서 코어(807)는 또한 디지털 신호 프로세서(Digital Signal Processor, DSP)와 같은 다른 프로세싱 디바이스를 포함할 수 있다.
일부 실시예에서, 프로세서(802)는 캐시 메모리(804)를 포함한다. 아키텍처에 따라, 프로세서(802)는 단일의 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. 일부 실시예에서, 캐시 메모리는 프로세서(802)의 다양한 컴포넌트 사이에서 공유된다. 일부 실시예에서, 프로세서(802)는 또한 공지된 캐시 일관성 기술을 사용하여 프로세서 코어(807) 사이에서 공유될 수 있는 외부 캐시(예를 들어, 레벨 3(Level-3, L3) 캐시 또는 최종 레벨 캐시(Last Level Cache, LLC)(도시되지 않음)를 사용하기도 한다. 레지스터 파일(806)은 또한 상이한 종류의 데이터를 저장하기 위한 상이한 유형의 레지스터(예를 들면, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터)를 포함할 수 있는 프로세서(802) 내에 포함된다. 일부 레지스터는 범용 레지스터일 수 있는데 반해, 다른 레지스터는 프로세서(802)의 설계에 특정할 수 있다.
일부 실시예에서, 프로세서(802)는 프로세서(802)와 시스템(800) 내 다른 구성요소 사이에 데이터 신호를 전송하기 위해 프로세서 버스(810)에 연결된다. 시스템(800)은 메모리 컨트롤러 허브(816) 및 입력/출력(input/output, I/O) 컨트롤러 허브(830)을 비롯한 예시적인 '허브' 시스템 아키텍처를 사용한다. 메모리 컨트롤러 허브(816)는 메모리 디바이스와 시스템(800)의 다른 구성요소 사이의 통신을 용이하게 해주는데 반해, I/O 컨트롤러 허브(I/O Controller Hub, ICH)(830)는 로컬 I/O 버스를 통해 I/O 디바이스와의 접속을 제공한다.
메모리 디바이스(820)는 다이나믹 랜덤 액세스 메모리(DRAM) 디바이스, 스태틱 랜덤 액세스 메모리(SRAM) 디바이스, 플래시 메모리 디바이스 또는 프로세스 메모리로서 기능하기에 적합한 성능을 갖는 몇몇 다른 메모리 디바이스일 수 있다. 메모리(820)는 프로세서(802)가 프로세스를 실행할 때 사용하기 위한 데이터(822) 및 명령어(821)를 저장할 수 있다. 메모리 컨트롤러 허브(816)는 또한 그래픽 및 미디어 동작을 수행하기 위해 프로세서(802) 내의 하나 이상의 그래픽 프로세서(808)와 통신할 수 있는 선택적인 외부 그래픽 프로세서(812)와 연결된다.
일부 실시예에서, ICH(830)는 주변기기를 고속 I/O 버스를 통해 메모리(820) 및 프로세서(802)에 접속할 수 있게 한다. I/O 주변기기는 오디오 컨트롤러(846), 펌웨어 인터페이스(828), 무선 송수신기(826)(예를 들어, Wi-Fi, 블루투스), 데이터 저장 디바이스(824)(예를 들면, 하드 디스크 드라이브, 플래시 메모리 등) 및 레거시(예를 들면, 퍼스널 시스템 2(Personal System 2, PS/2)) 디바이스를 시스템에 연결하기 위한 레거시 I/O 컨트롤러를 포함한다. 하나 이상의 범용 직렬 버스(Universal Serial Bus, USB) 컨트롤러(842)는 키보드 및 마우스(844) 겸용 디바이스와 같은 입력 디바이스를 연결한다. 네트워크 컨트롤러(834)는 또한 ICH(830)에도 연결될 수 있다. 일부 실시예에서, 고성능 네트워크 컨트롤러(도시되지 않음)는 프로세서 버스(810)에 연결된다.
도 9에 도시된 바와 같이, 디바이스(900)는 또한 하우징(902), 디스플레이(904), 입력/출력(I/O) 디바이스(906), 카메라(905, 910), 및 안테나(908)를 포함할 수 있다. 디바이스(900)는 또한 네비게이션 기능부(912)를 포함할 수 있다. 디스플레이(904)는 이동 컴퓨팅 디바이스에 적절한 정보를 디스플레이하기 위한 임의의 적합한 디스플레이 유닛을 포함할 수 있다. I/O 디바이스(906)는 정보를 이동 컴퓨팅 디바이스에 입력하기에 적합한 임의의 I/O 디바이스를 포함할 수 있다. I/O 디바이스(906)의 예는 영숫자 키보드, 숫자 키패드, 터치 패드, 입력 키, 버튼, 스위치, 로커 스위치, 마이크로폰, 스피커, 음성 인식 디바이스 및 소프트웨어 등을 포함할 수 있다. 정보는 또한 마이크로폰(도시되지 않음)을 통해 디바이스(900)에 입력될 수 있거나, 음성 인식 디바이스에 의해 디지털화될 수 있다. 실시예는 이러한 맥락으로 제한되지 않는다. 일부 실시예에서, 장치(900)는 데이터 프로세싱 시스템(800)을 더 포함한다.
본 명세서에 설명된 실시예는 하드웨어 요소, 소프트웨어 요소, 또는 이들의 조합을 사용하여 구현될 수 있다. 하드웨어 요소 또는 모듈의 예는 프로세서, 마이크로프로세서, 회로, 회로 요소(예를 들면, 트랜지스터, 저항, 캐패시터, 인덕터 등), 집적 회로, 주문형 집적 회로(application specific integrated circuit, ASIC), 프로그래머블 로직 디바이스(programmable logic device, PLD), 디지털 신호 프로세서(digital signal processor, DSP), 필드 프로그래머블 게이트 어레이(field programmable gate array, FPGA), 로직 게이트, 레지스터, 반도체 디바이스, 칩, 마이크로칩, 및 칩 세트 등을 포함한다. 소프트웨어 요소 또는 모듈의 예는 애플리케이션, 컴퓨터 프로그램, 애플리케이션 프로그램, 시스템 프로그램, 머신 프로그램, 오퍼레이팅 시스템 소프트웨어, 미들웨어, 펌웨어, 루틴, 서브루틴, 함수, 방법, 절차, 소프트웨어 인터페이스, 애플리케이션 프로그램 인터페이스(Application Program Interface, API), 명령어 집합, 컴퓨팅 코드, 컴퓨터 코드, 코드 세그먼트, 컴퓨터 코드 세그먼트, 데이터 워드, 값, 심볼, 또는 이들의 임의의 조합을 포함한다. 실시예가 하드웨어 요소 및/또는 소프트웨어 요소를 사용하여 구현되는지를 결정하는 것은 이것으로 제한하는 것은 아니지만, 원하는 연산 속도, 전력 레벨, 내열성, 프로세싱 사이클 예산, 입력 데이터 레이트, 출력 데이터 레이트, 메모리 자원, 데이터 버스 속도 및 기타 설계 또는 성능 제약 사항과 같은 디자인 선택을 고려한 임의의 개수의 인자에 따라 변할 수 있다.
적어도 하나의 실시예의 하나 이상의 양태는 머신 판독 가능한 저장 매체상에 저장된 대표적인 명령어에 의해 구현될 수 있다. 그러한 명령어는 머신 판독 가능한 저장 매체를 구성하기도 하는 명령어를 저장하는 머신, 주 메모리 및 프로세서 부분에 의해 실행되는 동안 주 메모리 및/또는 프로세서 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 프로그램 가능한 로직 회로는 컴퓨터 판독 가능한 매체를 실시하는 프로세서에 의해 구성된 레지스터, 상태 머신 등을 가질 수 있다. 프로그래밍된 그러한 로직 회로는 그래서 본 명세서에 기술된 실시예의 범위 내에 속하는 시스템으로 물리적으로 변환된 것으로 이해될 수 있다. 프로세서 내에서 다양한 로직을 표현하는 명령어는 머신에 의해 판독될 때 머신으로 하여금 본 명세서에 설명된 아키텍처를 따르는 로직을 만들게 하고 그리고/또는 본 명세서에 설명된 기술을 수행하게 할 수 있다. 셀 디자인 또는 IP 핵심(IP core)으로 알려진 이러한 표현(representations)은 유형의 머신 판독 가능한 매체에 저장되어 다양한 고객이나 제조 시설에 제공되어 실제로 로직이나 프로세서를 만드는 제조 머신에 적재될 수 있다.
본 명세서에 설명된 특정한 특징은 실시예를 참조하여 설명되었지만, 이와 같은 설명은 제한적인 의미로 해석되지 않는 것으로 의도된다. 그러므로, 본 명세서에 설명된 구현예 및 다른 구현예의 다양한 수정은 본 개시가 적용되는 기술에서 통상의 지식을 가진 자에게 자명하며, 본 개시의 사상과 범위 내에 있는 것으로 간주된다.
다음의 예는 특정한 예시적 실시예에 관련된다.
하나 이상의 제 1 실시예에서, 병렬 비디오 인코딩을 위한 장치는 이전 비디오 프레임 또는 그 일부를 처리하고, 인코드 프로세스를 나타내는 하나 이상의 중간 파라미터를 생성하는 하나 이상의 인코딩 파이프라인을 포함한다. 장치는 또한 현재 비디오 프레임 또는 그 일부를 처리하는 부가적인 인코딩 파이프라인을 포함한다. 부가적인 인코딩 파이프라인은 또한 레이트 컨트롤러를 포함하며, 레이트 컨트롤러는 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 이전 비디오 프레임에 대한 비트레이트를 추정하는 로직을 포함하는 이전 비디오 프레임 크기 추정 모듈을 포함한다. 레이트 컨트롤러는 또한 크기 추정 모듈에 연결된 버퍼 충만도 업데이트 모듈을 포함하며, 버퍼 충만도 업데이트 모듈은 비트레이트 추정치에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 로직을 포함한다. 레이트 컨트롤러는 또한 비트레이트 추정치 및 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 로직을 포함하는 목표 비트레이트 결정 모듈을 포함한다.
제 1 실시예에 추가하여, 추정 모듈은 이전 비디오 프레임을 처리함으로써 이용 가능한 중간 파라미터를 나타내는 동기화 정보에 의존하는 방식으로 이전 프레임의 비트레이트를 추정한다.
제 1 실시예에 추가하여, 하나 이상의 인코딩 파이프라인은 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과, 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 포함한다. 크기 추정 모듈은 제 1 비디오 프레임과 연관된 목표 비트레이트, 제 2 비디오 프레임과 연관된 실제 비트레이트 및 제 2 비디오 프레임과 연관된 추정된 비트레이트를 포함하는 제 1 중간 파라미터 집합과, 제 1 비디오 프레임과 연관된 추정된 예측 왜곡(PD) 및 제 1 비디오 프레임과 연관된 양자화 파라미터(QP) 값, 제 2 비디오 프레임과 연관된 QP 값 및 제 2 비디오 프레임과 연관된 실제 비트레이트를 포함하는 제 2 중간 파라미터 집합과, 제 1 비디오 프레임과 연관된 실제 PD, 제 2 비디오 프레임과 연관된 실제 PD 및 제 2 비디오 프레임과 연관된 실제 비트레이트를 포함하는 제 3 중간 파라미터 집합과, 또는 제 1 비디오 프레임과 연관된 양자화 계수의 통계치를 포함하는 제 4 중간 파라미터 집합 중의 적어도 하나의 함수로서 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함한다.
바로 앞의 실시예에 추가하여, 크기 추정 모듈은 제 1 비디오 프레임과 연관된 추정된 예측 왜곡 및 QP 값, 및 제 2 비디오 프레임과 연관된 추정된 예측 왜곡, QP 값 및 실제 비트레이트에 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함한다.
앞의 실시예에 추가하여, 크기 추정 모듈은 또한 제 1 비디오 프레임의 실제 예측 왜곡, 인코딩 모드 및 움직임 벡터 추정치와, 제 2 비디오 프레임의 예측 왜곡 및 제 2 비디오 프레임의 실제 비트레이트의 함수에 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함한다.
앞의 실시예에 추가하여, 크기 추정 모듈은 또한 제 1 비디오 프레임의 실제 PD가 이용 가능해짐에 따라 제 1 비디오 프레임의 실제 PD에 기초하여 제 1 비디오 프레임 비트레이트를 추정하고, 제 1 비디오 프레임의 실제 PD가 이용 가능하지 않음에 따라 제 1 비디오 프레임과 연관된 추정된 PD 또는 목표 비트레이트에 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함한다.
제 1 실시예에 추가하여, 하나 이상의 인코딩 파이프라인은 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과, 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 포함하며, 크기 추정 모듈은 또한 제 2 비디오 프레임을 처리하여 생성되는 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함한다.
제 1 실시예에 추가하여, 레이트 컨트롤러는 또한 이전 프레임 타입에 적어도 부분적으로 기초하여 이전 프레임과 연관된 비트레이트를 결정하는 로직을 포함한다.
바로 앞의 실시예에 추가하여, 하나 이상의 인코딩 파이프라인은 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과, 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 포함한다. 레이트 컨트롤러는 또한 제 1 프레임이 제 1 인트라 프레임인 것에 응답하여 또는 제 2 비디오 프레임이 인트라 프레임, 장면 전환 프레임 또는 골든 프레임인 것에 응답하여 제 1 비디오 프레임 비트레이트를 목표 비트레이트로서 추정하는 로직을 포함한다.
제 1 실시예에 추가하여, 하나 이상의 인코딩 파이프라인은 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과, 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 포함한다. 버퍼 충만도 업데이트 모듈은 또한 제 2 비디오 프레임에 대한 실제 비트레이트와 추정된 비트레이트 간의 차 및 제 1 비디오 프레임에 대한 추정된 비트레이트와 평균 비트레이트 간의 차의 함수에 기초하여 버퍼 충만도를 업데이트하는 로직을 포함한다.
제 1 실시예에 추가하여, 레이트 컨트롤러는 또한 현재 프레임 타입 및 이전 프레임 타입 모두 다에 의존하는 방식으로 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 로직을 포함한다.
하나 이상의 제 2 실시예에서, 비디오 인코더는 이전 비디오 프레임 또는 그 일부를 처리하고, 인코드 프로세스를 나타내는 하나 이상의 중간 파라미터를 생성하는 하나 이상의 인코딩 파이프라인을 포함한다. 비디오 인코더는 또한 현재 비디오 프레임 또는 그 일부를 처리하는 부가적인 인코딩 파이프라인을 포함하며, 부가적인 인코딩 파이프라인은 레이트 컨트롤러를 포함하되, 레이트 컨트롤러는 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 이전 비디오 프레임에 대한 비트레이트를 추정하고, 비트레이트 추정치에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하고, 비트 레이트 및 추정치 및 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 수단을 갖는다.
하나 이상의 제 3 실시예에서, 병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법은 하나 이상의 인코딩 파이프라인을 통해, 하나 이상의 이전 비디오 프레임 또는 그 일부를 처리하고 처리를 나타내는 하나 이상의 중간 파라미터를 생성하는 단계를 포함한다. 방법은 또한 다른 인코딩 파이프라인을 통해, 현재 비디오 프레임 또는 그 일부를 처리하는 단계를 포함하되, 현재 비디오 프레임을 처리하는 단계는 또한 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 이전 비디오 프레임에 대한 비트 레이트를 추정하는 단계와, 비트레이트 추정치에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 단계와, 비트 레이트 추정치 및 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 단계를 포함한다.
바로 앞의 제 3 실시예에 추가하여, 이전 프레임의 비트레이트를 추정하는 것은 이전 비디오 프레임을 처리함으로써 이용 가능한 중간 파라미터를 나타내는 동기화 정보에 의존한다.
바로 앞의 제 3 실시예에 추가하여, 이전 비디오 프레임의 비트레이트를 추정하는 단계는 또한 제 1 비디오 프레임의 실제 PD가 이용 가능해짐에 따라 제 1 비디오 프레임의 실제 PD에 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 단계와, 제 1 비디오 프레임의 실제 PD가 이용 가능하지 않음에 따라 제 1 비디오 프레임과 연관된 추정된 PD 또는 목표 비트레이트에 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 단계를 포함한다.
앞의 제 3 실시예에 추가하여, 하나 이상의 이전 비디오 프레임을 처리하는 단계는 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와, 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 포함한다. 제 1 비디오 프레임 비트레이트는 제 1 비디오 프레임과 연관된 목표 비트레이트, 제 2 비디오 프레임과 연관된 실제 비트레이트 및 제 2 비디오 프레임과 연관된 추정된 비트레이트를 포함하는 제 1 중간 파라미터 집합과, 제 1 비디오 프레임과 연관된 추정된 예측 왜곡(prediction distortion, PD) 및 제 1 비디오 프레임과 연관된 양자화 파라미터(quantization parameter, QP) 값과, 제 2 비디오 프레임과 연관된 QP 값 및 제 2 비디오 프레임과 연관된 실제 비트레이트를 포함하는 제 2 중간 파라미터 집합과, 제 1 비디오 프레임과 연관된 실제 PD, 제 2 비디오 프레임과 연관된 실제 PD 및 제 2 비디오 프레임과 연관된 실제 비트레이트를 포함하는 제 3 중간 파라미터 집합, 또는 제 1 비디오 프레임과 연관된 양자화 계수의 통계치를 포함하는 제 4 중간 파라미터 집합 중의 적어도 하나의 함수로서 추정된다.
바로 앞의 제 3 실시예에 추가하여, 제 1 비디오 프레임 비트레이트는 제 1 비디오 프레임과 연관된 추정된 예측 왜곡 및 QP 값, 및 제 2 비디오 프레임과 연관된 추정된 예측 왜곡, QP 값 및 실제 비트레이트에 기초하여 추정된다.
앞의 제 3 실시예에 추가하여, 제 1 비디오 프레임 비트레이트는 제 1 비디오 프레임의 실제 예측 왜곡, 인코딩 모드 및 움직임 벡터 추정치와, 제 2 비디오 프레임의 실제 예측 왜곡 및 제 2 비디오 프레임의 실제 비트레이트의 함수에 기초하여 추정된다.
앞의 제 3 실시예에 추가하여, 하나 이상의 이전 비디오 프레임을 처리하는 단계는 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 포함한다. 이전 프레임 비트레이트를 추정하는 단계는 또한 제 2 비디오 프레임을 처리하여 생성된 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 제 1 비디오 프레임 비트레이트를 추정하는 단계를 포함한다.
제 3 실시예에 추가하여, 이전 프레임과 연관된 비트레이트는 이전 프레임 타입에 적어도 부분적으로 기초하여 추정된다.
바로 앞의 제 3 실시예에 추가하여, 이전 비디오 프레임을 처리하는 단계는 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와, 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 포함한다. 제 1 비디오 프레임 비트 레이트는 제 1 프레임이 제 1 인트라 프레임인 것에 응답하여, 또는 제 2 비디오 프레임이 인트라 프레임, 장면 전환 프레임 또는 골든 프레임인 것에 응답하여 목표 비트레이트로서 추정된다.
제 3 실시예에 추가하여, 이전 비디오 프레임을 처리하는 단계는 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와, 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 포함한다. 버퍼 충만도는 제 2 비디오 프레임에 대한 실제 비트레이트와 추정된 비트 레이트 간의 차 및 제 1 비디오 프레임에 대한 추정된 비트레이트와 평균 비트레이트 사이의 차의 함수에 기초하여 업데이트된다.
제 3 실시예에 추가하여, 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 단계는 현재 프레임 타입 및 이전 프레임 타입의 모두 다에 의존한다.
하나 이상의 제 4 실시예에서, 하나 이상의 컴퓨터 판독 가능한 매체는 컴퓨팅 디바이스상에서 실행될 때, 컴퓨팅 장치로 하여금 제 3 실시예 중의 어느 하나를 수행하게 하는, 복수의 명령어를 저장한다.
하나 이상의 제 4 실시예에서, 하나 이상의 머신 판독 가능한 매체는 컴퓨팅 디바이스에 의해 실행될 때, 디바이스로 하여금 병렬 비디오 코딩 방법을 수행하게 하는 명령어를 저장하며, 방법은 하나 이상의 인코딩 파이프라인을 통해, 하나 이상의 이전 비디오 프레임 또는 그 일부를 처리하고 처리를 나타내는 하나 이상의 중간 파라미터를 생성하는 단계와, 다른 인코딩 파이프라인을 통해, 현재 비디오 프레임 또는 그 일부를 처리하는 단계를 포함한다. 현재 비디오 프레임을 처리하는 단계는 또한 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 이전 비디오 프레임에 대한 비트레이트를 추정하는 단계와, 추정된 비트레이트에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 단계와, 비트 레이트 추정치 및 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 단계를 포함한다.
바로 앞의 제 4 실시예에 추가하여, 매체는 또한 컴퓨팅 디바이스에 의해 실행될 때, 디바이스로 하여금 방법을 수행하게 하는 명령어를 저장하며, 방법은 또한 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 포함한다. 명령어는 또한 프로세서로 하여금 제 1 비디오 프레임 비트레이트를, 제 1 비디오 프레임과 연관된 목표 비트레이트, 제 2 비디오 프레임과 연관된 실제 비트레이트 및 제 2 비디오 프레임과 연관된 추정된 비트레이트를 포함하는 제 1 중간 파라미터 집합과, 제 1 비디오 프레임과 연관된 추정된 예측 왜곡(prediction distortion, PD) 및 제 1 비디오 프레임과 연관된 양자화 파라미터(quantization parameter, QP) 값과, 제 2 비디오 프레임과 연관된 QP 값 및 제 2 비디오 프레임과 연관된 실제 비트레이트를 포함하는 제 2 중간 파라미터 집합과, 제 1 비디오 프레임과 연관된 실제 PD, 제 2 비디오 프레임과 연관된 실제 PD 및 제 2 비디오 프레임과 연관된 실제 비트레이트를 포함하는 제 3 중간 파라미터 집합과, 또는 제 1 비디오 프레임과 연관된 양자화 계수의 통계치를 포함하는 제 4 중간 파라미터 집합 중의 적어도 하나의 함수로서 추정하도록 한다.
실시예는 그렇게 설명된 예시적인 실시예로 제한되지 않고, 첨부된 청구항의 범위를 벗어나지 않고 수정 및 변경되어 실시될 수 있다는 것을 인식할 것이다. 예를 들어, 전술한 실시 예는 특징의 특정한 조합을 포함할 수 있다. 그러나, 전술한 실시예는 이러한 관점으로 한정되지 않으며, 실시예에서, 전술한 실시예는 그러한 특징의 서브세트만을 취하고, 그러한 특징의 상이한 순서를 취하고, 그러한 특징의 상이한 조합을 취하고 및/또는 명시적으로 나열된 그러한 특징 이외의 추가적인 특징을 취하는 것을 포함할 수 있다. 따라서, 범위는 첨부된 청구항과 더불어, 그러한 청구항의 자격이 부여되는 균등물의 전체 범위를 참조하여 결정되어야 한다.

Claims (26)

  1. 병렬 비디오 인코딩을 위한 장치로서,
    이전 비디오 프레임 또는 그 일부를 처리하고, 인코드 프로세스를 나타내는 하나 이상의 중간 파라미터를 생성하는 하나 이상의 인코딩 파이프라인과,
    현재 비디오 프레임 또는 그 일부를 처리하는 부가적인 인코딩 파이프라인 - 상기 부가적인 인코딩 파이프라인은 레이트 컨트롤러(rate controller)를 포함함 - 을 포함하되,
    상기 레이트 컨트롤러는,
    상기 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 상기 이전 비디오 프레임에 대한 비트레이트를 추정하는 로직을 포함하는 이전 비디오 프레임 크기 추정 모듈과,
    상기 크기 추정 모듈에 연결된 버퍼 충만도(buffer fullness) 업데이트 모듈 - 상기 버퍼 충만도 업데이트 모듈은 상기 비트레이트 추정치에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 로직을 포함함 - 과,
    상기 비트레이트 추정치 및 상기 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 상기 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 로직을 포함하는 목표 비트레이트 결정 모듈을 포함하는
    장치.
  2. 제 1 항에 있어서,
    상기 추정 모듈은 상기 이전 비디오 프레임을 처리함으로써 이용 가능한 상기 중간 파라미터를 나타내는 동기화 정보에 의존하는 방식으로 상기 이전 프레임의 비트레이트를 추정하는
    장치.
  3. 제 1 항에 있어서,
    상기 하나 이상의 인코딩 파이프라인은,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과,
    제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 더 포함하며,
    상기 크기 추정 모듈은,
    상기 제 1 비디오 프레임과 연관된 목표 비트레이트, 상기 제 2 비디오 프레임과 연관된 실제 비트레이트 및 상기 제 2 비디오 프레임과 연관된 추정된 비트레이트를 포함하는 제 1 중간 파라미터 집합과,
    상기 제 1 비디오 프레임과 연관된 추정된 예측 왜곡(prediction distortion, PD) 및 상기 제 1 비디오 프레임과 연관된 양자화 파라미터(quantization parameter, QP) 값, 상기 제 2 비디오 프레임과 연관된 QP 값 및 상기 제 2 비디오 프레임과 연관된 상기 실제 비트레이트를 포함하는 제 2 중간 파라미터 집합과,
    상기 제 1 비디오 프레임과 연관된 실제 PD, 상기 제 2 비디오 프레임과 연관된 실제 PD 및 상기 제 2 비디오 프레임과 연관된 상기 실제 비트레이트를 포함하는 제 3 중간 파라미터 집합과,
    제 1 비디오 프레임과 연관된 양자화 계수의 통계치를 포함하는 제 4 중간 파라미터 집합
    중의 적어도 하나의 함수로서 상기 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함하는
    장치.
  4. 제 3 항에 있어서,
    상기 크기 추정 모듈은 상기 제 1 비디오 프레임과 연관된 상기 추정된 예측 왜곡 및 QP 값, 및 상기 제 2 비디오 프레임과 연관된 추정된 예측 왜곡, QP 값 및 실제 비트레이트에 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는 로직을 포함하는
    장치.
  5. 제 3 항에 있어서,
    상기 크기 추정 모듈은 상기 제 1 비디오 프레임의 실제 예측 왜곡, 인코딩 모드 및 움직임 벡터 추정치와, 상기 제 2 비디오 프레임의 실제 예측 왜곡 및 상기 제 2 비디오 프레임의 실제 비트레이트의 함수에 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는 로직을 더 포함하는
    장치.
  6. 제 2 항에 있어서,
    상기 크기 추정 모듈은,
    상기 제 1 비디오 프레임의 상기 실제 PD가 이용 가능해짐에 따라 상기 제 1 비디오 프레임의 상기 실제 PD에 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하고,
    상기 제 1 비디오 프레임의 상기 실제 PD가 이용 가능하지 않음에 따라 상기 제 1 비디오 프레임과 연관된 상기 추정된 PD 또는 상기 목표 비트레이트에 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는
    로직을 더 포함하는
    장치.
  7. 제 1 항에 있어서,
    상기 하나 이상의 인코딩 파이프라인은,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과,
    상기 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 더 포함하며,
    상기 크기 추정 모듈은 상기 제 2 비디오 프레임을 처리하여 생성되는 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는 로직을 더 포함하는
    장치.
  8. 제 1 항에 있어서,
    상기 레이트 컨트롤러는 상기 이전 프레임 타입에 적어도 부분적으로 기초하여 상기 이전 프레임과 연관된 상기 비트레이트를 결정하는 로직을 더 포함하는
    장치.
  9. 제 8 항에 있어서,
    상기 하나 이상의 인코딩 파이프라인은,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과,
    상기 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 더 포함하며,
    상기 레이트 컨트롤러는 상기 제 1 프레임이 제 1 인트라 프레임인 것에 응답하여 또는 상기 제 2 비디오 프레임이 인트라 프레임, 장면 전환 프레임 또는 골든 프레임인 것에 응답하여 상기 제 1 비디오 프레임 비트레이트를 상기 목표 비트레이트로서 추정하는 로직을 더 포함하는
    장치.
  10. 제 1 항에 있어서,
    상기 하나 이상의 인코딩 파이프라인은,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임 또는 그 일부를 처리하는 제 1 인코딩 파이프라인과,
    상기 제 2 비디오 프레임 직전의 제 3 비디오 프레임을 처리하는 제 2 인코딩 파이프라인을 더 포함하며,
    상기 버퍼 충만도 업데이트 모듈은 상기 제 2 비디오 프레임에 대한 실제 비트레이트와 추정된 비트레이트 간의 차 및 상기 제 1 비디오 프레임에 대한 상기 추정된 비트레이트와 평균 비트레이트 간의 차의 함수에 기초하여 상기 버퍼 충만도를 업데이트하는 로직을 더 포함하는
    장치.
  11. 제 1 항에 있어서,
    상기 레이트 컨트롤러는 상기 현재 프레임 타입 및 상기 이전 프레임 타입 모두 다에 의존하는 방식으로 상기 현재 비디오 프레임에 대한 상기 목표 비트레이트를 결정하는 로직을 더 포함하는
    장치.
  12. 비디오 인코더로서,
    하나 이상의 이전 비디오 프레임 또는 그 일부를 인코딩하는 하나 이상의 인코딩 파이프라인과,
    현재 비디오 프레임 또는 그 일부를 인코딩하는 부가적인 인코딩 파이프라인 - 상기 부가적인 인코딩 파이프라인은 레이트 컨트롤러를 포함함 - 을 포함하되,
    상기 레이트 컨트롤러는,
    상기 이전 비디오 프레임을 처리하여 생성되는 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 상기 이전 비디오 프레임에 대한 비트레이트를 추정하고,
    상기 추정된 비트레이트에 적어도 부분적으로 기초하여 버퍼 충만도 (buffer fullness)를 업데이트하고,
    상기 추정된 비트 레이트 및 상기 업데이트된 버퍼 충만도에 적어도 부분적으로 기초하여 상기 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 수단을 갖는
    비디오 인코더.
  13. 병렬 비디오 인코딩을 위한 컴퓨터 구현된(computer-implemented) 방법으로서,
    하나 이상의 인코딩 파이프라인을 통해, 하나 이상의 이전 비디오 프레임 또는 그 일부를 처리하고 상기 처리를 나타내는 하나 이상의 중간 파라미터를 생성하는 단계와,
    다른 인코딩 파이프라인을 통해, 현재 비디오 프레임 또는 그 일부를 처리하는 단계를 포함하되,
    상기 현재 비디오 프레임을 처리하는 단계는,
    상기 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 상기 이전 비디오 프레임에 대한 비트 레이트를 추정하는 단계와,
    상기 비트레이트 추정치에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 단계와,
    상기 비트 레이트 추정치 및 상기 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 상기 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 단계를 더 포함하는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  14. 제 13 항에 있어서,
    상기 이전 프레임의 상기 비트레이트를 추정하는 단계는 상기 이전 비디오 프레임을 처리함으로써 이용 가능한 중간 파라미터를 나타내는 동기화 정보에 의존하는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  15. 제 13 항에 있어서,
    상기 하나 이상의 이전 비디오 프레임을 처리하는 단계는,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와,
    상기 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 더 포함하며,
    상기 제 1 비디오 프레임 비트레이트는,
    상기 제 1 비디오 프레임과 연관된 목표 비트레이트, 상기 제 2 비디오 프레임과 연관된 실제 비트레이트 및 상기 제 2 비디오 프레임과 연관된 추정된 비트레이트를 포함하는 제 1 중간 파라미터 집합과,
    상기 제 1 비디오 프레임과 연관된 추정된 예측 왜곡(prediction distortion, PD) 및 상기 제 1 비디오 프레임과 연관된 양자화 파라미터(quantization parameter, QP) 값과, 상기 제 2 비디오 프레임과 연관된 QP 값 및 상기 제 2 비디오 프레임과 연관된 상기 실제 비트레이트를 포함하는 제 2 중간 파라미터 집합과,
    상기 제 1 비디오 프레임과 연관된 실제 PD, 상기 제 2 비디오 프레임과 연관된 실제 PD 및 상기 제 2 비디오 프레임과 연관된 상기 실제 비트레이트를 포함하는 제 3 중간 파라미터 집합, 또는
    제 1 비디오 프레임과 연관된 양자화 계수의 통계치를 포함하는 제 4 중간 파라미터 집합
    중의 적어도 하나의 함수로서 추정되는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  16. 제 15 항에 있어서,
    상기 제 1 비디오 프레임 비트레이트는 상기 제 1 비디오 프레임과 연관된 추정된 예측 왜곡 및 QP 값, 및 상기 제 2 비디오 프레임과 연관된 추정된 예측 왜곡, QP 값 및 실제 비트레이트에 기초하여 추정되는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  17. 제 15 항에 있어서,
    상기 제 1 비디오 프레임 비트레이트는 상기 제 1 비디오 프레임의 실제 예측 왜곡, 인코딩 모드 및 움직임 벡터 추정치와, 상기 제 2 비디오 프레임의 실제 예측 왜곡 및 상기 제 2 비디오 프레임의 실제 비트레이트의 함수에 기초하여 추정되는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  18. 제 14 항에 있어서,
    상기 이전 비디오 프레임의 상기 비트레이트를 추정하는 단계는,
    상기 제 1 비디오 프레임의 상기 실제 PD가 이용 가능해짐에 따라 상기 제 1 비디오 프레임의 상기 실제 PD에 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는 단계와,
    상기 제 1 비디오 프레임의 상기 실제 PD가 이용 가능하지 않음에 따라 상기 제 1 비디오 프레임과 연관된 상기 추정된 PD 또는 상기 목표 비트레이트에 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는 단계를 더 포함하는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  19. 제 13 항에 있어서,
    상기 하나 이상의 이전 비디오 프레임을 처리하는 단계는,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와,
    상기 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 더 포함하며,
    상기 이전 프레임 비트레이트를 추정하는 단계는 상기 제 2 비디오 프레임을 처리하여 생성된 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 상기 제 1 비디오 프레임 비트레이트를 추정하는 단계를 더 포함하는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  20. 제 13 항에 있어서,
    상기 이전 프레임과 연관된 상기 비트레이트는 상기 이전 프레임 타입에 적어도 부분적으로 기초하여 추정되는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  21. 제 20 항에 있어서,
    상기 이전 비디오 프레임을 처리하는 단계는,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와,
    상기 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 더 포함하며,
    제 1 비디오 프레임 비트 레이트는 상기 제 1 프레임이 제 1 인트라 프레임인 것에 응답하여, 또는 상기 제 2 비디오 프레임이 인트라 프레임, 장면 전환 프레임 또는 골든 프레임인 것에 응답하여 상기 목표 비트레이트로서 추정되는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  22. 제 13 항에 있어서,
    상기 이전 비디오 프레임을 처리하는 단계는,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와,
    상기 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 더 포함하며,
    상기 버퍼 충만도는 상기 제 2 비디오 프레임에 대한 실제 비트레이트와 추정된 비트 레이트 간의 차 및 상기 제 1 비디오 프레임에 대한 상기 추정된 비트레이트와 평균 비트레이트 사이의 차의 함수에 기초하여 업데이트되는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  23. 제 13 항에 있어서,
    상기 현재 비디오 프레임에 대한 상기 목표 비트레이트를 결정하는 단계는 상기 현재 프레임 타입 및 상기 이전 프레임 타입 모두에 의존하는
    병렬 비디오 인코딩을 위한 컴퓨터 구현된 방법.
  24. 하나 이상의 컴퓨터 판독 가능한 매체로서,
    컴퓨팅 디바이스상에서 실행될 때, 상기 컴퓨팅 장치로 하여금 청구항 제 13 항 내지 제 23 항 중의 어느 한 항의 방법을 수행하게 하는, 복수의 명령어가 저장된
    컴퓨터 판독 가능한 매체.
  25. 제 24 항에 있어서,
    상기 컴퓨팅 디바이스에 의해 실행될 때, 상기 디바이스로 하여금 상기 방법을 수행하게 하는 저장된 명령어를 더 포함하며,
    상기 방법은,
    하나 이상의 인코딩 파이프라인을 통해, 하나 이상의 이전 비디오 프레임 또는 그 일부를 처리하고 상기 처리를 나타내는 하나 이상의 중간 파라미터를 생성하는 단계와,
    다른 인코딩 파이프라인을 통해, 현재 비디오 프레임 또는 그 일부를 처리하는 단계를 더 포함하며,
    상기 현재 비디오 프레임을 처리하는 단계는,
    상기 하나 이상의 중간 파라미터에 적어도 부분적으로 기초하여 상기 이전 비디오 프레임에 대한 비트레이트를 추정하는 단계와,
    상기 추정된 비트레이트에 적어도 부분적으로 기초하여 버퍼 충만도를 업데이트하는 단계와,
    상기 비트 레이트 추정치 및 상기 버퍼 충만도 업데이트에 적어도 부분적으로 기초하여 상기 현재 비디오 프레임에 대한 목표 비트레이트를 결정하는 단계를 더 포함하는
    컴퓨터 판독 가능한 매체.
  26. 제 25 항에 있어서,
    상기 컴퓨팅 디바이스에 의해 실행될 때, 상기 디바이스로 하여금 상기 방법을 수행하게 하는 저장된 명령어를 더 포함하며,
    상기 방법은,
    상기 현재 비디오 프레임 직전의 제 1 비디오 프레임을 처리하는 단계와,
    상기 제 1 비디오 프레임 직전의 제 2 비디오 프레임을 처리하는 단계를 더 포함하며,
    상기 제 1 비디오 프레임 비트레이트는,
    상기 제 1 비디오 프레임과 연관된 목표 비트레이트, 상기 제 2 비디오 프레임과 연관된 실제 비트레이트 및 상기 제 2 비디오 프레임과 연관된 추정된 비트레이트를 포함하는 제 1 중간 파라미터 집합과,
    상기 제 1 비디오 프레임과 연관된 추정된 예측 왜곡(prediction distortion, PD) 및 상기 제 1 비디오 프레임과 연관된 양자화 파라미터(quantization parameter, QP) 값과, 상기 제 2 비디오 프레임과 연관된 QP 값 및 상기 제 2 비디오 프레임과 연관된 상기 실제 비트레이트를 포함하는 제 2 중간 파라미터 집합과,
    상기 제 1 비디오 프레임과 연관된 실제 PD, 상기 제 2 비디오 프레임과 연관된 실제 PD 및 상기 제 2 비디오 프레임과 연관된 상기 실제 비트레이트를 포함하는 제 3 중간 파라미터 집합과, 또는
    제 1 비디오 프레임과 연관된 양자화 계수의 통계치를 포함하는 제 4 중간 파라미터 집합
    중의 적어도 하나의 함수로서 추정되는
    컴퓨터 판독 가능한 매체.
KR1020177012687A 2014-12-11 2015-11-09 병렬 비디오 인코딩을 위한 레이트 제어 KR20170095816A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/567,600 US10097828B2 (en) 2014-12-11 2014-12-11 Rate control for parallel video encoding
US14/567,600 2014-12-11
PCT/US2015/059709 WO2016094000A1 (en) 2014-12-11 2015-11-09 Rate control for parallel video encoding

Publications (1)

Publication Number Publication Date
KR20170095816A true KR20170095816A (ko) 2017-08-23

Family

ID=56107911

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012687A KR20170095816A (ko) 2014-12-11 2015-11-09 병렬 비디오 인코딩을 위한 레이트 제어

Country Status (5)

Country Link
US (1) US10097828B2 (ko)
EP (1) EP3231176A4 (ko)
KR (1) KR20170095816A (ko)
CN (1) CN107113432B (ko)
WO (1) WO2016094000A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210077771A (ko) * 2018-10-31 2021-06-25 에이티아이 테크놀로지스 유엘씨 콘텐츠 적응적 양자화 강도 및 비트 레이트 모델링
KR102515254B1 (ko) 2023-01-16 2023-03-30 황정석 발수 코팅 처리된 원단을 이용한 커튼 및 이의 제조 방법

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160360206A1 (en) * 2015-06-04 2016-12-08 Microsoft Technology Licensing, Llc Rate controller for real-time encoding and transmission
WO2017023829A1 (en) * 2015-07-31 2017-02-09 Stc.Unm System and methods for joint and adaptive control of rate, quality, and computational complexity for video coding and video delivery
FR3040849A1 (fr) * 2015-09-04 2017-03-10 Stmicroelectronics (Grenoble 2) Sas Procede de compression d'un flux de donnees video
CN107872669B (zh) * 2016-09-27 2019-05-24 腾讯科技(深圳)有限公司 视频码率处理方法和装置
CN108401159B (zh) * 2017-02-07 2022-07-08 腾讯科技(深圳)有限公司 一种目标码率控制的方法以及电子设备
JP2018191136A (ja) * 2017-05-02 2018-11-29 キヤノン株式会社 符号化装置、符号化方法およびプログラム
US10306250B2 (en) * 2017-06-16 2019-05-28 Oath Inc. Video encoding with content adaptive resource allocation
KR102543444B1 (ko) * 2017-08-29 2023-06-13 삼성전자주식회사 영상 부호화 장치
WO2019055886A1 (en) * 2017-09-18 2019-03-21 Intel IP Corporation APPARATUS, SYSTEM AND METHOD FOR VIDEO CODING
CN109660825B (zh) * 2017-10-10 2021-02-09 腾讯科技(深圳)有限公司 视频转码方法、装置、计算机设备及存储介质
WO2020024160A1 (zh) * 2018-08-01 2020-02-06 深圳市大疆创新科技有限公司 视频处理设备和方法
CN108989814B (zh) * 2018-08-06 2021-06-04 上海大学 一种基于并行编码结构的码率控制方法
US20200053388A1 (en) * 2018-08-10 2020-02-13 Disney Enterprises, Inc. Machine learning based video compression
US11544606B2 (en) 2018-09-14 2023-01-03 Disney Enterprises, Inc. Machine learning based video compression
CN112715028A (zh) * 2018-09-28 2021-04-27 英特尔公司 传送控制的视频编码
WO2020089822A1 (en) 2018-10-31 2020-05-07 Beijing Bytedance Network Technology Co., Ltd. Overlapped block motion compensation with derived motion information from neighbors
CN117560503A (zh) * 2019-01-13 2024-02-13 北京字节跳动网络技术有限公司 重叠块运动补偿和其他工具之间的协调
CN110519599B (zh) * 2019-08-22 2021-05-14 北京数码视讯软件技术发展有限公司 一种基于分布式分析的视频编码方法和装置
CN110418144A (zh) * 2019-08-28 2019-11-05 成都索贝数码科技股份有限公司 一种基于nvidia gpu实现一入多出转码多码率视频文件的方法
WO2021084679A1 (ja) * 2019-10-31 2021-05-06 株式会社ソシオネクスト 動画像符号化方法、符号化処理方法、動画像符号化装置および符号化処理装置
CN110996038B (zh) * 2019-11-19 2020-11-10 清华大学 一种面向多人互动直播的自适应码率调节方法
CN113784123B (zh) * 2021-11-11 2022-03-15 腾讯科技(深圳)有限公司 视频编码方法和装置、存储介质及电子设备
GB2620922A (en) * 2022-07-22 2024-01-31 V Nova Int Ltd Data processing in an encoding process

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0899961A1 (en) 1997-08-25 1999-03-03 Tektronix, Inc. Pipelined processing for moving picture compression bit rate control
US8054880B2 (en) 2004-12-10 2011-11-08 Tut Systems, Inc. Parallel rate control for digital video encoder with multi-processor architecture and picture-based look-ahead window
US7274739B2 (en) 2003-05-19 2007-09-25 General Instrument Corporation Methods and apparatus for improving video quality in statistical multiplexing
WO2005084035A2 (en) 2004-02-06 2005-09-09 Apple Computer, Inc. Rate and quality controller for h.264/avc video coder and scene analyzer therefor
US9781433B2 (en) * 2005-01-26 2017-10-03 Avago Technologies General Ip (Singapore) Pte. Ltd. Systems, methods, and apparatus for real-time video encoding
US8126283B1 (en) * 2005-10-13 2012-02-28 Maxim Integrated Products, Inc. Video encoding statistics extraction using non-exclusive content categories
WO2008079041A1 (en) * 2006-12-27 2008-07-03 Intel Corporation Methods and apparatus to decode and encode video information
CN100562118C (zh) * 2007-07-03 2009-11-18 上海富瀚微电子有限公司 一种视频编码的码率控制方法
US8798137B2 (en) * 2008-02-29 2014-08-05 City University Of Hong Kong Bit rate estimation in data or video compression
US8879623B2 (en) * 2009-09-02 2014-11-04 Sony Computer Entertainment Inc. Picture-level rate control for video encoding a scene-change I picture
CA2722993A1 (fr) 2010-12-01 2012-06-01 Ecole De Technologie Superieure Systeme d'ecodage video parallele multitrames et multitranches avec encodage simultane de trames predites
KR20130101412A (ko) * 2012-03-05 2013-09-13 한국전자통신연구원 비디오 비트율 제어 방법 및 그 장치
US9357210B2 (en) 2013-02-28 2016-05-31 Sonic Ip, Inc. Systems and methods of encoding multiple video streams for adaptive bitrate streaming

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210077771A (ko) * 2018-10-31 2021-06-25 에이티아이 테크놀로지스 유엘씨 콘텐츠 적응적 양자화 강도 및 비트 레이트 모델링
KR102515254B1 (ko) 2023-01-16 2023-03-30 황정석 발수 코팅 처리된 원단을 이용한 커튼 및 이의 제조 방법

Also Published As

Publication number Publication date
CN107113432A (zh) 2017-08-29
CN107113432B (zh) 2020-09-11
US20160173875A1 (en) 2016-06-16
EP3231176A1 (en) 2017-10-18
EP3231176A4 (en) 2018-06-20
WO2016094000A1 (en) 2016-06-16
US10097828B2 (en) 2018-10-09

Similar Documents

Publication Publication Date Title
CN107113432B (zh) 用于并行视频编码的码率控制
CN111066326B (zh) 机器学习视频处理系统和方法
US9807410B2 (en) Late-stage mode conversions in pipelined video encoders
US10827186B2 (en) Method and system of video coding with context decoding and reconstruction bypass
CN110740318A (zh) 用于视频处理和视频译码的自动自适应长期参考帧选择
KR102587638B1 (ko) 비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정 방법 및 시스템
CN107005697B (zh) 用于视频编解码的使用基于查找表的概率更新的熵编解码的方法与系统
CN106664409B (zh) 视频编码中黄金帧选择的方法、系统、设备和介质
KR102390162B1 (ko) 데이터 인코딩 장치 및 데이터 인코딩 방법
TW201334554A (zh) 解碼移動向量之裝置
CN103647972A (zh) 运动图像解码方法和运动图像编码方法
US20170041606A1 (en) Video encoding device and video encoding method
KR102593525B1 (ko) 비디오 픽처 디코딩 및 인코딩 방법 및 장치
CN104168479B (zh) 用于视频成码的切片级比特率控制
JP2022535859A (ja) Mpmリストを構成する方法、クロマブロックのイントラ予測モードを取得する方法、および装置
KR20150070313A (ko) 다수의 독립 코딩 스트림들 사이에서 공유된 모션 추정을 포함하는 비디오 코딩
CN105245896A (zh) Hevc并行运动补偿方法及装置
TW201724852A (zh) 平行算術寫碼技術
KR101294364B1 (ko) 고화질 영상을 위한 무손실 영상 압축방법, 압축 해제방법 및 이를 적용한 전자기기
US10341664B2 (en) Configurable intra coding performance enhancements
Stefanoski et al. Spatially and temporally scalable compression of animated 3D meshes with MPEG-4/FAMC
KR20140023918A (ko) 동화상 부호화 장치
KR20240039178A (ko) 인코딩 및 디코딩 방법 그리고 장치
US20170070747A1 (en) Image processing device for adjusting computational complexity of interpolation filter, image interpolation method, and image encoding method
US20220217378A1 (en) Computer Software Module, a Device and a Method for Accelerating Inference for Compressed Videos

Legal Events

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