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

📄 dmserver.c

📁 强大的QT,GTK的学习Demo.包含DSP驱动以及所使用库文件资源。
💻 C
字号:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

#include <semaphore.h>
#include "DataType.h"
#include "ds40xxsdk.h"
#include "tmserverpu.h"

unsigned short  format1[] = { 16, 19, 'O', 'f', 'f', 'i', 'c', 'e', '\0' };
unsigned short  format2[] = { 8, 3, _OSD_YEAR4, ':', _OSD_MONTH2, ':', _OSD_HOUR24,
                              ':', _OSD_MINUTE, ':', _OSD_SECOND, '\0' };

int             gcheckpass(char* usename, int namelen, char* password, int passlen);
int             gcheckip(int iChannel, char* sIP);
void            gmessage(char* buf, int iLen);
void            callback(int channelNum, char* buf, int frametype, int length);

int             audio_port = 0;
static int      done = 0;

/*
 =======================================================================================================================
 *
 =======================================================================================================================
 */
void poked(int sig)
{
    done = 1;
}

/*
 =======================================================================================================================
 *
 =======================================================================================================================
 */
int main()
{
    int                     channelCount;
    int                     i, retVal, chan;
    int                     channelHandle[16];
    SERVER_VIDEOINFO        videoinfo;
    RECT                    winRect;
    STREAM_READ_CALLBACK    pStreamRead;
    pStreamRead = (STREAM_READ_CALLBACK) callback;

    int     tei = 0;
    char    data[4];

    signal(SIGHUP, poked);
    signal(SIGINT, poked);
    signal(SIGTERM, poked);

    retVal = InitDSPs();
    if(retVal == 0)
    {   /* fixed at 2005.1.13 */
        fprintf(stderr, "Do InitDSPs Error(%08x)\n", GetLastErrorNum());
        return 0;
    }

    fprintf(stderr, "Success!----InitDSPs()\n");

    channelCount = GetTotalChannels();
    fprintf(stderr, "channelcount = %d\n", channelCount);

    videoinfo.m_channum = channelCount;
    MP4_ServerSetNetPort(5050, 6050);

    if(MP4_ServerStart(&videoinfo) < 0)
    {
        fprintf(stderr, "Error Number is %x\n", MP4_ServerGetLastErrorNum());
        goto EXIT;
    }

    MP4_ServerSetBufNum(1, 60);

    printf("videoinfo at 0x%x, m_channum at 0x%x\n", &videoinfo, &videoinfo.m_channum);

    MP4_ServerCheckPassword(gcheckpass);
    MP4_ServerCheckIP(gcheckip);
    MP4_ServerSetMessage(gmessage);

    /* open channel */
    for(i = 0; i < channelCount; i++)
    {
        channelHandle[i] = ChannelOpen(i, callback);
    }

#if 0
    sleep(1);
    for(chan = 0; chan < channelCount; chan++)
    {
        usleep(40);
        if(SetOsdDisplayMode(channelHandle[chan], 0xff, 1, 0x0000, format1, format2) < 0)
        {
            fprintf(stderr, "<demo_info> set osd failed!\n");
            return -1;
        }

        if(SetOsd(channelHandle[chan], 1) < 0)
        {
            fprintf(stderr, "<demo_info> start osd failed!\n");
            return -1;
        }
    }   /* for(chan=0;
         * cahn<channelCount;
         * chan++) */

    /*
     * SetEncodePictureFormat(channelHandle[1],ENC_QCIF_FORMAT);
     */
    sleep(1);
    if(SetAudioPreview(channelHandle[audio_port], 1) < 0)
    {
        fprintf(stderr, "<demo_info> set audio failed!\n");
        return -1;
    }
#endif

    /* start capture */
    for(i = 0; i < channelCount; i++)
    {
        if(StartVideoCapture(channelHandle[i]) < 0)
        {
            fprintf(stderr, "<demo_info>start video capture failed!error num:0x%x\n",
                    GetLastErrorNum());
            return -1;
        }
    }

    fprintf(stderr, "<demo_info> Start video capture ok!\n");
    while(!done)
    {
        sleep(1);
    }

    fprintf(stderr, "beging stop!\n");
    MP4_ServerStop();

    /* stop preview */
    fprintf(stderr, "stop video!\n");
    for(i = 0; i < channelCount; i++)
    {
        StopVideoPreview(channelHandle[i]);
    }

    fprintf(stderr, "stop audio!\n");
    SetAudioPreview(channelHandle[audio_port], 0);
    fprintf(stderr, "stop motion detection!\n");

    /* stop motion detect */
    for(i = 0; i < channelCount; i++)
    {
        StopMotionDetection(channelHandle[i]);
    }

    fprintf(stderr, "stop video capture!\n");

    /* stop capture */
    for(i = 0; i < channelCount; i++)
    {
        StopVideoCapture(channelHandle[i]);
    }

    fprintf(stderr, "close channel!\n");

    /* close channel */
    for(i = 0; i < channelCount; i++)
    {
        ChannelClose(channelHandle[i]);
    }

EXIT:
    fprintf(stderr, "deinit dsp!\n");
    retVal = DeInitDSPs();
    if(retVal < 0)
    {
        fprintf(stderr, "Do DeInitDSPs Error(%08x)\n", GetLastErrorNum());
        return 0;
    }

    return 0;
}

/*
 =======================================================================================================================
 *
 =======================================================================================================================
 */
void callback(int channelNum, char* buf, int frametype, int length)
{
    int retval;

    switch(frametype)
    {
        case PktSysHeader:
        case PktIFrames:
        case PktPFrames:
        case PktBBPFrames:
        case PktAudioFrames:
            {
                if(channelNum == 0)
                    fprintf(stderr, ".");
                retval = MP4_ServerWriteData(channelNum, (char*)buf, length, frametype, 0);
    #if 0
                if(retval == 0)
                {
                    if(0x0001 == frametype)
                        fprintf(stderr, "*%d", channelNum);
                }
                else
                {
                    if(channelNum == 0)
                        fprintf(stderr, ".");
                }
    #endif
                break;
            }

        case PktMotionDetection:
            break;

        default:
            break;
    }
}

/*
 =======================================================================================================================
 *
 =======================================================================================================================
 */
int gcheckpass(char* usename, int namelen, char* password, int passlen)
{
    fprintf(stderr, "i am in checkpass\n");
    fprintf(stderr, "usename=%s\n,pass=%s\n", usename, password);
    fprintf(stderr, "lenname=%d,passlen=%d\n", namelen, passlen);
    return 0;
}

/*
 =======================================================================================================================
 *
 =======================================================================================================================
 */
int gcheckip(int iChannel, char* sIP)
{
    fprintf(stderr, "i am in checkip\n");
    fprintf(stderr, "ichannel=%d,ip=%s\n", iChannel, sIP);

    return 0;
}

/*
 =======================================================================================================================
 *
 =======================================================================================================================
 */
void gmessage(char* buf, int iLen)
{
    fprintf(stderr, "i am in messagecallback\n");
    fprintf(stderr, "len=%d,message=%s\n", iLen, buf);
}

⌨️ 快捷键说明

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