www.gusucode.com > 一个可以在局域网进行视频聊天的源代码 > 一个可以在局域网进行视频聊天的源代码/VoIP/encoder/rlib.cpp

    ////////////////////////////////////////////////////////////////////////////
//
//
//    Project     : VideoNet version 1.1.
//    Description : Peer to Peer Video Conferencing over the LAN.
//	  Author      :	Nagareshwar Y Talekar ( nsry2002@yahoo.co.in)
//    Date        : 15-6-2004.
//
//    I have converted origional fast h.263 encoder library from C to C++ 
//	  so that it can be integrated into any windows application easily.
//	  I have removed some of unnecessary codes/files from the
//	  fast h263 library.Also moved definitions and declarations
//	  in their proper .h and .cpp files.
//
//    File description : 
//    Name    : rlib.cpp
//    Details : Reading and writing to file...
//
/////////////////////////////////////////////////////////////////////////////


#include "rlib.h"
//#include "owntypes.h"

int ReadQCIF(FILE *f, struct qcif *qc)
{
  struct qcif8bit source;
  int i;
  int file_err;
  unsigned int *ud;
  unsigned char *us;

  file_err = fread(&source, sizeof(source), 1, f);

  if(file_err != 1)
    return FALSE;

  us = &source.Y[0][0];
  ud = &qc->Y[0][0];
  
  for(i = 0; i < QCIF_YWIDTH*QCIF_YHEIGHT; i++)
    *ud++ = (unsigned int) *us++;
  
  us = &source.U[0][0];
  ud = &qc->U[0][0];
  
  for(; i < QCIF_YWIDTH*QCIF_YHEIGHT + QCIF_UWIDTH*QCIF_UHEIGHT + 
	QCIF_VWIDTH*QCIF_VHEIGHT; i++)
    *ud++ = (signed int) *us++;

  return TRUE;
}

int ReadCIF(FILE *f, struct cif *qc)
{
  struct cif8bit source;
  int i;
  int file_err;
  unsigned int *ud;
  unsigned char *us;

  file_err = fread(&source, sizeof(source), 1, f);

  if(file_err != 1)
    return FALSE;

  us = &source.Y[0][0];
  ud = &qc->Y[0][0];
  
  for(i = 0; i < CIF_YWIDTH*CIF_YHEIGHT; i++)
    *ud++ = (unsigned int) *us++;
  
  us = &source.U[0][0];
  ud = &qc->U[0][0];
  
  for(; i < CIF_YWIDTH*CIF_YHEIGHT + CIF_UWIDTH*CIF_UHEIGHT + 
	CIF_VWIDTH*CIF_VHEIGHT; i++)
    *ud++ = (signed int) *us++;

  return TRUE;
}

int WriteQCIF(FILE *f, struct qcif *qc)
{
  struct qcif8bit dest;
  int i;
  int file_err;
  unsigned char *ud;
  unsigned int *us;

  us = &qc->Y[0][0];
  ud = &dest.Y[0][0];
  
  for(i = 0; i < QCIF_YWIDTH*QCIF_YHEIGHT; i++)
    *ud++ = (unsigned char) *us++;
  
  us = &qc->U[0][0];
  ud = &dest.U[0][0];

  for(; i < QCIF_YWIDTH*QCIF_YHEIGHT + QCIF_UWIDTH*QCIF_UHEIGHT + 
	QCIF_VWIDTH*QCIF_VHEIGHT; i++)
    *ud++ = (unsigned char) *us++;

 file_err = fwrite(&dest, sizeof(dest), 1, f);

 return (file_err == 1);

}

int WriteCIF(FILE *f, struct cif *qc)
{
  struct cif8bit dest;
  int i;
  int file_err;
  unsigned char *ud;
  unsigned int *us;

  us = &qc->Y[0][0];
  ud = &dest.Y[0][0];
  
  for(i = 0; i < CIF_YWIDTH*CIF_YHEIGHT; i++)
    *ud++ = (unsigned char) *us++;
  
  us = &qc->U[0][0];
  ud = &dest.U[0][0];

  for(; i < CIF_YWIDTH*CIF_YHEIGHT + CIF_UWIDTH*CIF_UHEIGHT + 
	CIF_VWIDTH*CIF_VHEIGHT; i++)
    *ud++ = (unsigned char) *us++;

 file_err = fwrite(&dest, sizeof(dest), 1, f);

 return (file_err == 1);

}