source: trunk/src/testing/app/DecklinkCapture/include/DeckLinkAPIDispatch.cpp @ 4

Revision 4, 3.2 KB checked in by ajaworski, 13 years ago (diff)

Added modified SAGE sources

Line 
1/* -LICENSE-START-
2** Copyright (c) 2009 Blackmagic Design
3**
4** Permission is hereby granted, free of charge, to any person or organization
5** obtaining a copy of the software and accompanying documentation covered by
6** this license (the "Software") to use, reproduce, display, distribute,
7** execute, and transmit the Software, and to prepare derivative works of the
8** Software, and to permit third-parties to whom the Software is furnished to
9** do so, all subject to the following:
10**
11** The copyright notices in the Software and this entire statement, including
12** the above license grant, this restriction and the following disclaimer,
13** must be included in all copies of the Software, in whole or in part, and
14** all derivative works of the Software, unless such copies or derivative
15** works are solely in the form of machine-executable object code generated by
16** a source language processor.
17**
18** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
21** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
22** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
23** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24** DEALINGS IN THE SOFTWARE.
25** -LICENSE-END-
26**/
27
28#include <stdio.h>
29#include <pthread.h>
30#include <dlfcn.h>
31
32#include "DeckLinkAPI.h"
33
34#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
35#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
36
37typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
38typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
39
40static pthread_once_t                                   gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
41static pthread_once_t                                   gPreviewOnceControl = PTHREAD_ONCE_INIT;
42
43static CreateIteratorFunc                               gCreateIteratorFunc = NULL;
44static CreateOpenGLScreenPreviewHelperFunc      gCreateOpenGLPreviewFunc = NULL;
45
46void    InitDeckLinkAPI (void)
47{
48        void *libraryHandle;
49       
50        libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
51        if (!libraryHandle)
52        {
53                fprintf(stderr, "%s\n", dlerror());
54                return;
55        }
56        gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance");
57        if (!gCreateIteratorFunc)
58                fprintf(stderr, "%s\n", dlerror());
59}
60
61void    InitDeckLinkPreviewAPI (void)
62{
63        void *libraryHandle;
64       
65        libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
66        if (!libraryHandle)
67        {
68                fprintf(stderr, "%s\n", dlerror());
69                return;
70        }
71        gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper");
72        if (!gCreateOpenGLPreviewFunc)
73                fprintf(stderr, "%s\n", dlerror());
74}
75
76IDeckLinkIterator*              CreateDeckLinkIteratorInstance (void)
77{
78        pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
79       
80        if (gCreateIteratorFunc == NULL)
81                return NULL;
82        return gCreateIteratorFunc();
83}
84
85IDeckLinkGLScreenPreviewHelper*         CreateOpenGLScreenPreviewHelper (void)
86{
87        pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
88        pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
89       
90        if (gCreateOpenGLPreviewFunc == NULL)
91                return NULL;
92        return gCreateOpenGLPreviewFunc();
93}
94
Note: See TracBrowser for help on using the repository browser.