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

📄 exolfgpi.c

📁 PNX1500上视频采集源代码
💻 C
字号:
/* * Copyright (c) 2005 Koninklijke Philips Electronics N V. All rights reserved. * * This source code and any compilation or derivative thereof is the proprietary * information of Koninklijke Philips Electronics N V and is confidential in * nature. Under no circumstances is this software to be exposed to or placed * under an Open Source License of any type without the express written * permission of Koninklijke Philips Electronics N V. * * ############################################################################# * * Module: %name: exolFgpi.c % %version: 1 % * * %date_created: Tue May 17 12:29:11 2005 % %created_by: jcoxhead % * * %date_modified: Fri Jun 14 11:31:56 2002 % * * ############################################################################# *//* * DESCRIPTION: Dumps FGPI input to a file. */#define AVSYNC // needed by "tmolFgpiWrapper.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mmio.h"#include "tmDbg.h"#include "tmMainStreaming.h"#include "tmolFgpiWrapper.h"#include "tmolFwrite.h"//---------------------------------------------------------------------------// Defines and Macros//---------------------------------------------------------------------------#define CLK_FGPI_CTL           0x00047418U#define DEFAULT_NUM_OF_PACKETS 32#define FGPI_RECORD_SIZE       188#define GPIO_MODE_CONTROL3     0x0010400CU#define RESET_CTL              0x00060000U#define STR(x)                 STR_ (x)#define STR_(x)                #x#define VDI_MODE               0x00063000U//---------------------------------------------------------------------------// Type Definitions//---------------------------------------------------------------------------//---------------------------------------------------------------------------// Global Data//---------------------------------------------------------------------------static struct {tmFormat_SETUP_VARIABLES;} Format ={    sizeof Format,     // size    0,                 // hash    0,                 // referenceCount    avdcSystem,        // dataClass    stfMPEG2Transport, // dataType    tsfFgpiTimeStamped // dataSubtype};//---------------------------------------------------------------------------// Functions//---------------------------------------------------------------------------#undef  tmTr_FUNC#define tmTr_FUNC "fgpiProgress"static tmErrorCode_t fgpiProgress(    Int                instance,    tsaProgressFlags_t flags,    ptsaProgressArgs_t args){    instance = instance, flags = flags, args = args; /* unremarkable */    tmTr_TRACEF ("instance %d, flags 0x%XU, args 0x%XP\n" _            instance _ flags _ args);    return TM_OK;}#undef  tmTr_FUNC#define tmTr_FUNC "fgpiCompletion"static tmErrorCode_t fgpiCompletion(    Int                  instance,    tsaCompletionFlags_t flags,    ptsaCompletionArgs_t args){    instance = instance, flags = flags, args = args; /* unremarkable */    tmTr_TRACEF ("instance %d, flags 0x%XU, args 0x%XP\n" _            instance _ flags _ args);    return TM_OK;}#undef  tmTr_FUNC#define tmTr_FUNC "fgpiError"static tmErrorCode_t fgpiError(    Int             instance,    tsaErrorFlags_t flags,    ptsaErrorArgs_t args){    instance = instance, flags = flags, args = args; /* unremarkable */    tmTr_TRACEF ("instance %d, flags 0x%XU, args 0x%XP\n" _            instance _ flags _ args);    return TM_OK;}#undef  tmTr_FUNC#define tmTr_FUNC "fwriteProgress"static tmErrorCode_t fwriteProgress(    Int                instance,    tsaProgressFlags_t flags,    ptsaProgressArgs_t args){    instance = instance, flags = flags, args = args; /* unremarkable */    tmTr_TRACEF ("instance %d, flags 0x%XU, args 0x%XP\n" _            instance _ flags _ args);    printf (".\n");    return TM_OK;}#undef  tmTr_FUNC#define tmTr_FUNC "fwriteCompletion"static tmErrorCode_t fwriteCompletion(    Int                  instance,    tsaCompletionFlags_t flags,    ptsaCompletionArgs_t args){    instance = instance, flags = flags, args = args; /* unremarkable */    tmTr_TRACEF ("instance %d, flags 0x%XU, args 0x%XP\n" _            instance _ flags _ args);    return TM_OK;}#undef  tmTr_FUNC#define tmTr_FUNC "fwriteError"static tmErrorCode_t fwriteError(    Int             instance,    tsaErrorFlags_t flags,    ptsaErrorArgs_t args){    instance = instance, flags = flags, args = args; /* unremarkable */    tmTr_TRACEF ("instance %d, flags 0x%XU, args 0x%XP\n" _            instance _ flags _ args);    return TM_OK;}#undef  tmTr_FUNC#define tmTr_FUNC "tmMain"tmMain(){    tmErrorCode_t                    err = TM_OK;    String                           outputFileName, setTrLevel0, setTrLevel1,                                     dbgUnits;    ptmDbgUnit_t                     dbgUnit;    Int                              fgpi, fwrite;    ptmolFgpiWrapperCapabilities_t   fgpiCapabilities;    ptmolFwriteCapabilities_t        fwriteCapabilities;    ptmolFgpiWrapperInstanceSetup_t  fgpiSetup;    ptmolFwriteInstanceSetup_t       fwriteSetup;    ptsaInOutDescriptor_t            iod;    tsaInOutDescriptorSetup (1)      iodSetup = {0};    Int                             *numOfPackets;    tmMain_ScanArgs    (        __argc, __argv,        "outfile outputFileName\t" "a\t"  "output file name\n"        "np numOfPackets\t"        "ek\t" "number of packets (default "                                          STR (DEFAULT_NUM_OF_PACKETS)                                          ")\n"        "0 setTrLevel0\t"          "k\t"  "comma-separated level 0 tmTr units\n"        "1 setTrLevel1\t"          "k\t"  "comma-separated level 1 tmTr units\n"        "dbg dbgUnit\t"            "k\t"  "comma-separated tmDbg units\n"        "h help\t"                 "h\t"  "print this message\n",        &outputFileName,        &numOfPackets,        &setTrLevel0,        &setTrLevel1,        &dbgUnits    );    printf      ("FGPI test app\n");    tmTr_TRACEF ("FGPI test app\n");    if (setTrLevel0 != Null)        for (setTrLevel0 = strtok (setTrLevel0, ",;:"); setTrLevel0 != Null;                setTrLevel0 = strtok (Null, ",;:"))        {            printf ("set tr unit \"%s\" level 0\n", setTrLevel0);            if ((err = tmTr_SetLevel (setTrLevel0, 0, Null)) != TM_OK)                {tmTr_ERR (err); goto finish;}        }    if (setTrLevel1 != Null)        for (setTrLevel1 = strtok (setTrLevel1, ",;:"); setTrLevel1 != Null;                setTrLevel1 = strtok (Null, ",;:"))        {            printf ("set tr unit \"%s\" level 1\n", setTrLevel1);            if ((err = tmTr_SetLevel (setTrLevel1, 1, Null)) != TM_OK)                {tmTr_ERR (err); goto finish;}        }    if (dbgUnits != Null)        for (dbgUnits = strtok (dbgUnits, ",;:"); dbgUnits != Null;                dbgUnits = strtok (Null, ",;:"))        {            printf ("set dbg unit \"%s\"\n", dbgUnits);            tmDbg_AttachModule (&dbgUnit, DBG_MODULE_NAME, dbgUnits,                    DBG_PREREGISTER);            tmDbg_SetOption (dbgUnit, DBG_PRINT_FORMAT,                    DBG_PRINT_THREAD | DBG_PRINT_UNIT);            tmDbg_SetOption (dbgUnit, DBG_OUTPUT_DESTINATION,                    DBG_OUTPUT_MEMORY);            tmDbg_SetFlags (dbgUnit, ~0U);            tmDbg_Detach (&dbgUnit);        }    if ((err = tmolFgpiWrapperGetCapabilities (&fgpiCapabilities)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFwriteGetCapabilities (&fwriteCapabilities)) != TM_OK)        {tmTr_ERR (err); goto finish;}    MMIO (CLK_FGPI_CTL) = 0x00000013; // External clock, no inversion    tmosalTaskSleep (10); // Wait until all clocks are running    MMIO (RESET_CTL) = 0x00000002; // System Release    tmosalTaskSleep (10);    MMIO (VDI_MODE) = 0x00000001; // Setup Data/Video Input Router for 8-bit raw data capture, 32-bit storage    MMIO (GPIO_MODE_CONTROL3) = 1 << 8 | 1 << 6; // Enable GPIO pins VDI_D[33:32] to functional mode    if ((err = tmolFgpiWrapperOpen (&fgpi)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFwriteOpen (&fwrite)) != TM_OK)        {tmTr_ERR (err); goto finish;}    iodSetup.format          = (ptmAvFormat_t) &Format;    iodSetup.flags           = tsaIODescSetupFlagCacheMalloc;    iodSetup.fullQName       = "FQ";    iodSetup.emptyQName      = "EQ";    iodSetup.queueFlags      = tmosalQueueCreateFlagNone;    iodSetup.senderCap       = fgpiCapabilities->defaultCapabilities;    iodSetup.receiverCap     = fwriteCapabilities->defaultCapabilities;    iodSetup.senderIndex     = FGPI_WRAPPER_MAIN_OUTPUT;    iodSetup.receiverIndex   = TMAL_FWRITE_MAIN_INPUT;    iodSetup.packetBase      = 0x100;    iodSetup.numberOfPackets = numOfPackets != Null? *numOfPackets:                               DEFAULT_NUM_OF_PACKETS;    iodSetup.numberOfBuffers = 1;    // Do not allocate these packets, FGPI wrapper sends pointers in    iodSetup.bufSize[0]      = 0;    if ((err = tsaDefaultInOutDescriptorCreate (&iod,            (ptsaInOutDescriptorSetup_t) &iodSetup)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFgpiWrapperGetInstanceSetup (fgpi, &fgpiSetup)) != TM_OK)        {tmTr_ERR (err); goto finish;}    fgpiSetup->defaultSetup->errorFunc             = fgpiError;    fgpiSetup->defaultSetup->progressFunc          = fgpiProgress;    fgpiSetup->defaultSetup->completionFunc        = fgpiCompletion;    fgpiSetup->defaultSetup->outputDescriptors[FGPI_WRAPPER_MAIN_OUTPUT] = iod;    strcpy (fgpiSetup->defaultSetup->taskName, "FGPI");    fgpiSetup->defaultSetup->createNoTask          = True;    fgpiSetup->mainMode         = tmdlFgpi_RecCapture;    fgpiSetup->captureStartMode = tmdlFgpi_StartRisingEdge;    fgpiSetup->captureStopMode  = tmdlFgpi_BufSyncNoSync;    fgpiSetup->sampleSize       = tmdlFgpi_SampleSize8Bit;    fgpiSetup->samplesPerRec    = FGPI_RECORD_SIZE;    fgpiSetup->recPerBuf        = NROF_FGPI_RECORDS_PER_BUFFER;    fgpiSetup->thresh1          = fgpiSetup->recPerBuf + 1; // Used for testing    fgpiSetup->thresh2          = fgpiSetup->recPerBuf + 1; // Used for testing    fgpiSetup->timeStamp        = True;    fgpiSetup->varLength        = False;    fgpiSetup->base1            = 0; // Let FgpiWrapper set these up    fgpiSetup->base2            = 0; // Let FgpiWrapper set these up    fgpiSetup->stride           = FGPI_RECORD_STRIDE_SIZE;    fgpiSetup->timestampOffset  = 0;    if ((err = tmolFgpiWrapperInstanceSetup (fgpi, fgpiSetup)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFwriteGetInstanceSetup (fwrite, &fwriteSetup)) != TM_OK)        {tmTr_ERR (err); goto finish;}    fwriteSetup->defaultSetup->errorFunc      = fwriteError;    fwriteSetup->defaultSetup->progressFunc   = fwriteProgress;    fwriteSetup->defaultSetup->completionFunc = fwriteCompletion;    fwriteSetup->defaultSetup->inputDescriptors[FWRITE_MAIN_INPUT] = iod;    strcpy (fwriteSetup->defaultSetup->taskName, "FWRITE");    fwriteSetup->fileName = outputFileName;    if ((err = tmolFwriteInstanceSetup (fwrite, fwriteSetup)) != TM_OK)        {tmTr_ERR (err); goto finish;}    /* NOTE: The startup of the FGPI interface is a special case since a clock        signal must be present at the VDI_CLK2 pin before the FGPI MMIO        registers can be properly configured. In the case of our application, we        may start running before there is external data and clock present at the        FGPI inputs. So we need to wait for an external indication that data is        present at the FGPI before we start this component. Assue it's already        running. */    if ((err = tmolFgpiWrapperStart (fgpi)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFwriteStart (fwrite)) != TM_OK)        {tmTr_ERR (err); goto finish;}    printf ("Press return to stop capturing ...");    fflush (stdout);    getchar();    if ((err = tmolFgpiWrapperStop (fgpi)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFwriteStop (fwrite)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tsaDefaultInOutDescriptorDestroy (iod)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFgpiWrapperClose (fgpi)) != TM_OK)        {tmTr_ERR (err); goto finish;}    if ((err = tmolFwriteClose (fwrite)) != TM_OK)        {tmTr_ERR (err); goto finish;}finish:    if (err == TM_OK)    {        printf ("exolFgpi exit\n");        tmMain_EXIT (0);    }    else    {        printf ("exolFgpi error 0x%X\n", err);        tmMain_EXIT (1);    }}

⌨️ 快捷键说明

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