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

📄 encvisualobject.c

📁 freescale i.mx31 BSP CE5.0全部源码
💻 C
字号:
/*------------------------------------------------------------------------------
--                                                                            --
--       This software is confidential and proprietary and may be used        --
--        only as expressly authorized by a licensing agreement from          --
--                                                                            --
--                            Hantro Products Oy.                             --
--                                                                            --
--      In the event of publication, the following notice is applicable:      --
--                                                                            --
--                   (C) COPYRIGHT 2004 HANTRO PRODUCTS OY                    --
--                            ALL RIGHTS RESERVED                             --
--                                                                            --
--          The entire notice above must be reproduced on all copies.         --
--                                                                            --
--------------------------------------------------------------------------------
--
--  Description : Encoder internal
--
-------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------

    Table of context

    1. Include headers
    2. External compiler flags
    3. Module defines
    4. Local function prototypes
    5. Functions
        5.1  VisualObject
        5.2  VideoSignalType
        5.3  EncVideoObjectStartCode

------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
    1. Include headers
------------------------------------------------------------------------------*/
#include "EncSim.h"
#include "EncVisualObject.h"
#include "EncStartCode.h"
#include "EncTrace.h"

/*------------------------------------------------------------------------------
    2. External compiler flags
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
    3. Module defines
------------------------------------------------------------------------------*/
/* Table 6-4
0,4 reserved
1,4 ISO/IEC 14496-2
2,4 ISO/IEC 14496-2 AMD1
3,4 reserved

Table 6-5, see visualObjectType_e
0,4 reserved
1,4 video ID
2,4 still texture ID
3,4 Me.h ID
4,4 FBA ID
5,4 3D Me.h ID

Table 6-6
0,3 Component
1,3 PAL
2,3 NTSC
3,3 SECAM
4,3 MAC
5,3 Unspecified video format

Table 6-7
0,8 Forbidden
1,8 Recommendation ITU-R BT.709
2,8 Unspecified Video
3,8 Reserved
4,8 Recommendation ITU-R BT.470-2 System M
5,8 Recommendation ITU-R BT.470-2 System B, G
6,8 SMPTE 170M
7,8 SMPTE 240M (1987)
8,8 Generic film

Table 6-8
0, 8 Forbidden
1, 8 Recommendation ITU-R BT.709
2, 8 Unspecified Video
3, 8 Reserved
4, 8 Recommendation ITU-R BT.470-2 System M
5, 8 Recommendation ITU-R BT.470-2 System B, G
6, 8 SMPTE 170M
7, 8 SMPTE 240M (1987)
8, 8 Linear transfer characteristic
9, 8 Logarithmic transfer char. (100:1 range)
10,8 Logarithmic transfer char. (316.22777:1 range)

Table 6-9
0,8 Forbidden
1,8 Recommendation ITU-R BT.709
2,8 Unspecified Video
3,8 Reserved
4,8 FCC
5,8 Recommendation ITU-R BT.470-2 System B, G
6,8 SMPTE 170M
7,8 SMPTE 240M (1987) */

/*------------------------------------------------------------------------------
    4. Local function prototypes
------------------------------------------------------------------------------*/
static void VideoSignalType(stream_s *, videoSignalType_s *);

/*------------------------------------------------------------------------------

	EncVisObInit

------------------------------------------------------------------------------*/
void EncVisObInit(visob_s *visob)
{
	videoSignalType_s *vst = &visob->videoSignalType;

	visob->header = YES;
	visob->isVisualObjectIdentifier = NO;
	visob->visualObjectVerid = 1;
	visob->visualObjectPriority = 1;
	visob->visualObjectType = VIDEO_ID;
	visob->userData.header = NO;

	vst->videoSignalType = NO;
	vst->videoFormat = 5;
	/*vst->videoRange = 1;*/
	vst->colourDescription = NO;
	vst->colourPrimaries = 1;
	vst->transferCharacteristics = 1;
	vst->matrixCoefficients = 1;

	return;
}

/*------------------------------------------------------------------------------

	EncVisObHdr

------------------------------------------------------------------------------*/
void EncVisObHdr(stream_s *stream, visob_s *visob)
{
	if (visob->header == NO) {
		return;
	}

	/* Start Code Prefix And Start Code */
	EncPutBits(stream, START_CODE_PREFIX_VAL, START_CODE_PREFIX_NUM);
	EncPutBits(stream, START_CODE_VO_VAL, START_CODE_VO_NUM);
	COMMENT("Visual Object start code");

	/* Visual object identifier */
	if (visob->isVisualObjectIdentifier == YES) {
		EncPutBits(stream, 1, 1);
		COMMENT("Is Visual Object Identifier");

		/* Visual Object Verid */
		EncPutBits(stream, visob->visualObjectVerid, 4);
		COMMENT("Visual Object Verid");

		/* Visual Object Priority */
		EncPutBits(stream, visob->visualObjectPriority, 3);
		COMMENT("Visual Object Priority");
	} else {
		EncPutBits(stream, 0, 1);
		COMMENT("Is Visual Object Identifier");
	}

	/* Visual Object Type */
	EncPutBits(stream, visob->visualObjectType, 4);
	COMMENT("Visual Object Type");

	/* visualObjectType == "video ID" ||      */
	/* visualObjectType == "still texture ID" */
	if ((visob->visualObjectType == VIDEO_ID) || (visob->visualObjectType
				== STILL_TEXTURE_ID)) {
		VideoSignalType(stream, &visob->videoSignalType);
	}

	/* Next Start Code */
	EncNextStartCode(stream);
	COMMENT("Next start Code");

	/* User data */
	EncUserData(stream, &visob->userData);

	return;
}

/*------------------------------------------------------------------------------

	VideoSignalType

------------------------------------------------------------------------------*/
void VideoSignalType(stream_s *stream, videoSignalType_s *vst)
{
	if (vst->videoSignalType == YES) {
		EncPutBits(stream, 1, 1);
		COMMENT("Video Signal Type");
		EncPutBits(stream, vst->videoFormat, 3);
		COMMENT("Video Format");
		EncPutBits(stream, vst->videoRange, 1);
		COMMENT("Video Range");
		if (vst->colourDescription == YES) {
			EncPutBits(stream, 1, 1);
			COMMENT("Colour Description");
			EncPutBits(stream, vst->colourPrimaries, 8);
			COMMENT("Colour Primaries");
			EncPutBits(stream, vst->transferCharacteristics, 8);
			COMMENT("Transfer Characteristics");
			EncPutBits(stream, vst->matrixCoefficients, 8);
			COMMENT("Matrix Coefficients");
		} else {
			EncPutBits(stream, 0, 1);
			COMMENT("Colour Description");
		}
	} else {
		EncPutBits(stream, 0, 1);
		COMMENT("Video Signal Type");
	}

	return;
}

⌨️ 快捷键说明

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