In C Create a simple set of functions for storing video A li

In C

Create a simple set of functions for storing video

A linked list of videos where each video object contains an image object

Each image is contained in a structure, which contains a 2D array

--------video api----------------------------

struct image* createWhiteImg(unsigned int width,unsigned int height);

void setPixel(struct image *img, unsigned int x, unsigned int y, unsigned char grayscale);

unsigned char getPixel(struct image * img, unsigned int x, unsigned int y);

struct video* createEmptyFrameList();

struct video* insertFrameUpFront(struct video *video, struct image *img);

struct image* getNthFrame(struct video *video, int frameNo);

struct video* deleteNthFrame(struct video *video, int frameNo);

NOTE: Requesting an out of bounds frame should return NULL

-----------end of video api---------------

-----------header file start----------------

struct image(...); //define the image struct

struct video(...); //define the video struct

//stores image (a video frame) as a 2D array within a structure \"image\"

struct image* createWhiteimg(unsigned int width, unsigned int height);

void setPixel(struct image *img, unsigned int x, unsigned int y, unsigned char grayscale); //x and y are width and height

unsigned char getPixel(struct image *img, unsigned int x, unsigned int y); //x and y are width and height

//stores video (a sequence of frames) as a double-linked list of \"video\"

struct video *createEmptyFrameList();

struct video *insertFrameUpFront(struct video *video, struct image *img);

//counting from 0

struct image *getNthFrame(struct video *video, int frameNo);

struct video *deleteNthFrame(struct video *video, int frameNo);

---------header file end--------------------------------------

Implement all header file declartions in the code file and test with the following

--------start of test---------------

-------------end of test file--------------------------

Solution

Given below are all the files . Output of main.cpp is shown at end. Please don\'t forget to rate the answer if it helped. Thank you.

submission.h


#ifndef submission_h
#define submission_h


struct image //define the image struct
{
unsigned char **pixels; //2D array
unsigned int width;
unsigned int height;
};

struct video
{
struct image *frameImg;
struct video *next; //pointer to next frame
}; //define the video struct

//stores image (a video frame) as a 2D array within a structure \"image\"
struct image* createWhiteImg(unsigned int width, unsigned int height);
void setPixel(struct image *img, unsigned int x, unsigned int y, unsigned char grayscale); //x and y are width and height
unsigned char getPixel(struct image *img, unsigned int x, unsigned int y); //x and y are width and height
//stores video (a sequence of frames) as a double-linked list of \"video\"
struct video *createEmptyFrameList();
struct video *insertFrameUpFront(struct video *video, struct image *img);
//counting from 0
struct image *getNthFrame(struct video *video, int frameNo);
struct video *deleteNthFrame(struct video *video, int frameNo);

#endif /* submission_h */

submission.c

#include \"submission.h\"
#include <stdlib.h>
struct image* createWhiteImg(unsigned int width, unsigned int height)
{
int i, j;
//allocate memory for the structure
struct image *img = (struct image*) malloc(sizeof(struct image));
  
//allocate memory for the pixels i.e pointer to char pointer i.e 2D array
//allocate meory for rows for pointers and then allocate each row
img->pixels = (unsigned char **) malloc(height * sizeof(unsigned char *)); //for all rows
for (i = 0; i < height; i++)
{
img->pixels[i] = (unsigned char*) malloc(width * sizeof(char)); //allocate current row
for(j = 0; j < width; j++) //initial all pixels in current row
img->pixels[i][j] = 255; //255 representing a white pixel
}
  
img->width = width;
img->height = height;
return img;
}

void setPixel(struct image *img, unsigned int x, unsigned int y, unsigned char grayscale) //x and y are width and height
{
if(x < img->width && y < img->height)
{
img->pixels[y][x] = grayscale;
}
}
unsigned char getPixel(struct image *img, unsigned int x, unsigned int y) //x and y are width and height
{
return img->pixels[y][x];
}
//stores video (a sequence of frames) as a double-linked list of \"video\"
struct video *createEmptyFrameList()
{
struct video *vid = (struct video *) malloc(sizeof(struct video));
vid->frameImg = NULL;
vid->next = NULL;
return vid;
}
struct video *insertFrameUpFront(struct video *video, struct image *img)
{
struct video *vid = (struct video *) malloc(sizeof(struct video));
vid->frameImg = img;
vid->next = video;
return vid;
}
//counting from 0
struct image *getNthFrame(struct video *video, int frameNo)
{
int i;
struct video * curr = video;
for(i = 0; curr != NULL && i < frameNo; i++)
curr = curr->next;
if(curr != NULL)
return curr->frameImg;
else
return NULL;
}

//helper function to free the memory allocated to the image.
void freeFrame(struct image *img)
{
int i ;
if(img != NULL)
{
for(i = 0; i < img->height; i++)
free(img->pixels[i]);
free(img->pixels);
}
}

struct video *deleteNthFrame(struct video *video, int frameNo)
{
int i;
struct video *curr = video, *prev = NULL;
for(i = 0; curr != NULL && i < frameNo; i++)
{
prev = curr;
curr = curr->next;
}
if(curr == NULL)
return video;
else
{
if(prev == NULL)
video = curr->next;
else
prev->next = curr->next;
  
freeFrame(curr->frameImg);
free(curr);
return video;
}
}

main.c

#include <stdio.h>
#include \"submission.h\"

int main()
{
struct image *a=createWhiteImg(16,9);
struct image *b=createWhiteImg(16,9);
struct image *c=createWhiteImg(16,9);
setPixel(a,0,0,14);
setPixel(b,15,8,28);
setPixel(c,10,4,54);
struct image *d=NULL;
struct video *v=createEmptyFrameList();
v=insertFrameUpFront(v,c);
v=insertFrameUpFront(v,b);
v=insertFrameUpFront(v,a);
v=deleteNthFrame(v,1);
d=getNthFrame(v,1);
unsigned char px=getPixel(d,10,4);
if (px==54)
printf(\"WORKS\");
else
printf(\"DOES NOT WORK\");
return 0;
}

output

WORKS

In C Create a simple set of functions for storing video A linked list of videos where each video object contains an image object Each image is contained in a st
In C Create a simple set of functions for storing video A linked list of videos where each video object contains an image object Each image is contained in a st
In C Create a simple set of functions for storing video A linked list of videos where each video object contains an image object Each image is contained in a st
In C Create a simple set of functions for storing video A linked list of videos where each video object contains an image object Each image is contained in a st

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site