KR20190020039A - 가변 길이 코딩된 파일을 디코딩하는 방법 및 장치 - Google Patents
가변 길이 코딩된 파일을 디코딩하는 방법 및 장치 Download PDFInfo
- Publication number
- KR20190020039A KR20190020039A KR1020197001291A KR20197001291A KR20190020039A KR 20190020039 A KR20190020039 A KR 20190020039A KR 1020197001291 A KR1020197001291 A KR 1020197001291A KR 20197001291 A KR20197001291 A KR 20197001291A KR 20190020039 A KR20190020039 A KR 20190020039A
- Authority
- KR
- South Korea
- Prior art keywords
- file
- decoding
- decoded
- indexed information
- information
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods 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/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods 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/436—Methods 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
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
- H04N19/45—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder performing compensation of the inverse transform mismatch, e.g. Inverse Discrete Cosine Transform [IDCT] mismatch
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Discrete Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
본 발명은 디코딩 방법 및 장치를 제공한다. 디코딩 방법은, 주로, 사전 인덱싱된 정보를 추출하는 것과, 사전 인덱싱된 정보를 디코딩될 파일과 관련된 다른 파일 또는 디코딩될 파일의 종단에 저장하는 것과, 그 후, 디코딩이 수행되기 전에 사전 인덱싱된 정보를 판독하는 것과, 사전 인덱싱된 정보에 따라 디코딩될 파일 내의 다수의 데이터 세그먼트에 대해 병렬 디코딩을 수행하는 것을 포함한다. 사전 인덱싱된 정보에 대해 전술한 저장 방법을 사용하면, 사전 인덱싱된 정보가 판독될 때 I/O 동작을 효과적으로 감소시킬 수있어, 디코딩이 수행될 때 야기될 수 있는 시스템 프레임 정지 현상을 어느 정도 회피할 수 있다.
Description
본 출원은 2016 년 7 월 8 일자로 중국 특허청에 출원된 "가변 길이 코딩된 파일을 디코딩하는 방법 및 장치"라는 명칭의 중국 특허 출원 제 CN201610542045 호의 우선권을 주장하며, 그 전체가 본원에 참고로 포함된다.
본 발명의 실시예는 컴퓨터의 디코딩 방법에 관한 것으로, 특히 가변 길이 코딩된 파일(variable-length coded file)을 디코딩하는 방법 및 장치에 관한 것이다.
현재, 모바일 디바이스에서 가장 인기있는 이미지 포맷은 JPEG(Joint Photographic Experts Group)이다. JPEG 기반 이미지는 가변 길이 허프만(Huffman) 엔트로피 코딩을 통해 획득되므로, 비교적 적은 디스크 공간을 사용하여 보다 나은 이미지 품질을 획득할 수 있다. 모바일 폰 및 카메라와 같은 디바이스에 의한 촬영을 통해 생성되는 이미지는 기본적으로 JPEG 포맷이다. 또한, 대부분의 이미지 편집 소프트웨어에 의해 편집된 후에 저장되는 이미지도 또한 기본적으로 JPEG 포맷이다.
JPEG 이미지의 디코딩 속도가 개선되면, 이미지 탐색을 위한 사용자 경험이 크게 개선될 수 있다. 현재, 모바일 단말기는 주로 JPEG 이미지의 디코딩을 완료하기 위해 두 가지 방식을 사용한다. 제 1 방식은 하드웨어 디코딩이다. 즉, Apple iOS 디바이스와 같은 모바일 단말기에서는 JPEG 이미지의 디코딩을 완료하기 위해 전용 하드웨어 칩이 설정된다. 제 2 방식은 소프트웨어 디코딩으로서, 예를 들어, 대부분의 안드로이드(Android) 디바이스에서, JPEG 이미지의 디코딩을 완료하는 데 소프트웨어 디코딩 라이브러리가 사용된다. 하드웨어 디코딩은 빠른 디코딩 속도의 장점이 있지만, 디코딩 칩이 디바이스에 추가적으로 부가될 필요가 있다. 이것은 디바이스의 비용을 증가시키게 된다. 따라서, 디바이스의 생산 비용을 증가시키지 않으면서 이미지를 탐색하는 사용자 경험을 개선시키기 위해서는 소프트웨어 디코딩의 속도를 개선시킬 수 있는 기술이 절실하게 요구된다.
JPEG 이미지의 소프트웨어 디코딩 프로세스는 주로 허프만(Huffman) 엔트로피 디코딩, 역 이산 코사인 변환 및 컬러 변환의 세 가지 프로세스를 포함한다. 역 이산 코사인 변환 및 컬러 변환의 두 프로세스는 병렬 프로세싱 및 멀티스레드 프로세싱을 잘 지원할 수 있다. 그러나, 허프만 엔트로피 코딩은 가변 길이 코딩(Variable-Length Coding, VLC)의 한 유형이다. 디코딩이 수행될 때, 디코딩 경계가 정확하게 탐색될 수 없고, 멀티스레드의 병렬 프로세싱이 추가로 수행된다. 따라서, 일반적으로 단일 스레드 직렬 디코딩만이 수행될 수 있다.
종래 기술에서는 허프만 병렬 디코딩 방법이 있다. 이 방법의 핵심은, 디코딩될 파일의 디코딩 경계와 관련되고, 그 파일 내에 존재하는 오프셋 정보가 그 파일의 헤더 내에 삽입되므로, 디코딩이 수행될 때, 병렬 디코딩을 구현하기 위해서는 헤더를 파싱함으로써 디코딩 경계가 획득될 수 있다는 것이다. 그러나, 이 방법에서, 오프셋 정보가 그 파일의 헤더에 삽입될 경우, 전체 파일 스트림이 복제될 필요가 있다. 따라서, JPEG 이미지가 상대적으로 크거나 JPEG 이미지가 많은 경우, 입출력(I/O) 동작이 많이 필요하며, 모바일 디바이스의 과도하게 빈번한 I/O 동작으로 인해 시스템 프레임 정지 현상이나 심지어는 시스템의 표면적인 데드 현상(death phenomenon)도 발생할 수 있다.
본 발명의 실시예는, 파일을 디코딩하는 속도를 개선시키고 파일이 디코딩될 때 야기될 수 있는 시스템 프레임 정지 현상을 어느 정도 회피하기 위해 가변 길이 코딩된 파일을 디코딩하는 방법 및 장치를 제공한다.
다음은 본 발명의 실시예에서 사용되는 용어를 먼저 기술한다.
메타데이터(metadata): 일반화된 메타데이터는 데이터를 설명하는 데이터를 지칭한다. 파일의 메타데이터는 그 파일과는 독립적으로 저장될 수 있거나, 또는 그 파일 내에, 가령, 그 파일의 헤더 또는 그 파일의 종단(tail end)에 저장될 수 있다.
메타데이터 파일: 메타데이터를 저장하는 파일. 파일에 대응하는 메타데이터 파일은 그 파일의 메타데이터를 저장하는 파일을 지칭하며, 그 파일 및 그 파일의 메타데이터 파일은 서로 다른 두 개의 파일이다.
데이터베이스 파일: 데이터베이스의 데이터를 저장하는 파일, 예를 들어, SQL 서버 데이터베이스에 의해 제공되고, 그 확장자가 .mdf인 파일이다.
시스템 파일: 운영 체제의 주요 데이터를 저장하고 사용자가 직접 수정할 수 없는 파일, 예를 들어, 리눅스(Linux) 시스템의 메타데이터 파일이다. 리눅스 시스템의 메타데이터 파일은 사용자 파일의 특징을 기술하기 위한 일부의 메타데이터 파일을 포함하고, 그 메타데이터 파일은 메타데이터 파일에 의해 기술된 사용자 파일과의 연관 관계를 갖는다.
사용자 파일: 사용자 또는 애플리케이션에 의해 직접 생성되고 사용자에 의해 직접 수정될 수 있는 파일이다. 본 발명의 실시예에서 언급된 디코딩될 파일은 일반적으로 사용자 파일, 예를 들어, 단말 디바이스를 사용하는 사용자에 의한 촬영을 통해 획득되는 이미지 파일이다.
파일 스트림: 이미지 파일 또는 다른 유형의 파일이 컴퓨터의 메모리에 저장되는 형태이다. 데이터 추가, 데이터 삭제, 데이터 수정, 파일에 대해 수행되는 코딩 및/또는 디코딩은 파일 스트림에 대해 수행되는 동작을 통해 완료된다. 파일에 대한 디코딩이 수행되기 전에, 그 파일은 먼저 컴퓨터의 메모리에 로딩될 필요가 있으므로, 그 파일에 대한 디코딩을 수행하는 것은 그 파일에 대응하는 파일 스트림에 대한 디코딩을 수행하는 것으로 지칭될 수 있다.
병렬 디코딩: 다수의(적어도 2 개) 스레드는 파일 스트림 내의 데이터에 대해 동시에 디코딩 동작을 수행한다.
최소 코딩 단위(Minimum Coded Unit, MCU): JPEG 코딩 사양에서, 최소 프로세싱 단위는 MCU이며, 일반적으로 16 * 16 픽셀의 행렬이다. 그러나, 일부 이미지 포맷(예를 들어, 그레이스케일 이미지)에서, MCU는 8 * 8 픽셀의 행렬일 수 있다. 통상적인 크기의 JPEG 이미지는 일반적으로 수천 개의 MCU를 포함하는데, 즉, 그 이미지에 대응하는 디코딩될 파일 스트림은 수천 개의 코딩된 MCU에 대한 정보를 포함한다. JPEG은 가변 길이 허프만 코딩에 의해 획득되므로, 동일한 크기의 MCU를 사용하여 획득되는 코딩된 MCU의 길이는 알려지지 않으며, 동일하거나 다를 수 있다.
데이터 세그먼트: 상기 파일 스트림 내의 데이터는 다수(적어도 2 개)의 데이터 세그먼트를 포함하고, 병렬 디코딩 프로세스에서, 다수의 스레드는 제각기 다수의 데이터 세그먼트에 대한 디코딩 동작을 수행한다. 병렬 디코딩이 MCU 단위로 수행되는 경우, 과도한 스레드가 동시에 시작될 필요가 있다. 따라서, 일반적으로, 하나의 데이터 세그먼트는 다수의 MCU를 포함하므로, 동시에 시작될 필요가 있는 스레드의 수가 감소될 수 있다.
디코딩 경계: 상기 데이터 세그먼트 간의 경계는 디코딩 경계이다. 구체적으로, 디코딩 경계는 각 데이터 세그먼트의 시작 위치일 수 있다. 보다 구체적으로, 일부 실시예에서, 디코딩 경계는 각각의 데이터 세그먼트 내에 포함된 제 1 MCU이다. 주목할 것은, 전체 파일 스트림 중의 제 1 MCU, 즉 파일의 제 1 위치가 2 개의 데이터 세그먼트 간의 경계가 아니지만, 본 발명의 일부 실시예에서는 제 1 MCU가 디코딩 경계가 된다는 것이다.
사전 인덱싱된 정보: 사전 인덱싱된 정보는 하나 이상의 디코딩 경계를 나타내는 정보를 포함하며, 실제 디코딩 요구 사항에 따라 일부 다른 정보를 더 포함할 수 있다. 일부 실시예에서, 디코딩 경계에 관한 정보는 파일 스트림 내의 디코딩 경계의 오프셋 위치 정보이다. 보다 상세하게는, 디코딩될 파일 스트림에서, 디코딩 경계에 관한 정보는 각 데이터 세그먼트 내에 포함된 제 1 MCU에 관련되고, 그 파일 스트림 내에 포함되는 오프셋 위치 정보일 수 있다. 주목할 것은, 병렬 디코딩이 수행될 데이터 세그먼트는 일반적으로 디코딩 경계가 결정된 후에만 디코딩 경계에 따른 분할에 의해 획득될 수 있다는 것이다. 그러나, 분할될 데이터 세그먼트의 수량(및 그 수량과 관련된 디코딩 경계의 수량), 즉, 병렬 디코딩을 수행하는 스레드의 수량은 그 데이터 세그먼트가 획득되기 전에 프로세싱 자원의 현재의 프로세싱 능력과 같은 정보에 따라 결정될 수 있다.
영구 저장소: 컴퓨터가 전원 오프되거나 재시작된 후, 저장된 정보는 손실되지 않는다. 일반적인 영구 저장소는 파일 저장소와 데이터베이스 저장소를 포함한다.
제 1 양태에 따르면, 본 발명의 일 실시예는 가변 길이 코딩에 의해 획득되는 파일, 예를 들어, JPEG 이미지의 디코딩에 적용될 수 있는 디코딩 방법을 제공한다. 디코딩 방법은 디코딩될 파일에 대응하는 사전 인덱싱된 정보를 판독하는 단계와, 상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대해 병렬 디코딩을 수행하는 단계를 포함한다. 사전 인덱싱된 정보는 하나 이상의 디코딩 경계를 나타내는 정보를 포함하고, 다수의 데이터 세그먼트는 하나 이상의 디코딩 경계 중 하나 이상에 따라 분할된다.
제 1 양태에 기초한 제 1 구현예에서, 사전 인덱싱된 정보는 디코딩될 파일과 연관된 다른 파일에 저장된다. 즉, 사전 인덱싱된 정보는 디코딩될 파일과는 독립적으로 저장된다. 예를 들어, 사전 인덱싱된 정보는 디코딩될 파일에 대응하는 메타데이터 파일에 저장될 수 있다. 여기에서, 메타데이터는 디코딩될 파일에 대응하는 시스템 데이터를 지칭한다. 여기서, 메타데이터 파일은 시스템 파일이다. 이 저장 방법에서, 파일 전체를 복제하는 동작이 수반되지 않기 때문에, 하드 디스크(또는 다른 외부 메모리) 상에서 전체 파일에 대해 판독 동작 및 기입 동작이 수행될 필요가 없고, 파일보다 적은 데이터를 갖는 사전 인덱싱된 정보만이 하드 디스크에 기입될 필요가 있어서, I/O 동작이 효과적으로 감소되고, 또한 디코딩이 수행될 때 발생할 수 있는 시스템 프레임 정지 현상이 어느 정도 회피된다. 특히, 파일이 많거나 파일이 비교적 큰 경우 효과가 더 현저하다.
제 1 양태의 제 1 구현예에 기초하여, 일부 구현예에서, 다른 파일은 또한 데이터베이스 파일일 수 있다. 여기서, 데이터베이스는 로컬 데이터베이스일 수 있거나 원격 데이터베이스일 수 있다. 다른 일부 구현예에서, 또 다른 파일은 또한 디코딩될 파일과 동일한 디렉토리에 속하고 디코딩될 파일과 동일한 파일 이름 및 디코딩될 파일의 확장자와는 상이한 확장자를 갖는 파일일 수 있고, 또 다른 파일의 확장자는 기존 확장자와 충돌할 수 없다.
제 1 양태에 기초한 제 2 구현예에서, 사전 인덱싱된 정보는 디코딩될 파일의 종단(tail end)에 추가로 저장될 수 있다. 파일 시스템은 파일의 종단에 데이터를 저장하는 저장 방식을 사용하는 것에 의해, 종단에 데이터를 부가하는 동작을 지원하기 때문에, 전체 파일에 대응하는 파일 스트림을 복제하는 동작이 회피될 수 있어서, I/O 동작이 효과적으로 감소될 수 있고, 또한 디코딩이 수행될 때 야기될 수 있는 시스템 프레임 정지 현상이 어느 정도 회피될 수 있다.
제 1 양태 또는 전술한 구현예 중 임의의 하나에 기초하여, 일부 구현예에서, 사전 인덱싱된 정보가 다음의 방식으로 획득되어 저장된다: 즉, 디코딩될 파일이 처음 열리는 것으로 검출될 경우, 사전 인덱싱된 정보가 추출되고, 추출된 사전 인덱싱된 정보가 저장된다. 저장소는 영구 저장소를 포함한다. 특정 저장 위치에 대해서는 전술한 구현예에서 기술된 사전 인덱싱된 정보의 저장 위치가 참조된다. 구체적으로, 사전 인덱싱된 정보를 추출하는 프로세스는 가변 길이 코딩과 관련하여 디코딩될 파일에 대한 디코딩을 수행하는 것을 포함한다.
일부 구현예에서, 디코딩될 파일이 처음 열리는 것으로 검출될 경우, 사전 인덱싱된 정보를 추출하는 것은 파일이 처음 열릴 때, (직렬 디코딩 또는 영역 디코딩과 같은 다른 디코딩 방법으로) 디코딩을 수행함으로써, 사전 인덱싱된 정보가 추출된다는 것을 의미한다. 최초로 파일을 열었을 때, 가변 길이 코딩과 관련한 디코딩이 수행될 필요가 있기 때문에, 가변 길이 코딩에 의해 획득되는 파일에 대해서 디코딩을 수행함으로써 코딩 단위에 관한 정보가 획득될 수 있고, 이 코딩 단위에 관해 획득된 정보로부터 일부 코딩 단위에 관한 정보가 사전 인덱싱된 정보로서 선택된다. 파일을 처음 열면 사전 인덱싱된 정보가 추출된다. 이러한 방식으로, 시스템에 대한 추가적인 전력 소모 또는 오버 헤드가 없으며, 이후에 파일이 다시 열릴 때, 사전 인덱싱된 정보에 따라 병렬 디코딩이 수행될 수 있어서, 파일이 나중에 열릴 때 디코딩 속도를 개선할 수가 있다.
다른 일부 구현예에서, 사전 인덱싱된 정보의 추출은 디코딩될 파일이 새로 추가되거나 디코딩될 파일이 수정되는 것이 검출될 때 수행될 수 있다. 이러한 두 가지 구현예에서는, 파일을 열 필요가 없기 때문에, 사전 인덱싱된 정보를 추출하는 과정에서, 가변 길이 코딩을 위한 디코딩만이 수행될 수 있고, 파일을 여는 모든 프로세싱 과정, 예를 들어, JPEG 이미지를 여는 과정에서 역 이산 코사인 변환 및 컬러 변환 과정을 수행하지 않는다.
전술한 구현예에서 기술된 세 가지 조건은 시스템에 의해 모두 설정될 수 있다. 예를 들어, 시스템은 세 가지 조건 중 하나가 충족될 때, 파일이 사전 인덱싱된 정보를 이미 가지고 있다는 것이 알려진 경우를 제외하고는, 사전 인덱싱된 정보를 추출하는 단계가 수행된다고 설정한다. 대안으로, 시스템은 세 가지 조건 중 하나 또는 두 가지만을 설정할 수 있다. 예를 들어, 시스템은, 최초로 파일이 열린다는 것이 검출되면, 그 파일에 대하여 사전 인덱싱된 정보를 추출하는 단계가 수행되도록 설정하고, 그 파일이 수정된 것으로 검출되면, 그 파일에 대하여 사전 인덱싱된 정보를 추출하는 단계가 수행되도록 설정한다. 이러한 설정은 원본 파일의 병렬 디코딩 효율을 개선할 수 있고, 원본 파일이 수정된 후 시기 적절하게 사전 인덱싱된 정보를 수정할 수 있어서, 사전 인덱싱된 정보의 정확성을 보장하고 수정된 파일에 대해 비교적 우수한 병렬 디코딩 효율이 여전히 달성될 수 있다는 것을 보장할 수 있다.
다른 일부 구현예에서, 컴퓨터 시스템은 사전 인덱싱된 정보를 추출하는 동작을 자율적으로 시작할 수 있다. 예를 들어, 기본적으로 시스템은 고정 간격으로 사전 인덱싱된 정보를 추출할 수 있거나 또는 x 파일이 새로 추가될 때마다 x 파일에 대한 사전 인덱싱된 정보를 추출할 수 있으며, 여기서, x는 2보다 큰 정수이다.
일부 구현예에서, 사전 인덱싱된 정보가 추출되기 전에, 저장될 필요가 있는 디코딩 경계의 수량은 프로세싱 자원의 프로세싱 능력에 따라 결정된다. 여기서, 프로세싱 자원은 디코딩될 파일이 위치하는 컴퓨터 시스템의 로컬 프로세싱 자원 및/또는 컴퓨터 시스템에 의해 호출될 수 있는 비 로컬 프로세싱 자원을 포함한다. 특히, 병렬 프로세싱을 수행할 수 있는 스레드의 수량은 프로세싱 자원의 프로세싱 능력에 따라 결정된다. 추출된 사전 인덱싱된 정보는 스레드의 수량과 동일한 수량을 가진 디코딩 경계에 관한 정보를 포함한다. 가정되는 것은, 시스템의 현재 CPU는 4 개의 코어를 가지며, 병렬 프로세싱을 수행할 수 있는 스레드의 수는 4 개이고, 파일의 제 1 위치 정보를 포함하는 4 개의 디코딩 경계에 관한 정보 또는 그 파일의 제 1 위치 정보를 제외한 3 개의 디코딩 경계에 관한 정보가 추출되어 저장될 수 있다는 것이다. JPEG 이미지가 일 예로서 사용된다. 파일의 제 1 위치 정보는 그 파일 내의 제 1 MCU 블록의 오프셋 위치 정보이다. 또한, 주목할 것은, 추출되어 저장되는 사전 인덱싱된 정보의 수량은 병렬 프로세싱을 수행할 수 있는 스레드의 수량과 정확히 같지 않고 단지 가까울 수 있다는 것이다. 이는 과도한 수량의 디코딩 경계에 관한 정보를 저장하는 것을 피할 수 있어 저장 공간을 효과적으로 절감할 수 있다. 물론, 프로세싱 자원의 프로세싱 능력이 결정될 수 있고, 디코딩 경계의 대응하는 수량에 관한 정보는 추출이 수행된 이후 및 저장이 수행되기 전에만 저장된다.
제 1 양태 또는 전술한 구현예 중 어느 하나에 기초하여, 일부 구현예에서, 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 크다고 결정될 때만 디코딩될 파일에 대응하는 사전 인덱싱된 정보가 판독되며, 사전 인덱싱된 정보에 따라 병렬 디코딩이 수행된다. 특히, 일 구현예에서, 먼저, 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 큰지 여부를 판단한다. 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 클 경우(또는 크거나 같을 경우), 디코딩될 파일에 대응하는 사전 인덱싱된 정보가 더 판독되고, 이 사전 인덱싱된 정보에 따라 병렬 디코딩이 수행된다. 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 작거나 같을 경우(또는 작은 경우), 병렬 디코딩은 수행되지 않지만, 직렬 디코딩은 수행된다.
파일이 지나치게 작으면 병렬 디코딩으로 얻을 수 있는 장점은 비용보다 적다. 따라서, 본 발명의 실시예에서 제공되는 솔루션에서는 파일의 크기가 먼저 결정될 수 있고, 비교적 큰 파일에 대해서만 병렬 디코딩이 수행되어, 비교적 큰 파일의 디코딩 효율을 개선하고 시스템의 전체 자원 이용률을 개선할 수 있다.
사전 인덱싱된 정보를 추출하는 전술한 방식 중 어느 하나에 기초하여, 일부 구현예에서, 디코딩될 파일이 새로이 추가, 수정 또는 처음으로 열리는 것이 검출되더라도, 여전히 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 크다고 결정할 필요가 있고, 그 후 이 결정에 따라 상기 사전 인덱싱된 정보가 추가로 추출된다. 구체적으로, 일 구현예에서, 먼저, 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 큰지 여부를 결정하고, 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 클 경우에만 사전 인덱싱된 정보가 추출된다. 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 작거나 같은 경우, 파일의 실제 요구 사항에 따라 동작이 수행될 필요가 있다. 예를 들어, 파일을 처음 열 때 파일을 실제로 디코딩할 필요가 있다면, 그 파일은 임의의 방식으로 디코딩될 필요가 있다. 이 경우, 사전 인덱싱된 정보가 획득되지 않더라도, 파일을 열기 위해 직렬 디코딩 또는 영역 디코딩과 같은 일련의 동작이 수행될 필요가 있다. 파일이 실제로 디코딩될 필요가 없는 경우, 예를 들어, 파일이 새로 추가되거나 수정되는 경우, 그 파일에 대해 디코딩과 관련된 임의의 동작이 수행되지 않을 수 있다.
사전 인덱싱된 정보가 추출되기 전에, 파일의 크기가 고려되고, 비교적 큰 파일에 대해서만 사전 인덱싱된 정보가 추출되어 저장된다. 이는 시스템의 전체 자원 이용률에 영향을 미치지 않고 저장 공간을 추가로 절감할 수 있다.
일부 다른 방식에서, 사전 인덱싱된 정보를 추출하는 단계 이전에 그리고 디코딩될 파일의 사전 인덱싱된 정보를 판독하기 전에, 그 파일의 크기를 결정하는 단계가 수행될 수 있다.
일부 구현예에서, 사전설정된 제 1 임계치는 경험에 따라 결정될 수 있거나, 또는 다양한 크기의 대량 파일이 디코딩된 후에 디코딩 효과에 따라 결정될 수 있다. 일단 임계치가 결정되면, 임계치는 일반적으로 변경되지 않는다.
다른 일부 구현예에서, 사전설정된 제 1 임계치는 실제 상황에 따라 변경될 수 있다. 구체적으로, 사전설정된 제 1 임계치는 다음과 같이 변경될 수 있다: 즉, 각 디코딩될 파일의 디코딩이 완료된 후에, 디코딩될 파일의 관련 정보가 기록되고, 그 파일의 크기 및 디코딩 시간과, 병렬 디코딩이 수행되는지의 여부를 포함한다. 디코딩될 파일에 대해 병렬 디코딩이 수행되고, 디코딩 시간이 사전설정된 제 2 임계치(예를 들어, 1 ms)보다 작고, 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 크면, 사전설정된 제 1 임계치는 디코딩될 파일의 크기로 변경된다. 즉, 디코딩될 파일에 대하여 병렬 디코딩이 수행되고 디코딩 시간이 지나치게 짧다고 판명되면, 이는 이 크기의 파일에 대해 병렬 디코딩하는 효과는 미미하며, 이 파일의 크기보다 작은 크기를 가진 파일에 대해 병렬 디코딩을 수행하는 효과는 덜 미미할 수 있다는 것을 보여준다. 파일의 크기가 제 1 임계치보다 큰 경우, 제 1 임계치는 그 파일의 크기로 설정되어야 하며, 이 경우, 제 1 임계치는 실제 상황에 따라 시기 적절한 방식으로 변경될 수 있어서, 시스템의 전체 자원 이용률을 추가로 보장할 수 있다.
다른 일부 구현예에서, 각 파일의 관련 정보가 기록될 필요는 없으며, 디코딩 시간이 임계치보다 작은 파일의 관련 정보만이 기록된다. 이는 저장 공간을 절감할 수 있다.
제 1 양태 또는 전술한 구현예 중 임의의 하나에 기초하여, 일부 구현예에서, 디코딩될 파일에 대해 병렬 디코딩이 수행되기 전에 일부 데이터가 준비될 필요가 있다. 구체적으로, 현재의 시스템이 R 개의 스레드를 병렬로 시작할 수 있다고 가정하고, 디코딩될 파일의 파일 스트림에 대하여 복제 동작(파일 스트림의 포인터만이 복제될 필요가 있음)을 수행하여 R 개의 파일 스트림을 획득한다. 이 경우, 각 스레드는 스레드가 볼 수 있는 파일 스트림 내의 데이터 세그먼트에 대해 병렬 디코딩을 수행할 수 있고, 최종적으로 R 개의 스레드의 실행 결과가 동기화되어 최종 디코딩 결과가 획득된다. 이는 스레드 간의 상호 간섭 문제를 피할 수 있어, 병렬 디코딩 결과의 정확성을 보장할 수 있다. 또한, 데이터 준비는 병렬 디코딩 프로세스에서 요구되는 다른 데이터를 준비하는 것, 예를 들어, 하나 이상의 디코딩 구조를 생성하는 것을 더 포함한다.
제 1 양태 또는 전술한 구현예 중 임의의 하나에 기초하여, 일부 구현예에서, 사전 인덱싱된 정보가 획득된 후, 먼저 사전 인덱싱된 정보에 대해 무결성 검증이 수행될 필요가 있고, 검증이 성공하면, 사전 인덱싱된 정보에 따라 디코딩될 파일에 대해 병렬 디코딩이 수행된다. 검증에 실패하면, 이는 사전 인덱싱된 정보가 손실되거나 수정될 수 있음을 나타내며, 이 경우, 디코딩될 파일에 대해 직렬 디코딩이 수행된다. 이는 파일의 사전 인덱싱된 정보가 손실되거나 수정되기 때문에 발생하는 병렬 디코딩 실패를 피할 수 있다.
제 1 양태 또는 전술한 구현예 중 임의의 하나에 기초하여, 일부 구현예에서, 스레드의 수가 디코딩 경계에 따라 분할될 수 있는 데이터 세그먼트의 수와 동일할 경우, 매 2 개의 디코딩 경계 간의 완전한 데이터 세그먼트는 하나의 스레드에 의해 디코딩될 객체이다. 이 경우, 상기 병렬 디코딩 프로세스는, 상기 사전 인덱싱된 정보에서 다수의 디코딩 경계에 관한 정보에 따라 상기 디코딩될 파일 내의 각 디코딩 경계의 위치를 결정하는 것과; 상기 다수의 스레드 각각의 스레드에 의해, 하나의 디코딩 경계를 결정하고, 상기 디코딩될 파일 내의 상기 디코딩 경계의 위치로부터 디코딩을 수행하도록 시작하는 것을 포함하고, 여기서, 최종 데이터 세그먼트에 대해 디코딩을 수행하는 스레드(최종 스레드로 지칭됨) 이외의 다른 각각의 스레드는 다음 디코딩 경계에 도달하면 디코딩을 중단하고, 상기 최종 스레드는 파일(또는 파일 스트림)이 끝나는 위치에 도달할 때까지는 디코딩을 수행한다.
다른 일부 구현예에서, 병렬 디코딩 동안, 시작될 수 있는 스레드의 수량이 디코딩 경계에 따라 분할될 수 있는 데이터 세그먼트의 수량보다 적은 경우, 최종 스레드 이외의 각각의 스레드는 P/M(반올림) 개의 데이터 세그먼트를 프로세싱하며, 최종 스레드는 나머지 부분을 프로세싱한다. M은 스레드의 수량이고, P는 디코딩 경계에 따라 분할될 수 있는 데이터 세그먼트의 수량이거나 또는 일부 구현예에서 디코딩 경계의 수량이다.
제 1 양태 또는 전술한 구현예 중 어느 하나에 기초하여, 일부 구현예에서, 병렬 디코딩을 수행하는 스레드의 수량은 병렬 디코딩 프로세스에서 프로세싱 자원의 실제 상황에 따라 동적으로 변경될 수 있다. 구체적으로, 현재 이용 가능한 프로세서(예를 들어, 유휴 코어의 수량)가 동적으로 검출되고, 스레드의 수량이 조정되어(예를 들어, 상기 수량이 증가되어), 디코딩 효율을 더 개선한다.
제 2 양태에 따르면, 본 발명의 일 실시예는 제 1 양태 또는 제 1 양태의 전술한 구현예 중 어느 하나를 구현할 수 있는 하나 이상의 모듈을 포함하는 디코딩 장치를 더 제공하며, 여기서 각 모듈은 하나 이상의 단계를 수행할 수 있다.
제 3 양태에 따르면, 본 발명의 일 실시예는 단말 디바이스를 더 제공한다. 단말 디바이스는 프로세서 및 메모리를 포함하며, 메모리는 소프트웨어 프로그램을 저장하도록 구성되고, 프로세서는 메모리에 저장된 소프트웨어 프로그램을 판독하며, 제 1 양태 또는 제 1 양태의 전술한 구현예 중 어느 하나에 따른 방법을 구현하도록 구성된다.
제 4 양태에 따르면, 본 발명의 일 실시예는 컴퓨터 저장 매체를 더 제공하며, 이 저장 매체는 비휘발성, 즉 저장 매체가 전원이 오프된 후에도 컨텐츠가 손실되지 않는 것일 수 있다. 저장 매체는 소프트웨어 프로그램을 저장하고, 하나 이상의 프로세서에 의해 판독되고 실행될 때, 소프트웨어 프로그램은 제 1 양태 또는 제 1 양태의 전술한 구현예 중 어느 하나에 따른 방법을 구현할 수 있다.
본 발명의 실시예에서 제공되는 방법 및 장치는 가변 길이 코딩(허프만)이 적용되는 모든 이미지 포맷에 적용될 수 있다는 것에 주목해야 한다. JPEG 이미지는 가변 길이 코딩이 적용되는 현재 이미지 포맷이다. 본 발명의 실시예에서 제공되는 방법은 가변 길이 코딩이 적용되는 다른 이미지의 디코딩 또는 장래에 나타날 수 있고 가변 길이 코딩이 적용되는 이미지의 디코딩에 적용될 수 있다. 이미지 포맷의 파일 이외에, 텍스트, 오디오 및 비디오와 같은 다른 유형의 파일에 가변 길이 코딩이 적용되는 경우, 본 발명의 실시예에서 제공된 방법과 동일하거나 유사한 방법이 또한 디코딩에 사용될 수 있다.
본 발명의 실시예에서의 기술적 해결책을 보다 명확하게 설명하기 위해, 다음은 실시예 또는 종래 기술을 설명하기 위해 요구되는 첨부 도면을 간단히 설명한다. 명백하게, 다음의 설명에서 첨부 도면은 단지 본 발명의 일부 실시예를 도시하는 것에 불과하고, 당업자는 창조적인 노력없이 이들 첨부 도면으로부터 다른 도면을 여전히 도출할 수 있다.
도 1은 본 발명의 일 실시예가 적용되는 단말 디바이스의 개략적인 구조도이다.
도 2은 본 발명의 일 실시예에 따른 디코딩 방법의 예시적인 도면이다.
도 3은 본 발명의 일 실시예에 따른 디코딩 방법에서의 사전 인덱싱된 정보 획득 프로세스의 개략도이다.
도 4는 본 발명의 일 실시예에 따른 병렬 디코딩 방법의 개략적인 흐름도이다.
도 5a는 본 발명의 일 실시예에 따른 컴퓨터 시스템의 개략적인 구조도이다.
도 5b는 도 5a에 제공된 컴퓨터 시스템에서의 2D 엔진의 개략적인 구조도이다.
도 6a 및 도 6b는 본 발명의 일 실시예에 따른 병렬 디코딩 방법의 동작 시퀀스를 나타낸다.
도 7a 내지 도 7c은 본 발명의 일 실시예에 따른 디코딩 장치의 개략적인 구조도이다.
도 1은 본 발명의 일 실시예가 적용되는 단말 디바이스의 개략적인 구조도이다.
도 2은 본 발명의 일 실시예에 따른 디코딩 방법의 예시적인 도면이다.
도 3은 본 발명의 일 실시예에 따른 디코딩 방법에서의 사전 인덱싱된 정보 획득 프로세스의 개략도이다.
도 4는 본 발명의 일 실시예에 따른 병렬 디코딩 방법의 개략적인 흐름도이다.
도 5a는 본 발명의 일 실시예에 따른 컴퓨터 시스템의 개략적인 구조도이다.
도 5b는 도 5a에 제공된 컴퓨터 시스템에서의 2D 엔진의 개략적인 구조도이다.
도 6a 및 도 6b는 본 발명의 일 실시예에 따른 병렬 디코딩 방법의 동작 시퀀스를 나타낸다.
도 7a 내지 도 7c은 본 발명의 일 실시예에 따른 디코딩 장치의 개략적인 구조도이다.
다음은 본 발명의 실시예의 첨부 도면을 참조하여 본 발명의 실시예의 기술적 해결책을 간단히 설명하고 있다. 명백하게, 설명된 실시예는 일부 실시예에 불과할 뿐이며, 본 발명의 실시예의 모두인 것은 아니다. 창의적인 노력없이 본 발명의 실시예에 기초하여 당업자에 의해 획득되는 다른 모든 실시예는 본 발명의 보호 범위 내에 속하게 된다.
본 발명의 실시예에 제공되는 디코딩 방법은 주로 단말 디바이스에 제공되며, 단말 디바이스는 또한 사용자 장비(User Equipment, UE), 모바일 스테이션(Mobile Station, MS), 모바일 단말(Mobile terminal) 등으로 지칭될 수 있다. 선택적으로, 단말은 무선 액세스 네트워크(Radio Access Network, RAN)를 사용하여 하나 이상의 코어 네트워크와 통신하는 능력을 가질 수 있다. 예를 들어, 단말은 모바일 폰(또는 "셀룰러(cellular)" 폰이라 지칭됨) 또는 이동성 속성 등을 갖는 컴퓨터일 수 있다. 예를 들어, 단말은 또한 휴대용, 포켓 크기, 핸드 헬드, 컴퓨터 내장형 또는 차량 내 모바일 장치일 수 있다. 단말 디바이스 이외에, 본 발명의 실시예에 제공된 디코딩 방법은 다른 유형의 컴퓨터 시스템에도 적용될 수 있음을 이해해야 한다.
컴퓨터의 병렬 컴퓨팅 기능이 본 발명의 실시예에 제공된 디코딩 방법에 사용된다.
본 발명의 실시예에서, 컴퓨터의 병렬 컴퓨팅 기능을 이용함으로써, 가변 길이 코딩된 파일의 병렬 디코딩이 소프트웨어 레벨로 구현되고, 파일의 디코딩 속도가 개선된다. 아래의 실시예는 컴퓨터의 운영 체제 계층이 파일을 병렬로 디코딩하는 능력을 제공함을 구체적으로 설명한다. 또한, 선택적으로, 운영 체제 계층은 애플리케이션 계층에 대한 병렬 디코딩 기능을 제공하여, 애플리케이션 계층 내의 애플리케이션(예를 들어, 그래픽 라이브러리)의 파일을 디코딩하는 속도를 개선하고, 애플리케이션에 대한 사용자 경험을 개선할 수 있다.
도 1을 참조하면, 도 1은 본 발명의 일 실시예가 적용되는 단말 디바이스의 개략적인 구조도이다. 도 1에 도시된 바와 같이, 단말 디바이스(100)는 메모리(180), 프로세서(150) 및 디스플레이 디바이스(140)를 포함한다. 메모리(180)는 컴퓨터 프로그램을 저장하고, 컴퓨터 프로그램은 운영 체제 프로그램(182), 애플리케이션 프로그램(181) 등을 포함한다. 프로세서(150)는 메모리(180) 내의 컴퓨터 프로그램을 판독하고, 그 후 그 컴퓨터 프로그램에 의해 정의된 방법을 실행하도록 구성된다. 예를 들어, 프로세서(150)는 단말 디바이스 상에서 운영 체제 프로그램(182)을 판독하여, 운영 체제를 실행하고 운영 체제의 다양한 기능을 구현하거나, 단말 디바이스 상에서 하나 이상의 애플리케이션 프로그램(181)을 판독하여, 애플리케이션을 실행한다.
프로세서(150)는 하나 이상의 프로세서를 포함할 수 있으며, 예를 들어, 프로세서(150)는 하나 이상의 중앙 프로세싱 유닛을 포함할 수 있거나, 하나의 중앙 프로세싱 유닛 및 하나의 그래픽 프로세서를 포함할 수 있다. 프로세서(150)가 다수의 프로세서를 포함하는 경우, 다수의 프로세서는 동일한 칩에 통합되거나, 각각이 독립적인 칩일 수 있다. 하나의 프로세서는 하나 이상의 프로세싱 코어를 포함할 수 있다. 이하의 모든 실시예는 멀티 코어를 예로 들어 설명하지만, 본 발명의 이 실시예에 제공되는 병렬 디코딩 방법은 또한 단일 코어 프로세서에도 적용될 수 있다. 병렬 디코딩은 단일 코어 프로세서의 시분할 동작 원리를 사용하여 수행되며, 병렬 디코딩을 수행하는 스레드의 수량은 단일 코어 프로세서의 현재 로드에 따라 결정될 수 있다.
또한, 메모리(180)는 컴퓨터 프로그램 외에 다른 데이터(183)를 추가로 저장하고, 다른 데이터(183)는 운영 체제(182) 또는 애플리케이션 프로그램(181)이 실행된 후에 생성된 데이터를 포함할 수 있다. 이 데이터는 시스템 데이터(예를 들어, 운영 체제의 구성 파라미터) 및 사용자 데이터를 포함한다. 예를 들어, 사용자가 촬영한 이미지는 전형적인 사용자 데이터이며, 본 발명의 이 실시예에 제공되는 방법에서의 디코딩 객체이기도 하다.
메모리(180)는 일반적으로 내부 메모리 및 외부 메모리를 포함한다. 내부 메모리는 RAM(Random Access Memory), ROM(Read-Only Memory), 캐시(cache) 등일 수 있다. 외부 메모리는 하드 디스크, 광 디스크, USB 플래시 드라이브, 플로피 디스크, 테이프 드라이브 등일 수 있다. 컴퓨터 프로그램은 일반적으로 외부 메모리에 저장되며, 프로세싱을 수행하기 전에, 프로세서는 외부 메모리로부터 내부 메모리로 컴퓨터 프로그램을 로딩한다. 본 발명의 실시예에서 디코딩될 파일은 일반적으로 외부 메모리에 저장되고, 파일을 디코딩하기 전에 프로세서는 외부 메모리로부터 내부 메모리로 파일을 로딩한다.
운영 체제 프로그램(182)은 본 발명의 이 실시예에 제공되는 병렬 디코딩 방법을 구현할 수 있는 컴퓨터 프로그램을 포함하며, 그에 따라, 프로세서(150)가 운영 체제 프로그램(182)을 판독하여 운영 체제를 실행한 후에, 운영 체제는 본 발명의 이 실시예에 따른 병렬 디코딩 기능을 가질 수 있다. 또한, 운영 체제는 병렬 디코딩 기능의 호출 인터페이스를 상위 계층 애플리케이션에 개방할 수 있다. 프로세서(150)가 메모리(180)로부터 애플리케이션 프로그램(181)을 판독하고, 애플리케이션, 예를 들어, 그래픽 라이브러리 애플리케이션을 실행한 후에, 애플리케이션은, 호출 인터페이스를 사용함으로써, 운영 체제에 제공된 병렬 디코딩 기능을 호출하여 파일에 대한 병렬 디코딩을 구현할 수 있다.
단말 디바이스(100)는 입력되는 디지털 정보 또는 문자 정보, 또는 접촉 터치 동작/비접촉 제스처를 수신하고; 단말 디바이스(100)의 사용자 설정 및 기능 제어와 관련된 신호 입력을 생성하도록 구성된 입력 디바이스(130)를 포함할 수 있다. 구체적으로, 본 발명의 이 실시예에서, 입력 디바이스(130)는 터치 패널(131)을 포함할 수 있다. 터치스크린으로도 지칭되는 터치 패널(131)은 터치 패널(131) 상에서 또는 그 부근에서 사용자의 터치 동작(예를 들어, 손가락 또는 스타일러스와 같은 임의의 적절한 객체 또는 액세서리를 사용하여 터치 패널(131)상에서 또는 그 부근에서 사용자에 의해 수행된 동작)을 수집할 수 있고, 사전설정된 프로그램에 따라 대응 연결 장치를 구동할 수 있다. 선택적으로, 터치 패널(131)은 두 개의 부분, 즉 터치 검출 장치 및 터치 제어기를 포함할 수 있다. 터치 검출 장치는 사용자의 터치 방향을 검출하고, 터치 동작에 의한 신호를 검출하고, 이 신호를 터치 제어기에 전송한다. 터치 제어기는 터치 검출 장치로부터 터치 정보를 수신하고, 이 터치 정보를 터치 포인트 좌표로 변환하고, 그 후 이 터치 포인트 좌표를 프로세서(150)로 전송한다. 터치 제어기는 프로세서(150)에 의해 전송된 커맨드를 더 수신하여 실행할 수 있다. 예를 들어, 사용자가 터치 패널(131) 상의 이미지를 손가락으로 태핑(tap)하면, 터치 검출 장치는 태핑에 의한 신호를 검출하고, 그 후 이 신호를 터치 제어기에 전송한다. 그 후, 터치 제어기는 이 신호를 좌표로 변환하고, 이 좌표를 프로세서(150)로 전송하며; 프로세서(150)는 좌표 및 신호 유형(탭 또는 더블 탭)에 따라 이미지에 대한 디코딩과 같은 동작을 수행하고, 최종적으로 이 이미지를 디스플레이 패널(141) 상에 디스플레이하여 이미지를 "연다".
터치 패널(131)은 저항성, 용량성, 적외선 및 탄성 표면파와 같은 여러 유형으로 구현될 수 있다. 터치 패널(131) 이외에, 입력 디바이스(130)는 또 다른 입력 디바이스(132)를 더 포함할 수 있다. 다른 입력 디바이스(132)는 물리적 키보드, 기능 키(예를 들어, 볼륨 제어 키 또는 온/오프 키), 트랙볼, 마우스, 조이스틱 등 중 하나 이상을 포함할 수 있지만, 이에 제한되지는 않는다.
단말 디바이스(100)는 디스플레이 디바이스(140)를 더 포함할 수 있다. 디스플레이 디바이스(140)는 사용자에 의해 입력되는 정보, 사용자에게 제공되는 정보, 단말 디바이스(100)의 다양한 메뉴 인터페이스 등을 디스플레이하도록 구성되는 디스플레이 패널(141)을 포함한다. 본 발명의 이 실시예에서, 디스플레이 디바이스(140)는 주로 디코딩된 이미지 또는 다른 유형의 파일을 디스플레이하도록 구성된다. 디스플레이 디바이스(140)는 디스플레이 패널(141)을 포함할 수 있으며, 선택적으로, 디스플레이 패널(141)은 LCD(Liquid Crystal Display), OLED(Organic Light-Emitting Diode) 등의 형태로 구성될 수 있다. 다른 일부 실시예에서, 터치 패널(131)은 터치 디스플레이 스크린을 형성하도록 디스플레이 패널(141)을 덮을 수 있다.
또한, 단말 디바이스(100)는 다른 모듈에 전원을 공급하도록 구성되는 전원 공급부(190)와 이미지 또는 비디오를 촬영하도록 구성되는 카메라(160)를 더 포함할 수 있다. 단말 디바이스(100)는 가속도 센서 또는 광 센서와 같은 하나 이상의 센서(120)를 더 포함할 수 있다. 단말 디바이스(100)는 네트워크를 이용하여 무선 네트워크 디바이스와 통신하도록 구성된 무선 주파수(Radio Frequency, RF) 회로(110)를 더 포함할 수 있거나, WiFi를 이용하여 다른 디바이스와 통신하도록 구성된 WiFi 모듈(170)을 더 포함할 수 있다.
다음의 실시예는 JPEG 이미지의 디코딩을 예로 사용하여 본 발명의 실시예에 제공되는 디코딩 방법을 설명한다. 본 발명의 이 실시예에 제공되는 디코딩 방법은 도 1에 도시된 운영 체제 프로그램(182)에서 구현될 수 있다. 본 발명의 이 실시예에 제공되는 방법은 JPEG 이미지의 디코딩에 제한되지 않는다는 것을 이해해야 한다.
도 2를 참조하면, 도 2은 본 발명의 일 실시예에 따른 디코딩 방법의 예시적인 도면이다. JPEG 표준에서, 병렬 프로세싱에 가장 큰 장애물은 허프만(Huffman) 엔트로피 디코딩이다. 허프만 엔트로피 디코딩은 적어도 전체 시간의 절반을 차지한다. 각각의 최소 코딩된 단위(Minimum Coded Unit, MCU)가 가변 길이 엔트로피 코딩에 의해 획득되므로, 각 MCU의 시작 위치는 디코딩 전에는 인식될 수 없고, 병렬 디코딩이 구현될 수 없다. 디코딩될 이미지에 100 개의 MCU(1 내지 100의 번호가 매겨짐)가 존재한다고 가정하면, 본 발명의 실시예에 제공되는 병렬 디코딩 솔루션이 사용되기 전에, 최초의 허프만 엔트로피 디코딩 절차는 100 개의 MCU에 대해 단일 스레드 직렬 디코딩을 수행하는 것이다. JPEG 병렬 디코딩 솔루션의 주된 개념은 디코딩될 이미지를 다수의 데이터 세그먼트로 분할하고, 사전 인덱싱된 정보를 기록함으로써 각 데이터 세그먼트의 시작 포인트에 대한 정보를 저장하는 것이다.
구체적으로, 본 발명의 이 실시예에 제공되는 솔루션에서, 디코딩될 이미지에 대해 허프만(Huffman) 직렬 디코딩이 미리 한번 수행되고, 직렬 디코딩에 의해 획득된 사전 인덱싱된 정보가 추출되어 기록된다. 사전 인덱싱된 정보는 도 2의 예에서 4 개의 데이터 세그먼트의 시작 위치 정보이고, 4 개의 데이터 세그먼트는 각각 1 내지 25, 26 내지 50, 51 내지 75 및 76 내지 100의 번호를 갖는 MCU의 세트이고, 4 개의 데이터 세그먼트의 시작 위치 정보는 각각 그 번호가 1, 26, 51 및 76인 MCU의 위치 정보이다. 일반적으로, MCU의 위치 정보는 MCU와 관련되고 이미지에 대응하는 파일 스트림 내에 있는 오프셋 위치 정보에 의해 표현되며, 오프셋 위치 정보는 파일의 제 1 바이트에 대한 MCU의 오프셋일 수 있거나 또는 파일의 제 1 MCU에 대한 MCU의 오프셋일 수 있다. 4 개의 MCU의 오프셋 위치 정보가 획득된 후, 스레드 1 내지 스레드 4는 각각 4 개의 MCU의 위치로부터 4 개의 데이터 세그먼트에 대한 디코딩을 병렬로 수행하는 것을 시작하여 이미지를 디코딩하는 속도를 개선시킬 수 있다.
다음은 보다 상세한 방법 프로세스를 사용하여 본 발명의 실시예에 제공되는 디코딩 방법을 설명한다.
도 3을 참조하면, 도 3은 본 발명의 일 실시예에 따른 디코딩 방법에서의 사전 인덱싱된 정보 획득 프로세스의 개략도이다.
단계(201): 이미지가 처음 열린다고 검출되면, 예를 들어, 사용자가 이미지를 태핑(tap)한다는 것이 검출되면, 이미지의 사전 프로세싱(preprocessing)을 시작한다. 본 발명의 이 실시예에서 언급되는 "사전 프로세싱"은 사전 인덱싱된 정보를 추출하는 프로세스를 지칭한다.
다른 일부 실시예에서, 사전 프로세싱 단계를 시작하는 때는 이미지가 새로 추가되거나 이미지가 수정되는 시점일 수도 있다. 구체적으로, 운영 체제는 이미지가 새로 추가되거나 수정된 것을 검출한다. 예를 들어 안드로이드 시스템의 미디어 제공자 메커니즘은 검출 기능을 제공한다. 예를 들어, 이미지가 새로 추가되는 경우는, 로컬 카메라로 촬영하여 이미지를 획득하는 것과, 네트워크로부터 로컬 머신으로 이미지를 다운로드하는 것, 다른 단말 디바이스로부터 로컬 머신으로 이미지를 복사하는 것 또는 로컬 이미지를 편집하고 편집된 이미지를 새로운 이미지로서 저장하는 것을 포함한다. 이미지가 업데이트되는 경우는 이미지를 다른 이미지로서 저장하지 않고 이미지 컨텐츠가 수정되는 경우를 포함한다. 두 경우의 사전 프로세싱은 직렬 허프만 엔트로피 디코딩만을 포함할 수 있다.
다른 일부 실시예에서, 사전 프로세싱은 또한 운영 체제에 의해 자율적으로 시작될 수 있다. 예를 들어, 새로 추가된 이미지의 수량이 10 개에 도달할 때마다, 운영 체제는 새로 추가된 10 개의 이미지에 대해 직렬 허프만 엔트로피 디코딩을 자율적으로 수행하여, 사전 인덱싱된 정보를 추출한다.
단계(202): 이미지가 이미 사전 인덱싱된 정보를 갖는지 여부를 결정한다. 본 발명의 이 실시예에서, 사전 인덱싱된 정보는 이미지에 대응하는 파일 시스템의 확장된 속성에 저장되고, 파일 시스템의 확장된 속성은 이미지에 대응하는 메타데이터 파일을 포함한다. 다른 일부 실시예에서, 사전 인덱싱된 정보는 다른 유형의 파일 또는 이미지의 종단에 저장될 수도 있다.
사전 인덱싱된 정보가 이미지에 대응하는 메타데이터 파일로부터 판독될 수 있으면, 단계(203)가 수행된다. 단계(203)는 사전 프로세싱이 종료되고, 병렬 디코딩 단계가 시작됨을 의미한다. 사전 인덱싱된 정보가 이미지에 대응하는 메타데이터로부터 획득될 수 없거나 또는 획득된 사전 인덱싱된 정보가 비어 있다면, 단계(204)가 수행된다.
다른 일부 실시예에서, 결정 단계, 즉, 단계(202)는 기본적으로 모든 이미지가 처음 열릴 경우 사전 인덱싱된 정보는 존재하지 않는다.
단계(204): 이미지의 최초 디코딩 프로세스를 시작한다. 현재 디코딩될 이미지가 사전 인덱싱된 정보를 갖지 않으면, 이미지의 직렬 디코딩, 역 이산 코사인 변환, 컬러 변환과 같은 최초 디코딩 프로세스가 정상적으로 시작되고 수행된다.
단계(205): 이미지의 크기가 사전설정된 임계치보다 작은 지 여부를 결정한다. 이미지의 크기가 사전설정된 임계치보다 작으면, 사전 프로세싱이 종료된다. 즉, 사전 인덱싱된 정보가 더 이상 획득되지 않는다. 그러나, 사용자의 열림 커맨드에 의해, 이미지가 디스플레이 스크린 상에서 열려 디스플레이될 필요가 여전히 있기 때문에, 이미지의 최초 디코딩 프로세스는 여전히 지속될 필요가 있다. 이미지의 크기가 사전설정된 임계치보다 크거나 같으면, 단계(206)를 지속적으로 수행한다.
단계(205)의 주요 고려 사항은, 과도하게 작은 이미지에 대해 병렬 디코딩을 수행하는 것에 의해서는 큰 이점을 얻을 수 없으며, 사전 인덱싱된 정보를 획득하는 것이 불필요하다는 것이다. 이는 저장 공간을 효과적으로 절감할 수 있다. 다른 일부 실시예에서, 이미지의 크기를 결정하는 단계 및 이미지의 최초 디코딩 프로세스를 시작하는 단계는 순서가 상호 변경 가능하게 수행될 수 있다.
단계(206): 사전 인덱싱된 정보를 추출한다.
허프만 코딩에 의해 이미지가 획득되면, 단계(204) 후에, 이미지에 대하여 허프만 직렬 디코딩이 수행된다. 허프만 직렬 디코딩이 수행된 후, 모든 MCU 블록의 오프셋 위치 정보가 생성되고, 본 발명의 이 실시예에 제공된 방법에서 사용된 사전 인덱싱된 정보는 하나 이상의 MCU 블록의 오프셋 위치 정보를 포함한다. 또한, 이미지에 대해 차분 코딩이 수행되면(차분 코딩이 수행된 후, 허프만 코딩이 더 수행되면), 사전 인덱싱된 정보가 추가적으로, 하나 이상의 MCU 블록에 각각 대응하는 이전의 MCU 블록의 DC(Direct Current) 변수 값을 포함하여, DC 변수 값을 사용함으로써 허프만 디코딩 결과를 정정할 필요가 있다.
구체적으로, 허프만 직렬 디코딩 방식에서, 이미지 내의 모든 MCU에 대해 순차적으로 직렬 프로세싱이 수행되고, 프로세싱이 완료된 후 또는 이 프로세싱 프로세스에서, N 개의 MCU 블록의 오프셋 위치 정보가 특정 간격에 따라 추출된다. 예를 들어, 현재 모바일 단말은 일반적으로 4 개의 코어를 갖기 때문에, 일반적으로 병렬 디코딩을 수행하도록 4 개의 스레드만이 동시에 시작될 수 있다. 이 경우에, 디코딩될 이미지는 4 개의 데이터 세그먼트로 분할될 필요가 있고, N = 4 개의 MCU 블록의 오프셋 위치 정보가 추출될 필요가 있다(이해를 돕기 위해, 도 1이 참조된다). 이 실시예에서, 디코딩 경계는 이미지의 제 1 MCU 블록을 포함하고, 다른 일부 실시예에서, 디코딩 경계가 이미지의 제 1 MCU 블록을 포함하지 않을 수 있다.
다수의 스레드가 하나의 스레드를 위해 대기하는 현상을 피하기 위해, 병렬로 디코딩될 다수의 데이터 세그먼트가 분할되면, 다수의 데이터 세그먼트의 데이터 수량이 동일하도록 보장하여 다수의 스레드가 거의 동시에 디코딩을 완료할 수 있도록 하는 것이 최선이다. 특히, 구현예에서, 이미지 높이의 1/N은 N 개의 MCU 블록의 오프셋 위치 정보를 얻기 위한 간격으로서 사용되며, 이러한 방식에서, 각각의 MCU 블록은 동일한 수량의 데이터를 갖는 것으로 가정되거나, 또는 다른 구현예에서, 이미지 길이의 1/N(이미지에 대응하는 파일 스트림의 전체 오프셋)은 N 개의 MCU 블록의 오프셋 위치 정보를 얻기 위한 간격으로서 사용되며, 이러한 방식에서, N 개의 MCU의 획득된 오프셋의 합이 전체 이미지의 오프셋이 된다.
단계(207): 추출된 사전 인덱싱된 정보를 저장한다. 상기 저장 단계는 다수의 MCU의 오프셋 위치 정보의 추출이 완료된 후 수행될 수 있거나, 또는 하나의 MCU의 오프셋 위치 정보가 추출될 때, 상기 저장 단계는 한번 수행될 수 있다.
단계(202)는 사전 인덱싱된 정보가 이미지의 메타데이터 파일에 저장될 수 있음을 나타낸다. 다른 일부 실시예에서, 사전 인덱싱된 정보는 또한 이미지의 종단, 이미지와 연관된 데이터베이스 파일, 또는 이미지와 동일한 디렉토리에 속하고 이미지와 동일한 파일 이름과 이미지의 확장자와는 상이한 확장자를 갖는 파일에 삽입될 수 있다. 다른 일부 실시예에서, 사전 인덱싱된 정보의 무결성을 보장하기 위해, 사전 인덱싱된 정보가 저장되기 전에 무결성 검증을 위한 필드가 사전 인덱싱된 정보에 더 부가될 수 있다.
전술한 모든 저장 방식은 영구 저장 방식이며, 예를 들어, 사전 인덱싱된 정보가 파일의 형태로 외부 메모리(예를 들어, 하드 디스크)에 저장된다는 것에 주목해야 한다. 이는 정전이 발생할 때 사전 인덱싱된 정보가 손실되지 않도록 보장할 수 있다. 그러나, 다른 일부 실시예에서, 사전 인덱싱된 정보가 손실될 수 있는 경우, 사전 인덱싱된 정보에 대해 영구 저장을 강제적으로 수행할 필요는 없다.
전술한 저장 방법을 사용하면, 사전 인덱싱된 정보가 이미지의 헤더에 삽입될 때, 전체 이미지를 복제하는 프로세스가 방지되므로, I/O 동작을 효과적으로 줄일 수 있다는 것을 알 수 있다. 특히, 시스템이 다수의 이미지를 저장하거나 단일 이미지가 상대적으로 큰 경우, 본 발명의 이 실시예의 방법을 사용하면 다수의 I/O 동작이 감소되므로, 시스템의 프레임 정지 현상 또는 표면적인 데드 현상이 어느 정도 회피된다. 또한, 이미지의 최초 디코딩 프로세스와 함께 최초로 이미지를 여는 프로세스에서, 사전 인덱싱된 정보가 다음 사용을 위해 추출되고 저장된다. 이는 사전 인덱싱된 정보의 추출로 인한 과도한 추가 전력 소비의 증가를 회피할 수 있다.
단계(206 및 207)는 최초 디코딩 프로세스가 완료된 후에 수행될 수 있거나, 단계(204)와 함께, 즉, 이미지의 최초 디코딩 프로세스와 함께 수행될 수 있음을 주목해야 한다. 구체적으로, 이미지에 대해 허프만 직렬 디코딩을 수행하는 프로세스에서, 디코딩된 MCU 블록의 증가에 따라, MCU 블록의 오프셋 위치 정보가 사전설정된 간격에 따라 추출되어 저장된다.
전술한 실시예는 사전 인덱스를 추출하는 프로세스를 대략적으로 설명한 것이며, 아래에서는 일례로 차분 코딩 및 허프만 코딩에 의해 획득된 이미지를 이용하여 사전 인덱싱된 정보의 구성과 사전 인덱싱된 정보를 추출하는 특정 방식을 설명한다.
이미지가 차분 코딩에 의해 획득되면, 사전 인덱싱된 정보는 적어도 MCU 블록의 오프셋 위치 정보 및 MCU 블록의 이전 MCU 블록의 DC 변수 값을 포함할 필요가 있다. 실제 디코딩 프로세스에서, 저장될 필요가 있는 다른 일부 정보가 추가로 포함될 수 있다. 이는 본 발명의 실시예와 관련이 적기 때문에 세부 설명은 생략한다.
현재, 리눅스(Linux) 시스템의 JPEG 디코딩 라이브러리(libjpeg)는 이미 직렬 디코딩 및 영역 디코딩의 기능을 제공하며, 이미지 내의 모든 MCU 블록의 인덱스 정보는 직렬 디코딩 또는 영역 디코딩을 통해 추출될 수 있다. 비교해 보면, 인덱스 정보는 본 발명의 이 실시예에서 요구되는 사전 인덱싱된 정보를 포함하므로, 인덱스 정보에 의해 정의되는 데이터 구조 "Huffman_offset_data"는 사전 인덱싱 솔루션에서 사용되는 데이터 구조로서 사용될 수 있다는 것을 알 수 있다. 데이터 구조 "Huffman_offset_data"의 파라미터 및 의미는 표 1에 도시되고, 이 표의 "데이터 블록"은 본 발명의 이 실시예에서의 MCU 블록을 지칭한다.
모든 MCU 블록의 인덱스 정보는 JPEG 디코딩 라이브러리에 의해 제공되는 기능을 사용하여 획득되며, 각 MCU 블록의 인덱스 정보는 상기 데이터 구조의 형태로 저장되며, 상기 데이터 구조에 포함된 파라미터는 실제 요구 사항에 따라 결정될 수 있다. 모든 인덱스 정보는 2 차원 어레이 [X, Y]의 형태로 존재할 수 있으며, 여기서 X는 이미지 내의 MCU 블록의 행 번호를 나타내고, Y는 한 행에서의 MCU 블록의 특정 위치를 나타낸다. 그런 다음, 필요에 따라 적절한 양의 MCU 블록의 인덱스 정보를 2 차원 어레이로부터 선택하여 병렬 디코딩에 필요한 사전 인덱싱된 정보를 형성하고 사전 인덱싱된 정보에 대해 영구 저장을 수행한다. 구체적으로, 구현예에서, 어레이의 총 행의 1/N은 사전 인덱싱된 정보 중 N 개의 조각을 선택하기 위한 간격으로서 사용되어 영구 저장을 수행한다.
도 4를 참조하면, 도 4는 본 발명의 일 실시예에 따른 병렬 디코딩 방법의 개략적인 흐름도이다. 상술한 방법을 사용하여 이미지의 사전 인덱싱된 정보를 추출하여 저장한 후, 본 발명의 이 실시예에 제공되는 병렬 디코딩 방법은 이미지를 추가로 디코딩할 필요가 있을 때(사용자가 다시 이미지를 열 때) 사용될 수 있다.
단계(301): 디코딩될 이미지가 사전 인덱싱된 정보를 갖는지 여부를 결정한다. 디코딩될 이미지가 사전 인덱싱된 정보를 갖지 않으면, 최초 디코딩 절차(302)가 수행된다. 본 발명의 이 실시예에서, 최초 디코딩 절차는 직렬 디코딩 절차이다. 디코딩될 이미지가 사전 인덱싱된 정보를 갖는다면, 단계(303)가 수행된다.
단계(303): 사전 인덱싱된 정보를 판독한다. 본 발명의 이 실시예에서, 판독된 사전 인덱싱된 정보는 N 개의 디코딩 경계에 관한 정보를 포함한다. N 개의 디코딩 경계에 관한 정보는 디코딩될 이미지 내에 있고, 병렬로 프로세싱될 수 있는 N 개의 데이터 세그먼트에 대응한다.
다른 일부 실시예에서, 디코딩될 이미지의 제 1 MCU 블록으로부터 디코딩을 시작하는 스레드가 항상 존재하기 때문에, 디코딩될 이미지의 제 1 MCU 블록의 오프셋 위치 정보는 기록되지 않을 수 있다. 즉, (N-1) 개의 디코딩 경계에 관한 정보만을 기록함으로써, 병렬 프로세싱이 수행될 때 N 개의 데이터 세그먼트가 획득될 수 있다.
사전 인덱싱된 정보를 판독하는 방식은 사전 인덱싱된 정보의 저장 위치와 관련이 있다. 전술한 실시예는 가능한 저장 위치를 기술하며, 대응하는 판독 방식은 종래 기술에 속한다. 따라서, 본 발명의 이 실시예에서는 세부 설명이 생략된다.
단계(301) 및 단계(303)는 하나의 단계로 결합될 수 있음을 주목해야 한다. 즉, 디코딩될 이미지가 사전 인덱싱된 정보를 갖는지의 여부는 사전 인덱싱된 정보를 판독함으로써 결정된다. 사전 인덱싱된 정보가 판독될 수 있으면, 단계(304)가 바로 수행된다. 사전 인덱싱된 정보가 판독될 수 없거나 판독 결과가 비어 있다면, 단계(302)가 수행된다.
다른 일부 실시예에서, 사전 인덱싱된 정보가 판독되기 전에, 디코딩될 이미지의 크기를 결정하는 단계가 더 포함될 수 있다. 디코딩될 이미지의 크기가 사전설정된 임계치보다 작은 경우, 최초 디코딩 절차가 수행된다. 그렇지 않으면, 사전 인덱싱된 정보가 판독된 후, 병렬 디코딩 절차가 수행되거나, 사전 인덱싱된 정보가 판독될 수 없는 경우, 최초 디코딩 절차가 수행된다. 디코딩될 이미지의 크기에 관한 정보는 이미지의 헤더에 저장되고, 이미지의 크기에 관한 정보는 특히 SOF(Start of Frame) 마커인 이미지의 헤더를 파싱함으로써 획득될 수 있다.
단계(304): 판독된 사전 인덱싱된 정보의 무결성을 검증한다. 본 발명의 이 실시예에서, 안전한 해쉬 알고리즘(Secure Hash Algorithm, SHA)은 사전 인덱싱된 정보의 무결성을 검증하는 데 사용된다. 검증에 실패하면, 이는 사전 인덱싱된 정보가 손실되거나 수정되었음을 나타낸다. 이 경우, 이미지 디코딩의 정확성을 보장하기 위해, 단계(305)에서 최초 디코딩 절차가 수행된다. 검증에 성공하면, 단계(306)가 수행된다.
다른 일부 실시예에서, 사전 인덱싱된 정보에 대해 무결성 검사를 수행하기 위해 메시지 다이제스트 알고리즘 5(또는 MD5 알고리즘으로 지칭됨)가 더 사용될 수 있거나 다른 유형의 무결성 검사 알고리즘이 사용된다.
다른 일부 실시예에서, 단계(304)는 수행되지 않을 수 있다. 즉, 사전 인덱싱된 모든 정보는 디폴트로 완료된다. 대안으로, 사전 인덱싱된 정보가 저장되기 전에, 사전 인덱싱된 정보가 변경되지 않도록 보장하기 위해 암호화와 같은 수단이 사용될 수 있으며, 사전 인덱싱된 정보는 단지 사용되기 전에 해독될 필요가 있다. 무결성 검증을 수행하기 위해, 사전 인덱싱된 정보가 추출된 후 그리고 사전 인덱싱된 정보가 저장되기 전에 여분의 검증 필드가 사전 인덱싱된 정보에 추가될 필요가 있음에 주목해야 한다. 이는 기존의 무결성 검증 기술에 속하며, 본 발명의 이 실시예에서는 세부 설명이 생략된다.
단계(306): 현재 이용 가능한 (유휴) CPU 코어의 수량 Q를 구하고, 동시에 시작할 수 있는 스레드의 수량 M을 결정하는데, 여기서 M=min(N, Q)이다. N이 Q보다 작거나 같으면, M = N이고 각 스레드는 하나의 데이터 세그먼트를 프로세싱한다. N이 Q보다 큰 경우, M = Q이고, 최종 스레드를 제외한 각 스레드는 N/Q(반올림) 개의 데이터 세그먼트를 프로세싱하고, 최종 스레드는 나머지 부분을 프로세싱한다.
단계(307): 디코딩될 데이터를 준비한다. 디코딩될 이미지에 대응하는 파일 스트림이 복제된다. 여기서, 파일 스트림을 복제하는 것은 전체 파일 스트림을 복제하는 대신에 파일 스트림의 포인터만을 복제하는 것임에 주목해야 한다. 선택적으로, 리눅스(Linux) 시스템에서 JPEG 디코딩 라이브러리를 사용하여 솔루션을 구현할 경우, 병렬 디코딩을 수행하는 스레드의 수량과 동일한 수량을 갖는 디코딩 구조가 추가로 생성될 필요가 있다. 디코딩 구조는 디코딩 동작을 위해 JPEG 디코딩 라이브러리에 의해 설계된 구조이며, 양자화 테이블 및 컬러 채널과 같은 사전 선언된 변수를 포함한다. 이는 스레드에 해당하는 디코딩 구조가 서로 간에 변수를 공유하지 않도록 보장하여, 동일한 변수가 멀티스레드 프로세스에서 반복적으로 변경되지 않도록 한다.
디코딩될 데이터를 준비하면, 각 스레드가 자신의 파일 스트림 포인터 및 디코딩 구조를 갖도록 보장할 수 있다. 이는 스레드가 파일 스트림의 데이터 또는 디코딩 프로세스의 디코딩 구조를 수정하기 때문에 발생하는 상호 간섭 문제를 회피할 수 있다. 또한, 디코딩 구조의 생성은 메모리 동작이며, I/O에 영향을 미치지 않으며, 파일 스트림을 복제하는 것은 전체 파일 스트림을 복제하는 대신 파일 스트림의 포인터만 복제하는 것이다. 따라서, 병렬 디코딩 효율은 영향을 받지 않는다.
단계(308): 다수의 스레드가 병렬 디코딩을 수행한다. JPEG 이미지가 일 예로서 사용된다. 각 스레드는 인덱스 위치 복원, 허프만 엔트로피 디코딩, 역 이산 코사인 변환(Inverse Discrete Cosine Transform, IDCT) 및 컬러 변환의 단계를 순차적으로 완료하고, 최종적으로 이미지의 부분 영역에 대한 RGB 결과를 출력한다.
모든 스레드는 프로세싱 완료 후 데이터 동기화를 수행한다. 즉, 각 스레드의 프로세싱 결과를 통합한다. 통합이 수행되면, 여분의 데이터 복사 오버헤드가 메모리 포인터 방식으로 회피될 수 있다. 특히, 모든 스레드는, 입력 위치로서, 타겟 메모리의 지정된 위치를 가리키는 포인터의 위치를 사용하고, 모든 스레드의 디코딩 결과는 타겟 메모리의 지정된 위치로 직접 출력된다. 이는, 디코딩 결과가 임시 메모리 공간에 출력되고 타겟 메모리 공간에 더 복사되기 때문에 발생하는 데이터 복사 오버헤드를 회피할 수 있다.
단계(308)를 제외한 전술한 단계는 하나의 주 스레드를 사용함으로써 완료될 수 있고, 단계(308)는 다수의 서브 스레드를 사용함으로써 완료될 수 있다.
전술한 내용은 주로 본 발명의 이 실시예에서 제공되는 방법의 특정 절차를 설명한다. 도 5a, 도 5b, 도 6a 및 도 6b를 참조하면, 다음은 안드로이드(Android) 운영 체제를 일 예로서 사용하여 본 발명의 이 실시예에서 제공되는 방법의 구현 위치 및 런타임 상태를 설명한다. 전술한 방법의 보다 구체적인 절차에 대해서는 전술한 실시예가 참조된다.
도 5a를 참조하면, 도 5a는 본 발명의 일 실시예에 따른 컴퓨터 시스템(400)의 개략적인 구조도이다. 컴퓨터 시스템(400)은 단말 디바이스 또는 다른 유형의 컴퓨터 디바이스일 수 있다. 컴퓨터 시스템은 애플리케이션 계층(410) 및 운영 체제 계층(450)을 포함하고, 운영 체제는 안드로이드 운영 체제일 수 있다. 운영 체제 계층(450)은 프레임워크 계층(420), 커널 라이브러리 계층(430) 및 드라이버 계층(440)으로 더 분할된다. 도 5의 운영 체제 계층(450)은 도 1의 운영 체제(182)의 특정 구현예로 간주될 수 있다. 도 5의 애플리케이션 계층(410)은 도 1의 애플리케이션 프로그램(181)의 특정 구현예로 간주될 수 있다. 드라이버 계층(440)은 CPU 드라이버(441), GPU 드라이버(442), 디스플레이 제어기 드라이버(443) 등을 포함한다. 커널 라이브러리 계층(430)은 운영 체제의 핵심 부분이며, 입/출력 서비스(431), 커널 서비스(432), 그래픽 디바이스 인터페이스(434), CPU 또는 GPU 그래픽 프로세싱을 구현하는 그래픽 엔진(Graphics Engine)(433) 등을 포함한다. 그래픽 엔진(433)은 2D 엔진, 3D 엔진, 신시사이저 (콤포지션), 프레임 버퍼(Frame Buffer), 임베디드 시스템 그래픽 라이브러리(Embedded-System Graphics Library; EGL) 등을 포함할 수 있다. EGL은 렌더링 API와 근본적인 오리지널 플랫폼 윈도우 시스템(underlying original platform window system) 간의 인터페이스이며 API는 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)이다. 프레임워크 계층(420)은 그래픽 서비스(Graphic Service)(424), 시스템 서비스(System service)(421), 웹 서비스(Web Service)(422), 고객 서비스(Customer Service)(423) 등을 포함할 수 있다. 그래픽 서비스(424)는 위젯(Widget), 캔버스(Canvas), 뷰(Views) 등을 포함할 수 있다. 애플리케이션 계층(410)은 그래픽 라이브러리(411), 미디어 플레이어(Media Player)(412), 브라우저(Browser)(413) 등을 포함할 수 있다.
또한, 드라이버 계층(440) 아래에서, 컴퓨터 시스템(400)은 하드웨어 계층(450)을 더 포함한다. 컴퓨터 시스템(400)의 하드웨어 계층은 중앙 프로세싱 유닛(Central Processing Unit, CPU)(451) 및 그래픽 프로세싱 유닛(Graphic Processing Unit, GPU)(452)(도 1의 프로세서(150)의 특정 구현예와 등가임)을 포함할 수 있고; 내부 메모리 및 외부 메모리를 포함하는 메모리(453)(도 1의 메모리(180)와 등가임)를 더 포함할 수 있고; 입력 디바이스(454)(도 1의 입력 디바이스(132)와 등가임), 디스플레이 디바이스(455)(도 1의 디스플레이 디바이스(140)와 등가임), 예를 들어, 액정 디스플레이(Liquid Crystal Display, LCD), 홀로그래픽(Holographic) 디바이스 및 프로젝터(Projector)를 더 포함할 수 있고; 하나 이상의 센서(456)(도 1의 센서(120)와 등가임)를 더 포함할 수 있다. 물론, 또한 하드웨어 계층(450)은 도 1에 도시된 전원 공급부, 카메라, RF 회로 및 WiFi 모듈을 더 포함할 수 있으고, 도 1에 도시되지 않은 또 다른 하드웨어 모듈, 예를 들어, 메모리 제어기 및 디스플레이 제어기를 더 포함할 수 있다.
본 발명의 전술한 실시예 중 어느 하나에서 제공되는 방법은 도 5a에 도시된 2D 엔진으로 구현될 수 있다.
도 5b를 참조하면, 도 5b는 도 5a에 도시된 2D 엔진의 개략적인 구조도이다. 도 5b에 도시된 바와 같이, 2D 엔진(500)은 주로 libskia(501) 및 libjpeg(502)를 포함하고, libskia(501)는 libjpeg(502)에 의해 제공되는 기능을 호출할 수 있고, libjpeg(502)는 전술한 실시예에서 언급된 JPEG 디코딩 라이브러리와 동등하다. 본 발명의 이 실시예에서, libjpeg(502)에 병렬 디코딩 기능이 주로 추가되고, libskia(501)에 의해 libjpeg(502)를 호출하기 위한 인터페이스가 적응적으로 수정된다. 또한, 2D 엔진(500)은 다른 이미지 포맷의 디코딩 라이브러리, 예를 들어, libpng(503) 및 libgif(504)를 더 포함할 수 있다.
도 6a 및 도 6b는 본 발명의 일 실시예에 따른 2D 엔진(500)에서의 병렬 디코딩 방법의 동작 시퀀스를 나타낸다. 도 6a는 사전 인덱싱된 정보를 획득하는 프로세스를 도시하고, 도 6b는 사전 인덱싱된 정보에 따라 병렬 디코딩을 수행하는 프로세스를 도시한다. 두 개의 동작 시퀀스 도면 모두에서, 사용자가 그래픽 라이브러리(411)(도 5a 참조)에서 이미지의 썸네일을 태핑하는 것이 설명을 위한 예로서 사용된다.
도 6a에 도시된 바와 같이, 사용자가 처음에 이미지의 썸네일을 태핑하면(601a), 그래픽 라이브러리(411)는 libskia(501)에 디코딩 요청을 전송하고(602a), libskia(501)는 이미지의 파일 스트림을 생성하며 파일 스트림을 libjpeg(502)에 전송한다(603a). 사전 인덱싱된 정보를 판독하지 못한 후에(604a), libjpeg(502)는 사전 인덱싱된 정보의 획득 실패를 나타내는 결과를 libskia(501)에 리턴한다. libskia(501)는, 리턴된 결과에 따라, libjpeg(502a)에 의해 제공되는 직렬 디코딩 함수를 호출하고(605a), libjpeg(502)는 전술한 파일 스트림에 대한 직렬 허프만 디코딩과 같은 프로세스를 수행한다(606a). 더 나아가, 이미지의 크기가 사전설정된 임계치보다 크다고 결정되면(607a), libjpeg(502)는 단계(606a)에서의 디코딩 결과에 따라 사전 인덱싱된 정보를 추출하고(608a), 추출된 사전 인덱싱된 정보를 저장한다(609a). 이미지의 디코딩을 완료한 후, libjepg(502)는 libskia(501)를 사용하여 디코딩 결과를 그래픽 라이브러리(411)에 리턴하고(610a), 그 후, 그래픽 라이브러리(411)는 사용자에게 열린 이미지를 디스플레이한다(611a).
본 발명의 이 실시예에서, libjpeg(502)에 의해 직렬 허프만 디코딩이 수행되므로, libjpeg(502)는 디코딩 결과로부터 사전 인덱싱된 정보를 직접 추출할 수 있다. 그러나, 다른 일부 실시예에서, 최초 디코딩 절차에 대한 코드 수정을 최소화하기 위해, 디코딩을 수행한 후에, libjpeg(502)는 디코딩에 의해 얻어지고 모든 MCU 블록과 관련되는 오프셋 위치 정보를 libskia(501)에 전송한다. 그 후, libskia(501)는 모든 MCU 블록의 인덱스 정보를 libjpeg(502)에 전송하고, libjpeg(502)는 그 후, 상기 정보로부터 사전 인덱싱된 정보를 추출한다.
다른 일부 실시예에서, 단계(605a) 및 단계(606a)는 영역 디코딩으로 대체될 수 있다. 영역 디코딩 동안 모든 MCU 블록의 오프셋 위치 정보의 추출은 디코딩 단계 전에 수행되기 때문에, 영역 디코딩 전에 단계(607a) 및 단계(608a)가 수행될 수 있다.
도 6b에 도시된 바와 같이, 사용자가 이미지의 썸네일을 태핑한 후(601b), 그래픽 라이브러리(411)는 디코딩 요청을 libskia(501)에 전송한다(602b). libskia(501)는 이미지의 파일 스트림을 생성하고, 이 파일 스트림을 libjpeg(502)에 전송한다(603b). libjpeg(502)는 사전 인덱싱된 정보를 판독하고(604b), 사전 인덱싱된 정보의 무결성을 검증하고(605b), 그런 다음 검증이 성공적임을 나타내는 결과를 libskia(501)에 리턴한다. libskia(501)는, (M-1)개 파일의 포인터 등을 복제하는 프로세스(M은 동시에 시작되는 스레드의 수량임), 복제가 완료된 후 libjepg(502)를 호출하는 프로세스, 전술한 파일 스트림에 대한 병렬 디코딩을 수행하기 위해 libjpeg에 의해 M개의 스레드를 호출하는 프로세스(608b)를 비롯하여, 디코딩을 위한 사전준비(607b)를 행한다. 이미지의 디코딩을 완료한 후, libjepg(502)는 libskia(501)를 사용하여 디코딩 결과를 그래픽 라이브러리(411)에 리턴하고(609b), 그 후, 그래픽 라이브러리(411)는 사용자에게 열린 이미지를 디스플레이한다(610b). 또한, 구현 프로세스에서, 사전 인덱싱된 정보를 판독하는 것 외에도, libjpeg(502)는 이미지 파일의 기술 정보(예를 들어, 양자화 테이블 및 파일의 크기)를 더 판독한다. 이것은 종래 기술에 속하며 세부 사항은 설명되지 않는다. 그래픽 라이브러리(411)가 2D 엔진에서 libskia(501)를 호출하는 것은 그래픽 디바이스 인터페이스(434)(도 5a 참조) 내의 BitmapFactory 인터페이스를 호출함으로써 구체적으로 구현될 수 있다. 이는 또한 종래 기술에 속하며, 본 발명의 이 실시예에서는 세부 설명이 생략된다.
도 6a 및 도 6b에 제공된 동작 시퀀스 도면은 본 발명에서 제공되는 방법 실시예를 설명하기 위한 예에 불과할 뿐이라는 것에 주목해야 한다. 당업자라면, 본 발명의 전술한 실시예에서 설명된 두 개의 동작 시퀀스 도면의 다수의 방법 및 예로부터, 본 발명에서 제공되는 다른 방법 실시예에 대응하는 동작 시퀀스 도면과 그 동작 시퀀스 도면에 따른 대응하는 프로그램 구현예를 용이하게 도출할 수 있다. 세부 사항은 본 명세서에 기술되지 않는다.
전술한 장치 및 방법으로부터, 본 발명의 이 실시예에 제공된 병렬 디코딩 방법이 적용되는 컴퓨터 시스템은 파일에 대한 병렬 디코딩을 구현할 수 있고, 시스템 프레임 정지 현상을 효과적으로 회피할 수 있어, 사용자 경험을 개선시킬 수 있다는 것을 알 수 있다.
도 7a를 참조하면, 도 7a는 본 발명의 실시예에 따른 디코딩 장치(700)의 개략적인 구조도이다. 디코딩 장치(700)는 디코딩될 파일에 대응하는 사전 인덱싱된 정보를 메모리(800)로부터 판독하도록 구성된 판독 모듈(701)- 사전 인덱싱된 정보는 하나 이상의 디코딩 경계를 나타내는 정보를 포함하고, 사전 인덱싱된 정보는 디코딩될 파일과 관련된 다른 파일 또는 디코딩될 파일의 종단에 저장됨 -과, 사전 인덱싱된 정보에 따라 디코딩될 파일 내의 다수의 데이터 세그먼트에 대해 병렬 디코딩을 수행하도록 구성되는 병렬 디코딩 모듈(702)을 포함하고, 다수의 데이터 세그먼트는 하나 이상의 디코딩 경계 중 하나 이상에 따라 분할된다. 메모리(800)는 내부 메모리 및 외부 메모리를 포함하고, 사전 인덱싱된 정보는 일반적으로 외부 메모리에 저장된다.
또한, 도 7b에 도시된 바와 같이, 상기 디코딩 장치(700)는: 디코딩될 파일이 새로 추가, 수정 또는 처음 열리는 것으로 검출되면, 사전 인덱싱된 정보를 추출하도록 구성되는 추출 모듈(703)과; 추출된 사전 인덱싱된 정보를 메모리(800)에 저장하도록 구성된 저장 모듈(704)을 더 포함할 수 있다.
또한, 디코딩 장치(700)는 결정 모듈(705) 및 결정 모듈(706) 중 하나 또는 둘 모두를 더 포함할 수 있고, 두 결정 모듈 모두는 파일의 크기가 사전설정된 임계치보다 큰 것으로 결정하도록 구성된다. 추출 모듈(703)과 판독 모듈(701)은 각각 결정 결과에 따라 대응하는 추출 동작 및 대응하는 판독 동작을 수행한다. 또한, 디코딩 장치(700)는 결정 모듈(705) 및 결정 모듈(706) 내에서 임계치를 변경하도록 구성된 임계치 변경 모듈(707)을 더 포함할 수 있다. 다른 일부 실시예에서, 결정 모듈(705) 및 결정 모듈(706)은 하나의 모듈로 결합될 수 있다.
도 7a에 기초하여, 도 7c에 도시된 바와 같이, 디코딩 장치(700)는 판독 모듈(701)에 의해 판독된 사전 인덱싱된 정보의 무결성을 검증하도록 구성된 무결성 검증 모듈(703)을 더 포함할 수 있고, 병렬 디코딩 모듈(702)은 무결성 검증 모듈(703)의 검증 결과가 사전 인덱싱된 정보가 검증을 통과한 것을 나타낼 경우 파일에 대한 병렬 디코딩을 더 수행한다. 또한, 디코딩 장치(700)는, 병렬 디코딩을 수행할 다수의 스레드의 수량과 동일한 파일 스트림의 수량을 얻기 위해 디코딩될 파일의 파일 스트림을 복제하도록 구성된 데이터 준비 모듈(704)을 더 포함할 수 있고, 여기서 파일 스트림을 복제하는 것은 파일 스트림의 포인터를 복제하는 것을 지칭한다. 전술한 방법 실시예의 설명으로부터, 데이터 준비 모듈(704)이 요구에 따라 병렬 디코딩에 필요한 다른 정보를 추가로 복제하거나 생성할 수 있음을 알 수 있다.
무결성 검증 모듈(703) 및 데이터 준비 모듈(704)은 도 7b에 도시된 디코딩 장치에 기초하여 추가될 수 있음에 주목해야 한다. 도 7a 내지 도 7c에서 파선으로 나타낸 모든 모듈은 선택적 모듈이다.
설명된 장치 실시예는 단지 일 예에 불과할 뿐이다. 분리된 부분으로 기술된 유닛은 물리적으로 분리될 수도 있고 그렇지 않을 수도 있으며, 유닛으로서 디스플레이된 부분은 물리적 유닛일 수도 있고 그렇지 아닐 수도 있으며, 한 위치에 위치될 수도 있고, 또는 복수의 네트워크 유닛 상에 분포될 수도 있다. 일부 또는 모든 모듈은 실시예의 해결책의 목적을 달성하기 위해 실제 요구에 따라 선택될 수 있다. 또한, 본 발명에 의해 제공되는 장치 실시예의 첨부 도면에서, 모듈 간의 연결 관계는 모듈이 하나 이상의 통신 버스 또는 신호 케이블로서 구체적으로 구현될 수 있는, 서로 간의 통신 커넥션을 갖는다는 것을 나타낸다. 당업자는 독창적인 노력없이 본 발명의 실시예를 이해하고 구현할 수 있다.
전술한 실시예의 설명에 기초하여, 당업자는 본 발명이 전용 집적 회로, 전용 CPU, 전용 메모리, 전용 컴포넌트 등을 포함하여, 필요한 범용 하드웨어를 추가한 소프트웨어에 의해 또는 전용 하드웨어에 의해서만 구현될 수 있음을 명확히 이해할 수 있다. 일반적으로, 컴퓨터 프로그램에 의해 수행될 수 있는 모든 기능은 대응하는 하드웨어를 사용함으로써 용이하게 구현될 수 있다. 또한, 동일한 기능을 달성하기 위해 사용되는 특정 하드웨어 구조는 다양한 형태, 예를 들어, 아날로그 회로, 디지털 회로, 전용 회로 등의 형태로 구성될 수 있다.
전술한 설명은 단지 본 발명의 특정 구현예일 뿐이지만, 본 출원의 보호 범위를 제한하려는 것이 아니다. 본 발명에 개시된 기술적 범위 내에서 당업자에 의해 용이하게 이해되는 임의의 변형 또는 치환은 본 발명의 보호 범위 내에 속한다. 따라서, 본 발명의 보호 범위는 청구범위의 보호 범위를 따라야 한다.
Claims (20)
- 디코딩 방법으로서,
디코딩될 파일에 대응하는 사전 인덱싱된 정보를 판독하는 단계 - 상기 디코딩될 파일은 가변 길이 코딩에 의해 획득되며, 상기 사전 인덱싱된 정보는 하나 이상의 디코딩 경계를 나타내는 정보를 포함하고, 상기 사전 인덱싱된 정보는 상기 디코딩될 파일과 관련된 다른 파일 또는 상기 디코딩될 파일의 종단(tail end)에 저장됨 - 와,
상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대해 병렬 디코딩을 수행하는 단계를 포함하고,
상기 다수의 데이터 세그먼트는 상기 하나 이상의 디코딩 경계 중 하나 이상에 따라 분할되는
디코딩 방법. - 제 1 항에 있어서,
디코딩될 파일에 대응하는 사전 인덱싱된 정보를 판독하기 전에,
상기 디코딩될 파일이 새로 추가, 수정 또는 처음 열리는 것으로 검출되면, 상기 사전 인덱싱된 정보를 추출하는 단계와,
상기 추출된 사전 인덱싱된 정보를 저장하는 단계를 더 포함하는
디코딩 방법. - 제 2 항에 있어서,
상기 추출된 사전 인덱싱된 정보에 의해 표시되는 디코딩 경계의 수량은 프로세싱 자원의 프로세싱 능력에 따라 결정되는
디코딩 방법. - 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
상기 디코딩될 파일에 대응하는 사전 인덱싱된 정보를 판독하는 단계는,
상기 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 큰 것으로 결정하는 단계와,
결정 결과에 따라 상기 디코딩될 파일에 대응하는 상기 사전 인덱싱된 정보를 판독하는 단계를 포함하는
디코딩 방법. - 제 2 항 또는 제 3 항에 있어서,
상기 사전 인덱싱된 정보를 추출하는 단계는,
상기 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 큰 것으로 결정하는 단계와,
결정 결과에 따라 상기 사전 인덱싱된 정보를 추출하는 단계를 포함하는
디코딩 방법. - 제 4 항 또는 제 5 항에 있어서,
상기 사전설정된 제 1 임계치는,
상기 디코딩될 파일의 디코딩이 완료된 후, 상기 디코딩될 파일의 크기 및 디코딩 시간과, 병렬 디코딩이 수행되는지 여부를 기록하고,
상기 디코딩될 파일에 대해 병렬 디코딩이 수행되고, 상기 디코딩 시간이 사전설정된 제 2 임계치보다 작고, 상기 디코딩될 파일의 크기가 상기 사전설정된 제 1 임계치보다 크면, 상기 사전설정된 제 1 임계치를 상기 디코딩될 파일의 크기로 변경함으로써,
변경되는
디코딩 방법. - 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대한 병렬 디코딩을 수행하기 전에,
상기 방법은,
상기 병렬 디코딩을 수행할 다수의 스레드의 수량과 동일한 파일 스트림의 수량을 얻기 위해 상기 디코딩될 파일의 파일 스트림을 복제하는 단계를 더 포함하며, 상기 파일 스트림을 복제하는 단계는 상기 파일 스트림의 포인터를 복제하는 것을 지칭하는
디코딩 방법. - 제 1 항 내지 제 7 항 중 어느 한 항에 있어서,
상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대한 병렬 디코딩을 수행하는 단계는,
상기 사전 인덱싱된 정보가 무결성 검증을 통과한 것으로 결정하는 단계와,
상기 사전 인덱싱된 정보가 무결성 검증을 통과한 것으로 결정한 후에, 상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대한 병렬 디코딩을 수행하는 단계를 포함하는
디코딩 방법. - 제 1 항 내지 제 8 항 중 어느 한 항에 있어서,
상기 다른 파일은 메타데이터 파일 또는 데이터베이스 파일이거나, 상기 디코딩될 파일과 동일한 디렉토리에 속하고 상기 디코딩될 파일의 것과 동일한 파일 이름을 갖는 파일인
디코딩 방법. - 제 9 항에 있어서,
상기 메타데이터 파일은 시스템 파일인
디코딩 방법. - 하나 이상의 프로세서 및 상기 하나 이상의 프로세서에 결합된 메모리를 포함하는 컴퓨터 시스템으로서,
상기 메모리는 컴퓨터 프로그램을 저장하도록 구성되며, 상기 하나 이상의 프로세서는 상기 컴퓨터 프로그램을 판독하여 동작을 수행하도록 구성되며,
상기 동작은:
디코딩될 파일에 대응하는 사전 인덱싱된 정보를 판독하는 것 - 상기 디코딩될 파일은 가변 길이 코딩에 의해 획득되며, 상기 사전 인덱싱된 정보는 하나 이상의 디코딩 경계를 나타내는 정보를 포함하고, 상기 사전 인덱싱된 정보는 상기 디코딩될 파일과 관련된 다른 파일 또는 상기 디코딩될 파일의 종단에 저장됨 - 과,
상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대해 병렬 디코딩을 수행하는 것을 포함하고,
상기 다수의 데이터 세그먼트는 상기 하나 이상의 디코딩 경계 중 하나 이상에 따라 분할되는
컴퓨터 시스템. - 제 11 항에 있어서,
상기 하나 이상의 프로세서는 또한, 상기 디코딩될 파일이 새로 추가, 수정 또는 처음 열리는 것으로 검출되는 경우, 상기 사전 인덱싱된 정보를 추출하고, 상기 추출된 사전 인덱싱된 정보를 저장하도록 구성되는
컴퓨터 시스템. - 제 12 항에 있어서,
상기 추출된 사전 인덱싱된 정보에 의해 표시되는 디코딩 경계의 수량은 프로세싱 자원의 프로세싱 능력에 따라 결정되는
컴퓨터 시스템. - 제 12 항 또는 제 13 항에 있어서,
상기 하나 이상의 프로세서는 상기 디코딩될 파일의 크기가 사전설정된 제 1 임계치보다 큰 것으로 결정하고, 결정 결과에 따라 상기 사전 인덱싱된 정보를 추출하도록 구성되는
컴퓨터 시스템. - 제 14 항에 있어서,
상기 하나 이상의 프로세서는 또한, 상기 디코딩될 파일의 디코딩이 완료된 후에, 상기 디코딩될 파일의 크기 및 디코딩 시간과, 병렬 디코딩이 수행될지의 여부를 기록하고, 만약 상기 디코딩될 파일에 대해 병렬 디코딩이 수행되고, 상기 디코딩 시간이 사전설정된 제 2 임계치보다 작고, 상기 디코딩될 파일의 크기가 상기 사전설정된 제 1 임계치보다 크다면, 상기 사전설정된 제 1 임계치를 상기 디코딩될 파일의 크기로 변경함으로써, 상기 사전설정된 제 1 임계치를 변경하도록 구성되는
컴퓨터 시스템. - 제 11 항 내지 제 15 항 중 어느 한 항에 있어서,
상기 다른 파일은 메타데이터 파일 또는 데이터베이스 파일이거나, 상기 디코딩될 파일과 동일한 디렉토리에 속하고 상기 디코딩될 파일의 것과 동일한 파일 이름을 갖는 파일인
컴퓨터 시스템. - 제 16 항에 있어서,
상기 메타데이터 파일은 시스템 파일인
컴퓨터 시스템. - 디코딩 장치로서,
디코딩될 파일에 대응하는 사전 인덱싱된 정보를 판독하도록 구성된 판독 모듈 - 상기 사전 인덱싱된 정보는 하나 이상의 디코딩 경계를 나타내는 정보를 포함하고, 상기 사전 인덱싱된 정보는 상기 디코딩될 파일과 관련된 다른 파일 또는 상기 디코딩될 파일의 종단에 저장되며, 상기 디코딩될 파일은 가변 길이 코딩에 의해 획득됨 - 과,
상기 사전 인덱싱된 정보에 따라 상기 디코딩될 파일 내의 다수의 데이터 세그먼트에 대해 병렬 디코딩을 수행하도록 구성되는 병렬 디코딩 모듈을 포함하고,
상기 다수의 데이터 세그먼트는 상기 하나 이상의 디코딩 경계 중 하나 이상에 따라 분할되는
디코딩 장치. - 제 18 항에 있어서,
상기 디코딩될 파일이 새로 추가, 수정 또는 처음 열리는 것으로 검출되면, 상기 사전 인덱싱된 정보를 추출하도록 구성되는 추출 모듈과,
상기 추출된 사전 인덱싱된 정보를 저장하도록 구성되는 저장 모듈을 더 포함하는
디코딩 장치. - 제 19 항에 있어서,
상기 추출 모듈에 의해 추출된 상기 사전 인덱싱된 정보에 의해 표시되는 디코딩 경계의 수량은 프로세싱 자원의 프로세싱 능력에 따라 결정되는
디코딩 장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610542045.0A CN107592118B (zh) | 2016-07-08 | 2016-07-08 | 可变长编码文件的解码方法以及装置 |
CN201610542045.0 | 2016-07-08 | ||
PCT/CN2017/091866 WO2018006833A1 (zh) | 2016-07-08 | 2017-07-05 | 可变长编码文件的解码方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190020039A true KR20190020039A (ko) | 2019-02-27 |
KR102147633B1 KR102147633B1 (ko) | 2020-08-25 |
Family
ID=60912369
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197001291A KR102147633B1 (ko) | 2016-07-08 | 2017-07-05 | 가변 길이 코딩된 파일을 디코딩하는 방법 및 장치 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11284119B2 (ko) |
EP (1) | EP3468047B1 (ko) |
KR (1) | KR102147633B1 (ko) |
CN (1) | CN107592118B (ko) |
BR (1) | BR112018077468A2 (ko) |
WO (1) | WO2018006833A1 (ko) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656712B (zh) * | 2018-11-29 | 2022-12-09 | 中国辐射防护研究院 | 一种提取grib码数据的方法及系统 |
CN109656614A (zh) * | 2018-12-24 | 2019-04-19 | 中国银行股份有限公司 | 文件的处理方法、装置及系统 |
CN112835651B (zh) * | 2021-04-01 | 2023-10-20 | 中国空空导弹研究院 | 一种多路图像并行解码处理方法 |
CN114071154A (zh) * | 2021-11-10 | 2022-02-18 | 湖南国科微电子股份有限公司 | 一种数据解码方法、装置、电子设备及可读存储介质 |
CN115001628B (zh) * | 2022-06-07 | 2024-02-27 | 北京百度网讯科技有限公司 | 数据编码的方法及装置、数据解码的方法及装置和数据结构 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110248872A1 (en) * | 2010-04-13 | 2011-10-13 | Research In Motion Limited | Methods and devices for load balancing in parallel entropy coding and decoding |
EP2381685A1 (en) * | 2010-04-13 | 2011-10-26 | Research In Motion Limited | Methods and devices for load balancing in parallel entropy coding and decoding |
US20120081242A1 (en) * | 2010-10-01 | 2012-04-05 | Research In Motion Limited | Methods and devices for parallel encoding and decoding using a bitstream structured for reduced delay |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5381145A (en) * | 1993-02-10 | 1995-01-10 | Ricoh Corporation | Method and apparatus for parallel decoding and encoding of data |
US6043765A (en) | 1997-09-26 | 2000-03-28 | Silicon Engineering, Inc. | Method and apparatus for performing a parallel speculative Huffman decoding using both partial and full decoders |
US7129864B2 (en) | 2004-12-31 | 2006-10-31 | Intel Corporation | Fast compact decoder for huffman codes |
US8121428B2 (en) * | 2005-05-31 | 2012-02-21 | Microsoft Corporation | Accelerated image rendering |
CN100546198C (zh) * | 2006-10-20 | 2009-09-30 | 宁波大学 | 一种数字音乐作品认证信息的嵌入方法 |
SE533185C2 (sv) | 2007-02-16 | 2010-07-13 | Scalado Ab | Metod för behandling av en digital bild samt bildrepresentationsformat |
CN101051846A (zh) * | 2007-05-09 | 2007-10-10 | 上海广电(集团)有限公司中央研究院 | 一种基于上下文的快速哈夫曼解码方法 |
CN101626504B (zh) * | 2008-07-09 | 2012-06-06 | 上海飞来飞去多媒体创意有限公司 | 一种高速jpeg解码的方法 |
US8423520B2 (en) * | 2009-11-23 | 2013-04-16 | Dell Products L.P. | Methods and apparatus for efficient compression and deduplication |
US8520958B2 (en) * | 2009-12-21 | 2013-08-27 | Stmicroelectronics International N.V. | Parallelization of variable length decoding |
CN101859585B (zh) * | 2010-07-01 | 2011-08-03 | 福建省三奥信息科技股份有限公司 | 一种对视频素材进行帧精确剪辑的系统和方法 |
CN103297767B (zh) | 2012-02-28 | 2016-03-16 | 三星电子(中国)研发中心 | 一种适用于多核嵌入式平台的jpeg图像解码方法及解码器 |
CN103377131A (zh) * | 2012-04-13 | 2013-10-30 | 索尼公司 | 数据处理装置和方法 |
CN102761745B (zh) * | 2012-07-12 | 2015-07-22 | 国家计算机网络与信息安全管理中心 | 解码方法和解码设备 |
CN102970544A (zh) | 2012-12-07 | 2013-03-13 | 豪威科技(上海)有限公司 | Jpeg编码和解码方法及系统 |
CN105578194B (zh) * | 2016-01-06 | 2018-12-25 | 珠海全志科技股份有限公司 | Jpeg图像解码方法和解码器 |
-
2016
- 2016-07-08 CN CN201610542045.0A patent/CN107592118B/zh active Active
-
2017
- 2017-07-05 EP EP17823645.1A patent/EP3468047B1/en active Active
- 2017-07-05 WO PCT/CN2017/091866 patent/WO2018006833A1/zh unknown
- 2017-07-05 BR BR112018077468A patent/BR112018077468A2/pt unknown
- 2017-07-05 KR KR1020197001291A patent/KR102147633B1/ko active IP Right Grant
-
2019
- 2019-01-07 US US16/241,058 patent/US11284119B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110248872A1 (en) * | 2010-04-13 | 2011-10-13 | Research In Motion Limited | Methods and devices for load balancing in parallel entropy coding and decoding |
EP2381685A1 (en) * | 2010-04-13 | 2011-10-26 | Research In Motion Limited | Methods and devices for load balancing in parallel entropy coding and decoding |
US20120081242A1 (en) * | 2010-10-01 | 2012-04-05 | Research In Motion Limited | Methods and devices for parallel encoding and decoding using a bitstream structured for reduced delay |
Also Published As
Publication number | Publication date |
---|---|
KR102147633B1 (ko) | 2020-08-25 |
US20190141356A1 (en) | 2019-05-09 |
EP3468047B1 (en) | 2024-09-11 |
WO2018006833A1 (zh) | 2018-01-11 |
EP3468047A1 (en) | 2019-04-10 |
BR112018077468A2 (pt) | 2019-04-02 |
CN107592118A (zh) | 2018-01-16 |
US11284119B2 (en) | 2022-03-22 |
EP3468047A4 (en) | 2019-06-26 |
CN107592118B (zh) | 2021-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102147633B1 (ko) | 가변 길이 코딩된 파일을 디코딩하는 방법 및 장치 | |
US11347370B2 (en) | Method and system for video recording | |
KR102128138B1 (ko) | 플레이스홀더에 의한 하이드레이션 및 디하이드레이션 기법 | |
EP3113043B1 (en) | Method, device and host for updating metadata stored in columns in distributed file system | |
KR102124231B1 (ko) | 플레이스홀더 및 콘텐츠 스트리밍 기법 | |
KR101188472B1 (ko) | 데이터 즉시 청킹을 사용하여 파일 입출력을 스케줄 하는 방법 | |
CN103218224A (zh) | 一种提高存储空间利用率的方法和终端 | |
CN106453572B (zh) | 基于云服务器同步图像的方法及系统 | |
US11232066B2 (en) | Method for data migration and terminal | |
KR101584760B1 (ko) | 순서 모드 저널링 파일 시스템을 위한 블록 그룹 단위 저널링 방법 및 장치 | |
KR101810019B1 (ko) | 애니메이션 데이터 생성 방법, 장치, 및 전자 기기 | |
TWI634421B (zh) | 用以存取資料之電子裝置及其資料存取方法 | |
CN111263211B (zh) | 一种缓存视频数据的方法及终端设备 | |
CN106775445B (zh) | 数据迁移方法及装置 | |
US20140258347A1 (en) | Grouping files for optimized file operations | |
WO2023083064A1 (zh) | 视频处理方法、装置、电子设备及可读存储介质 | |
CN110955388A (zh) | 一种存储服务器及其数据存储方法、装置和存储介质 | |
WO2018201993A1 (zh) | 图像绘制方法、终端及存储介质 | |
CN115495020A (zh) | 文件处理方法、装置、电子设备和可读存储介质 | |
CN104392410A (zh) | 皮肤系统中的图片整合方法、皮肤绘制方法及设备 | |
CN110786020A (zh) | 视频的处理方法、装置及计算机可读存储介质 | |
US10795875B2 (en) | Data storing method using multi-version based data structure | |
US11455326B2 (en) | Efficient storage and retrieval of textual data | |
CN117573675A (zh) | 一种数据存储方法、装置、电子设备、芯片及介质 | |
CN116934570A (zh) | 一种应用程序页面的图像处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
X091 | Application refused [patent] | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |