⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libmng_jpeg.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 3 页
字号:
/* ************************************************************************** *//* *             For conditions of distribution and use,                    * *//* *                see copyright notice in libmng.h                        * *//* ************************************************************************** *//* *                                                                        * *//* * project   : libmng                                                     * *//* * file      : libmng_jpeg.c             copyright (c) 2000 G.Juyn        * *//* * version   : 1.0.4                                                      * *//* *                                                                        * *//* * purpose   : JPEG library interface (implementation)                    * *//* *                                                                        * *//* * author    : G.Juyn                                                     * *//* * web       : http://www.3-t.com                                         * *//* * email     : mailto:info@3-t.com                                        * *//* *                                                                        * *//* * comment   : implementation of the JPEG library interface               * *//* *                                                                        * *//* * changes   : 0.5.1 - 05/08/2000 - G.Juyn                                * *//* *             - changed strict-ANSI stuff                                * *//* *                                                                        * *//* *             0.5.2 - 05/22/2000 - G.Juyn                                * *//* *             - implemented all the JNG routines                         * *//* *                                                                        * *//* *             0.5.3 - 06/17/2000 - G.Juyn                                * *//* *             - added tracing of JPEG calls                              * *//* *             0.5.3 - 06/24/2000 - G.Juyn                                * *//* *             - fixed inclusion of IJG read/write code                   * *//* *             0.5.3 - 06/29/2000 - G.Juyn                                * *//* *             - fixed some 64-bit warnings                               * *//* *                                                                        * *//* *             0.9.2 - 08/05/2000 - G.Juyn                                * *//* *             - changed file-prefixes                                    * *//* *                                                                        * *//* *             0.9.3 - 10/16/2000 - G.Juyn                                * *//* *             - added support for JDAA                                   * *//* *                                                                        * *//* *             1.0.1 - 04/19/2001 - G.Juyn                                * *//* *             - added export of JPEG functions for DLL                   * *//* *             1.0.1 - 04/22/2001 - G.Juyn                                * *//* *             - fixed memory-leaks (Thanks Gregg!)                       * *//* *                                                                        * *//* *             1.0.4 - 06/22/2002 - G.Juyn                                * *//* *             - B526138 - returned IJGSRC6B calling convention to        * *//* *               default for MSVC                                         * *//* *                                                                        * *//* ************************************************************************** */#include "libmng.h"#include "libmng_data.h"#include "libmng_error.h"#include "libmng_trace.h"#ifdef __BORLANDC__#pragma hdrstop#endif#include "libmng_memory.h"#include "libmng_pixels.h"#include "libmng_jpeg.h"#if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI)#pragma option -A                      /* force ANSI-C */#endif/* ************************************************************************** */#ifdef MNG_INCLUDE_JNG/* ************************************************************************** *//* *                                                                        * *//* * Local IJG callback routines (source-manager, error-manager and such)   * *//* *                                                                        * *//* ************************************************************************** */#ifdef MNG_INCLUDE_IJG6B/* ************************************************************************** */#ifdef MNG_INCLUDE_JNG_READ#ifdef MNG_DEFINE_JPEG_STDCALLvoid MNG_DECL mng_init_source (j_decompress_ptr cinfo)#elsevoid mng_init_source (j_decompress_ptr cinfo)#endif{  return;                              /* nothing needed */}#endif /* MNG_INCLUDE_JNG_READ *//* ************************************************************************** */#ifdef MNG_INCLUDE_JNG_READ#ifdef MNG_DEFINE_JPEG_STDCALLboolean MNG_DECL mng_fill_input_buffer (j_decompress_ptr cinfo)#elseboolean mng_fill_input_buffer (j_decompress_ptr cinfo)#endif{  return FALSE;                        /* force IJG routine to return to caller */}#endif /* MNG_INCLUDE_JNG_READ *//* ************************************************************************** */#ifdef MNG_INCLUDE_JNG_READ#ifdef MNG_DEFINE_JPEG_STDCALLvoid MNG_DECL mng_skip_input_data (j_decompress_ptr cinfo, long num_bytes)#elsevoid mng_skip_input_data (j_decompress_ptr cinfo, long num_bytes)#endif{  if (num_bytes > 0)                   /* ignore fony calls */  {                                    /* address my generic structure */    mng_datap pData = (mng_datap)cinfo->client_data;                                       /* address source manager */    mngjpeg_sourcep pSrc = pData->pJPEGdinfo->src;                                       /* problem scenario ? */    if (pSrc->bytes_in_buffer < (size_t)num_bytes)    {                                  /* tell the boss we need to skip some data! */      pData->iJPEGtoskip = (mng_uint32)((size_t)num_bytes - pSrc->bytes_in_buffer);      pSrc->bytes_in_buffer = 0;       /* let the JPEG lib suspend */      pSrc->next_input_byte = MNG_NULL;    }    else    {                                  /* simply advance in the buffer */      pSrc->bytes_in_buffer -= num_bytes;      pSrc->next_input_byte += num_bytes;    }  }  return;}#endif /* MNG_INCLUDE_JNG_READ *//* ************************************************************************** */#ifdef MNG_INCLUDE_JNG_READ#ifdef MNG_DEFINE_JPEG_STDCALLvoid MNG_DECL mng_skip_input_data2 (j_decompress_ptr cinfo, long num_bytes)#elsevoid mng_skip_input_data2 (j_decompress_ptr cinfo, long num_bytes)#endif{  if (num_bytes > 0)                   /* ignore fony calls */  {                                    /* address my generic structure */    mng_datap pData = (mng_datap)cinfo->client_data;                                       /* address source manager */    mngjpeg_sourcep pSrc = pData->pJPEGdinfo2->src;                                       /* problem scenario ? */    if (pSrc->bytes_in_buffer < (size_t)num_bytes)    {                                  /* tell the boss we need to skip some data! */      pData->iJPEGtoskip2 = (mng_uint32)((size_t)num_bytes - pSrc->bytes_in_buffer);      pSrc->bytes_in_buffer = 0;       /* let the JPEG lib suspend */      pSrc->next_input_byte = MNG_NULL;    }    else    {                                  /* simply advance in the buffer */      pSrc->bytes_in_buffer -= num_bytes;      pSrc->next_input_byte += num_bytes;    }  }  return;}#endif /* MNG_INCLUDE_JNG_READ *//* ************************************************************************** */#ifdef MNG_INCLUDE_JNG_READ#ifdef MNG_DEFINE_JPEG_STDCALLvoid MNG_DECL mng_term_source (j_decompress_ptr cinfo)#elsevoid mng_term_source (j_decompress_ptr cinfo)#endif{  return;                              /* nothing needed */}#endif /* MNG_INCLUDE_JNG_READ *//* ************************************************************************** */#ifdef MNG_USE_SETJMP#ifdef MNG_DEFINE_JPEG_STDCALLvoid MNG_DECL mng_error_exit (j_common_ptr cinfo)#elsevoid mng_error_exit (j_common_ptr cinfo)#endif{                                      /* address my generic structure */  mng_datap pData = (mng_datap)cinfo->client_data;#ifdef MNG_ERROR_TELLTALE              /* fill the message text ??? */  (*cinfo->err->output_message) (cinfo);#endif                                       /* return to the point of no return... */  longjmp (pData->sErrorbuf, cinfo->err->msg_code);}#endif /* MNG_USE_SETJMP *//* ************************************************************************** */#ifdef MNG_USE_SETJMP#ifdef MNG_DEFINE_JPEG_STDCALLvoid MNG_DECL mng_output_message (j_common_ptr cinfo)#elsevoid mng_output_message (j_common_ptr cinfo)#endif{  return;                              /* just do nothing ! */}#endif /* MNG_USE_SETJMP *//* ************************************************************************** */#endif /* MNG_INCLUDE_IJG6B *//* ************************************************************************** *//* *                                                                        * *//* * Global JPEG routines                                                   * *//* *                                                                        * *//* ************************************************************************** */mng_retcode mngjpeg_initialize (mng_datap pData){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_JPEG_INITIALIZE, MNG_LC_START)#endif                                       /* allocate space for JPEG structures if necessary */#ifdef MNG_INCLUDE_JNG_READ  if (pData->pJPEGderr   == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGderr,   sizeof (mngjpeg_error ))  if (pData->pJPEGdsrc   == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGdsrc,   sizeof (mngjpeg_source))  if (pData->pJPEGdinfo  == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGdinfo,  sizeof (mngjpeg_decomp))                                       /* enable reverse addressing */  pData->pJPEGdinfo->client_data  = pData;  if (pData->pJPEGderr2  == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGderr2,  sizeof (mngjpeg_error ))  if (pData->pJPEGdsrc2  == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGdsrc2,  sizeof (mngjpeg_source))  if (pData->pJPEGdinfo2 == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGdinfo2, sizeof (mngjpeg_decomp))                                       /* enable reverse addressing */  pData->pJPEGdinfo2->client_data = pData;#endif#ifdef MNG_INCLUDE_JNG_WRITE  if (pData->pJPEGcerr  == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGcerr,  sizeof (mngjpeg_error ))  if (pData->pJPEGcinfo == MNG_NULL)    MNG_ALLOC (pData, pData->pJPEGcinfo, sizeof (mngjpeg_comp  ))                                       /* enable reverse addressing */  pData->pJPEGcinfo->client_data = pData;#endif  if (pData->pJPEGbuf   == MNG_NULL)   /* initialize temporary buffers */  {    pData->iJPEGbufmax     = MNG_JPEG_MAXBUF;    MNG_ALLOC (pData, pData->pJPEGbuf, pData->iJPEGbufmax)  }  if (pData->pJPEGbuf2  == MNG_NULL)   {    pData->iJPEGbufmax2    = MNG_JPEG_MAXBUF;    MNG_ALLOC (pData, pData->pJPEGbuf2, pData->iJPEGbufmax2)  }  pData->pJPEGcurrent      = pData->pJPEGbuf;  pData->iJPEGbufremain    = 0;  pData->pJPEGrow          = MNG_NULL;  pData->iJPEGrowlen       = 0;  pData->iJPEGtoskip       = 0;  pData->pJPEGcurrent2     = pData->pJPEGbuf2;  pData->iJPEGbufremain2   = 0;  pData->pJPEGrow2         = MNG_NULL;  pData->iJPEGrowlen2      = 0;  pData->iJPEGtoskip2      = 0;                                      /* not doing anything yet ! */  pData->bJPEGcompress     = MNG_FALSE;    pData->bJPEGdecompress   = MNG_FALSE;  pData->bJPEGhasheader    = MNG_FALSE;  pData->bJPEGdecostarted  = MNG_FALSE;  pData->bJPEGscanstarted  = MNG_FALSE;  pData->bJPEGdecompress2  = MNG_FALSE;  pData->bJPEGhasheader2   = MNG_FALSE;  pData->bJPEGdecostarted2 = MNG_FALSE;  pData->bJPEGscanstarted2 = MNG_FALSE;  pData->iJPEGrow          = 0;        /* zero input/output lines */  pData->iJPEGalpharow     = 0;  pData->iJPEGrgbrow       = 0;  pData->iJPEGdisprow      = 0;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_JPEG_INITIALIZE, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode mngjpeg_cleanup (mng_datap pData){#if defined(MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP)  mng_retcode iRetcode;#endif#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_JPEG_CLEANUP, MNG_LC_START)#endif#ifdef MNG_INCLUDE_IJG6B#ifdef MNG_USE_SETJMP  iRetcode = setjmp (pData->sErrorbuf);/* setup local JPEG error-recovery */  if (iRetcode != 0)                   /* got here from longjmp ? */    MNG_ERRORJ (pData, iRetcode)       /* then IJG-lib issued an error */#endif#ifdef MNG_INCLUDE_JNG_READ            /* still decompressing something ? */  if (pData->bJPEGdecompress)    jpeg_destroy_decompress (pData->pJPEGdinfo);  if (pData->bJPEGdecompress2)    jpeg_destroy_decompress (pData->pJPEGdinfo2);#endif#ifdef MNG_INCLUDE_JNG_WRITE  if (pData->bJPEGcompress)            /* still compressing something ? */    jpeg_destroy_compress (pData->pJPEGcinfo);#endif#endif /* MNG_INCLUDE_IJG6B */                                       /* cleanup temporary buffers */  MNG_FREE (pData, pData->pJPEGbuf2, pData->iJPEGbufmax2)  MNG_FREE (pData, pData->pJPEGbuf,  pData->iJPEGbufmax)                                       /* cleanup space for JPEG structures */#ifdef MNG_INCLUDE_JNG_WRITE  MNG_FREE (pData, pData->pJPEGcinfo,  sizeof (mngjpeg_comp  ))  MNG_FREE (pData, pData->pJPEGcerr,   sizeof (mngjpeg_error ))#endif#ifdef MNG_INCLUDE_JNG_READ  MNG_FREE (pData, pData->pJPEGdinfo,  sizeof (mngjpeg_decomp))  MNG_FREE (pData, pData->pJPEGdsrc,   sizeof (mngjpeg_source))  MNG_FREE (pData, pData->pJPEGderr,   sizeof (mngjpeg_error ))  MNG_FREE (pData, pData->pJPEGdinfo2, sizeof (mngjpeg_decomp))  MNG_FREE (pData, pData->pJPEGdsrc2,  sizeof (mngjpeg_source))  MNG_FREE (pData, pData->pJPEGderr2,  sizeof (mngjpeg_error ))#endif  MNG_FREE (pData, pData->pJPEGrow2, pData->iJPEGrowlen2)  MNG_FREE (pData, pData->pJPEGrow,  pData->iJPEGrowlen)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -