亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? avilib.c

?? 一個可以實現嵌入式視頻監控系統的最新版客戶端軟件。
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *  Some utilities for writing and reading AVI files. *  These are not intended to serve for a full blown *  AVI handling software (this would be much too complex) *  The only intention is to write out MJPEG encoded *  AVIs with sound and to be able to read them back again. *  These utilities should work with other types of codecs too, however. * *  Copyright (C) 1999 Rainer Johanni <Rainer@Johanni.de> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include "avilib.h"/* The following variable indicates the kind of error */long AVI_errno = 0;/******************************************************************* *                                                                 * *    Utilities for writing an AVI File                            * *                                                                 * *******************************************************************//* AVI_MAX_LEN: The maximum length of an AVI file, we stay a bit below    the 2GB limit (Remember: 2*10^9 is smaller than 2 GB) */#define AVI_MAX_LEN 2000000000/* HEADERBYTES: The number of bytes to reserve for the header */#define HEADERBYTES 2048#define PAD_EVEN(x) ( ((x)+1) & ~1 )/* Copy n into dst as a 4 byte, little endian number.   Should also work on big endian machines */static void long2str(unsigned char *dst, int n){   dst[0] = (n    )&0xff;   dst[1] = (n>> 8)&0xff;   dst[2] = (n>>16)&0xff;   dst[3] = (n>>24)&0xff;}/* Convert a string of 4 or 2 bytes to a number,   also working on big endian machines */static unsigned long str2ulong(unsigned char *str){   return ( str[0] | (str[1]<<8) | (str[2]<<16) | (str[3]<<24) );}static unsigned long str2ushort(unsigned char *str){   return ( str[0] | (str[1]<<8) );}/* Calculate audio sample size from number of bits and number of channels.   This may have to be adjusted for eg. 12 bits and stereo */static int avi_sampsize(avi_t *AVI){   int s;   s = ((AVI->a_bits+7)/8)*AVI->a_chans;   if(s==0) s=1; /* avoid possible zero divisions */   return s;}/* Add a chunk (=tag and data) to the AVI file,   returns -1 on write error, 0 on success */static int avi_add_chunk(avi_t *AVI, unsigned char *tag, unsigned char *data, int length){   unsigned char c[8];   /* Copy tag and length int c, so that we need only 1 write system call      for these two values */   memcpy(c,tag,4);   long2str(c+4,length);   /* Output tag, length and data, restore previous position      if the write fails */   length = PAD_EVEN(length);   if( write(AVI->fdes,c,8) != 8 ||       write(AVI->fdes,data,length) != length )   {      lseek(AVI->fdes,AVI->pos,SEEK_SET);      AVI_errno = AVI_ERR_WRITE;      return -1;   }   /* Update file position */   AVI->pos += 8 + length;   return 0;}static int avi_add_index_entry(avi_t *AVI, unsigned char *tag, long flags, long pos, long len){   void *ptr;   if(AVI->n_idx>=AVI->max_idx)   {      ptr = realloc((void *)AVI->idx,(AVI->max_idx+4096)*16);      if(ptr == 0)      {         AVI_errno = AVI_ERR_NO_MEM;         return -1;      }      AVI->max_idx += 4096;      AVI->idx = (unsigned char((*)[16]) ) ptr;   }   /* Add index entry */   memcpy(AVI->idx[AVI->n_idx],tag,4);   long2str(AVI->idx[AVI->n_idx]+ 4,flags);   long2str(AVI->idx[AVI->n_idx]+ 8,pos);   long2str(AVI->idx[AVI->n_idx]+12,len);   /* Update counter */   AVI->n_idx++;   return 0;}/*   AVI_open_output_file: Open an AVI File and write a bunch                         of zero bytes as space for the header.   returns a pointer to avi_t on success, a zero pointer on error*/avi_t* AVI_open_output_file(char * filename){   avi_t *AVI;   int i;   unsigned char AVI_header[HEADERBYTES];   /* Allocate the avi_t struct and zero it */   AVI = (avi_t *) malloc(sizeof(avi_t));   if(AVI==0)   {      AVI_errno = AVI_ERR_NO_MEM;      return 0;   }   memset((void *)AVI,0,sizeof(avi_t));   /* Since Linux needs a long time when deleting big files,      we do not truncate the file when we open it.      Instead it is truncated when the AVI file is closed */   AVI->fdes = open(filename,O_RDWR|O_CREAT,0600);   if (AVI->fdes < 0)   {      AVI_errno = AVI_ERR_OPEN;      free(AVI);      return 0;   }   /* Write out HEADERBYTES bytes, the header will go here      when we are finished with writing */   for (i=0;i<HEADERBYTES;i++) AVI_header[i] = 0;   i = write(AVI->fdes,AVI_header,HEADERBYTES);   if (i != HEADERBYTES)   {      close(AVI->fdes);      AVI_errno = AVI_ERR_WRITE;      free(AVI);      return 0;   }   AVI->pos  = HEADERBYTES;   AVI->mode = AVI_MODE_WRITE; /* open for writing */   return AVI;}void AVI_set_video(avi_t *AVI, int width, int height, double fps, char *compressor){   /* may only be called if file is open for writing */   if(AVI->mode==AVI_MODE_READ) return;   AVI->width  = width;   AVI->height = height;   AVI->fps    = fps;   memcpy(AVI->compressor,compressor,4);   AVI->compressor[4] = 0;}void AVI_set_audio(avi_t *AVI, int channels, long rate, int bits, int format){   /* may only be called if file is open for writing */   if(AVI->mode==AVI_MODE_READ) return;   AVI->a_chans = channels;   AVI->a_rate  = rate;   AVI->a_bits  = bits;   AVI->a_fmt   = format;}#define OUT4CC(s) \   if(nhb<=HEADERBYTES-4) memcpy(AVI_header+nhb,s,4); nhb += 4#define OUTLONG(n) \   if(nhb<=HEADERBYTES-4) long2str(AVI_header+nhb,n); nhb += 4#define OUTSHRT(n) \   if(nhb<=HEADERBYTES-2) { \      AVI_header[nhb  ] = (n   )&0xff; \      AVI_header[nhb+1] = (n>>8)&0xff; \   } \   nhb += 2/*  Write the header of an AVI file and close it.  returns 0 on success, -1 on write error.*/static int avi_close_output_file(avi_t *AVI){   int ret, njunk, sampsize, hasIndex, ms_per_frame, idxerror, flag;   int movi_len, hdrl_start, strl_start;   unsigned char AVI_header[HEADERBYTES];   long nhb;   /* Calculate length of movi list */   movi_len = AVI->pos - HEADERBYTES + 4;   /* Try to ouput the index entries. This may fail e.g. if no space      is left on device. We will report this as an error, but we still      try to write the header correctly (so that the file still may be      readable in the most cases */   idxerror = 0;   ret = avi_add_chunk(AVI,"idx1",(void*)AVI->idx,AVI->n_idx*16);   hasIndex = (ret==0);   if(ret)   {      idxerror = 1;      AVI_errno = AVI_ERR_WRITE_INDEX;   }   /* Calculate Microseconds per frame */   if(AVI->fps < 0.001)      ms_per_frame = 0;   else      ms_per_frame = 1000000./AVI->fps + 0.5;   /* Prepare the file header */   nhb = 0;   /* The RIFF header */   OUT4CC ("RIFF");   OUTLONG(AVI->pos - 8);    /* # of bytes to follow */   OUT4CC ("AVI ");   /* Start the header list */   OUT4CC ("LIST");   OUTLONG(0);        /* Length of list in bytes, don't know yet */   hdrl_start = nhb;  /* Store start position */   OUT4CC ("hdrl");   /* The main AVI header */   /* The Flags in AVI File header */#define AVIF_HASINDEX           0x00000010      /* Index at end of file */#define AVIF_MUSTUSEINDEX       0x00000020#define AVIF_ISINTERLEAVED      0x00000100#define AVIF_TRUSTCKTYPE        0x00000800      /* Use CKType to find key frames */#define AVIF_WASCAPTUREFILE     0x00010000#define AVIF_COPYRIGHTED        0x00020000   OUT4CC ("avih");   OUTLONG(56);                 /* # of bytes to follow */   OUTLONG(ms_per_frame);       /* Microseconds per frame */   OUTLONG(10000000);           /* MaxBytesPerSec, I hope this will never be used */   OUTLONG(0);                  /* PaddingGranularity (whatever that might be) */                                /* Other sources call it 'reserved' */   flag = AVIF_WASCAPTUREFILE;   if(hasIndex) flag |= AVIF_HASINDEX;   if(hasIndex && AVI->must_use_index) flag |= AVIF_MUSTUSEINDEX;   OUTLONG(flag);               /* Flags */   OUTLONG(AVI->video_frames);  /* TotalFrames */   OUTLONG(0);                  /* InitialFrames */   if (AVI->audio_bytes)      { OUTLONG(2); }           /* Streams */   else      { OUTLONG(1); }           /* Streams */   OUTLONG(0);                  /* SuggestedBufferSize */   OUTLONG(AVI->width);         /* Width */   OUTLONG(AVI->height);        /* Height */                                /* MS calls the following 'reserved': */   OUTLONG(0);                  /* TimeScale:  Unit used to measure time */   OUTLONG(0);                  /* DataRate:   Data rate of playback     */   OUTLONG(0);                  /* StartTime:  Starting time of AVI data */   OUTLONG(0);                  /* DataLength: Size of AVI data chunk    */   /* Start the video stream list ---------------------------------- */   OUT4CC ("LIST");   OUTLONG(0);        /* Length of list in bytes, don't know yet */   strl_start = nhb;  /* Store start position */   OUT4CC ("strl");   /* The video stream header */   OUT4CC ("strh");   OUTLONG(64);                 /* # of bytes to follow */   OUT4CC ("vids");             /* Type */   OUT4CC (AVI->compressor);    /* Handler */   OUTLONG(0);                  /* Flags */   OUTLONG(0);                  /* Reserved, MS says: wPriority, wLanguage */   OUTLONG(0);                  /* InitialFrames */   OUTLONG(ms_per_frame);       /* Scale */   OUTLONG(1000000);            /* Rate: Rate/Scale == samples/second */   OUTLONG(0);                  /* Start */   OUTLONG(AVI->video_frames);  /* Length */   OUTLONG(0);                  /* SuggestedBufferSize */   OUTLONG(-1);                 /* Quality */   OUTLONG(0);                  /* SampleSize */   OUTLONG(0);                  /* Frame */   OUTLONG(0);                  /* Frame */   OUTLONG(0);                  /* Frame */   OUTLONG(0);                  /* Frame */   /* The video stream format */   OUT4CC ("strf");   OUTLONG(40);                 /* # of bytes to follow */   OUTLONG(40);                 /* Size */   OUTLONG(AVI->width);         /* Width */   OUTLONG(AVI->height);        /* Height */   OUTSHRT(1); OUTSHRT(24);     /* Planes, Count */   OUT4CC (AVI->compressor);    /* Compression */   OUTLONG(AVI->width*AVI->height);  /* SizeImage (in bytes?) */   OUTLONG(0);                  /* XPelsPerMeter */   OUTLONG(0);                  /* YPelsPerMeter */   OUTLONG(0);                  /* ClrUsed: Number of colors used */   OUTLONG(0);                  /* ClrImportant: Number of colors important */   /* Finish stream list, i.e. put number of bytes in the list to proper pos */   long2str(AVI_header+strl_start-4,nhb-strl_start);   if (AVI->a_chans && AVI->audio_bytes)   {   sampsize = avi_sampsize(AVI);   /* Start the audio stream list ---------------------------------- */   OUT4CC ("LIST");   OUTLONG(0);        /* Length of list in bytes, don't know yet */   strl_start = nhb;  /* Store start position */   OUT4CC ("strl");   /* The audio stream header */   OUT4CC ("strh");   OUTLONG(64);            /* # of bytes to follow */   OUT4CC ("auds");   OUT4CC ("\0\0\0\0");   OUTLONG(0);             /* Flags */   OUTLONG(0);             /* Reserved, MS says: wPriority, wLanguage */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷香蕉在线一区二区| 免费成人结看片| 中文久久乱码一区二区| 久久婷婷色综合| 久久久精品影视| 欧美激情一二三区| 中文字幕日韩av资源站| 亚洲私人黄色宅男| 亚洲精品久久久蜜桃| 一区二区三区高清| 亚洲成精国产精品女| 青娱乐精品视频| 寂寞少妇一区二区三区| 国产不卡在线视频| 一本色道久久加勒比精品| 欧美亚洲动漫精品| 91精品免费观看| 26uuu另类欧美| 中文字幕一区二区三中文字幕 | 日韩精品欧美精品| 蜜桃av一区二区三区电影| 国产一区二区h| 国产99久久久国产精品潘金| 成人看片黄a免费看在线| 91视频在线观看免费| 欧美三级日本三级少妇99| 欧美精品99久久久**| 国产午夜久久久久| 一区二区三区产品免费精品久久75| 亚洲国产视频网站| 精品一区二区三区香蕉蜜桃| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩国产综合一区二区三区 | 成人激情黄色小说| 欧美日韩免费一区二区三区 | 粉嫩av亚洲一区二区图片| 成人av网站在线| 欧美日韩dvd在线观看| 欧美精品一区二区三区蜜桃 | 久久久蜜桃精品| 亚洲欧美色综合| 免费国产亚洲视频| 91污片在线观看| 精品国产一区二区三区久久久蜜月 | 91国产精品成人| 欧美精品一区二区三区高清aⅴ| 亚洲免费在线看| 国产精品一区专区| 91.com在线观看| 亚洲天堂成人在线观看| 麻豆91免费观看| 91色九色蝌蚪| 国产精品视频麻豆| 国产一区二区三区美女| 91精品国产色综合久久| 亚洲欧美日韩人成在线播放| 精品一区二区三区免费观看| 欧美日韩国产一区二区三区地区| 国产精品三级电影| 久久综合综合久久综合| 欧美优质美女网站| 中文字幕一区二区三区蜜月| 国产乱码精品一区二区三区av| 欧美性色黄大片手机版| 亚洲欧美日本在线| 成人av电影免费在线播放| 久久亚洲免费视频| 精品亚洲porn| 26uuu欧美日本| 国内精品在线播放| 日韩欧美国产成人一区二区| 亚洲高清不卡在线| 欧美性猛交xxxx乱大交退制版 | 欧美丝袜丝交足nylons图片| 国产精品亲子伦对白| 国产精品系列在线播放| 国产日韩欧美亚洲| 国产精品性做久久久久久| 久久综合久色欧美综合狠狠| 精久久久久久久久久久| 日韩欧美一区中文| 精品在线免费视频| 精品1区2区在线观看| 韩国女主播成人在线观看| 久久久亚洲精品石原莉奈| 国产精品白丝av| 国产精品国产自产拍高清av王其| 国产999精品久久久久久| 国产日韩精品视频一区| av电影在线观看一区| 亚洲欧美日韩久久| 欧美日韩www| 狠狠v欧美v日韩v亚洲ⅴ| 成人av免费在线| 天堂资源在线中文精品| 在线一区二区三区四区五区| 亚洲视频免费在线| 亚洲一二三区不卡| 欧美少妇一区二区| 蜜臀av性久久久久av蜜臀妖精| 日韩精品在线一区二区| 亚洲女人的天堂| 国产精品久久国产精麻豆99网站| 久久一区二区视频| 91麻豆精品国产91久久久久| 欧美中文字幕亚洲一区二区va在线| 成人综合激情网| 国产乱妇无码大片在线观看| 毛片基地黄久久久久久天堂| 丝袜a∨在线一区二区三区不卡| 亚洲日本在线观看| 亚洲人123区| 亚洲人吸女人奶水| 亚洲视频在线观看一区| 中文字幕中文在线不卡住| 久久久久国产精品厨房| 国产亚洲va综合人人澡精品| 久久久天堂av| 国产欧美精品国产国产专区| 精品福利视频一区二区三区| 欧美v日韩v国产v| 日韩一级精品视频在线观看| 91精品久久久久久蜜臀| 日韩欧美一二三四区| 日韩精品一区在线观看| 久久日韩粉嫩一区二区三区| 久久亚洲精品小早川怜子| 久久久国产精品麻豆| 欧美国产日产图区| 国产精品卡一卡二| 夜夜嗨av一区二区三区中文字幕 | 99久久精品国产导航| 成人晚上爱看视频| 色婷婷亚洲综合| 3d动漫精品啪啪1区2区免费| 欧美一级高清片| 久久久久久久综合| 国产精品久久久久四虎| 亚洲一区二区三区视频在线| 亚洲国产一区二区视频| 精品一区二区三区不卡| eeuss鲁片一区二区三区| 色网站国产精品| 日韩欧美国产一二三区| 国产欧美精品一区二区三区四区| 亚洲人成小说网站色在线 | 欧美日韩精品二区第二页| 欧美一区二区三区爱爱| 日本一区二区三区dvd视频在线| 中文字幕色av一区二区三区| 日韩精品午夜视频| 国产成人午夜精品5599| 在线看日本不卡| 精品99一区二区三区| 亚洲精品视频在线看| 激情综合网天天干| 色综合久久久久久久| 日韩精品一区二区在线观看| 亚洲欧美中日韩| 麻豆91免费看| 在线日韩一区二区| 国产丝袜美腿一区二区三区| 亚洲一区二区三区在线播放| 国产一区二区中文字幕| 欧美亚洲愉拍一区二区| 久久综合久久综合亚洲| 五月婷婷综合网| a级高清视频欧美日韩| 日韩三级中文字幕| 亚洲国产一二三| 99久久99久久精品免费观看| 欧美精品一区二区三区久久久| 一区二区三区精密机械公司| 国产电影一区在线| 欧美一区二区视频在线观看| 亚洲视频一区二区免费在线观看| 国产精品伊人色| 91精品国产一区二区三区| 亚洲欧美日韩综合aⅴ视频| 国产成人精品免费| 欧美一级黄色录像| 五月婷婷激情综合| 91激情在线视频| 日本一区二区不卡视频| 国产一区二区三区综合| 91精品久久久久久蜜臀| 亚洲超碰97人人做人人爱| 91在线观看一区二区| 中文字幕免费不卡| 国产黑丝在线一区二区三区| 日韩午夜三级在线| 日本在线播放一区二区三区| 欧美色图一区二区三区| 亚洲欧美日韩人成在线播放| 99久久精品国产毛片| 中文欧美字幕免费| 成人va在线观看| 国产精品欧美综合在线| av在线不卡免费看| 亚洲欧美日韩中文播放|