www.pudn.com > jm50g.zip > filehandle.c
/* *********************************************************************** * COPYRIGHT AND WARRANTY INFORMATION * * Copyright 2001, International Telecommunications Union, Geneva * * DISCLAIMER OF WARRANTY * * These software programs are available to the user without any * license fee or royalty on an "as is" basis. The ITU disclaims * any and all warranties, whether express, implied, or * statutory, including any implied warranties of merchantability * or of fitness for a particular purpose. In no event shall the * contributor or the ITU be liable for any incidental, punitive, or * consequential damages of any kind whatsoever arising from the * use of these programs. * * This disclaimer of warranty extends to the user of these programs * and user's customers, employees, agents, transferees, successors, * and assigns. * * The ITU does not represent or warrant that the programs furnished * hereunder are free of infringement of any third-party patents. * Commercial implementations of ITU-T Recommendations, including * shareware, may be subject to royalty fees to patent holders. * Information regarding the ITU-T patent policy is available from * the ITU Web site at http://www.itu.int. * * THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE ITU-T PATENT POLICY. ************************************************************************ */ /*! ************************************************************************************** * \file * filehandle.c * \brief * Handles the operations how to write * the generated symbols on the interim file format or some * other specified output formats * \author * Main contributors (see contributors.h for copyright, address and affiliation details) * - Thomas Stockhammer* - Detlev Marpe *************************************************************************************** */ #include "contributors.h" #include #include #include #include #include #include #include "global.h" #if TRACE #include // strncpy #endif #include "rtp.h" #include "decodeiff.h" /*! ************************************************************************ * \brief * Error handling procedure. Print error message to stderr and exit * with supplied code. * \param text * Error message ************************************************************************ */ void error(char *text, int code) { fprintf(stderr, "%s\n", text); exit(code); } /*! ************************************************************************ * \brief * This function generates the appropriate slice * header ************************************************************************ */ void start_slice(struct img_par *img, struct inp_par *inp) { Slice *currSlice = img->currentSlice; int i; switch(inp->of_mode) { case PAR_OF_IFF: if (inp->symbol_mode == UVLC) { // Current TML File Format nal_startcode_follows = uvlc_startcode_follows; currSlice->readSlice = readSliceIFF; currSlice->partArr[0].readSyntaxElement = readSyntaxElement_UVLC; } else { // CABAC File Format nal_startcode_follows = cabac_startcode_follows; currSlice->readSlice = readSliceIFF; currSlice->partArr[0].readSyntaxElement = readSyntaxElement_CABAC; } break; case PAR_OF_26L: currSlice->dp_mode = PAR_DP_1; //other modes not supported if (inp->symbol_mode == UVLC) { // Current TML File Format nal_startcode_follows = uvlc_startcode_follows; currSlice->readSlice = readSliceUVLC; currSlice->partArr[0].readSyntaxElement = readSyntaxElement_UVLC; } else { // CABAC File Format nal_startcode_follows = cabac_startcode_follows; currSlice->readSlice = readSliceCABAC; currSlice->partArr[0].readSyntaxElement = readSyntaxElement_CABAC; } break; case PAR_OF_RTP: if (inp->symbol_mode == UVLC) { nal_startcode_follows = RTP_startcode_follows; currSlice->readSlice = readSliceRTP; for (i=0; i<3; i++) // always up to three partitions in RTP { currSlice->partArr[i].readSyntaxElement = readSyntaxElement_RTP; currSlice->partArr[i].bitstream->ei_flag = 1; } } else { // CABAC File Format nal_startcode_follows = cabac_startcode_follows; currSlice->readSlice = readSliceRTP; for (i=0; i max_part_nr; i++) { currSlice->partArr[i].readSyntaxElement = readSyntaxElement_CABAC; currSlice->partArr[i].bitstream->ei_flag = 1; } } break; default: snprintf(errortext, ET_SIZE, "Input File Mode %d not supported", inp->of_mode); error(errortext,1); break; } }