Final 350 project

Dependencies:   uzair Camera_LS_Y201 F7_Ethernet LCD_DISCO_F746NG NetworkAPI SDFileSystem mbed

Committer:
shoaib_ahmed
Date:
Mon Jul 31 09:16:35 2017 +0000
Revision:
0:791a779d6220
final project;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shoaib_ahmed 0:791a779d6220 1 /*
shoaib_ahmed 0:791a779d6220 2 * jmemsys.h
shoaib_ahmed 0:791a779d6220 3 *
shoaib_ahmed 0:791a779d6220 4 * Copyright (C) 1992-1997, Thomas G. Lane.
shoaib_ahmed 0:791a779d6220 5 * This file is part of the Independent JPEG Group's software.
shoaib_ahmed 0:791a779d6220 6 * For conditions of distribution and use, see the accompanying README file.
shoaib_ahmed 0:791a779d6220 7 *
shoaib_ahmed 0:791a779d6220 8 * This include file defines the interface between the system-independent
shoaib_ahmed 0:791a779d6220 9 * and system-dependent portions of the JPEG memory manager. No other
shoaib_ahmed 0:791a779d6220 10 * modules need include it. (The system-independent portion is jmemmgr.c;
shoaib_ahmed 0:791a779d6220 11 * there are several different versions of the system-dependent portion.)
shoaib_ahmed 0:791a779d6220 12 *
shoaib_ahmed 0:791a779d6220 13 * This file works as-is for the system-dependent memory managers supplied
shoaib_ahmed 0:791a779d6220 14 * in the IJG distribution. You may need to modify it if you write a
shoaib_ahmed 0:791a779d6220 15 * custom memory manager. If system-dependent changes are needed in
shoaib_ahmed 0:791a779d6220 16 * this file, the best method is to #ifdef them based on a configuration
shoaib_ahmed 0:791a779d6220 17 * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR
shoaib_ahmed 0:791a779d6220 18 * and USE_MAC_MEMMGR.
shoaib_ahmed 0:791a779d6220 19 */
shoaib_ahmed 0:791a779d6220 20
shoaib_ahmed 0:791a779d6220 21
shoaib_ahmed 0:791a779d6220 22 /* Short forms of external names for systems with brain-damaged linkers. */
shoaib_ahmed 0:791a779d6220 23
shoaib_ahmed 0:791a779d6220 24 #ifdef NEED_SHORT_EXTERNAL_NAMES
shoaib_ahmed 0:791a779d6220 25 #define jpeg_get_small jGetSmall
shoaib_ahmed 0:791a779d6220 26 #define jpeg_free_small jFreeSmall
shoaib_ahmed 0:791a779d6220 27 #define jpeg_get_large jGetLarge
shoaib_ahmed 0:791a779d6220 28 #define jpeg_free_large jFreeLarge
shoaib_ahmed 0:791a779d6220 29 #define jpeg_mem_available jMemAvail
shoaib_ahmed 0:791a779d6220 30 #define jpeg_open_backing_store jOpenBackStore
shoaib_ahmed 0:791a779d6220 31 #define jpeg_mem_init jMemInit
shoaib_ahmed 0:791a779d6220 32 #define jpeg_mem_term jMemTerm
shoaib_ahmed 0:791a779d6220 33 #endif /* NEED_SHORT_EXTERNAL_NAMES */
shoaib_ahmed 0:791a779d6220 34
shoaib_ahmed 0:791a779d6220 35
shoaib_ahmed 0:791a779d6220 36 /*
shoaib_ahmed 0:791a779d6220 37 * These two functions are used to allocate and release small chunks of
shoaib_ahmed 0:791a779d6220 38 * memory. (Typically the total amount requested through jpeg_get_small is
shoaib_ahmed 0:791a779d6220 39 * no more than 20K or so; this will be requested in chunks of a few K each.)
shoaib_ahmed 0:791a779d6220 40 * Behavior should be the same as for the standard library functions malloc
shoaib_ahmed 0:791a779d6220 41 * and free; in particular, jpeg_get_small must return NULL on failure.
shoaib_ahmed 0:791a779d6220 42 * On most systems, these ARE malloc and free. jpeg_free_small is passed the
shoaib_ahmed 0:791a779d6220 43 * size of the object being freed, just in case it's needed.
shoaib_ahmed 0:791a779d6220 44 * On an 80x86 machine using small-data memory model, these manage near heap.
shoaib_ahmed 0:791a779d6220 45 */
shoaib_ahmed 0:791a779d6220 46
shoaib_ahmed 0:791a779d6220 47 EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject));
shoaib_ahmed 0:791a779d6220 48 EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object,
shoaib_ahmed 0:791a779d6220 49 size_t sizeofobject));
shoaib_ahmed 0:791a779d6220 50
shoaib_ahmed 0:791a779d6220 51 /*
shoaib_ahmed 0:791a779d6220 52 * These two functions are used to allocate and release large chunks of
shoaib_ahmed 0:791a779d6220 53 * memory (up to the total free space designated by jpeg_mem_available).
shoaib_ahmed 0:791a779d6220 54 * The interface is the same as above, except that on an 80x86 machine,
shoaib_ahmed 0:791a779d6220 55 * far pointers are used. On most other machines these are identical to
shoaib_ahmed 0:791a779d6220 56 * the jpeg_get/free_small routines; but we keep them separate anyway,
shoaib_ahmed 0:791a779d6220 57 * in case a different allocation strategy is desirable for large chunks.
shoaib_ahmed 0:791a779d6220 58 */
shoaib_ahmed 0:791a779d6220 59
shoaib_ahmed 0:791a779d6220 60 EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo,
shoaib_ahmed 0:791a779d6220 61 size_t sizeofobject));
shoaib_ahmed 0:791a779d6220 62 EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object,
shoaib_ahmed 0:791a779d6220 63 size_t sizeofobject));
shoaib_ahmed 0:791a779d6220 64
shoaib_ahmed 0:791a779d6220 65 /*
shoaib_ahmed 0:791a779d6220 66 * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may
shoaib_ahmed 0:791a779d6220 67 * be requested in a single call to jpeg_get_large (and jpeg_get_small for that
shoaib_ahmed 0:791a779d6220 68 * matter, but that case should never come into play). This macro is needed
shoaib_ahmed 0:791a779d6220 69 * to model the 64Kb-segment-size limit of far addressing on 80x86 machines.
shoaib_ahmed 0:791a779d6220 70 * On those machines, we expect that jconfig.h will provide a proper value.
shoaib_ahmed 0:791a779d6220 71 * On machines with 32-bit flat address spaces, any large constant may be used.
shoaib_ahmed 0:791a779d6220 72 *
shoaib_ahmed 0:791a779d6220 73 * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type
shoaib_ahmed 0:791a779d6220 74 * size_t and will be a multiple of sizeof(align_type).
shoaib_ahmed 0:791a779d6220 75 */
shoaib_ahmed 0:791a779d6220 76
shoaib_ahmed 0:791a779d6220 77 #ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */
shoaib_ahmed 0:791a779d6220 78 #define MAX_ALLOC_CHUNK 1000000000L
shoaib_ahmed 0:791a779d6220 79 #endif
shoaib_ahmed 0:791a779d6220 80
shoaib_ahmed 0:791a779d6220 81 /*
shoaib_ahmed 0:791a779d6220 82 * This routine computes the total space still available for allocation by
shoaib_ahmed 0:791a779d6220 83 * jpeg_get_large. If more space than this is needed, backing store will be
shoaib_ahmed 0:791a779d6220 84 * used. NOTE: any memory already allocated must not be counted.
shoaib_ahmed 0:791a779d6220 85 *
shoaib_ahmed 0:791a779d6220 86 * There is a minimum space requirement, corresponding to the minimum
shoaib_ahmed 0:791a779d6220 87 * feasible buffer sizes; jmemmgr.c will request that much space even if
shoaib_ahmed 0:791a779d6220 88 * jpeg_mem_available returns zero. The maximum space needed, enough to hold
shoaib_ahmed 0:791a779d6220 89 * all working storage in memory, is also passed in case it is useful.
shoaib_ahmed 0:791a779d6220 90 * Finally, the total space already allocated is passed. If no better
shoaib_ahmed 0:791a779d6220 91 * method is available, cinfo->mem->max_memory_to_use - already_allocated
shoaib_ahmed 0:791a779d6220 92 * is often a suitable calculation.
shoaib_ahmed 0:791a779d6220 93 *
shoaib_ahmed 0:791a779d6220 94 * It is OK for jpeg_mem_available to underestimate the space available
shoaib_ahmed 0:791a779d6220 95 * (that'll just lead to more backing-store access than is really necessary).
shoaib_ahmed 0:791a779d6220 96 * However, an overestimate will lead to failure. Hence it's wise to subtract
shoaib_ahmed 0:791a779d6220 97 * a slop factor from the true available space. 5% should be enough.
shoaib_ahmed 0:791a779d6220 98 *
shoaib_ahmed 0:791a779d6220 99 * On machines with lots of virtual memory, any large constant may be returned.
shoaib_ahmed 0:791a779d6220 100 * Conversely, zero may be returned to always use the minimum amount of memory.
shoaib_ahmed 0:791a779d6220 101 */
shoaib_ahmed 0:791a779d6220 102
shoaib_ahmed 0:791a779d6220 103 EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo,
shoaib_ahmed 0:791a779d6220 104 long min_bytes_needed,
shoaib_ahmed 0:791a779d6220 105 long max_bytes_needed,
shoaib_ahmed 0:791a779d6220 106 long already_allocated));
shoaib_ahmed 0:791a779d6220 107
shoaib_ahmed 0:791a779d6220 108
shoaib_ahmed 0:791a779d6220 109 /*
shoaib_ahmed 0:791a779d6220 110 * This structure holds whatever state is needed to access a single
shoaib_ahmed 0:791a779d6220 111 * backing-store object. The read/write/close method pointers are called
shoaib_ahmed 0:791a779d6220 112 * by jmemmgr.c to manipulate the backing-store object; all other fields
shoaib_ahmed 0:791a779d6220 113 * are private to the system-dependent backing store routines.
shoaib_ahmed 0:791a779d6220 114 */
shoaib_ahmed 0:791a779d6220 115
shoaib_ahmed 0:791a779d6220 116 #define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */
shoaib_ahmed 0:791a779d6220 117
shoaib_ahmed 0:791a779d6220 118
shoaib_ahmed 0:791a779d6220 119 #ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */
shoaib_ahmed 0:791a779d6220 120
shoaib_ahmed 0:791a779d6220 121 typedef unsigned short XMSH; /* type of extended-memory handles */
shoaib_ahmed 0:791a779d6220 122 typedef unsigned short EMSH; /* type of expanded-memory handles */
shoaib_ahmed 0:791a779d6220 123
shoaib_ahmed 0:791a779d6220 124 typedef union {
shoaib_ahmed 0:791a779d6220 125 short file_handle; /* DOS file handle if it's a temp file */
shoaib_ahmed 0:791a779d6220 126 XMSH xms_handle; /* handle if it's a chunk of XMS */
shoaib_ahmed 0:791a779d6220 127 EMSH ems_handle; /* handle if it's a chunk of EMS */
shoaib_ahmed 0:791a779d6220 128 } handle_union;
shoaib_ahmed 0:791a779d6220 129
shoaib_ahmed 0:791a779d6220 130 #endif /* USE_MSDOS_MEMMGR */
shoaib_ahmed 0:791a779d6220 131
shoaib_ahmed 0:791a779d6220 132 #ifdef USE_MAC_MEMMGR /* Mac-specific junk */
shoaib_ahmed 0:791a779d6220 133 #include <Files.h>
shoaib_ahmed 0:791a779d6220 134 #endif /* USE_MAC_MEMMGR */
shoaib_ahmed 0:791a779d6220 135
shoaib_ahmed 0:791a779d6220 136
shoaib_ahmed 0:791a779d6220 137 typedef struct backing_store_struct * backing_store_ptr;
shoaib_ahmed 0:791a779d6220 138
shoaib_ahmed 0:791a779d6220 139 typedef struct backing_store_struct {
shoaib_ahmed 0:791a779d6220 140 /* Methods for reading/writing/closing this backing-store object */
shoaib_ahmed 0:791a779d6220 141 JMETHOD(void, read_backing_store, (j_common_ptr cinfo,
shoaib_ahmed 0:791a779d6220 142 backing_store_ptr info,
shoaib_ahmed 0:791a779d6220 143 void FAR * buffer_address,
shoaib_ahmed 0:791a779d6220 144 long file_offset, long byte_count));
shoaib_ahmed 0:791a779d6220 145 JMETHOD(void, write_backing_store, (j_common_ptr cinfo,
shoaib_ahmed 0:791a779d6220 146 backing_store_ptr info,
shoaib_ahmed 0:791a779d6220 147 void FAR * buffer_address,
shoaib_ahmed 0:791a779d6220 148 long file_offset, long byte_count));
shoaib_ahmed 0:791a779d6220 149 JMETHOD(void, close_backing_store, (j_common_ptr cinfo,
shoaib_ahmed 0:791a779d6220 150 backing_store_ptr info));
shoaib_ahmed 0:791a779d6220 151
shoaib_ahmed 0:791a779d6220 152 /* Private fields for system-dependent backing-store management */
shoaib_ahmed 0:791a779d6220 153 #ifdef USE_MSDOS_MEMMGR
shoaib_ahmed 0:791a779d6220 154 /* For the MS-DOS manager (jmemdos.c), we need: */
shoaib_ahmed 0:791a779d6220 155 handle_union handle; /* reference to backing-store storage object */
shoaib_ahmed 0:791a779d6220 156 char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
shoaib_ahmed 0:791a779d6220 157 #else
shoaib_ahmed 0:791a779d6220 158 #ifdef USE_MAC_MEMMGR
shoaib_ahmed 0:791a779d6220 159 /* For the Mac manager (jmemmac.c), we need: */
shoaib_ahmed 0:791a779d6220 160 short temp_file; /* file reference number to temp file */
shoaib_ahmed 0:791a779d6220 161 FSSpec tempSpec; /* the FSSpec for the temp file */
shoaib_ahmed 0:791a779d6220 162 char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
shoaib_ahmed 0:791a779d6220 163 #else
shoaib_ahmed 0:791a779d6220 164 /* For a typical implementation with temp files, we need: */
shoaib_ahmed 0:791a779d6220 165 FILE * temp_file; /* stdio reference to temp file */
shoaib_ahmed 0:791a779d6220 166 char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */
shoaib_ahmed 0:791a779d6220 167 #endif
shoaib_ahmed 0:791a779d6220 168 #endif
shoaib_ahmed 0:791a779d6220 169 } backing_store_info;
shoaib_ahmed 0:791a779d6220 170
shoaib_ahmed 0:791a779d6220 171
shoaib_ahmed 0:791a779d6220 172 /*
shoaib_ahmed 0:791a779d6220 173 * Initial opening of a backing-store object. This must fill in the
shoaib_ahmed 0:791a779d6220 174 * read/write/close pointers in the object. The read/write routines
shoaib_ahmed 0:791a779d6220 175 * may take an error exit if the specified maximum file size is exceeded.
shoaib_ahmed 0:791a779d6220 176 * (If jpeg_mem_available always returns a large value, this routine can
shoaib_ahmed 0:791a779d6220 177 * just take an error exit.)
shoaib_ahmed 0:791a779d6220 178 */
shoaib_ahmed 0:791a779d6220 179
shoaib_ahmed 0:791a779d6220 180 EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo,
shoaib_ahmed 0:791a779d6220 181 backing_store_ptr info,
shoaib_ahmed 0:791a779d6220 182 long total_bytes_needed));
shoaib_ahmed 0:791a779d6220 183
shoaib_ahmed 0:791a779d6220 184
shoaib_ahmed 0:791a779d6220 185 /*
shoaib_ahmed 0:791a779d6220 186 * These routines take care of any system-dependent initialization and
shoaib_ahmed 0:791a779d6220 187 * cleanup required. jpeg_mem_init will be called before anything is
shoaib_ahmed 0:791a779d6220 188 * allocated (and, therefore, nothing in cinfo is of use except the error
shoaib_ahmed 0:791a779d6220 189 * manager pointer). It should return a suitable default value for
shoaib_ahmed 0:791a779d6220 190 * max_memory_to_use; this may subsequently be overridden by the surrounding
shoaib_ahmed 0:791a779d6220 191 * application. (Note that max_memory_to_use is only important if
shoaib_ahmed 0:791a779d6220 192 * jpeg_mem_available chooses to consult it ... no one else will.)
shoaib_ahmed 0:791a779d6220 193 * jpeg_mem_term may assume that all requested memory has been freed and that
shoaib_ahmed 0:791a779d6220 194 * all opened backing-store objects have been closed.
shoaib_ahmed 0:791a779d6220 195 */
shoaib_ahmed 0:791a779d6220 196
shoaib_ahmed 0:791a779d6220 197 EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo));
shoaib_ahmed 0:791a779d6220 198 EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo));