LCOV - code coverage report
Current view: top level - gifdec - gifread.c (source / functions) Coverage Total Hit
Test: gifread_o_empty_dict.info Lines: 89.3 % 56 50
Test Date: 2024-03-08 14:14:28 Functions: 100.0 % 3 3

            Line data    Source code
       1              : /* gifdec example -- simple GIF player using SDL2
       2              :  * compiling:
       3              :  *   cc `pkg-config --cflags --libs sdl2` -o example gifdec.c example.c
       4              :  * executing:
       5              :  *   ./example animation.gif
       6              :  * */
       7              : 
       8              : #include <stdio.h>
       9              : #include <stdlib.h>
      10              : #include <stdint.h>
      11              : #include <signal.h>
      12              : #include <unistd.h>
      13              : 
      14              : #include "gifdec.h"
      15              : 
      16              : #ifdef GCOV
      17              : void __gcov_dump();
      18              : 
      19              : void gc_handler(int signum) {
      20              :     __gcov_dump();
      21              :     exit(1);
      22              : }
      23              : #endif
      24              : 
      25            8 : void handle_plain_text(
      26              :         struct gd_GIF *gif, uint16_t tx, uint16_t ty,
      27              :         uint16_t tw, uint16_t th, uint8_t cw, uint8_t ch,
      28              :         uint8_t fg, uint8_t bg
      29              :     ) {
      30            8 :     printf("plain_text_ext tx=%u ty=%u tw=%u th=%u cw=%u ch=%u fg=%u bg=%u\ntext: ",
      31            8 :             tx,ty,tw,th,cw,ch,fg,bg);
      32              :     unsigned char c;
      33           97 :     while (read(gif->fd, &c, 1)) {
      34           97 :         if (c == 0) break;
      35           89 :         write(1,&c,1);
      36              :     }
      37            8 :     printf("\n");
      38            8 : }
      39              : 
      40            7 : void handle_comment(struct gd_GIF *gif) {
      41            7 :     printf("comment: ");
      42              :     unsigned char c;
      43           17 :     while (read(gif->fd, &c, 1)) {
      44           17 :         if (c == 0) break;
      45           10 :         write(1,&c,1);
      46              :     }
      47            7 :     printf("\n");
      48            7 : }
      49              : 
      50              : int
      51           78 : main(int argc, char *argv[])
      52              : {
      53              :     gd_GIF *gif;
      54           78 :     char title[32] = {0};
      55              :     uint8_t *color, *frame;
      56              :     void *addr;
      57              :     int i, j;
      58              :     uint32_t pixel;
      59              :     int ret, paused, quit;
      60              :     uint32_t t0, t1, delay, delta;
      61              : 
      62              : #ifdef GCOV
      63              :     for (int sig = 1; sig <= SIGRTMAX; ++sig) {
      64              :         signal(sig, gc_handler);
      65              :     }
      66              : #endif
      67              : 
      68           78 :     if (argc != 2) {
      69            0 :         fprintf(stderr, "usage:\n  %s gif-file\n", argv[0]);
      70            0 :         return 1;
      71              :     }
      72           78 :     gif = gd_open_gif(argv[1]);
      73           78 :     if (!gif) {
      74            6 :         fprintf(stderr, "Could not open %s\n", argv[1]);
      75            6 :         return 1;
      76              :     }
      77           72 :     frame = malloc(gif->width * gif->height * 3);
      78           72 :     if (!frame) {
      79            0 :         fprintf(stderr, "Could not allocate frame\n");
      80            0 :         return 1;
      81              :     }
      82           72 :     gif->plain_text = handle_plain_text;
      83           72 :     gif->comment = handle_comment;
      84           72 :     snprintf(title, sizeof(title) - 1, "GIF %dx%d %d colors",
      85              :              gif->width, gif->height, gif->palette->size);
      86           72 :     color = &gif->gct.colors[gif->bgindex * 3];
      87           72 :     int num_bgcolors = 0;
      88           72 :     int loopcount = 1;
      89           97 :     while (loopcount) {
      90           72 :         ret = gd_get_frame(gif);
      91           72 :         if (ret == -1)
      92           47 :             break;
      93           25 :         gd_render_frame(gif, frame);
      94           25 :         color = frame;
      95       239380 :         for (i = 0; i < gif->height; i++) {
      96      4588543 :             for (j = 0; j < gif->width; j++) {
      97      4349188 :                 if (!gd_is_bgcolor(gif, color)) {
      98            0 :                     num_bgcolors++;
      99            0 :                 }
     100      4349188 :                 color += 3;
     101      4349188 :             }
     102       239355 :         }
     103           25 :         if (ret == 0) {
     104           25 :             loopcount--;
     105           25 :             gd_rewind(gif);
     106           25 :         }
     107              :     }
     108           72 :     free(frame);
     109           72 :     gd_close_gif(gif);
     110           72 :     return 0;
     111           78 : }
        

Generated by: LCOV version 2.0-1