📄 output.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 + -