Parallelizing determination of pixel values for use with a color filter array
Devices and techniques are generally described for parallelizing determination of image grayscale pixel values based on their color filter array locations in e.g., a frame buffer associated with an electrophoretic display device. An example method may include receiving an image stored in a frame buffer associated with an electrophoretic display of a computing device, wherein the electrophoretic display includes black and white ink and a color filter array overlaid thereon; identifying, for the first image, a first processing region of the frame buffer, a second processing region of the frame buffer, and a third processing region of the frame buffer; determining, using a serial processing operation, grayscale values for pixels in the first processing region; determining, using a parallel processing operation, grayscale values for pixels in the second processing region; and determining, using the serial processing operation, grayscale values for pixels in the third processing region.
1 . A computer-implemented method comprising: receiving a first image stored in a frame buffer associated with an electrophoretic display of a computing device, wherein the electrophoretic display includes black and white ink and a color filter array overlaid thereon; identifying, for the first image, a first processing region of the frame buffer, a second processing region of the frame buffer, and a third processing region of the frame buffer; for each of the first, second and third processing regions, determining grayscale values for pixels by: extracting information relating to whether each pixel of the first image is black or white; performing a first dithering to the first image to generate a second image having a second bit depth, wherein the second bit depth is lower than a first bit depth;
determining a color filter array channel corresponding to each pixel of the second image based on the grayscale values in the first, second and third processing regions of the frame buffer; selecting a color filter array channel value corresponding to the color filter array channel for each pixel of the second image; performing a second dithering to the second image to generate a third image having a third bit depth, wherein the third bit depth is lower than the second bit depth; and storing the third image and the information relating to whether each pixel of the first image is black or white in the frame buffer,
wherein the determining grayscale values for pixels in the first and third processing regions uses a serial processing operation, and the determining grayscale values for pixels in the second processing region uses a parallel processing operation.
2 . The computer-implemented method of claim 1 , comprising executing C code in performing the serial processing operation in the first and third processing regions, wherein the first and third processing regions comprise boundary regions of the first image.
3 . The computer-implemented method of claim 1 , comprising executing vectorized instructions in performing the parallel processing operation in the second processing region, wherein the second processing region has a size that is a multiple of eight pixels.
4 . The computer-implemented method of claim 1 , comprising:
performing the first dithering and second dithering using blue noise dithering techniques.
5 . A method comprising:
receiving a first image stored in a frame buffer associated with an electrophoretic display of a computing device, wherein the electrophoretic display includes black and white ink and a color filter array overlaid thereon;
identifying, for the first image, a first processing region of the frame buffer, a second processing region of the frame buffer, and a third processing region of the frame buffer;
determining, using one or more serial processing operations, grayscale values for pixels in the first processing region;
determining, using one or more parallel processing operations, grayscale values for pixels in the second processing region; and
determining, using one or more serial processing operations, grayscale values for pixels in the third processing region.
6 . The method of claim 5 , wherein each of the first and third processing regions includes pixels on a same row that are not divisible by a vector size selected for performing vectorized instructions for parallel processing operation.
7 . The method of claim 5 , comprising:
performing a first dithering to the first image having a first bit depth to generate a second image having a second bit depth, wherein the second bit depth is lower than the first bit depth; and
performing a second dithering to the second image to generate a third image having a third bit depth, wherein the third bit depth is lower than the second bit depth.
8 . The method of claim 7 , comprising performing the first dithering and second dithering using Blue noise dithering techniques.
9 . The method of claim 7 , further comprising, for each pixel in the first and third processing regions:
extracting information relating to whether a pixel is black or white;
performing the first dithering;
determining a color filter array channel for the pixel based on its position within the frame buffer;
selecting a color filter array channel value for the pixel corresponding to the selected color filter array channel;
determining a grayscale value for the pixel based on the selected color filter array channel value;
performing the second dithering; and
storing the third image and the information relating to whether each pixel of the first image is black or white in the frame buffer.
10 . The method of claim 9 , comprising executing C code in performing serial processing operation in the first and third processing regions.
11 . The method of claim 7 , further comprising, for groups of pixels in the second processing region:
applying simultaneously vectorized instructions on the groups of pixels to:
extract information relating to whether each pixel of the groups of pixels is black or white;
perform the first dithering;
determine a color filter array channel for each pixel based on its position within the frame buffer;
select a color filter array channel value for each pixel corresponding to the selected color filter array channel;
determine a grayscale value for each pixel based on the selected color filter array channel value;
perform the second dithering; and
store the third image and the information relating to whether each pixel of the first image is black or white in the frame buffer.
12 . The method of claim 11 , wherein each group of pixels includes eight pixels, wherein the second processing region has a size that is a multiple of eight pixels.
13 . An electronic device comprising:
a display assembly comprising
first color components having a first color and a first charge polarity,
second color components having a second color different from the first color,
a thin film transistor assembly,
a color filter array;
one or more processors;
one or more computer readable media storing processor executable instructions which, when executed using the one or more processors, cause the electronic device to perform operations comprising
determining, based on first data indicating one or more boundaries of one or more dither regions, a first set of pixel locations in a first line for parallel processing,
storing, in a first vector memory register, respective pixel color data for each respective pixel location of the first set of pixel locations that indicates a respective set of color channel values for the respective pixel location,
determining, using one or more vector operations utilizing dither map data and the pixel color data stored in the first vector memory register, respective dithered pixel color data for each respective pixel location of the first set of pixel locations,
determining, utilizing one or more vector operations and based on the dithered pixel color data for the first set of pixel locations and color filter array data indicating a respective color channel associated with each respective pixel location of the first set of pixel locations, respective grayscale data for each respective pixel location of the first set of pixel locations, and
updating, based on the respective gray scale data for a first pixel location of the first set of pixel locations, the display assembly by causing the thin film transistor assembly to effect movement of one or more of the first color components corresponding to the first pixel location.
14 . The electronic device of claim 13 , wherein the display assembly is an electrophoretic display assembly, and wherein the electrophoretic display assembly comprises a plurality of microcapsules each containing some of the first color components and some of the second color components.
15 . The electronic device of claim 13 , wherein the dither map data comprises respective dither map data for each respective pixel location of the first set of pixel locations that indicates a respective dither map value for the respective pixel location, and wherein the one or more computer readable media store processor executable instructions which, when executed using the one or more processors, cause the electronic device to perform operations comprising
storing, in a second vector memory register, the dither map data.
16 . The electronic device of claim 13 , wherein the one or more computer readable media store processor executable instructions which, when executed using the one or more processors, cause the electronic device to perform operations comprising
determining, utilizing one or more vector operations and based on the dithered pixel color data for the first set of pixel locations, respective index data for each respective pixel location of the first set of pixel locations, and
determining, for each respective pixel location of the first set of pixel locations using one or more lookup tables and the respective index data, respective fine-tuned color data that indicates a respective set of color channel values for the respective pixel location;
wherein the respective gray scale data for each respective pixel location of the first set of pixel locations is determined based on the respective fine-tuned color data for that respective pixel location.
17 . The electronic device of claim 13 , wherein the first set of pixel locations is a set of eight pixel locations.
18 . The electronic device of claim 13 , wherein a number of pixel locations in the first set of pixel locations is equal to a number of pixel locations for which respective pixel color data can be stored in the first vector memory register.
19 . The electronic device of claim 13 , wherein the first vector memory register is static memory comprising transistors implementing latches.
20 . The electronic device of claim 13 , wherein the one or more computer readable media store processor executable instructions which, when executed using the one or more processors, cause the electronic device to perform operations comprising
after the updating of the display assembly by causing the thin film transistor assembly to effect movement of one or more of the first color components corresponding to the first pixel location,
determining, based on the first data indicating one or more boundaries of one or more dither regions, a second set of pixel locations in the first line for parallel processing,
determining respective gray scale data for each respective pixel location of the second set of pixel locations, and
updating, based on the respective gray scale data for a second pixel location of the second set of pixel locations, the display assembly by causing the thin film transistor assembly to effect movement of one or more of the first color components corresponding to the second pixel location.