UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
bluefish444_common.h
Go to the documentation of this file.
1
5/*
6 * Copyright (c) 2013-2020 CESNET, z. s. p. o.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, is permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 *
20 * 3. Neither the name of CESNET nor the names of its contributors may be
21 * used to endorse or promote products derived from this software without
22 * specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
26 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
27 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
28 * EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
34 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
35 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
38#ifndef BLUEFISH444_COMMON_H
39#define BLUEFISH444_COMMON_H
40
41#ifdef HAVE_CONFIG_H
42#include "config.h"
43#include "config_unix.h"
44#include "config_win32.h"
45#endif // HAVE_CONFIG_H
46
47#include "debug.h"
48
49#ifdef _WIN32
50#include <objbase.h>
51#include <BlueVelvetC_UltraGrid.h>
52#else
53#include <BlueVelvetC.h>
54#include <unistd.h>
55#endif
56#include <BlueVelvetCUtils.h>
57
58#define HAVE_BLUE_AUDIO 1
59
60#include <video.h>
61
62#define MAX_HANC_SIZE (256*1024)
63
65 unsigned long int mode;
66 unsigned int width;
67 unsigned int height;
68 double fps;
70};
71
73 { VID_FMT_PAL, 720, 576, 25.0, INTERLACED_MERGED },
74 // VID_FMT_576I_5000=0, /**< 720 x 576 50 Interlaced */
75 { VID_FMT_NTSC, 720, 486, 29.97, INTERLACED_MERGED },
76 // VID_FMT_486I_5994=1, /**< 720 x 486 60/1.001 Interlaced */
77 { VID_FMT_720P_5994, 1280, 720, 59.97, PROGRESSIVE },
78 { VID_FMT_720P_6000, 1280, 720, 60, PROGRESSIVE },
79 { VID_FMT_1080PSF_2397, 1920, 1080, 23.98, SEGMENTED_FRAME },
80 { VID_FMT_1080PSF_2400, 1920, 1080, 24, SEGMENTED_FRAME },
81 { VID_FMT_1080P_2397, 1920, 1080, 23.98, PROGRESSIVE },
82 { VID_FMT_1080P_2400, 1920, 1080, 24, PROGRESSIVE },
83 { VID_FMT_1080I_5000, 1920, 1080, 25, INTERLACED_MERGED },
84 { VID_FMT_1080I_5994, 1920, 1080, 29.97, INTERLACED_MERGED },
85 { VID_FMT_1080I_6000, 1920, 1080, 30, INTERLACED_MERGED },
86 { VID_FMT_1080P_2500, 1920, 1080, 25, PROGRESSIVE },
87 { VID_FMT_1080P_2997, 1920, 1080, 29.97, PROGRESSIVE },
88 { VID_FMT_1080P_3000, 1920, 1080, 30, PROGRESSIVE },
89 { VID_FMT_HSDL_1498, 2048, 1556, 14.98, SEGMENTED_FRAME },
90 { VID_FMT_HSDL_1500, 2048, 1556, 15, SEGMENTED_FRAME },
91 { VID_FMT_720P_5000, 1280, 720, 50, PROGRESSIVE },
92 { VID_FMT_720P_2398, 1280, 720, 23.98, PROGRESSIVE },
93 { VID_FMT_720P_2400, 1280, 720, 24, PROGRESSIVE },
94 { VID_FMT_2048_1080PSF_2397, 2048, 1080, 23.98, SEGMENTED_FRAME },
95 { VID_FMT_2048_1080PSF_2400, 2048, 1080, 24, SEGMENTED_FRAME },
96 { VID_FMT_2048_1080P_2397, 2048, 1080, 23.98, PROGRESSIVE },
97 { VID_FMT_2048_1080P_2400, 2048, 1080, 24, PROGRESSIVE },
98 { VID_FMT_1080PSF_2500, 1920, 1080, 25, SEGMENTED_FRAME },
99 { VID_FMT_1080PSF_2997, 1920, 1080, 29.97, SEGMENTED_FRAME },
100 { VID_FMT_1080PSF_3000, 1920, 1080, 30, SEGMENTED_FRAME },
101 { VID_FMT_1080P_5000, 1920, 1080, 50, PROGRESSIVE },
102 { VID_FMT_1080P_5994, 1920, 1080, 59.94, PROGRESSIVE },
103 { VID_FMT_1080P_6000, 1920, 1080, 60, PROGRESSIVE },
104 { VID_FMT_720P_2500, 1280, 720, 25, PROGRESSIVE },
105 { VID_FMT_720P_2997, 1280, 720, 29.97, PROGRESSIVE },
106 { VID_FMT_720P_3000, 1280, 720, 30, PROGRESSIVE },
107 // VID_FMT_DVB_ASI=32,
108 { VID_FMT_2048_1080PSF_2500, 2048, 1080, 25, SEGMENTED_FRAME },
109 { VID_FMT_2048_1080PSF_2997, 2048, 1080, 29.97, SEGMENTED_FRAME },
110 { VID_FMT_2048_1080PSF_3000, 2048, 1080, 30, SEGMENTED_FRAME },
111 { VID_FMT_2048_1080P_2500, 2048, 1080, 25, PROGRESSIVE },
112 { VID_FMT_2048_1080P_2997, 2048, 1080, 29.97, PROGRESSIVE },
113 { VID_FMT_2048_1080P_3000, 2048, 1080, 30, PROGRESSIVE },
114 { VID_FMT_2048_1080P_5000, 2048, 1080, 50, PROGRESSIVE },
115 { VID_FMT_2048_1080P_5994, 2048, 1080, 59.97, PROGRESSIVE },
116 { VID_FMT_2048_1080P_6000, 2048, 1080, 60, PROGRESSIVE },
117 { VID_FMT_INVALID, 0, 0, 0, (interlacing_t) 0 }
118};
119
121 sizeof(struct bluefish_frame_mode_t);
122
123static uint32_t GetNumberOfAudioSamplesPerFrame(uint32_t VideoMode, uint32_t FrameNumber)
124 __attribute__((unused));
125
126// from BlueFish SDK
127static uint32_t GetNumberOfAudioSamplesPerFrame(uint32_t VideoMode, uint32_t FrameNumber)
128{
129 uint32_t NTSC_frame_seq[]={ 1602,1601,1602,1601,1602};
130 uint32_t p59_frame_seq[]={ 801,800,801,801,801,801,800,801,801,801};
131#if 0
132 uint32_t p23_frame_seq[]={ 2002,2002,2002,2002};
133 uint32_t NTSC_frame_offset[]={0,
134 1602,
135 1602+1601,
136 1602+1601+1602,
137 1602+1601+1602+1601};
138
139 uint32_t p59_frame_offset[]={ 0,
140 801,
141 801+800,
142 801+800+801,
143 801+800+801+801,
144 801+800+801+801+801,
145 801+800+801+801+801+801,
146 801+800+801+801+801+801+800,
147 801+800+801+801+801+801+800+801,
148 801+800+801+801+801+801+800+801+801};
149
150 uint32_t p23_frame_offset[]={ 0,
151 2002,
152 2002+2002,
153 2002+2002+2002};
154#endif
155
156 switch(VideoMode)
157 {
158 case VID_FMT_720P_2398:
159 case VID_FMT_1080P_2397:
160 case VID_FMT_1080PSF_2397:
161 case VID_FMT_2048_1080PSF_2397:
162 case VID_FMT_2048_1080P_2397:
163 return 2002;
164 case VID_FMT_NTSC:
165 case VID_FMT_720P_2997:
166 case VID_FMT_1080P_2997:
167 case VID_FMT_1080PSF_2997:
168 case VID_FMT_1080I_5994:
169 case VID_FMT_2048_1080PSF_2997:
170 case VID_FMT_2048_1080P_2997:
171 return NTSC_frame_seq[FrameNumber%5];
172 break;
173 case VID_FMT_720P_5994:
174 case VID_FMT_1080P_5994:
175 return p59_frame_seq[FrameNumber%10];
176 break;
177 case VID_FMT_720P_2400:
178 case VID_FMT_1080PSF_2400:
179 case VID_FMT_1080P_2400:
180 case VID_FMT_2048_1080PSF_2400:
181 case VID_FMT_2048_1080P_2400:
182 return 2000;
183 break;
184 case VID_FMT_720P_3000:
185 case VID_FMT_1080I_6000:
186 case VID_FMT_1080P_3000:
187 case VID_FMT_1080PSF_3000:
188 case VID_FMT_2048_1080PSF_3000:
189 case VID_FMT_2048_1080P_3000:
190 return 1600;
191 break;
192 case VID_FMT_720P_6000:
193 case VID_FMT_1080P_6000:
194 return 800;
195 break;
196 case VID_FMT_720P_5000:
197 case VID_FMT_1080P_5000:
198 return 960;
199 break;
200 case VID_FMT_PAL:
201 case VID_FMT_1080I_5000:
202 case VID_FMT_1080PSF_2500:
203 case VID_FMT_2048_1080PSF_2500:
204 return 1920;
205 break;
206 case VID_FMT_720P_2500:
207 case VID_FMT_1080P_2500:
208 case VID_FMT_2048_1080P_2500:
209 default:
210 return 1920;
211 break;
212 }
213}
214
215#endif // defined BLUEFISH444_COMMON_H
216
static const int bluefish_frame_modes_count
static uint32_t GetNumberOfAudioSamplesPerFrame(uint32_t VideoMode, uint32_t FrameNumber) __attribute__((unused))
static const struct bluefish_frame_mode_t bluefish_frame_modes[]
struct __attribute__((packed))
Definition rtp.h:88
enum interlacing_t interlacing
interlacing_t
Definition types.h:163
@ PROGRESSIVE
progressive frame
Definition types.h:164
@ SEGMENTED_FRAME
Segmented frame. Contains the same data as progressive frame.
Definition types.h:168
@ INTERLACED_MERGED
Columngs of both fields are interlaced together.
Definition types.h:167
This is an umbrella header for video functions.