Method and image processing device for dividing a pixel array into slices and tiles, and system for encoding slices and tiles into a video stream
By dividing pixel arrays into slices and tiles with oblique boundaries and offsets based on tilt angles, the method and system improve processing efficiency in large image frames by reducing data transfer and synchronization needs between separate processing circuits.
Patent Information
- Application Number
- JP2022199187
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2021-12-22
- Filing Date
- 2022-12-14
- Publication Date
- 2025-11-06
- Estimated Expiration
- 2042-12-14
AI Technical Summary
Existing image processing systems face inefficiencies in processing large image frames due to the need for synchronization and data transfer between separate processing circuits, which increases complexity and slows down processing.
A method and system for dividing a pixel array into slices and tiles, using two separate image processing circuits, where the boundary between subsets of pixels is slanted at an oblique angle, allowing for reduced data transfer by setting an offset based on the tilt angle to minimize the amount of data shared between circuits.
This approach reduces the amount of pixel data transferred between processing circuits, thereby enhancing processing efficiency and reducing latency by minimizing synchronization requirements.
Smart Images

Figure 0007765376000001 
Figure 0007765376000002 
Figure 0007765376000003
Abstract
Description
[Technical Field]
[0001] The present invention relates to image processing, and in particular to dividing a pixel array into slices and tiles and encoding and buffering two subsets of pixels of the pixel array for encoding into an encoded video stream using two separate image processing circuits, each. [Background technology]
[0002] Over time, image frames have become larger, for example, due to higher resolutions and larger image sensors. Another example of a large image frame is a panoramic image frame constructed by combining image frames captured by multiple image sensors. When processing such large image frames of a video stream, for example, encoding the image frames, each image frame may be divided into two or more image portions, which are then processed in parallel in separate processing circuits. Similarly, the encoded image frame may also be divided into two or more corresponding image portions at the decoder side, which are then processed in parallel in separate processing circuits. In such a solution, it is generally desirable for the separate processing circuits to be able to process each image portion independently to the greatest extent possible and to share as little pixel data as possible, because such sharing requires synchronization, including the transfer of pixel data between the processing circuits, which slows down processing, and / or requires faster transfer of pixel data between the processing circuits, which increases the complexity and cost of the processing circuits. Summary of the Invention
[0003] It is an object of the present invention to overcome or mitigate problems in known methods, image processing devices and systems by providing a method, image processing device and system for dividing a pixel array into slices and tiles and encoding and buffering two subsets of pixels of the pixel array for encoding into an encoded video stream using two separate image processing circuits, respectively.
[0004] According to a first aspect, there is provided a method for dividing a pixel array into slices and tiles for encoding into an encoded video stream by a first encoder disposed in a first image processing circuit and a second encoder disposed in a second image processing circuit, the pixel array comprising a first subset of pixels having pixel data stored in a first buffer disposed in the first image processing circuit and a second subset of pixels having pixel data stored in a second buffer disposed in the second image processing circuit, a first boundary between the first subset of pixels and the second subset of pixels being slanted at an oblique angle relative to the pixel array, the method includes dividing the pixel array into two or more slices and dividing each slice into two or more tiles, the two or more tiles of each slice comprising the first subset of tiles and the second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by the first encoder and the second subset of tiles being encoded by the second encoder. The act of dividing each slice into two or more tiles includes setting a second boundary between the first subset of tiles and the second subset of tiles at an offset between two adjacent slices of the two or more slices, the offset being based on the tilt angle.
[0005] By setting a second boundary between a first subset of tiles and a second subset of tiles at an offset between two adjacent slices of two or more slices, where the offset is based on a tilt angle, the number of pixels encoded by the first encoder into the first subset of tiles of each slice whose pixel data is stored in the second buffer, and the number of pixels encoded by the second encoder into the second subset of tiles of each slice whose pixel data is stored in the first buffer, are reduced relative to not using an offset when the first boundary between the first subset of pixels and the second subset of pixels is tilted at a tilt angle relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using an offset.
[0006] A slice refers to a vertical separation of top and bottom: each slice can be coded without requiring access to image data for other slices.
[0007] A tile refers to a horizontal separation of adjacent horizontal pixels, each of which can be coded without requiring access to image data for other tiles.
[0008] Here, the first boundary being inclined at an oblique angle means that, at least somewhere along the first boundary, the first boundary between the first subset of pixels and the second subset of pixels does not extend along a column or a row of pixels of the pixel array, such that pixels in the same column of pixels are located on different sides of the first boundary between the first subset of pixels and the second subset of pixels, and pixels in the same row of pixels are located on different sides of the first boundary between the first subset of pixels and the second subset of pixels.
[0009] Offset here means an offset along the length of the slice, i.e., such that the second boundaries between a first subset of tiles and a second subset of tiles in two adjacent slices are not aligned along the length of the slice.
[0010] The offset being based on the tilt angle means that the offset between two adjacent slices is set taking the tilt angle into account, such that different offsets are set for different tilt angles. For example, the offset may be set based on a tilt angle such that, when the first encoder and the second encoder subsequently encode the first subset of tiles and the second subset of tiles into an encoded video stream, respectively, the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is minimized or at least remains as low as possible. For example, a technique for setting the offset based on the tilt angle may be iterative, such that the sum of the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer is determined for different offsets, and the offset is set to the offset that results in the smallest sum.
[0011] The tilt angle may be constant along a first boundary between the first subset of pixels and the second subset of pixels. The offset may also be set to be the same for each two adjacent slices of the two or more slices.
[0012] Alternatively, the tilt angle may vary along a first boundary between the first subset of pixels and the second subset of pixels. The act of dividing the pixel array into two or more slices may further include dividing the pixel array into three or more slices, and the act of dividing each slice into two or more tiles may include, for each two adjacent slices of the three or more slices, setting a second boundary between the first subset of tiles and the second subset of tiles in each of the two adjacent slices with an offset, the offset being based on a local tilt angle of the first boundary between the first subset of pixels and the second subset of pixels in the two adjacent slices.
[0013] The local tilt angle refers to a measure of the tilt angle of the first boundary in two adjacent slices where the offset is set.
[0014] In a scenario where the tilt angle varies along the first boundary between the first subset of pixels and the second subset of pixels, the first boundary between the first subset of pixels and the second subset of pixels may be tilted at a constant tilt angle but at different tilt angles in different horizontal portions of the pixel array. The operation of dividing the pixel array into three or more slices may further include dividing the pixel array into four or more slices by dividing each different horizontal portion of the pixel array into two or more slices such that, for each two adjacent horizontal portions, the third boundary between the two adjacent horizontal portions aligns with the fourth boundary between the two adjacent slices. By aligning the fourth boundary between two adjacent slices with the third boundary between the two adjacent horizontal portions, the first boundary has a constant tilt angle in the slices in each horizontal portion. This allows for setting an offset of the second boundary in each slice based on the tilt angle of the first boundary in that slice, thereby reducing the amount of data that needs to be transferred between image processing circuits for encoding relative to not having an offset. Alternatively, the first boundary between the first subset of pixels and the second subset of pixels may be curved.
[0015] In a scenario where the tilt angle varies along the first boundary between the first subset of pixels and the second subset of pixels, the local tilt angle of the first boundary in two adjacent slices may be determined as the average tilt angle in the two adjacent slices.
[0016] The sizes of corresponding tiles in each of the two or more slices may be the same in each of the two or more slices, in other words, the boundaries between tiles in the two or more slices may be horizontally aligned.
[0017] The method may further include transferring pixel data to a first encoder, the pixel data being encoded onto pixels of a first subset of tiles of each slice, the pixel data being stored in the second buffer; encoding the first subset of tiles by the first encoder; transferring pixel data to a second encoder, the pixel data being encoded onto a second subset of tiles of each slice, the pixel data being stored in the first buffer; and encoding the second subset of tiles by the second encoder.
[0018] According to a second aspect, there is provided a non-transitory computer-readable storage medium having stored thereon instructions for performing a method according to the first aspect when executed by a device having processing capability.
[0019] According to a third aspect, there is provided an image processing device for dividing a pixel array into slices and tiles for encoding into an encoded video stream by a first encoder located in a first image processing circuit and a second encoder located in a second image processing circuit, the pixel array comprising a first subset of pixels having pixel data stored in a first buffer located in the first image processing circuit and a second subset of pixels having pixel data stored in a second buffer located in the second image processing circuit, wherein a first boundary between the first subset of pixels and the second subset of pixels is slanted at an oblique angle relative to the pixel array. The device comprises circuitry configured to perform a first division function configured to divide the pixel array into two or more slices and a second division function configured to divide each slice into two or more tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by a first encoder, and the second subset of tiles being encoded by a second encoder. The second division function is further configured to set a second boundary between the first subset of tiles and the second subset of tiles at an offset between two adjacent slices of the two or more slices, the offset being based on a tilt angle.
[0020] When applicable, the above optional features of the method according to the first aspect also apply to the third aspect, see above to avoid excessive repetition.
[0021] According to a fourth aspect, there is provided a system for encoding a pixel array into an encoded video stream, the pixel array being composed of a first subset of pixels and a second subset of pixels, a first boundary between the first subset of pixels and the second subset of pixels being slanted at an oblique angle relative to the pixel array, the system comprising: a first image processing circuit; a second image processing circuit; a first encoder disposed in the first image processing circuit; a second encoder disposed in the second image processing circuit; a first buffer disposed in the first image processing circuit, the first buffer storing pixel data for the first subset of pixels; and a second buffer disposed in the second image processing circuit, the second buffer storing pixel data for the second subset of pixels. The system further comprises circuitry configured to perform a first division function configured to divide the pixel array into two or more slices and a second division function configured to divide each slice into two or more tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by a first encoder and the second subset of tiles being encoded by a second encoder. The second division function is further configured to set a second boundary between the first subset of tiles and the second subset of tiles at an offset between two adjacent slices of the two or more slices, the offset being based on the tilt angle. The circuitry further comprises a first forwarding function configured to forward pixel data for pixels to be encoded into a first subset of tiles of each slice whose pixel data is stored in the second buffer to a first encoder, and a second forwarding function configured to forward pixel data for pixels to be encoded into a second subset of tiles of each slice whose pixel data is stored in the first buffer to a second encoder, wherein the first encoder is configured to encode the first subset of tiles and the second encoder is configured to encode the second subset of tiles.
[0022] When applicable, the above optional features of the method according to the first aspect also apply to the fourth aspect; to avoid undue repetition, see above.
[0023] Further scope of the applicability of the present invention will become apparent from the detailed description set forth hereinafter. It should be understood, however, that the detailed description and specific examples indicate preferred embodiments of the invention and are given by way of illustration only, since various changes and modifications within the scope of the invention will become apparent to those skilled in the art from this detailed description.
[0024] Therefore, it should be understood that the present invention is not limited to the specific components of the devices described or the operation of the methods described, as such devices and methods may vary. It should also be understood that the terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting. It should be noted that, as used in this specification and the appended claims, the articles "a," "an," "the," and "said" are intended to mean that there are one or more of an element, unless the context clearly dictates otherwise. Thus, for example, reference to "a unit" or "the unit" may include several devices, etc. Furthermore, the words "comprising," "including," "containing," and similar phrases do not exclude other elements or steps.
[0025] These and other aspects of the present invention will now be described in more detail with reference to the accompanying drawings, which should not be considered limiting, but rather are used for purposes of explanation and understanding, with like reference numerals referring to like elements throughout. [Brief explanation of the drawings]
[0026] [Figure 1]1 is a schematic block diagram of a system for encoding a pixel array into an encoded video stream in accordance with the present disclosure; [Figure 2] 1 is a flowchart of a method for dividing a pixel array into slices and tiles for encoding into an encoded video stream according to the present disclosure, wherein the pixel array is composed of a first subset of pixels and a second subset of pixels, and a first boundary between the first subset of pixels and the second subset of pixels is slanted at an oblique angle relative to the pixel array. [Figure 3] FIG. 1 is a schematic block diagram of an image processing device for dividing a pixel array into slices and tiles for encoding into an encoded video stream, in accordance with the present disclosure. [Figure 4] FIG. 1 is a schematic diagram of the combination of four sensors to capture a single image frame. [Figure 5] FIG. 2 is a schematic diagram of the division of an image frame captured using a single image sensor into four portions. [Figure 6] FIG. 2 illustrates division of a pixel array into tiles according to a prior art method for a first example by a horizontal boundary between a first subset of pixels and a second subset of pixels. [Figure 7a] FIG. 10 illustrates division of a pixel array into tiles according to a second example prior art method with a constant tilt angle. [Figure 7b] 7b shows an example of dividing a pixel array into slices and tiles according to the method of the present disclosure for a second example having the same constant tilt angle as in FIG. 7a. FIG. [Figure 8a] FIG. 10 shows the division of a pixel array into tiles according to a prior art method as a third example with a varying tilt angle, the tilt angle being constant but different in two horizontal portions. [Figure 8b] 8a shows a third example of the division of a pixel array into slices and tiles according to the method of the present disclosure, with the same varying tilt angle as in FIG. 8a, where the tilt angle is constant but different in the two horizontal portions. [Figure 8c]8a shows a third example of the division of a pixel array into slices and tiles according to the method of the present disclosure, with the same varying tilt angle as in FIG. 8a, where the tilt angle is constant but different in the two horizontal portions. [Figure 8d] 8a shows a third example of the division of a pixel array into slices and tiles according to the method of the present disclosure, with the same varying tilt angle as in FIG. 8a, where the tilt angle is constant but different in the two horizontal portions. [Figure 9a] FIG. 10 illustrates the division of a pixel array into tiles according to a prior art method as a fourth example with varying tilt angles when the first boundary between a first subset of pixels and a second subset of pixels is curved. [Figure 9b] FIG. 9B illustrates the division of a pixel array into slices and tiles according to the method of the present disclosure as a fourth example with the same varying tilt angle as in FIG. 9A when the first boundary between the first subset of pixels and the second subset of pixels is curved. [Figure 9c] FIG. 9B illustrates the division of a pixel array into slices and tiles according to the method of the present disclosure as a fourth example with the same varying tilt angle as in FIG. 9A when the first boundary between the first subset of pixels and the second subset of pixels is curved. [Figure 9d] FIG. 9B illustrates the division of a pixel array into slices and tiles according to the method of the present disclosure as a fourth example with the same varying tilt angle as in FIG. 9A when the first boundary between the first subset of pixels and the second subset of pixels is curved. [Figure 10a] FIG. 5 illustrates the division of a pixel array into tiles according to a prior art method as a fifth example with varying tilt angles when the first boundary between a first subset of pixels and a second subset of pixels is curved. [Figure 10b] FIG. 10B illustrates the division of a pixel array into slices and tiles according to the method of the present disclosure as a fifth example with the same varying tilt angle as in FIG. 10A when the first boundary between the first subset of pixels and the second subset of pixels is curved. [Figure 10c]FIG. 10B illustrates the division of a pixel array into slices and tiles according to the method of the present disclosure as a fifth example with the same varying tilt angle as in FIG. 10A when the first boundary between the first subset of pixels and the second subset of pixels is curved. [Figure 10d] FIG. 10B illustrates the division of a pixel array into slices and tiles according to the method of the present disclosure as a fifth example with the same varying tilt angle as in FIG. 10A when the first boundary between the first subset of pixels and the second subset of pixels is curved. DETAILED DESCRIPTION OF THE INVENTION
[0027] The present invention will now be described more fully hereinafter with reference to the accompanying drawings, in which presently preferred embodiments of the invention are shown. This invention may, however, be embodied in many different forms and should not be construed as limited to the embodiments set forth herein. Rather, these embodiments are provided so as to be thorough and complete, and to convey the scope of the invention to those skilled in the art.
[0028] A system 100 for encoding a pixel array into an encoded video stream according to the present disclosure will be discussed below with reference to Figure 1. System 100 is intended for use in a scenario in which the pixel array is composed of a first subset of pixels and a second subset of pixels, and a first boundary between the first subset of pixels and the second subset of pixels is slanted at an oblique angle relative to the pixel array, and the first subset of pixels and the second subset of pixels are processed separately in respective processing circuits, e.g., to enable parallel processing.
[0029] System 100 may be used to encode large image frames, such as panoramic image frames constructed by combining image frames captured by multiple image sensors. The pixel array encoded in system 100 may also be associated with pixels from two of the multiple image sensors. The pixels of the pixel array may also have been processed, typically by horizontal correction transformation of the pixel data and combining and blending of the pixel data to remove or reduce any visible artifacts at the first boundary between the pixels from the two separate image sensors. Further processing of the pixel array may also have been performed before the pixel array is acquired in system 100. If such processing is performed separately (typically in parallel) by two image processing circuits, the pixel data must be transferred between the two image processing circuits. Furthermore, in some cases, the first boundary between pixel data of pixel arrays processed by different ones of the two image processing circuits may be slanted relative to the pixel array. An example of a setup of a first image sensor 410, a second image sensor 420, a third image sensor 430, and a fourth image sensor 440 is shown in FIG. 4. The second image sensor 420 and the third image sensor 430 are centered without any mutual tilt, while the first image sensor 410 and the fourth image sensor 440 are tilted at an angle u relative to the second image sensor 420 and the third image sensor 430, respectively. For example, for a pixel array processed in system 100 that includes pixel data for the first image sensor 410 and the second image sensor 420, the first boundary between the pixel data after processing for merging and any further processing to be processed by different processing circuitry will be tilted at an angle relative to the pixel array. This tilt is due in part to the angle u between the first image sensor 410 and the second image sensor 420 and in part to a pre-processing transformation of system 100.The tilt of the first boundary may also occur for reasons other than the mutual tilt between the image sensors, for example, due to a horizontal correction transformation in the pixel array for the processed image data from the second image sensor 420 and the third image sensor 430.
[0030] System 100 may also be used for encoding large image frames, for example, using a wide-angle lens, where the large image frame is divided into two or more vertical portions. It is further contemplated that the pixel array encoded in system 100 may relate to pixels from two portions of the image frame. It is further contemplated that the pixels of the pixel array may typically be processed before the pixel array is obtained in system 100. Such processing may include, for example, conversion of pixel data for a spherical or cylindrical projection. While such processing for compositing and any further processing may be performed separately (typically in parallel) in two image processing circuits, this pixel data will typically require transfer of pixel data between the two image processing circuits. Furthermore, in some cases, a first boundary between pixel data of pixel arrays processed by different ones of the two image processing circuits may be tilted relative to the pixel array, such that the first boundary is curved, for example, due to conversion of pixel data for a spherical or cylindrical projection. An example of the division of an image frame 500 into a first image portion 510, a second image portion 520, a third image portion 530, and a fourth image portion 540 is shown in Figure 5. For example, when a pixel array processed in system 100, including pixel data for first image portion 510 and second image portion 520, is being processed in a corresponding one of two processing circuits, including, for example, a horizontal corrective transformation of the pixel data to adjust for lens distortion, a first boundary between pixel data of the pixel arrays processed in different ones of the two image processing circuits may be slanted relative to the pixel array such that the first boundary is curved.
[0031] The system 100 comprises a first image processing circuit 110, a second image processing circuit 120, a first encoder 112 disposed in the first image processing circuit 110, a second encoder 122 disposed in the second image processing circuit 120, a first buffer 114 disposed in the first image processing circuit 110, and a second buffer 124 disposed in the second image processing circuit 120. The first buffer 114 stores pixel data for a first subset of pixels, and the second buffer 124 stores pixel data for a second subset of pixels. The first processing circuit 110 and the second processing circuit 120 may each include a first processor 116 and a second processor 126, respectively, such as a central processing unit (CPU), a microcontroller, or a microprocessor. The first encoder 112 and the second encoder 122 may be adapted to encode according to, for example, the H.262, H.265, H.266, AV1, and VP9 video compression standards.
[0032] The system 100 further comprises a circuit 130. The circuit 130 is configured to perform the functions of the system 100. The circuit may be included in, for example, an image processing device 300, which will be further described with respect to FIG. 3. The circuit 130 may include a processor 132, such as a central processing unit (CPU), a microcontroller, or a microprocessor. The processor 132 is configured to execute program code. The program code may be configured to perform the functions of the system 100, for example.
[0033] The system 100 may further include memory 140. The memory 140 may be one or more of a buffer, flash memory, a hard drive, removable media, volatile memory, non-volatile memory, random access memory (RAM), or another suitable device. In an exemplary arrangement, the memory 140 includes non-volatile memory for long-term data storage and volatile memory that serves as system memory for the circuit 130. The memory 140 may exchange data with the circuit 130 over a data bus. There may also be associated control lines and an address bus between the memory 140 and the circuit 130. Data may further be exchanged between the first processing circuit 110 and the second processing circuit 120 over the data bus.
[0034] The functionality of system 100 may be embodied in the form of executable logic routines (e.g., lines of code, software programs, etc.) stored on a non-transitory computer-readable medium (e.g., memory 140) of system 100 and executed by circuitry 130 (e.g., using processor 132). Furthermore, the functionality of image processing device 100 may be a standalone software application or may form part of a software application that performs additional tasks related to image processing device 100. The described functions may be considered as methods that a processing unit of circuitry 130, e.g., processor 132, is configured to execute. Also, while the described functions may be implemented in software, such functionality may equally be performed via dedicated hardware or firmware, or some combination of hardware, firmware, and / or software.
[0035] Because system 100 is intended for use in a scenario in which a first subset of pixels and a second subset of pixels are encoded separately in first processing circuit 110 and second processing circuit 120, respectively, it is desirable for as little pixel data as possible to be shared between first processing circuit 110 and second processing circuit 120, as such sharing requires synchronization, including the transfer of pixel data, between first processing circuit 110 and second processing circuit 120, which would slow down processing. Therefore, when encoding pixel data in one of first processing circuit 110 and second processing circuit 120, such encoding should preferably require the transfer of as little pixel data as possible. Because encoding will be performed in tiles of slices, the division into slices and tiles should be such that each tile is associated with pixel data only or primarily from one of the first subset of pixels and the second subset of pixels, i.e., some tiles may be associated with pixel data primarily from the first subset of pixels and some tiles may be associated with pixel data primarily from the second subset of pixels. To this end, circuit 130 is configured to perform a division function for dividing the pixel array into slices and tiles based on the tilt angle.
[0036] Specifically, circuit 130 is configured to perform a first division function 151 that is configured to divide the pixel array into two or more slices. First division function 151 is configured to divide the pixel array into at least two slices, typically up to 100 slices, and preferably 4 to 16 slices.
[0037] Circuit 130 is further configured to perform a second division function 152 configured to divide each slice into two or more tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by first encoder 112, and the second subset of tiles being encoded by second encoder 122. In addition to being disjoint, the first subset of tiles and the second subset of tiles will be contiguous, respectively, and primarily associated with pixels on one side of a first boundary between the first subset of pixels and the second subset of pixels, such that one of the first subset of tiles and the second subset of tiles is associated with pixels on one side of a first boundary between the first subset of pixels and the second subset of pixels, and the other of them is associated with pixels on the other side of the first boundary. The second partitioning function is further configured to set a second boundary between the first subset of tiles and the second subset of tiles at an offset between two adjacent slices of the two or more slices, the offset being based on the slant angle. Specifically, the offset is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary between the first subset of pixels and the second subset of pixels is slant at the slant angle v relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset.For example, the offset may be set based on the tilt angle in an iterative manner, such that the sum of the number of pixels to be coded into a first subset of tiles for each slice whose pixel data is stored in the second buffer and the number of pixels to be coded into a second subset of tiles for each slice whose pixel data is stored in the first buffer is determined for different offsets, and the offset is set to the offset that results in the smallest sum. Alternatively, an analytical solution may be used, in which a function of the tilt angle is calculable for the determined tilt angle. The second division function 152 is configured to divide the pixel array into at least two tiles per slice. The number of tiles per slice may be application-specific and may be, for example, 10 tiles per slice. The number of tiles per slice may be different for different slices.
[0038] The circuit 130 is further configured to perform a first transfer function 153 configured to transfer pixel data for pixels encoded into a first subset of tiles of each slice whose pixel data is stored in the second buffer to the first encoder, and a second transfer function 154 configured to transfer pixel data for pixels encoded into a second subset of tiles of each slice whose pixel data is stored in the first buffer to the second encoder. The transfer of pixel data from the second buffer to the first encoder and from the first buffer to the second encoder may be performed via a Peripheral Component Interconnect (PCI), which slows down access to the image data compared to when the first encoder accesses the image data directly in the first buffer and when the second encoder accesses the image data directly in the second image buffer, respectively.
[0039] The circuit 130 may be further configured to execute a first instruction function 155 configured to instruct a first encoder to encode a first subset of tiles, and to execute a second instruction function 156 configured to instruct a second encoder to encode a second subset of tiles.
[0040] The first encoder 112 is configured to encode a first subset of tiles, and the second encoder 114 is configured to encode a second subset of tiles.
[0041] The tilt angle may be constant along a first boundary between the first subset of pixels and the second subset of pixels, and the offset may also be set to be the same between each two adjacent slices.
[0042] Alternatively, the tilt angle may vary along a first boundary between a first subset of pixels and a second subset of pixels of the pixel array. The first division function 151 may also be configured to divide the pixel array into three or more slices, and the second division function may be configured to use different offsets between two different adjacent slices. Specifically, the offsets used between two adjacent slices may be based on the local tilt angles in the two adjacent slices.
[0043] If the tilt angle varies in two adjacent slices of three or more slices, for example, as in the case where a first boundary between a first subset of pixels and a second subset of pixels of a pixel array is curved, the local tilt angle in the two adjacent slices may be determined as the average tilt angle in the two adjacent slices.
[0044] If the tilt angle is constant in a first horizontal portion of the pixel array and constant but varying differently in a second horizontal portion of the pixel array, the first division function 151 may be configured to divide the pixel array into four or more slices by dividing each distinct horizontal portion of the pixel array into two or more slices. The local tilt angle for two adjacent slices in the same horizontal portion of the pixel array may also be determined as the constant tilt angle in that horizontal portion. The local tilt angle for two adjacent slices in different horizontal portions of the pixel array may be determined as the average of two different but constant tilt angles in the two horizontal portions. By aligning the fourth boundary between two adjacent slices with the third boundary between two adjacent horizontal portions, the first boundary will have a constant tilt angle in the slice in each horizontal portion. This allows for setting an offset for the second boundary in each slice based on the tilt angle of the first boundary in that slice, thereby reducing the amount of data that needs to be transferred between image processing circuits for encoding relative to not having an offset.
[0045] The sizes of corresponding tiles of two or more tiles in each of two or more slices may be either the same or different in each of the two or more slices. In other words, the boundaries between tiles in two or more slices may or may not be horizontally aligned. This will depend on whether different sizes for corresponding tiles in different slices may be decodable or not available for the relevant implementation. Furthermore, having the same sizes for corresponding tiles in two or more slices may simplify encoding scheduling because encoding tiles of the same size takes similar time. Having the same sizes for corresponding tiles in two or more slices may further enable the use of image data in a corresponding buffer for corresponding tiles in another of the two or more slices when encoding a tile in one of the two or more slices.
[0046] A method 200 for dividing a pixel array into slices and tiles for encoding into an encoded video stream according to the present disclosure will be discussed below with reference to FIG. 2. Method 200 is intended for use in a scenario in which the pixel array is composed of a first subset of pixels and a second subset of pixels, a first boundary between the first subset of pixels and the second subset of pixels is slanted at an oblique angle relative to the pixel array, and the first subset of pixels and the second subset of pixels are processed separately by respective processing circuits, e.g., to enable parallel processing. Method 200 may be performed, for example, in connection with encoding a large image frame, such as a panoramic image frame constructed by combining image frames captured by multiple image sensors, or a large image frame captured, for example, using a wide-angle lens, where the large image frame has been divided into two or more portions, as described with respect to system 100 with reference to FIGS. 1, 4, and 5.
[0047] Because method 200 is intended to be performed in a scenario in which the first subset of pixels and the second subset of pixels are encoded separately in first processing circuit 110 and second processing circuit 120, it is desirable to share as little pixel data as possible between first processing circuit 110 and second processing circuit 120, because such sharing requires synchronization, including the transfer of pixel data, between first processing circuit 110 and second processing circuit 120, which slows down processing. For example, the transfer of pixel data from the second buffer to the first encoder and from the first buffer to the second encoder may be performed over PCI, which slows down access to the image data compared to when the first encoder accesses the image data directly in the first buffer and the second encoder accesses the image data directly in the second image buffer, respectively. Furthermore, having an additional step of synchronization, including the transfer of pixel data, may introduce latency by having one of the image processing circuits wait for the other image processing circuit to receive image data. Therefore, when encoding pixel data in one of the first processing circuit 110 and the second processing circuit 120, such encoding should preferably require the transfer of as little pixel data as possible. Because encoding is to be performed in tiles of slices, the division into slices and tiles should be such that each tile is associated with pixel data only or primarily from one of the first subset of pixels and the second subset of pixels; i.e., some tiles may be associated primarily with pixel data from the first subset of pixels and some tiles may be associated primarily with pixel data from the second subset of pixels. To this end, the pixel array is divided into slices and tiles based on the tilt angle.
[0048] The method 200 includes dividing S210 a pixel array into two or more slices and dividing S220 each slice into two or more tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by a first encoder and the second subset of tiles being encoded by a second encoder. In addition to being disjoint, the first subset of tiles and the second subset of tiles are contiguous and primarily associated with pixels on one side of a first boundary between the first subset of pixels and the second subset of pixels, such that one of the first subset of tiles and the second subset of tiles is associated with pixels on one side of a first boundary between the first subset of pixels and the second subset of pixels, and the other of them is associated with pixels on the other side of the first boundary. Dividing each slice into two or more tiles S210 includes setting a second boundary between the first subset of tiles and the second subset of tiles at an offset between two adjacent slices of the two or more slices, the offset being based on the tilt angle. Specifically, the offset is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer are reduced relative to not using the offset when the first boundary between the first subset of pixels and the second subset of pixels is tilted at the tilt angle v relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset.For example, the offset may be set based on a tilt angle using an iterative method in which the sum of the number of pixels to be encoded into a first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels to be encoded into a second subset of tiles of each slice whose pixel data is stored in the first buffer is determined for different offsets, and the offset is set to the offset that results in the smallest sum.
[0049] The method 200 and the steps included therein may further be adapted as corresponding functions of the system 100 as described with respect to FIG.
[0050] An image processing device 300 for dividing a pixel array into slices and tiles according to the present disclosure will be discussed below with reference to FIG. 3. The slices and tiles are intended to be encoded into an encoded video stream by a first encoder located in a first image processing circuit and a second encoder located in a second image processing circuit. The image processing device 300 is intended to be used in a scenario where the pixel array is composed of a first subset of pixels and a second subset of pixels, a first boundary between the first subset of pixels and the second subset of pixels is inclined at an oblique angle relative to the pixel array, and the first subset of pixels and the second subset of pixels are processed separately, for example to enable parallel processing. Image processing device 300 may be used for encoding large image frames, such as panoramic image frames that are constructed by combining image frames captured by multiple image sensors, or large image frames that are captured using a wide-angle lens, for example, where the large image frame is divided into two or more portions, as described with respect to system 100 with reference to Figures 1, 4, and 5. Image processing device 300 may be included in a system such as system 100 described with reference to Figure 1.
[0051] The image processing device 300 includes a circuit 130. The circuit 130 is configured to perform the functions of the system 100. The circuit 130 may include a processor 132, such as a central processing unit (CPU), a microcontroller, or a microprocessor. The processor 132 is configured to execute program code. The program code may, for example, be configured to perform the functions of the system 100.
[0052] The image processing device 300 may further include memory 140. The memory 340 may be one or more of a buffer, flash memory, a hard drive, removable media, volatile memory, non-volatile memory, random access memory (RAM), or another suitable device. In an exemplary arrangement, the memory 140 includes non-volatile memory for long-term data storage and volatile memory that serves as system memory for the circuit 130. The memory 140 may exchange data with the circuit 130 over a data bus. There may also be associated control lines and an address bus between the memory 140 and the circuit 130. Data may further be exchanged between the first processing circuit 110 and the second processing circuit 120 over the data bus.
[0053] The functionality of image processing device 300 may be embodied in the form of executable logic routines (e.g., lines of code, software programs, etc.) stored on a non-transitory computer-readable medium (e.g., memory 140) of image processing device 300 and executed by circuitry 130 (e.g., using processor 132). Furthermore, the functionality of image processing device 300 may be a standalone software application or may form part of a software application that performs additional tasks related to image processing device 300. The described functions may be considered as methods that a processing unit of circuitry 130, e.g., processor 132, is configured to execute. Also, while the described functions may be implemented in software, such functionality may equally be performed via dedicated hardware or firmware, or some combination of hardware, firmware, and / or software.
[0054] Because the image processing device 300 is intended to be used in a scenario in which a first subset of pixels and a second subset of pixels are processed separately in the first processing circuit 110 and the second processing circuit 120, respectively, it is desirable for as little pixel data as possible to be shared between the first processing circuit 110 and the second processing circuit 120, as such sharing would require synchronization, including the transfer of pixel data, between the first processing circuit 110 and the second processing circuit 120, which would slow down processing. Therefore, when encoding pixel data in one of the first processing circuit 110 and the second processing circuit 120, such encoding should preferably require the transfer of as little pixel data as possible. Because encoding will be performed in tiles of slices, the division into slices and tiles should be such that each tile is primarily associated with pixel data from one of the first subset of pixels and the second subset of pixels, i.e., some tiles may be primarily associated with pixel data from the first subset of pixels and some tiles may be primarily associated with pixel data from the second subset of pixels. To this end, circuit 130 is configured to perform a division function for dividing the pixel array into slices and tiles based on the tilt angle.
[0055] In particular, the circuit 130 is configured to perform a first division function 151 that is configured to divide the pixel array into two or more slices.
[0056] The circuit 130 is further configured to perform a second division function 152 configured to divide each slice into two or more tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by a first encoder, and the second subset of tiles being encoded by a second encoder. In addition to being disjoint, the first subset of tiles and the second subset of tiles will be contiguous, respectively, and primarily associated with pixels on one side of a first boundary between the first subset of pixels and the second subset of pixels, such that one of the first subset of tiles and the second subset of tiles is associated with pixels on one side of a first boundary between the first subset of pixels and the second subset of pixels, and the other of them is associated with pixels on the other side of the first boundary. The second partitioning function is further configured to set a second boundary between the first subset of tiles and the second subset of tiles at an offset between two adjacent slices of the two or more slices, the offset being based on the slant angle. Specifically, the offset is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary between the first subset of pixels and the second subset of pixels is slant at the slant angle v relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset.For example, the offset may be set based on a tilt angle using an iterative method in which the sum of the number of pixels to be encoded into a first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels to be encoded into a second subset of tiles of each slice whose pixel data is stored in the first buffer is determined for different offsets, and the offset is set to the offset that results in the smallest sum.
[0057] The image processing device 300 and the functions included therein may further be adapted as corresponding functions of the system 100 as described with respect to FIG.
[0058] Five examples are described below with reference to FIGS. 6, 7a-7b, 8a-8d, 9a-9d, and 10a-10d, in which a pixel array is divided into tiles or into slices and tiles. Note that the absolute and relative sizes of the pixel array, slices, tiles, and tilt angles are selected for illustrative purposes only and may not necessarily reflect any actual scenario. In FIGS. 6, 7a-7b, 8a-8d, 9a-9d, and 10a-10d, each square with a thin solid line and containing the number "1" or the number "2" corresponds to either a single pixel or a pixel block containing multiple pixels, each square or rectangle with bold dashed lines corresponds to a tile, and each thick horizontal line indicates a fourth boundary between slices. For example, in Figure 7a, pixel array 700 is divided into eight square tiles, each consisting of nine pixels or pixel blocks, but pixel array 700 is not divided into any slices. In Figure 7b, pixel array 700 is divided vertically into two slices, each of three pixels or pixel blocks, and each slice is divided into three tiles. Four of the tiles consist of nine pixels or pixel blocks, and two of the tiles consist of 18 pixels or pixel blocks.
[0059] Referring now to FIG. 6 , a first example of dividing a pixel array 600 into tiles is provided. In this case, a first boundary B between a first subset of pixels and a second subset of pixels is horizontal, i.e., parallel to a column in the pixel array. The first subset of pixels is composed of squares indicated by the numeral "1," and the second subset of pixels is composed of squares indicated by the numeral "2." Each square can correspond to a single pixel or a block of pixels containing multiple pixels. By dividing the pixel array 600 into tiles, it is trivial to avoid the need for transfer of pixel data between the first processing circuit and the second processing circuit when separately encoding the first subset of pixels and the second subset of pixels in the first processing circuit and the second processing circuit, respectively, in order to minimize the amount of pixel data that must be transferred between the first processing circuit and the second processing circuit. For example, the division into eight tiles shown in FIG. 6 does not require any transfer of pixel data.
[0060] 7a-7b for a second example in which pixel array 700 is divided into tiles or slices and tiles. In this case, a first boundary B between a first subset of pixels and a second subset of pixels is slanted at a constant slant angle v. The first subset of pixels is made up of squares designated with the numeral "1," and the second subset of pixels is made up of squares designated with the numeral "2." The first subset of pixels has pixel data buffered in a first buffer in a first processing circuit, and the second subset of pixels has pixel data buffered in a first buffer in the first processing circuit. Each square can correspond to a single pixel or a block of pixels including multiple pixels.
[0061] In FIG. 7a, pixel array 700 is divided into eight tiles, i.e., four columns of tiles with two tiles in each column, according to a prior art method. The pixels of the four tiles in the first two columns from the left are encoded by a first encoder in a first processing circuit, and the four tiles in the last two columns from the left are encoded by a second encoder in a second processing circuit. As can be seen in FIG. 7a, after dividing pixel array 700 into tiles according to a prior art method, pixel data for pixels corresponding to nine squares must be transferred from the second processing circuit to the first circuit when encoding the four tiles in the first two columns by the first encoder, and pixel data for pixels corresponding to nine squares must be transferred from the first processing circuit to the second circuit when encoding the four tiles in the last two columns by the second encoder. Therefore, the entire pixel data for pixels corresponding to 18 squares must be transferred between the two processing circuits in this example using the prior art method.
[0062] When the method 200 according to the present disclosure is performed in this first example as shown in FIG. 7b, the pixel array 700 is first divided into two or more slices, each of which is then divided into two or more tiles, each of which is composed of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by a first encoder, and the second subset of tiles being encoded by a second encoder. When each slice is divided into two or more tiles, a second boundary between the first subset of tiles and the second subset of tiles is set by an offset between two adjacent slices of the two or more slices, the offset being based on the tilt angle. The division into slices and tiles in the method used for FIG. 7b further requires that corresponding tiles in each slice (tiles in the same tile column) be of the same size, i.e., the same width. As shown in FIG. 7b, the pixel array 700 is divided into a first slice S1 and a second slice S2. The first slice S1 is divided into three tiles T1, T2, and T3, with the first tile T1 and the second tile T2 belonging to a first subset of tiles and the third tile T3 belonging to a second subset of tiles. The first subset of tiles and the second subset of tiles of the first slice S1 are disjoint, i.e., each tile belongs to only one of the first subset of tiles and the second subset of tiles. Similarly, the second slice S2 is divided into three tiles T1, T2, and T3, with the first tile T1 belonging to the first subset of tiles and the second tile T2 and the third tile T3 belonging to the second subset of tiles. The first subset of tiles and the second subset of tiles of the second slice S2 are disjoint, i.e., each tile belongs to only one of the first subset of tiles and the second subset of tiles.The second boundary between the first subset of tiles and the second subset of tiles of the first slice S1 and the second boundary between the first subset of tiles and the second subset of tiles of the second slice S2 are offset relative to each other based on a tilt angle v of the first boundary B. The offset is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary B between the first subset of pixels and the second subset of pixels is tilted at the tilt angle v relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset. For example, the offset may be set based on a tilt angle using an iterative method in which the sum of the number of pixels to be encoded into a first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels to be encoded into a second subset of tiles of each slice whose pixel data is stored in the first buffer is determined for different offsets, and the offset is set to the offset that results in the smallest sum.
[0063] 7b, after dividing pixel array 700 into slices and tiles according to the method of the present disclosure, pixel data for pixels corresponding to two squares must be transferred from the second processing circuit to the first circuit when encoding the first subset of tiles of first slice S1, i.e., the first tile T1 and the second tile T2, and pixel data for pixels corresponding to two squares must be transferred from the first processing circuit to the second circuit when encoding the second subset of tiles of first slice S1, i.e., the third tile T3. Furthermore, pixel data for pixels corresponding to two squares must be transferred from the second processing circuit to the first circuit when encoding the first subset of tiles of second slice S2, i.e., the first tile T1, and pixel data for pixels corresponding to two squares must be transferred from the first processing circuit to the second circuit when encoding the second subset of tiles of second slice S2, i.e., the second tile T2 and the third tile T3. Therefore, the entire pixel data for the pixels corresponding to the eight squares must be transferred between the two processing circuits using the method 200 of the present disclosure in this example.
[0064] The offset in Figure 7b is 6 squares. If the tilt angle is decreasing, the offset will likely decrease, and vice versa.
[0065] 8a-8d for a third example in which a pixel array 800 is divided into tiles or slices and tiles. In this case, a first boundary B between a first subset of pixels and a second subset of pixels is tilted at a tilt angle v1, v2 that varies along the first boundary B, such that in a first horizontal portion of the pixel array 800, the first boundary B has a constant first tilt angle v1, and in a second horizontal portion of the pixel array 800, the first boundary B has a constant second tilt angle v2 that is different from the first tilt angle v1. The first subset of pixels is made up of squares designated with the numeral "1," and the second subset of pixels is made up of squares designated with the numeral "2." The first subset of pixels has pixel data buffered in a first buffer in a first processing circuit, and the second subset of pixels has pixel data buffered in a first buffer in the first processing circuit. Each square can correspond to a single pixel or a block of pixels including multiple pixels.
[0066] In FIG. 8A, pixel array 800 is divided into 16 tiles, i.e., four columns of tiles with four tiles in each column, according to a prior art method. The pixels of the eight tiles in the first two columns from the left are encoded by a first encoder in a first processing circuit, and the eight tiles in the last two columns from the left are encoded by a second encoder in a second processing circuit. As can be seen in FIG. 8A, after dividing pixel array 800 into tiles according to a prior art method, pixel data for pixels corresponding to four squares must be transferred from the second processing circuit to the first circuit when encoding the eight tiles in the first two columns by the first encoder, and pixel data for pixels corresponding to 12 squares must be transferred from the first processing circuit to the second circuit when encoding the eight tiles in the last two columns by the second encoder. Therefore, the entire pixel data for pixels corresponding to 16 squares must be transferred between the two processing circuits in this example using the prior art method.
[0067] When the method 200 according to the present disclosure is performed in this third example as shown in FIG. 8b, the pixel array 800 is first divided into two or more slices, each of which is then divided into two or more tiles, each of which is composed of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by a first encoder, and the second subset of tiles being encoded by a second encoder. When each slice is divided into two or more tiles, a second boundary between the first subset of tiles and the second subset of tiles is set by an offset between two adjacent slices of the two or more slices, the offset being based on the slant angles v1 and v2. The division into slices and tiles in the method used for FIG. 8b further requires that corresponding tiles in each slice (tiles in the same tile column) be of the same size, i.e., the same width. The tilt angles v1 and v2 are constant but different in the two horizontal sections, and each of the two horizontal sections is divided into two slices. As shown in FIG. 8b, the pixel array 800 is divided into a first slice S1, a second slice S2, a third slice S3, and a fourth slice S4. The first slice S1 is divided into seven tiles T1-T7, with the first tile T1 through the sixth tile T6 belonging to a first subset of tiles in the first slice S1 and the seventh tile T7 belonging to a second subset of tiles in the first slice S1. Similarly, the second slice S2 is divided into seven tiles T1-T7, with the first tile T1 through the fourth tile T4 belonging to a first subset of tiles in the second slice S2 and the fifth tile T5 through the seventh tile T7 belonging to a second subset of tiles in the second slice S2. The third slice S3 is divided into seven tiles T1 to T7, with the first tile T1 to the third tile T3 belonging to the first subset of tiles in the third slice S3, and the fourth tile T4 to the seventh tile T7 belonging to the second subset of tiles in the third slice S3.Finally, the fourth slice S4 is divided into seven tiles T1-T7, with the first tile T1 and the second tile T2 belonging to the first subset of tiles in the fourth slice S4, and the third tile T3-T7 belonging to the second subset of tiles in the fourth slice S4. The first subset of tiles and the second subset of tiles in each slice are disjoint, i.e., each tile belongs to only one of the first subset of tiles and the second subset of tiles. The second boundary between the first subset of tiles and the second subset of tiles in the first slice S1 and the second boundary between the first subset of tiles and the second subset of tiles in the second slice S2 are offset relative to each other based on the local tilt angle v1 of the first boundary B in the horizontal portions of the third slice S3 and the fourth slice S4. The second boundary between the first subset of tiles and the second subset of tiles in the second slice S2 and the second boundary between the first subset of tiles and the second subset of tiles in the third slice S2 are offset relative to each other based on local tilt angles v1, v2 of the first boundary B in the horizontal portions of the second slice S2 and the third slice S3. Because the second slice S2 and the third slice S3 are located in different horizontal portions having different constant tilt angles, the local tilt angles in the second slice S2 and the third slice S3 can be determined as the average of the first tilt angle v1 and the second tilt angle v2. The second boundary between the first subset of tiles and the second subset of tiles in the third slice S3 and the second boundary between the first subset of tiles and the second subset of tiles in the fourth slice S4 are offset relative to each other based on the local tilt angle v2 at which the first boundary B in the horizontal portions of the third slice S3 and the fourth slice S4 is located.The corresponding offset between each two adjacent slices is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary B between the first subset of pixels and the second subset of pixels is tilted at varying tilt angles v1, v2 relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset.
[0068] 8b, after dividing pixel array 800 into slices and tiles according to the method of the present disclosure, pixel data for pixels corresponding to one square must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in first slice S1, i.e., the first tile T1 through the sixth tile T6, and pixel data for pixels corresponding to one square must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in first slice S1, i.e., the seventh tile T7. Furthermore, pixel data for pixels corresponding to one square must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in second slice S2, i.e., the first tile T1 through the fourth tile T4, and pixel data for pixels corresponding to one square must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in second slice S2, i.e., the fifth tile T5 through the seventh tile T7. Furthermore, pixel data for pixels corresponding to one squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in the third slice S3, i.e., the first tile T1 to the third tile T3, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in the third slice S3, i.e., the fourth tile T4 to the seventh tile T7. Finally, pixel data for pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in the fourth slice S4, i.e., the first tile T1 and the second tile T2, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in the fourth slice S4, i.e., the third tile T3 to the seventh tile T7. Therefore, the entire pixel data for the pixels corresponding to the five squares must be transferred between the two processing circuits using the method 200 of the present disclosure in this example.
[0069] The offset in Figure 8b is two squares between the first and second slices, one square between the second slice S2 and the third slice S3, and one square between the third slice S3 and the fourth slice S4. If the tilt angle is decreasing in any of the adjacent slices, the offset is decreasing between those two adjacent slices, and vice versa.
[0070] Now, reference is made to FIG. 8c, which illustrates a third example of the division of pixel array 800 into slices and tiles according to the present disclosure. In contrast to the division described with respect to FIG. 8b, the division into slices and tiles used for FIG. 8c does not impose any restrictions on the size of tiles in different slices. Therefore, the size and position of tiles within a slice can be independently set. As a result, as seen in FIG. 8c, pixel array 800 is divided into first to fourth slices S1, S2, S3, and S4. First slice S1 is divided into four tiles, where the first three tiles from the left belong to the first subset of tiles in first slice S1, and the last tile belongs to the second subset of tiles in first slice S1. Similarly, second slice S2 is divided into five tiles, where the first three tiles belong to the first subset of tiles in second slice S2, and the last two tiles belong to the second subset of tiles in second slice S2. The third slice S3 is divided into four tiles, with the first two tiles from the left belonging to the first subset of tiles for the third slice S3 and the last two tiles belonging to the second subset of tiles for the third slice S3. Finally, the fourth slice S4 is divided into five tiles, with the first two tiles from the left belonging to the first subset of tiles for the fourth slice S4 and the last three tiles belonging to the second subset of tiles for the fourth slice S4. The first subset of tiles and the second subset of tiles for each slice are disjoint, i.e., each tile belongs to only one of the first subset of tiles and the second subset of tiles. The second boundary between the first subset of tiles and the second subset of tiles of the first slice S1 and the second boundary between the first subset of tiles and the second subset of tiles of the second slice S2 are offset relative to each other based on the local tilt angle v1 of the first boundary B in the horizontal portions of the first slice S1 and the second slice S2.The second boundary between the first and second subsets of tiles in the second slice S2 and the second boundary between the first and second subsets of tiles in the third slice S3 are offset relative to each other based on the local tilt angles v1 and v2 of the first boundaries B in the horizontal portions of the second slice S2 and the third slice S3. Because the second slice S2 and the third slice S3 are located in different horizontal portions having different constant tilt angles, the local tilt angles in the second slice S2 and the third slice S3 can be determined as the average of the first and second tilt angles v1 and v2. The second boundary between the first and second subsets of tiles in the third slice S3 and the second boundary between the first and second subsets of tiles in the fourth slice S4 are offset relative to each other based on the local tilt angle v2 of the first boundaries B in the horizontal portions of the third slice S3 and the fourth slice S4. The corresponding offset between each two adjacent slices is selected such that the number of pixels encoded into the first subset of tiles of each slice, whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice, whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary B between the first subset of pixels and the second subset of pixels is tilted at tilt angle v1 or v2 or at varying tilt angles v1, v2 relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset.
[0071] 8c, after dividing pixel array 800 into slices and tiles according to the method of the present disclosure where tile sizes are independently configurable in different slices, pixel data for pixels corresponding to one square must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in first slice S1, i.e., tiles 1 through 3, and pixel data for pixels corresponding to one square must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in first slice S1, i.e., tiles 4. Furthermore, pixel data for pixels corresponding to one square must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in second slice S2, i.e., tiles 1 through 3, and pixel data for pixels corresponding to one square must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in second slice S2, i.e., tiles 4 and 5. Furthermore, pixel data for pixels corresponding to one square must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in the third slice S3, i.e., tiles one and two, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in the third slice S3, i.e., tiles three and four. Finally, pixel data for pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in the fourth slice S4, i.e., tiles one and two, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in the fourth slice S4, i.e., tiles three through five. Therefore, the entire pixel data for pixels corresponding to five squares must be transferred between the two processing circuits in this example using the method 200 of the present disclosure.
[0072] The offset in Figure 8c is two squares between the first slice S1 and the second slice S2, one square between the second slice S2 and the third slice S3, and one square between the third slice S3 and the fourth slice S4. If the tilt angle decreases in any of the adjacent slices, the offset decreases between those adjacent slices, and vice versa.
[0073] Note that even if there are no restrictions on the size of tiles in different slices with respect to Figure 8c, each slice is still divided into two or more tiles. Alternatively, each slice could also be divided into two tiles, one on each side of the first boundary. However, dividing a slice into two or more tiles with similar sizes may simplify encoding scheduling because encoding tiles of similar sizes takes similar time. This also allows the use of image data in corresponding buffers for corresponding tiles in other slices of the two or more slices.
[0074] 8d illustrates a division of pixel array 800 into slices and tiles where corresponding tiles (tiles in the same tile column) in each slice are required to be the same size, i.e., the same width, except for tiles at a first boundary B between a first subset of pixels and a second subset of pixels. As can be seen, most corresponding tiles in a slice are the same size. However, the widths of the tiles at a first boundary B between a first subset of pixels and a second subset of pixels in second slice S2 and fourth slice S4 are adapted and positioned such that the second boundary between the first subset of tiles and the second subset of tiles is positioned at an offset relative to their respective adjacent slices, thereby reducing the total amount of pixel data that must be transferred between two processing circuits compared to the prior art. Specifically, the offset of the second boundary between the first slice S1 and the second slice S2 is two squares, the offset of the second boundary between the second slice S2 and the third slice S3 is one square, and the offset of the second boundary between the third slice S3 and the fourth slice S4 is one square.
[0075] 9a-9d for a fourth example in which pixel array 900 is divided into tiles or slices and tiles. In this case, a first boundary B between a first subset of pixels and a second subset of pixels is tilted at a tilt angle that varies along the first boundary B such that the first boundary B is curved. The first subset of pixels is made up of squares designated with the number "1," and the second subset of pixels is made up of squares designated with the number "2." The first subset of pixels has pixel data buffered in a first buffer in a first processing circuit, and the second subset of pixels has pixel data buffered in a first buffer in the first processing circuit. Each square can correspond to a single pixel or a block of pixels including multiple pixels.
[0076] 8a-8d , the first boundary B between the first subset of pixels and the second subset of pixels of the pixel array 900 in FIGS. 9a-9d is also tilted with a varying tilt angle, but is curved rather than at a constant tilt angle in the two horizontal portions of the pixel array 900. However, because the fourth example is designed such that the average tilt angle of the curved first boundary B in the first two slices S1, S2 of FIGS. 9b-9d is close to the constant tilt angle in the first two slices S1, S2 of FIGS. 8b-8d , and the curved first boundary B in the last two slices S3, S4 of FIGS. 9b-9d is close to the constant tilt angle in the last two slices S3, S4 of FIGS. 8b-8d , the division into tiles based on the prior art method and into slices and tiles based on the method according to the present disclosure is the same in each of FIGS. 9a-9d as in FIGS. 8a-8d , respectively. The location of each tile in each slice in each of the first subset of tiles and the second subset of tiles is the same in Figures 9b, 9c, and 9d as in Figures 8b, 8c, and 8d, respectively. Similarly, the total amount of pixel data for a pixel that must be transferred between two processing circuits using the prior art method for Figure 9a is the same as for Figure 8a, and using method 200 according to the present disclosure for Figures 9b, 9c, and 9d is the same as for Figures 8b, 8c, and 8d, respectively.
[0077] 10a-10d for a fifth example in which pixel array 1000 is divided into tiles or slices and tiles. In this case, a first boundary B between a first subset of pixels and a second subset of pixels is tilted at a tilt angle that varies along the first boundary B such that the first boundary B is curved. The first subset of pixels is made up of squares designated with the number "1," and the second subset of pixels is made up of squares designated with the number "2." The first subset of pixels has pixel data buffered in a first buffer in a first processing circuit, and the second subset of pixels has pixel data buffered in a first buffer in the first processing circuit. Each square can correspond to a single pixel or a block of pixels including multiple pixels.
[0078] In FIG. 10a, pixel array 1000 is divided into 16 tiles, i.e., four columns of tiles with four tiles in each column, according to a prior art method. The pixels of the eight tiles in the first two columns from the left are encoded by a first encoder in a first processing circuit, and the eight tiles in the last two columns from the left are encoded by a second encoder in a second processing circuit. As can be seen in FIG. 10a, after dividing pixel array 1000 into tiles according to a prior art method, pixel data for pixels corresponding to six squares must be transferred from the second processing circuit to the first circuit when encoding the eight tiles in the first two columns by the first encoder, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding the eight tiles in the last two columns by the second encoder. Therefore, the entire pixel data for pixels corresponding to six squares must be transferred between two processing circuits in this example using the prior art method.
[0079] When the method 200 according to the present disclosure is performed in this third example as shown in FIG. 10b, the pixel array 1000 is first divided into two or more slices, each of which is then divided into two or more tiles, each of which is composed of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, and the first subset of tiles are encoded by a first encoder and the second subset of tiles are encoded by a second encoder. When each slice is divided into two or more tiles, a second boundary between the first subset of tiles and the second subset of tiles is set by an offset between two adjacent slices of the two or more slices, the offset being based on the tilt angle. The division into slices and tiles in the method used for FIG. 10b further requires that corresponding tiles in each slice (tiles in the same tile column) be of the same size, i.e., the same width. The tilt angle varies along the first boundary B such that the first boundary B is curved. 10b, pixel array 1000 is divided into first through fourth slices S1, S2, S3, and S4. First slice S1 is divided into five tiles T1 through T5, with first tile T1 through third tile T3 belonging to a first subset of tiles in first slice S1, and fourth tile T4 and fifth tile T5 belonging to a second subset of tiles in first slice S1. Similarly, second slice S2 is divided into five tiles T1 through T5, with first tile T1 and second tile T2 belonging to a first subset of tiles in second slice S2, and third tile T3 through fifth tile T5 belonging to a second subset of tiles in second slice S2. The third slice S3 is divided into five tiles T1 to T5, with the first tile T1 and the second tile T2 belonging to a first subset of tiles in the third slice S3, and the third tile T3 to the fifth tile T5 belonging to a second subset of tiles in the third slice S3.Finally, the fourth slice S4 is divided into five tiles T1-T5, with the first tile T1 through the third tile T3 belonging to the first subset of tiles in the fourth slice S4, and the fourth tile T4 and the fifth tile T5 belonging to the second subset of tiles in the fourth slice S4. The first subset of tiles and the second subset of tiles in each slice are disjoint, i.e., each tile belongs to only one of the first subset of tiles and the second subset of tiles. The second boundaries between the first subset of tiles and the second subset of tiles in the first slice S1 and the first subset of tiles and the second subset of tiles in the second slice S2 are offset relative to each other based on the local tilt angles of the first boundaries B in the horizontal portions of the first slice S1 and the second slice S2. The second boundary between the first subset of tiles and the second subset of tiles in the second slice S2 and the second boundary between the first subset of tiles and the second subset of tiles in the third slice S3 are offset relative to each other based on the local tilt angles of the first boundaries B in the second slice S2 and the third slice S3. The second boundary between the first subset of tiles and the second subset of tiles in the third slice S3 and the second boundary between the first subset of tiles and the second subset of tiles in the fourth slice S4 are offset relative to each other based on the local tilt angles of the first boundaries B in the third slice S3 and the fourth slice S4. The local tilt angle in each two adjacent slices can be determined as the average of the tilt angles of the portions of the curved first boundaries B in the pair of adjacent slices. The corresponding offset between each two adjacent slices is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary B between the first subset of pixels and the second subset of pixels is tilted at a varying tilt angle relative to the pixel array.Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced in relation to not using an offset.
[0080] As can be seen in FIG. 10b, after dividing the pixel array 1000 into slices and tiles according to the method of the present disclosure, pixel data of pixels corresponding to squares of zeros must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles of the first slice S1, i.e., the first tile T1 to the third tile T3, and pixel data of pixels corresponding to squares of zeros must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles of the first slice S1, i.e., the fourth tile T4 and the fifth tile T5. Furthermore, pixel data of pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in the second slice S2, i.e., the first tile T1 and the second tile T2, and pixel data of pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in the second slice S2, i.e., the third tile T3 to the fifth tile T5. Furthermore, pixel data of pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in the third slice S3, i.e., the first tile T1 to the second tile T2, and pixel data of pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in the third slice S3, i.e., the third tile T3 to the fifth tile T5. Finally, pixel data for pixels corresponding to squares of zeros must be transferred from the second processing circuit to the first circuit when encoding the first subset of tiles in the fourth slice S4, i.e., the first tile T1 through the third tile T3, and pixel data for pixels corresponding to squares of zeros must be transferred from the first processing circuit to the second circuit when encoding the second subset of tiles in the fourth slice S4, i.e., the fourth tile T4 and the fifth tile T5. Therefore, none of the pixel data for pixels overall must be transferred between the two processing circuits in this example using the method 200 of the present disclosure.
[0081] The offset in Figure 10b is one square between the first slice S1 and the second slice S2, zero squares between the second slice S2 and the third slice S3, and one square between the third slice S3 and the fourth slice S4. If the tilt angle decreases in any of the adjacent slices, the offset decreases between those adjacent slices, and vice versa.
[0082] Now, reference is made to FIG. 10c, which illustrates a third example of the division of pixel array 1000 into slices and tiles according to the present disclosure. In contrast to the division described with reference to FIG. 10b, the division into slices and tiles used with reference to FIG. 10c does not impose any restrictions on the size of tiles in different slices, with corresponding tiles in each slice. Therefore, the size and position of tiles within a slice can be independently set. As a result, as seen in FIG. 10c, pixel array 1000 is divided into first to fourth slices S1, S2, S3, and S4. First slice S1 is divided into four tiles, where the first two tiles from the left belong to the first subset of tiles in first slice S1, and the last two tiles belong to the second subset of tiles in first slice S1. Second slice S2 is divided into five tiles, where the first two tiles belong to the first subset of tiles in second slice S2, and the last three tiles belong to the second subset of tiles in second slice S2. The third slice S3 is divided into five tiles, with the first two tiles from the left belonging to the first subset of tiles for the third slice S3 and the last three tiles belonging to the second subset of tiles for the third slice S3. Finally, the fourth slice S4 is divided into four tiles, with the first two tiles from the left belonging to the first subset of tiles for the fourth slice S4 and the last two tiles belonging to the second subset of tiles for the fourth slice S4. The first subset of tiles and the second subset of tiles for each slice are disjoint, i.e., each tile belongs to only one of the first subset of tiles and the second subset of tiles. The second boundary between the first subset of tiles and the second subset of tiles of the first slice S1 and the second boundary between the first subset of tiles and the second subset of tiles of the second slice S2 are offset relative to each other based on the local tilt angle of the first boundary B in the horizontal portions of the first slice S1 and the second slice S2.The second boundary between the first subset of tiles and the second subset of tiles in the second slice S2 and the boundary between the first subset of tiles and the second subset of tiles in the third slice S3 are offset relative to each other based on the local tilt angle of the first boundary B in the second slice S2 and the third slice S3. The second boundary between the first subset of tiles and the second subset of tiles in the third slice S3 and the second boundary between the first subset of tiles and the second subset of tiles in the fourth slice S4 are offset relative to each other based on the local tilt angle of the first boundary B in the third slice S3 and the fourth slice S4. The local tilt angle in each two adjacent slices can be determined as the average of the tilt angles of the portions of the curved first boundary B in the pair of adjacent slices. The corresponding offset between each two adjacent slices is selected such that the number of pixels encoded into the first subset of tiles of each slice whose pixel data is stored in the second buffer, plus the number of pixels encoded into the second subset of tiles of each slice whose pixel data is stored in the first buffer, is reduced relative to not using the offset when the first boundary B between the first subset of pixels and the second subset of pixels is tilted at a varying tilt angle relative to the pixel array. Therefore, the amount of pixel data stored in the second buffer that needs to be transferred to the first encoder and the amount of pixel data stored in the first buffer that needs to be transferred to the second encoder are reduced relative to not using the offset.
[0083] 10c, after dividing pixel array 1000 into slices and tiles according to the method of the present disclosure where tile sizes are independently configurable in different slices, pixel data for pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in first slice S1, i.e., tiles 1 and 2, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in first slice S1, i.e., tiles 3 and 4. Furthermore, pixel data for pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding a first subset of tiles in second slice S2, i.e., tiles 1 and 2, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding a second subset of tiles in second slice S2, i.e., tiles 3 to 5. Furthermore, pixel data for pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding the first subset of tiles in the third slice S3, i.e., the first and second tiles, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding the second subset of tiles in the third slice S3, i.e., the third through fifth tiles. Finally, pixel data for pixels corresponding to zero squares must be transferred from the second processing circuit to the first circuit when encoding the first subset of tiles in the fourth slice S4, i.e., the first and second tiles, and pixel data for pixels corresponding to zero squares must be transferred from the first processing circuit to the second circuit when encoding the second subset of tiles in the fourth slice S4, i.e., the third and fourth tiles. Therefore, no overall pixel data must be transferred between the two processing circuits in this example using the method 200 of the present disclosure.
[0084] The offset in Figure 10c is one square between the first slice S1 and the second slice S2, zero squares between the second slice S2 and the third slice S3, and one square between the third slice S3 and the fourth slice S4. If the tilt angle decreases in any of the adjacent slices, the offset decreases between those adjacent slices, and vice versa.
[0085] 10d illustrates a division of pixel array 1000 into slices and tiles where corresponding tiles (tiles in the same tile column) in each slice are required to be the same size, i.e., the same width, except for tiles at a first boundary B between a first subset of pixels and a second subset of pixels. As can be seen, most corresponding tiles in a slice are the same size. However, the widths of the tiles at a first boundary B between a first subset of pixels and a second subset of pixels in second slice S2 and third slice S3 are adapted and arranged such that the second boundaries between the first subset of tiles and the second subset of tiles are offset relative to their respective adjacent slices, thereby reducing the overall amount of pixel data that must be transferred between two processing circuits compared to the prior art. Specifically, the offset of the second boundary between the first slice S1 and the second slice S2 is one square, the offset of the second boundary between the second slice S2 and the third slice S3 is zero squares, and the offset of the second boundary between the third slice S3 and the fourth slice S4 is one square.
[0086] Those skilled in the art will understand that the present invention is not limited to the embodiments described above. On the contrary, many modifications and variations are possible within the scope of the appended claims. Such modifications and variations can be understood and effected by those skilled in the art in practicing the claimed invention, from a study of the drawings, the disclosure, and the appended claims.
[0087] For example, all of the examples have been described with slices of equal size, i.e., equal height, for several pixels / pixel blocks. However, slices of different sizes may be used. For example, for varying tilt angles along the first boundary, a division into slices of different sizes may be beneficial in different horizontal portions of the pixel array. [Explanation of symbols]
[0088] 100 systems 110 first image processing circuit 112 First Encoder 114 First Buffer 116 First Processor 120 second image processing circuit 122 Second Encoder 124 Second Buffer 126 Second Processor 130 circuits 132 processors 140 memory 151 First division function 152 Second division function 153 First Transfer Function 154 Second Transfer Function 155 First Command Function 156 Second Command Function 300 Image Processing Device 410 first image sensor 420 second image sensor 430 Third Image Sensor 440 4th Image Sensor 500 image frames 510 First Image Portion 520 Second Image Portion 530 Third Image Part 540 Fourth Image Part 600, 700, 800, 900, 1000 pixel array
Claims
1. 1. A method for dividing a pixel array into slices and tiles for encoding the pixel array into an encoded video stream by a first encoder located in a first image processing circuit and a second encoder located in a second image processing circuit, wherein pixels of the pixel array are regularly spaced along vertical and horizontal directions, each slice is separated from each adjacent slice by a horizontal straight line across the entire width of the pixel array and is encoded without requiring access to image data for other slices, and each tile is separated from each adjacent tile of the same slice by a vertical straight line across the entire height of the slice and is encoded without requiring access to image data for other tiles, the pixel array consists of a first subset of pixels whose pixel data is stored in a first buffer located in the first image processing circuit and a second subset of pixels whose pixel data is stored in a second buffer located in the second image processing circuit, a first boundary between the first subset of pixels and the second subset of pixels is inclined at an oblique angle relative to the pixel array, the method comprising: dividing the pixel array into two or more slices; dividing each slice into two or more tiles; the two or more tiles of each slice are composed of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by the first encoder, and the second subset of tiles being encoded by the second encoder; the act of dividing each slice into two or more tiles includes setting the second boundaries between the first subset of tiles and the second subset of tiles in two adjacent slices with an offset along the horizontal direction between two adjacent slices of the two or more slices such that the second boundaries between the first subset of tiles and the second subset of tiles in two adjacent slices are not aligned along the horizontal direction, the offset being based on the tilt angle, such that a sum of the number of pixels to be coded into the first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels to be coded into the second subset of tiles of each slice whose pixel data is stored in the first buffer is reduced compared to when an offset is not used.
2. The method of claim 1 , wherein the tilt angle is constant along the first boundary between the first subset of pixels and the second subset of pixels.
3. the tilt angle varies along the first boundary between the first subset of pixels and the second subset of pixels; the act of dividing the pixel array into two or more slices includes dividing the pixel array into three or more slices; 2. The method of claim 1, wherein the act of dividing each slice into two or more tiles includes, for each two adjacent slices of the three or more slices, setting the second boundary between a first subset of tiles and a second subset of tiles of each slice of the two adjacent slices with an offset, the offset being based on a local tilt angle of the first boundary between the first subset of pixels and the second subset of pixels in the two adjacent slices.
4. The method of claim 3 , wherein the first boundary between the first subset of pixels and the second subset of pixels is curved.
5. 4. The method of claim 3, wherein the first boundary between the first subset of pixels and the second subset of pixels is slanted at a constant slant angle but at different slant angles in different horizontal portions of the pixel array.
6. 6. The method of claim 5, wherein the act of dividing the pixel array into three or more slices comprises dividing the pixel array into four or more slices by dividing each separate horizontal portion of the pixel array into two or more slices such that, for each two adjacent horizontal portions, a third boundary between the two adjacent horizontal portions aligns with a fourth boundary between two slices.
7. 7. The method of claim 3, wherein the local tilt angle of the first boundary between the first subset of pixels and the second subset of pixels in the two adjacent slices is determined as an average tilt angle in the two adjacent slices.
8. The method of claim 1 , wherein the size of corresponding tiles of the two or more tiles in each of the two or more slices is the same in each of the two or more slices.
9. transferring pixel data for pixels to be encoded in a first subset of the tiles of each slice whose pixel data is stored in the second buffer to the first encoder; encoding a first subset of the tiles with the first encoder; transferring pixel data for pixels to be encoded in a second subset of the tiles of each slice whose pixel data is stored in the first buffer to the second encoder; The method of claim 1 , further comprising: encoding a second subset of the tiles with the second encoder.
10. A non-transitory computer-readable storage medium having stored thereon instructions for performing the method of any one of claims 1 to 6 when executed by a device having processing capabilities.
11. 1. An image processing device for dividing a pixel array into slices and tiles for encoding the pixel array into an encoded video stream by a first encoder located in a first image processing circuit and a second encoder located in a second image processing circuit, wherein pixels of the pixel array are arranged at regular intervals along vertical and horizontal directions, each slice is separated from each adjacent slice by a horizontal straight line across the entire width of the pixel array and is encoded without requiring access to image data for other slices, and each tile is separated from each adjacent tile of the same slice by a vertical straight line across the entire height of the slice and is encoded without requiring access to image data for other tiles, the pixel array consists of a first subset of pixels whose pixel data is stored in a first buffer located in the first image processing circuit and a second subset of pixels whose pixel data is stored in a second buffer located in the second image processing circuit, a first boundary between the first subset of pixels and the second subset of pixels is inclined at an oblique angle with respect to the pixel array, and the image processing device: a first division function configured to divide the pixel array into two or more slices; a second partitioning function configured to partition each slice into two or more tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by the first encoder and the second subset of tiles being encoded by the second encoder; the second division function is further configured to set the second boundary between the first subset of tiles and the second subset of tiles with an offset along the horizontal direction between two adjacent slices of the two or more slices so that second boundaries between the first subset of tiles and the second subset of tiles in two adjacent slices are not aligned along the horizontal direction, the offset being based on the tilt angle, and a sum of the number of pixels to be coded into the first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels to be coded into the second subset of tiles of each slice whose pixel data is stored in the first buffer is reduced compared to when an offset is not used.
12. the tilt angle varies along the first boundary between the first subset of pixels and the second subset of pixels; the first division function is configured to divide the pixel array into three or more slices; 12. The image processing device of claim 11, wherein the second division function is configured to, for each two adjacent slices of the three or more slices, set the second boundary between the first subset of tiles and the second subset of tiles of each of the two adjacent slices with an offset, the offset being based on a local tilt angle of the first boundary between the first subset of pixels and the second subset of pixels in the two adjacent slices.
13. the first boundary between the first subset of pixels and the second subset of pixels is sloped at a constant slope angle but at different slope angles in different horizontal portions of the pixel array; 13. The image processing device of claim 12, wherein the second division function is configured to divide each separate horizontal portion of the pixel array into two or more slices such that, for each two adjacent horizontal portions, a third boundary between the two adjacent horizontal portions aligns with a fourth boundary between two adjacent slices.
14. 14. The image processing device of claim 12 or 13, wherein the second splitting function is further configured to determine the local tilt angle of the first boundary between the first subset of pixels and the second subset of pixels in the two adjacent slices as an average tilt angle in the two adjacent slices.
15. 1. A system for encoding a pixel array into an encoded video stream, wherein pixels of the pixel array are regularly spaced along vertical and horizontal directions, the pixel array being composed of a first subset of pixels and a second subset of pixels, a first boundary between the first subset of pixels and the second subset of pixels being inclined at an oblique angle relative to the pixel array, the system comprising: a first image processing circuit; a second image processing circuit; a first encoder disposed in the first image processing circuit; a second encoder disposed in the second image processing circuit; a first buffer disposed in the first image processing circuit, the first buffer storing pixel data for the first subset of pixels; a second buffer disposed in the second image processing circuit, the second buffer storing pixel data for the second subset of pixels; A circuit comprising: a first division function configured to divide the pixel array into two or more slices, each slice separated from each adjacent slice by a horizontal straight line spanning the entire width of the pixel array, and each slice being encoded without requiring access to image data for other slices; a second division function configured to divide each slice into two or more tiles, each tile separated from each adjacent tile of the same slice by a vertical straight line across the entire height of the slice, and encoded without requiring access to image data for other tiles, the two or more tiles of each slice consisting of a first subset of tiles and a second subset of tiles, the first subset of tiles and the second subset of tiles being disjoint, the first subset of tiles being encoded by the first encoder and the second subset of tiles being encoded by the second encoder; the second division function is further configured to set the second boundary between the first subset of tiles and the second subset of tiles with an offset along the horizontal direction between two adjacent slices of the two or more slices such that the second boundaries between the first subset of tiles and the second subset of tiles in two adjacent slices are not aligned along the horizontal direction, the offset being based on the tilt angle, such that a sum of the number of pixels to be coded into the first subset of tiles of each slice whose pixel data is stored in the second buffer and the number of pixels to be coded into the second subset of tiles of each slice whose pixel data is stored in the first buffer is reduced compared to when an offset is not used; a first forwarding function configured to forward pixel data for pixels of a first subset of the tiles of each slice, whose pixel data is stored in the second buffer, to the first encoder; a second forwarding function configured to forward pixel data for pixels of a second subset of the tiles of each slice for which pixel data is stored in the first buffer to the second encoder; the first encoder configured to encode a first subset of the tiles; The second encoder is configured to encode a second subset of the tiles.
Citation Information
Patent Citations
advanced arithmetic coder
JP2018521555A
Image encoding / decoding method and apparatus, and recording medium storing bitstream
US20210274176A1