On 06/04/23 13:11, Vignesh Raghavendra wrote:
Hi Nikhil,
On 06/04/23 11:57, Nikhil M Jain wrote:
+struct bmp_image *gunzip_bmp(unsigned long addr, unsigned long *lenp,
+ void **alloc_addr)
+{
+ void *dst;
+ unsigned long len;
+ struct bmp_image *bmp;
+
if (!IS_ENABLED(CONFIG_VIDEO_BMP_GZIP))
return NULL;
I preferred to use #if to avoid compilation of code when not required.
For example, if someone doesn't want to display a gzip bmp image they
wouldn't want the code to be compiled, so that binary size doesn't
increase.
Both are equivalent. Compiler will optimize out the function if
CONFIG_VIDEO_BMP_GZIP is not defined.
#ifdefs are complicated to read compared to inline if()s (at least for me).
+ /*
+ * Decompress bmp image
+ */
+ len = CONFIG_VIDEO_LOGO_MAX_SIZE;
+ /* allocate extra 3 bytes for 32-bit-aligned-address + 2
alignment */
+ dst = malloc(CONFIG_VIDEO_LOGO_MAX_SIZE + 3);
+ if (!dst) {
+ puts("Error: malloc in gunzip failed!\n");
+ return NULL;
+ }
+
+ /* align to 32-bit-aligned-address + 2 */
+ bmp = dst + 2;
+
+ if (gunzip(bmp, CONFIG_VIDEO_LOGO_MAX_SIZE, map_sysmem(addr, 0),
+ &len)) {
+ free(dst);
+ return NULL;
+ }
+ if (len == CONFIG_VIDEO_LOGO_MAX_SIZE)
+ puts("Image could be truncated (increase
CONFIG_VIDEO_LOGO_MAX_SIZE)!\n");
+
+ /*
+ * Check for bmp mark 'BM'
+ */
+ if (!((bmp->header.signature[0] == 'B') &&
+ (bmp->header.signature[1] == 'M'))) {
+ free(dst);
+ return NULL;
+ }
+
+ debug("Gzipped BMP image detected!\n");
+
+ *alloc_addr = dst;
+ return bmp;
+}
+#else
+struct bmp_image *gunzip_bmp(unsigned long addr, unsigned long *lenp,
+ void **alloc_addr)
+{
+ return NULL;
+}
+#endif
+
[...]
I will add a new patch which replaces #ifdef to if(CONFIG_IS_ENABLED())
and send V7 series.
Thank you,
Nikhil