Software Archive
Read-only legacy content
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17060 Discussions

reduce frame rate in cpp

agund4
Novice
643 Views

Dear All,

 

The below is my code which i found in sample browser.It is displaying the joint informations very fastly. Kindly helping e in reducing the rate.Please let me know where top modify

#include <windows.h>
#include<stdio.h>
#include <iostream>

#include "pxcsensemanager.h"
#include "pxcmetadata.h"
#include "service/pxcsessionservice.h"

#include "pxchanddata.h"
#include "pxchandconfiguration.h"

#include "Definitions.h"

bool g_live = false; // true - Working in live camera mode, false - sequence mode
bool g_gestures = false; // Writing gesture data to console ouput
bool g_alerts = false; // Writing alerts data to console ouput
bool g_skeleton = false; // Writing skeleton data (22 joints) to console ouput
bool g_default = false; // Writing hand type to console ouput
bool g_stop = false; // user closes application

std::wstring g_sequencePath;

PXCSession *g_session;
PXCSenseManager *g_senseManager;
PXCHandModule *g_handModule;
PXCHandData *g_handDataOutput;
PXCHandConfiguration *g_handConfiguration;

void releaseAll();

BOOL CtrlHandler( DWORD fdwCtrlType ) 

  switch( fdwCtrlType ) 
  { 
    // Handle the CTRL-C signal. 
    case CTRL_C_EVENT: 

    // confirm that the user wants to exit. 
    case CTRL_CLOSE_EVENT: 
      g_stop = true;    
      Sleep(1000);
      releaseAll();
      return( TRUE ); 
 
    default: 
      return FALSE; 
  } 

