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

📄 output.cpp

📁 264的播放器
💻 CPP
字号:

/*!
 ************************************************************************
 * \file output.c
 *
 * \brief
 *    Output an image and Trance support
 *
 * \author
 *    Main contributors (see contributors.h for copyright, address and affiliation details)
 *    - Karsten Suehring               <suehring@hhi.de>
 ************************************************************************
 */

#include "contributors.h"

#include <stdlib.h>
#include <assert.h>
#include <string.h>

#include "global.h"
#include "mbuffer.h"
#include "image.h"
#include "Win.h"
FrameStore* out_buffer;
extern FILE *p_out;
extern seq_parameter_set_rbsp_t *active_sps;

/*!
 ************************************************************************
 * \brief
 *    Writes out a storable picture
 * \param p
 *    Picture to be written
 * \param p_out
 *    Output file
 ************************************************************************
 */

unsigned char dispY[352*288],dispU[176*144],dispV[176*144];
void write_picture(StorablePicture *p/*, FILE *p_out*/)
{
  unsigned int i;
  unsigned int size_y=p->size_y;
  unsigned int size_x=p->size_x;

  if(p_out==NULL)
  {
	  for(i=0;i<size_y;i++)
		  memcpy(dispY+i*size_x,p->imgY[i],size_x);
	  
	  size_y>>=1;
	  size_x>>=1;
	  for(i=0;i<size_y;i++)
		  memcpy(dispU+i*size_x,p->imgUV[0][i],size_x);

	  for(i=0;i<size_y;i++)
		  memcpy(dispV+i*size_x,p->imgUV[1][i],size_x);

	  displayImage ((unsigned char*)dispY,(unsigned char*) dispV,(unsigned char*) dispU);
	  return;
  }
  else
  {
	  for(i=0;i<size_y;i++)
	  {
		  fwrite(p->imgY[i],sizeof(byte),size_x,p_out);
	  }
	  
	  size_y>>=1;
	  size_x>>=1;
	  for(i=0;i<size_y;i++)
	  {
		  fwrite(p->imgUV[0][i],sizeof(byte),size_x,p_out);	  
	  }
	  for(i=0;i<size_y;i++)
	  {
		  fwrite(p->imgUV[1][i],sizeof(byte),size_x,p_out);
	  }
	  displayImage ((unsigned char*)p->imgY[i],(unsigned char*) p->imgUV[1],(unsigned char*) p->imgUV[0]);
	  
	  fflush(p_out);
  }
}

/*!
 ************************************************************************
 * \brief
 *    Initialize output buffer for direct output
 ************************************************************************
 */
void init_out_buffer()
{
  out_buffer = alloc_frame_store();
}

/*!
 ************************************************************************
 * \brief
 *    Uninitialize output buffer for direct output
 ************************************************************************
 */
void uninit_out_buffer()
{
  free_frame_store(out_buffer);
  out_buffer=NULL;
}


/*!
 ************************************************************************
 * \brief
 *    Write out unpaired fields from output buffer.
 * \param p_out
 *    Output file
 ************************************************************************
 */
void flush_direct_output()
{
  free_storable_picture(out_buffer->frame);
  out_buffer->frame = NULL;
  out_buffer->is_used = 0;
}


/*!
 ************************************************************************
 * \brief
 *    Write a frame (from FrameStore)
 * \param fs
 *    FrameStore containing the frame
 * \param p_out
 *    Output file
 ************************************************************************
 */
void write_stored_frame( FrameStore *fs/*,FILE *p_out*/)
{
  // make sure no direct output field is pending
  flush_direct_output(/*p_out*/);

  write_picture(fs->frame/*, p_out*/);

  fs->is_output = 1;
}

/*!
 ************************************************************************
 * \brief
 *    Directly output a picture without storing it in the DPB. Fields 
 *    are buffered before they are written to the file.
 * \param p
 *    Picture for output
 * \param p_out
 *    Output file
 ************************************************************************
 */
void direct_output(StorablePicture *p/*, FILE *p_out*/)
{
    flush_direct_output();
    write_picture (p/*, p_out*/);
    free_storable_picture(p);
}

⌨️ 快捷键说明

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