RenderAction::RenderAction(const RenderAction &source) :

     Inherited               (source                         ),
    _doCullOnly              (false                          ),
    _numBuffers              (0                              ),
    _currentBuffer           (0                              ),

    _uiKeyGen                (source._uiKeyGen               ),

    _pPartitionPools         (                               ),
    _pNodePools              (                               ),
    _pStatePools             (                               ),
    _pTreeBuilderPools       (                               ),

    _vRenderPartitions       (                               ),

    _iActivePartitionIdx     (-1                             ),
    _bInPartitionGroup       (false                          ),
    _bDefaultPartHandled     (false                          ),
    _pActivePartition        (NULL                           ),

    _sRenderPartitionStack   (                               ),
    _sRenderPartitionIdxStack(                               ),
    _sRenderPartitionGrpStack(                               ),

    _bvPassMask              (source._bvPassMask             ),

    _occlusionCulling        (source._occlusionCulling       ),
    _occlusionCullingDebug   (source._occlusionCullingDebug  ),
    _occDMTested             (source._occDMTested            ), 
    _occDMCulled             (source._occDMCulled            ), 
    _occDMVisible            (source._occDMVisible           ),
    _occMinFeatureSize       (source._occMinFeatureSize      ),
    _occVisibilityThreshold  (source._occVisibilityThreshold ),
    _occCoveredThreshold     (source._occCoveredThreshold    ),
    _occQueryBufferSize      (source._occQueryBufferSize     ),
    _occMinimumTriangleCount (source._occMinimumTriangleCount),

    _scrlodCoverageThreshold (source._scrlodCoverageThreshold),
    _scrlodNumLODsToUse      (source._scrlodNumLODsToUse     ),
    _scrlodDegradationFactor (source._scrlodDegradationFactor),

    _pGLFinishTask           (NULL                           )
{
    setNumBuffers(source._numBuffers);
}
RenderAction::RenderAction(void) :
     Inherited               (          ),
    _doCullOnly              (     false),
    _numBuffers              (         0),
    _currentBuffer           (         0),

    _uiKeyGen                (         0),

    _pPartitionPools         (          ),
    _pNodePools              (          ),
    _pStatePools             (          ),
    _pTreeBuilderPools       (          ),

    _vRenderPartitions       (          ),

    _iActivePartitionIdx     (-1        ),
    _bInPartitionGroup       (false     ),
    _bDefaultPartHandled     (false     ),
    _pActivePartition        (NULL      ),

    _sRenderPartitionStack   (          ),
    _sRenderPartitionIdxStack(          ),
    _sRenderPartitionGrpStack(          ),

    _bvPassMask              (          ),

    _occlusionCulling        (false     ),
    _occlusionCullingDebug   (false     ),
    _occDMTested             (0xffffffff), 
    _occDMCulled             (0xffffffff), 
    _occDMVisible            (0xffffffff),
    _occMinFeatureSize       (         0),
    _occVisibilityThreshold  (         0),
    _occCoveredThreshold     (      0.7f),
    _occQueryBufferSize      (      1000),
    _occMinimumTriangleCount (       500),

    _scrlodCoverageThreshold (     0.01f),
    _scrlodNumLODsToUse      (         0),
    _scrlodDegradationFactor (      1.0f),

    _pGLFinishTask           (NULL      )
{
    if(_vDefaultEnterFunctors != NULL)
        _enterFunctors = *_vDefaultEnterFunctors;

    if(_vDefaultLeaveFunctors != NULL)
        _leaveFunctors = *_vDefaultLeaveFunctors;

    setNumBuffers(1);

    UInt32 uiTId = TextureBaseChunk         ::getStaticClassId() & 0x000003FF;
    UInt32 uiMId = MaterialChunk            ::getStaticClassId() & 0x000003FF;

#ifdef OSG_NEW_SHADER
    UInt32 uiShId = ShaderExecutableChunk   ::getStaticClassId() & 0x000003FF;
           uiMId  = ShaderExecutableVarChunk::getStaticClassId() & 0x000003FF;
#else
    UInt32 uiShId = SimpleSHLChunk          ::getStaticClassId() & 0x000003FF;
#endif

    _uiKeyGen = ( (uiShId) | (uiTId << 10) | (uiMId      << 20) );

/*
    fprintf(stderr, "CreateKeyGen (RT) (%p) from %d %d %d -> %08x\n",
            this,
            SHLChunk     ::getStaticClassId(),
            TextureChunk ::getStaticClassId(),
            MaterialChunk::getStaticClassId(),
            _uiKeyGen);
 */

}
Exemplo n.º 3
0
int main(int argc, char** argv) {

    OMX_PORT_PARAM_TYPE param;
    OMX_PARAM_PORTDEFINITIONTYPE sPortDef;
    OMX_AUDIO_PORTDEFINITIONTYPE sAudioPortDef;
    OMX_AUDIO_PARAM_PORTFORMATTYPE sAudioPortFormat;
    OMX_AUDIO_PARAM_PCMMODETYPE sPCMMode;
    OMX_BUFFERHEADERTYPE **inBuffers;
    OMX_BUFFERHEADERTYPE **outBuffers;
    OMX_AUDIO_PARAM_MP3TYPE sMP3Mode;


    unsigned char name[OMX_MAX_STRINGNAME_SIZE];
    OMX_UUIDTYPE uid;
    int startPortNumber;
    int nPorts;
    int n;

    fprintf(stderr, "Thread id is %p\n", pthread_self());
    if(argc < 2){
	display_help();
	exit(1);
    }

    inFd = open(argv[1], O_RDONLY);
    if(inFd < 0){
	perror("Error opening input file\n");
	exit(1);
    }
    filesize = getFileSize(inFd);

    outFd = open(argv[2], (O_WRONLY | O_CREAT), 0644);
    if(outFd < 0){
	perror("Error opening output file\n");
	exit(1);
    }

    err = OMX_Init();
    if(err != OMX_ErrorNone) {
	fprintf(stderr, "OMX_Init() failed\n", 0);
	exit(1);
    }
    /** Ask the core for a handle to the audio render component
     */
    err = OMX_GetHandle(&handle, componentName, NULL /*app private data */, &callbacks);
    if(err != OMX_ErrorNone) {
	fprintf(stderr, "OMX_GetHandle failed\n", 0);
	exit(1);
    }
    err = OMX_GetComponentVersion(handle, name, &compVersion, &specVersion, &uid);
    if(err != OMX_ErrorNone) {
	fprintf(stderr, "OMX_GetComponentVersion failed\n", 0);
	exit(1);
    }

    /** no other ports to disable */

    /** Get audio port information */
    setHeader(&param, sizeof(OMX_PORT_PARAM_TYPE));
    err = OMX_GetParameter(handle, OMX_IndexParamAudioInit, &param);
    if(err != OMX_ErrorNone){
	fprintf(stderr, "Error in getting OMX_PORT_PARAM_TYPE parameter\n", 0);
	exit(1);
    }
    startPortNumber = ((OMX_PORT_PARAM_TYPE)param).nStartPortNumber;
    nPorts = ((OMX_PORT_PARAM_TYPE)param).nPorts;
    if (nPorts != 2) {
	fprintf(stderr, "Decode device has wrong number of ports: %d\n", nPorts);
	exit(1);
    }

    setEncoding(startPortNumber, OMX_AUDIO_CodingVORBIS);
    setEncoding(startPortNumber+1, OMX_AUDIO_CodingPCM);

    printState();;
    
    numInBuffers = setNumBuffers(startPortNumber);
    numOutBuffers = setNumBuffers(startPortNumber+1);

    /* call to put state into idle before allocating buffers */
    err = OMX_SendCommand(handle, OMX_CommandStateSet, OMX_StateIdle, NULL);
    if (err != OMX_ErrorNone) {
	fprintf(stderr, "Error on setting state to idle\n");
	exit(1);
    }
 
    err = OMX_SendCommand(handle, OMX_CommandPortEnable, startPortNumber, NULL);
    if (err != OMX_ErrorNone) {
	fprintf(stderr, "Error on setting port to enabled\n");
	exit(1);
    }
    err = OMX_SendCommand(handle, OMX_CommandPortEnable, startPortNumber+1, NULL);
    if (err != OMX_ErrorNone) {
	fprintf(stderr, "Error on setting port to enabled\n");
	exit(1);
    }

    createMinBuffers(startPortNumber, &inBufferSize, &inBuffers);
    createMinBuffers(startPortNumber+1, &outBufferSize, &outBuffers);


    /* Make sure we've reached Idle state */
    waitFor(OMX_StateIdle);
    fprintf(stderr, "Reached Idle state\n");
    //exit(0);

    /* Now try to switch to Executing state */
    err = OMX_SendCommand(handle, OMX_CommandStateSet, OMX_StateExecuting, NULL);
    if(err != OMX_ErrorNone){
	exit(1);
    }

    /* no buffers emptied yet */
    pEmptyBuffer = NULL;

    /* fill and empty the input buffers */
    
    for (n = 0; n < numInBuffers; n++) {
	int data_read = read(inFd, inBuffers[n]->pBuffer, inBufferSize);
	inBuffers[n]->nFilledLen = data_read;
	printf("Read %d into buffer\n", data_read);
	if (data_read <= 0) {
	    printf(stderr, "In the %s no more input data available\n", __func__);
	    inBuffers[n]->nFilledLen = 0;
	    inBuffers[n]->nFlags = OMX_BUFFERFLAG_EOS;
	    bEOS=OMX_TRUE;
	}
    }
    
    /* empty and fill the output buffers */
    for (n = 0; n < numOutBuffers; n++) {
	outBuffers[n]->nFilledLen = 0;
	err = OMX_FillThisBuffer(handle, outBuffers[n]);
	if (err != OMX_ErrorNone) {
	    fprintf(stderr, "Error on filling buffer\n");
	    exit(1);
	}
    }

    for (n = 0; n < numInBuffers; n++) {
	err = OMX_EmptyThisBuffer(handle, inBuffers[n]);
	if (err != OMX_ErrorNone) {
	    fprintf(stderr, "Error on emptying buffer\n");
	    exit(1);
	}
    }


    pEmptyBuffer = inBuffers[0];
    emptyState = 1;

    waitFor(OMX_StateLoaded);
    fprintf(stderr, "Buffers emptied\n");
    exit(0);
}