void main(int argc, const char* argv[])
{
    int alpo;

    Definitions::appName = argv[0];

    SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE );
    if(argc < 2)
    {
        Definitions::WriteHelpMessage();
        return;
    }

    // Setup
    g_session = PXCSession::CreateInstance();
    if(!g_session)
    {
        std::printf("Failed Creating PXCSession\n");
        return;
    }

    /* Optional steps to send feedback to Intel Corporation to understand how often each SDK sample is used. */
    PXCMetadata * md = g_session->QueryInstance<PXCMetadata>();
    if(md) {
        pxcCHAR sample_name[] = L"Hands Console";
        md->AttachBuffer(PXCSessionService::FEEDBACK_SAMPLE_INFO, (pxcBYTE*)sample_name, sizeof(sample_name));
    }

    g_senseManager = g_session->CreateSenseManager();
    if(!g_senseManager)
    {
        releaseAll();
        std::printf("Failed Creating PXCSenseManager\n");
        return;
    }

    if(g_senseManager->EnableHand() != PXC_STATUS_NO_ERROR)
    {
        releaseAll();
        std::printf("Failed Enabling Hand Module\n");
        return;
    }

    g_handModule = g_senseManager->QueryHand();
    if(!g_handModule)
    {
        releaseAll();
        std::printf("Failed Creating PXCHandModule\n");
        return;
    }

    g_handDataOutput = g_handModule->CreateOutput();
    if(!g_handDataOutput)
    {
        releaseAll();
        std::printf("Failed Creating PXCHandData\n");
        return;
    }

    g_handConfiguration = g_handModule->CreateActiveConfiguration();
    if(!g_handConfiguration)
    {
        releaseAll();
        std::printf("Failed Creating PXCHandConfiguration\n");
        return;
    }

    // Iterating input parameters
    for (int i=1;i<argc;i++)
    {
        if (strcmp(argv,"-live")==0)
        {
            g_live=true;
        }

        if (strcmp(argv,"-seq")==0)
        {
            g_live=false;
            std::string tmp(argv[i+1]);
            i++;
            g_sequencePath.clear();
            g_sequencePath.assign(tmp.begin(),tmp.end());
            continue;
        }

        if (strcmp(argv,"-gestures")==0)
        {
            std::printf("-Gestures Are Enabled-\n");
            g_handConfiguration->EnableAllGestures();
            g_gestures = true;
        }

        if (strcmp(argv,"-alerts")==0)
        {
            std::printf("-Alerts Are Enabled-\n");
            g_handConfiguration->EnableAllAlerts();
            g_alerts = true;
        }

        if (strcmp(argv,"-skeleton")==0)
        {
            std::printf("-Skeleton Information Enabled-\n");
            g_skeleton = true;
        }
    }

    // Apply configuration setup
    g_handConfiguration->ApplyChanges();

    // run sequences as fast as possible
    if(!g_live)
    {
        g_senseManager->QueryCaptureManager()->SetFileName(g_sequencePath.c_str(),false);
        g_senseManager->QueryCaptureManager()->SetRealtime(false);
    }
    if(g_handConfiguration)
    {
        g_handConfiguration->Release();
        g_handConfiguration = NULL;
    }

    g_default = !(g_alerts && g_gestures && g_skeleton); 
    pxcI32 numOfHands = 0;

    // First Initializing the sense manager
    if(g_senseManager->Init() == PXC_STATUS_NO_ERROR)
    {
        std::printf("\nPXCSenseManager Initializing OK\n========================\n");

        if(g_default)
        {
            std::printf("Number of hands: %d\n",numOfHands);
        }

        // Acquiring frames from input device
        while(g_senseManager->AcquireFrame(true) == PXC_STATUS_NO_ERROR && !g_stop)
        {
            // Get current hand outputs
            if(g_handDataOutput->Update() == PXC_STATUS_NO_ERROR)
            {
                // Display alerts
                if(g_alerts)
                {
                    PXCHandData::AlertData alertData;
                    for(int i = 0 ; i < g_handDataOutput->QueryFiredAlertsNumber() ; ++i)
                    {
                        if(g_handDataOutput->QueryFiredAlertData(i,alertData) == PXC_STATUS_NO_ERROR)
                        {
                            std::printf("%s was fired at frame %d \n",Definitions::AlertToString(alertData.label).c_str(),alertData.frameNumber);
                        }
                    }    
                }

                // Display gestures
                if(g_gestures)
                {
                    PXCHandData::GestureData gestureData;
                    for(int i = 0 ; i < g_handDataOutput->QueryFiredGesturesNumber() ; ++i)
                    {
                        if(g_handDataOutput->QueryFiredGestureData(i,gestureData) == PXC_STATUS_NO_ERROR)
                        {
                            std::wprintf(L"%s, Gesture: %s was fired at frame %d \n",Definitions::GestureStateToString(gestureData.state),gestureData.name,gestureData.frameNumber);
                        }
                    }    
                }

                // Display joints
                if(g_skeleton)
                {
                    PXCHandData::IHand *hand;
                    PXCHandData::JointData jointData;
                    for(int i = 0 ; i < g_handDataOutput->QueryNumberOfHands() ; ++i)
                    {
                        g_handDataOutput->QueryHandData(PXCHandData::ACCESS_ORDER_BY_TIME,i,hand);
                        std::string handSide = "Unknown Hand";
                        handSide = hand->QueryBodySide() == PXCHandData::BODY_SIDE_LEFT ? "Left Hand" : "Right Hand";

                        std::printf("%s\n==============\n",handSide.c_str());
                        for(int j = 0 ; j < 22 ; ++j)
                        {
                            if(hand->QueryTrackedJoint((PXCHandData::JointType)j,jointData) == PXC_STATUS_NO_ERROR)
                            {
                                std::printf("     %s)\tX: %f, Y: %f, Z: %f \n",Definitions::JointToString((PXCHandData::JointType)j).c_str(),jointData.positionWorld.x,jointData.positionWorld.y,jointData.positionWorld.z);
                            }
                        }
                    }
                }

                // Display number of hands
                if(g_default)
                {
                    if(numOfHands != g_handDataOutput->QueryNumberOfHands())
                    {
                        numOfHands = g_handDataOutput->QueryNumberOfHands();
                        std::printf("Number of hands: %d\n",numOfHands);
                    }
                }

            } // end if update

            g_senseManager->ReleaseFrame();
        } // end while acquire frame
    } // end if Init

    else
    {
        releaseAll();
        std::printf("Failed Initializing PXCSenseManager\n");
        return;
    }
    scanf("%d", &alpo);
    std::printf("reached end\n");
    releaseAll();
}

void releaseAll()
{
    if(g_senseManager)
    {
        g_senseManager->Close();
        g_senseManager->Release();
        g_senseManager = NULL;
    }
    if(g_session)
    {
        g_session->Release();
        g_session = NULL;
    }
}

0 Kudos
2 Replies
Xusheng_L_Intel
Employee
643 Views

Which frame rate did you want to reduce? Could you detail your question?

0 Kudos
samontab
Valued Contributor II
643 Views

You could select a different frame rate when you enable the streams.

Or just wait a bit before calling AcquireFrame.

0 Kudos
Reply