AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
ntv2transcode.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef NTV2TRANSCODE_H
9 #define NTV2TRANSCODE_H
10 #include "ajaexport.h"
11 #include "ajatypes.h"
12 #include "ntv2fixed.h"
13 #include "ntv2videodefines.h"
14 #include <vector>
15 
16 // TODO: DEBUG ONLY
17 #include <stdio.h>
18 
19 
29 AJAExport bool ConvertLine_2vuy_to_v210 (const UByte * pInSrcLine_2vuy, ULWord * pOutDstLine_v210, const ULWord inNumPixels);
30 
40 AJAExport bool ConvertLine_2vuy_to_yuy2 (const UByte * pInSrcLine_2vuy, UWord * pOutDstLine_yuy2, const ULWord inNumPixels);
41 
51 AJAExport bool ConvertLine_v210_to_2vuy (const ULWord * pInSrcLine_v210, UByte * pOutDstLine_2vuy, const ULWord inNumPixels);
52 
60 AJAExport bool ConvertLine_v210_to_2vuy (const void * pInSrcLine_v210, std::vector<uint8_t> & outDstLine2vuy, const ULWord inNumPixels);
61 
69 AJAExport bool ConvertLine_8bitABGR_to_10bitABGR (const UByte * pInSrcLine_8bitABGR, ULWord * pOutDstLine_10BitABGR, const ULWord inNumPixels);
70 
78 AJAExport bool ConvertLine_8bitABGR_to_10bitRGBDPX (const UByte * pInSrcLine_8bitABGR, ULWord * pOutDstLine_10BitDPX, const ULWord inNumPixels);
79 
87 AJAExport bool ConvertLine_8bitABGR_to_10bitRGBDPXLE (const UByte * pInSrcLine_8bitABGR, ULWord * pOutDstLine_10BitDPXLE, const ULWord inNumPixels);
88 
96 AJAExport bool ConvertLine_8bitABGR_to_24bitRGB (const UByte * pInSrcLine_8bitABGR, UByte * pOutDstLine_24BitRGB, const ULWord inNumPixels);
97 
105 AJAExport bool ConvertLine_8bitABGR_to_24bitBGR (const UByte * pInSrcLine_8bitABGR, UByte * pOutDstLine_24BitBGR, const ULWord inNumPixels);
106 
114 AJAExport bool ConvertLine_8bitABGR_to_48bitRGB (const UByte * pInSrcLine_8bitABGR, ULWord * pOutDstLine_48BitRGB, const ULWord inNumPixels);
115 
116 
117 // ConvertLineToYCbCr422
118 // 8 Bit
120  UByte * YCbCrLine,
121  LWord numPixels ,
122  LWord startPixel,
123  bool fUseSDMatrix);
124 
125 // ConvertLineToYCbCr422
126 // 10 Bit
128  UWord * YCbCrLine,
129  LWord numPixels,
130  LWord startPixel,
131  bool fUseSDMatrix);
132 
133 // ConvertLinetoRGB
134 // 8 Bit Version
135 AJAExport void ConvertLinetoRGB (UByte * ycbcrBuffer,
136  RGBAlphaPixel * rgbaBuffer ,
137  ULWord numPixels,
138  bool fUseSDMatrix,
139  bool fUseSMPTERange = false);
140 
141 // ConvertLinetoRGB
142 // 10 Bit Version
143 AJAExport void ConvertLinetoRGB (UWord * ycbcrBuffer,
144  RGBAlphaPixel * rgbaBuffer,
145  ULWord numPixels,
146  bool fUseSDMatrix,
147  bool fUseSMPTERange = false,
148  bool fAlphaFromLuma = false);
149 
150 // ConvertLineto10BitRGB
151 // 10 Bit YCbCr and 10 Bit RGB Version
152 AJAExport void ConvertLineto10BitRGB (UWord * ycbcrBuffer,
153  RGBAlpha10BitPixel * rgbaBuffer,
154  ULWord numPixels,
155  bool fUseSDMatrix,
156  bool fUseSMPTERange = false);
157 // ConvertLineto10BitYCbCrA
158 // 10 Bit YCbCr to 10 Bit YCbCrA
159 AJAExport void ConvertLineto10BitYCbCrA (const UWord * pInYCbCrBuffer,
160  ULWord * pOutYCbCrABuffer,
161  const ULWord inNumPixels);
162 
163 // ConvertRGBLineto10BitRGB
164 // 8 Bit RGB and 10 Bit RGB Version
165 AJAExport void ConvertRGBLineto10BitRGB (const RGBAlphaPixel * pInRGBA8Buffer,
166  RGBAlpha10BitPixel * pOutRGBA10Buffer,
167  const ULWord inNumPixels);
168 
169 // ConvertRGBALineToRGB
170 // 8 bit RGBA to 8 bit RGB (RGB24)
171 // Conversion is done into the same buffer
172 AJAExport void ConvertRGBALineToRGB (RGBAlphaPixel * rgbaBuffer,
173  ULWord numPixels);
174 
175 // ConvertRGBALineToBGR
176 // 8 bit RGBA to 8 bit BGR (BGR24)
177 // Conversion is done into the same buffer
178 AJAExport void ConvertRGBALineToBGR (RGBAlphaPixel * rgbaBuffer,
179  ULWord numPixels);
180 
181 // ConvertLineto10BitRGB
182 // 8 Bit RGBA to and 10 Bit RGB Packed Version
183 AJAExport void ConvertLineto10BitRGB (const RGBAlphaPixel * pInRGBA8Buffer,
184  ULWord * pOutRGB10BitBuffer,
185  ULWord inNumPixels);
186 
187 // ConvertLineto8BitYCbCr
188 // 10 Bit YCbCr to 8 Bit YCbCr
189 AJAExport void ConvertLineto8BitYCbCr (UWord * ycbcr10BitBuffer,
190  UByte * ycbcr8BitBuffer,
191  ULWord numPixels);
192 
193 // Converts UYVY(2yuv) -> YUY2(yuv2) in place
194 AJAExport void Convert8BitYCbCrToYUY2 (UByte * ycbcrBuffer,
195  ULWord numPixels);
196 
197 // Converts 8 Bit ARGB 8 Bit RGBA in place
198 AJAExport void ConvertARGBYCbCrToRGBA (UByte * rgbaBuffer,
199  ULWord numPixels);
200 
201 
202 // Converts 8 Bit ARGB 8 Bit ABGR in place
203 AJAExport void ConvertARGBYCbCrToABGR (UByte * rgbaBuffer,
204  ULWord numPixels);
205 
206 // Convert 8 Bit ARGB to 8 bit RGB
207 AJAExport void ConvertARGBToRGB (UByte * rgbaLineBuffer,
208  UByte * rgbLineBuffer,
209  ULWord numPixels);
210 
211 // Convert 16 Bit ARGB to 16 bit RGB
212 AJAExport void Convert16BitARGBTo16BitRGBEx (UWord * rgbaLineBuffer,
213  UWord * rgbLineBuffer,
214  ULWord numPixels);
215 
216 // Convert 16 Bit ARGB to 16 bit RGB
218  UWord * rgbLineBuffer,
219  ULWord numPixels);
220 
221 // Convert 16 Bit ARGB to 12 bit RGB Packed // New in SDK 15.5
223  UByte * rgbLineBuffer,
224  ULWord numPixels);
225 
226 // Convert 8 Bit ARGB to 8 bit BGR
227 AJAExport void ConvertARGBToBGR (const UByte * pInRGBALineBuffer,
228  UByte * pOutRGBLineBuffer,
229  const ULWord inNumPixels);
230 
231 // ConvertLineto16BitRGB
232 // 10 Bit YCbCr and 16 Bit RGB Version
233 AJAExport void ConvertLineto16BitRGB (UWord * ycbcrBuffer,
234  RGBAlpha16BitPixel * rgbaBuffer,
235  ULWord numPixels,
236  bool fUseSDMatrix,
237  bool fUseSMPTERange = false);
238 
239 /*
240 // ConvertLinetoRGB
241 // 10 Bit YCbCr Version -> 10 Bit RGB
242 AJAExport
243 void ConvertLinetoRGB(UWord * ycbcrBuffer,
244  RGBAlpha10BitPixel * rgbaBuffer,
245  ULWord numPixels);
246 */
247 
248 // Pack 10 Bit RGBA to 10 Bit RGB Format for our board
250  const ULWord inNumPixels);
251 
252 // Pack 10 Bit RGBA to 10 Bit DPX Format for our board
254  const ULWord inNumPixels,
255  const bool bigEndian = true);
256 
257 // Pack 10 Bit RGBA to NTV2_FBF_10BIT_RGB_PACKED Format for our board
259  const ULWord inNumPixels);
260 
261 
262 inline void SDConvertRGBAlphatoYCbCr(RGBAlphaPixel * pSource, YCbCrPixel * pTarget)
263 {
264  LWord Y,Cb,Cr;
265 
266  Y = CCIR601_8BIT_BLACK + FixedRound((Fixed_)0x41BC*pSource->Red +
267  (Fixed_)0x810F*pSource->Green +
268  (Fixed_)0x1910*pSource->Blue );
269  pTarget->y = (UByte)Y;
270 
271  Cb = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)-0x25F1*pSource->Red -
272  (Fixed_)0x4A7E*pSource->Green +
273  (Fixed_)0x7070*pSource->Blue );
274 
275  pTarget->cb = (UByte)Cb;
276 
277  Cr = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)0x7070*pSource->Red -
278  (Fixed_)0x5E27*pSource->Green -
279  (Fixed_)0x1249*pSource->Blue );
280 
281  pTarget->cr = (UByte)Cr;
282 }
283 
284 inline void HDConvertRGBAlphatoYCbCr(RGBAlphaPixel * pSource, YCbCrPixel * pTarget)
285 {
286  LWord Y,Cb,Cr;
287 
288  Y = CCIR601_8BIT_BLACK + FixedRound((Fixed_)0x2E8A*pSource->Red +
289  (Fixed_)0x9C9F*pSource->Green +
290  (Fixed_)0x0FD2*pSource->Blue );
291  pTarget->y = UByte(Y);
292 
293  Cb = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)-0x18F4*pSource->Red -
294  (Fixed_)0x545B*pSource->Green +
295  (Fixed_)0x6DA9*pSource->Blue );
296 
297  pTarget->cb = uint8_t(SByte(Cb));
298 
299  Cr = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)0x6D71*pSource->Red -
300  (Fixed_)0x6305*pSource->Green -
301  (Fixed_)0x0A06*pSource->Blue );
302 
303  pTarget->cr = uint8_t(SByte(Cr));
304 }
305 
306 
307 inline void SDConvertRGBAlphatoYCbCr(const RGBAlphaPixel * pSource, YCbCr10BitPixel * pTarget)
308 {
309  LWord Y,Cb,Cr;
310 
311  Y = CCIR601_10BIT_BLACK + (((Fixed_)0x41BC*pSource->Red +
312  (Fixed_)0x810F*pSource->Green +
313  (Fixed_)0x1910*pSource->Blue )>>14);
314  pTarget->y = UWord(Y);
315 
316  Cb = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)-0x25F1*pSource->Red -
317  (Fixed_)0x4A7E*pSource->Green +
318  (Fixed_)0x7070*pSource->Blue )>>14);
319 
320  pTarget->cb = UWord(Cb&0x3FF);
321 
322  Cr = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)0x7070*pSource->Red -
323  (Fixed_)0x5E27*pSource->Green -
324  (Fixed_)0x1249*pSource->Blue )>>14);
325 
326  pTarget->cr = UWord(Cr&0x3FF);
327 }
328 
329 inline void HDConvertRGBAlphatoYCbCr(const RGBAlphaPixel * pSource, YCbCr10BitPixel * pTarget)
330 {
331  LWord Y,Cb,Cr;
332 
333  Y = CCIR601_10BIT_BLACK + (((Fixed_)0x2E8A*pSource->Red +
334  (Fixed_)0x9C9F*pSource->Green +
335  (Fixed_)0x0FD2*pSource->Blue )>>14);
336  pTarget->y = (UWord)Y;
337 
338  Cb = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)-0x18F4*pSource->Red -
339  (Fixed_)0x545B*pSource->Green +
340  (Fixed_)0x6DA9*pSource->Blue )>>14);
341 
342  pTarget->cb = UWord(Cb&0x3FF);
343 
344  Cr = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)0x6D71*pSource->Red -
345  (Fixed_)0x6305*pSource->Green -
346  (Fixed_)0x0A06*pSource->Blue )>>14);
347 
348  pTarget->cr = UWord(Cr&0x3FF);
349 }
350 
352  RGBAlphaPixel *pTarget)
353 {
354  LWord Red,Green,Blue;
355  Fixed_ ConvertedY;
356 
357  ConvertedY = 0x12A15*((LWord)pSource->y - CCIR601_8BIT_BLACK);
358 
359  Red = FixedRound(ConvertedY +
360  0x19895*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET)));
361 
362  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
363 
364  Blue = FixedRound(ConvertedY +
365  0x20469*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ));
366 
367  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
368 
369  Green = FixedRound(ConvertedY -
370  0x644A*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ) -
371  0xD01F*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET) ));
372 
373  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
374 
375  pTarget->Alpha = pSource->Alpha;
376 }
377 
379  RGBAlphaPixel *pTarget)
380 {
381  LWord Red,Green,Blue;
382  Fixed_ ConvertedY;
383 
384  ConvertedY = 0x4A86*((LWord)pSource->y - CCIR601_10BIT_BLACK);
385 
386  Red = FixedRound(ConvertedY +
387  0x6626*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
388 
389  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
390 
391  Blue = FixedRound(ConvertedY +
392  0x811B*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
393 
394  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
395 
396  Green = FixedRound(ConvertedY -
397  0x1913*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
398  0x3408*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
399 
400  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
401 
402  pTarget->Alpha = (UByte)pSource->Alpha;
403 }
404 
406  RGBAlphaPixel *pTarget)
407 {
408  LWord Red,Green,Blue;
409  Fixed_ ConvertedY;
410 
411  ConvertedY = 0x12ACF*((LWord)pSource->y - CCIR601_8BIT_BLACK);
412 
413  Red = FixedRound(ConvertedY +
414  0x1DF71*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET)));
415 
416  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
417 
418  Blue = FixedRound(ConvertedY +
419  0x22A86*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ));
420 
421  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
422 
423  Green = FixedRound(ConvertedY -
424  0x3806*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ) -
425  0x8C32*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET) ));
426 
427  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
428 
429  pTarget->Alpha = pSource->Alpha;
430 }
431 
433  RGBAlphaPixel *pTarget)
434 {
435  LWord Red,Green,Blue;
436  Fixed_ ConvertedY;
437 
438  ConvertedY = (0x12ACF>>2)*((LWord)pSource->y - CCIR601_10BIT_BLACK);
439 
440  Red = FixedRound(ConvertedY +
441  (0x1DF71>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
442 
443  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
444 
445  Blue = FixedRound(ConvertedY +
446  (0x22A86>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
447 
448  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
449 
450  Green = FixedRound(ConvertedY -
451  (0x3806>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
452  (0x8C32>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
453 
454  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
455 
456  pTarget->Alpha = (UByte)pSource->Alpha;
457 }
458 
459 
461  RGBAlpha10BitPixel *pTarget)
462 {
463  LWord Red,Green,Blue;
464  Fixed_ ConvertedY;
465 
466  ConvertedY = 0x12A15*((LWord)pSource->y - CCIR601_10BIT_BLACK);
467 
468  Red = FixedRound(ConvertedY +
469  0x19895*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
470 
471  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
472 
473  Blue = FixedRound(ConvertedY +
474  0x20469*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
475 
476  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
477 
478  Green = FixedRound(ConvertedY -
479  0x644A*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
480  0xD01F*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
481 
482  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
483 
484  pTarget->Alpha = pSource->Alpha;
485 }
486 
488  RGBAlpha10BitPixel *pTarget)
489 {
490  LWord Red,Green,Blue;
491  Fixed_ ConvertedY;
492 
493  ConvertedY = 0x12ACF*((LWord)pSource->y - CCIR601_10BIT_BLACK);
494 
495  Red = FixedRound(ConvertedY +
496  0x1DF71*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
497 
498  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
499 
500  Blue = FixedRound(ConvertedY +
501  0x22A86*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
502 
503  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
504 
505  Green = FixedRound(ConvertedY -
506  0x3806*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
507  0x8C32*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
508 
509  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
510 
511  pTarget->Alpha = pSource->Alpha;
512 }
513 
514 // KAM - start
516  RGBAlpha16BitPixel *pTarget)
517 {
518  ULWord Red,Green,Blue;
519  Fixed_ ConvertedY;
520 
521  ConvertedY = 0x12A15*((LWord)pSource->y - CCIR601_10BIT_BLACK);
522 
523  Red = ULWord(FixedRound(ConvertedY +
524  0x19895*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))));
525 
526  //Red = Red<<4; // only 12 bits used, put them in the MSB
527  pTarget->Red = (UWord)ClipRGB_16BIT(Red<<6); // TBD: fix coefficents instead
528 
529  Blue = ULWord(FixedRound(ConvertedY +
530  0x20469*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) )));
531 
532  //Blue = Blue<<4; // only 12 bits used, put them in the MSB
533  pTarget->Blue = (UWord)ClipRGB_16BIT(Blue<<6); // TBD: fix coefficents instead
534 
535  Green = ULWord(FixedRound(ConvertedY -
536  0x644A*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
537  0xD01F*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) )));
538 
539  //Green = Green<<4; // only 12 bits used, put them in the MSB
540  pTarget->Green = (UWord)ClipRGB_16BIT(Green<<6); // TBD: fix coefficents instead
541 
542  // TBD: shift alpha???
543  pTarget->Alpha = pSource->Alpha;
544 }
545 
547  RGBAlpha16BitPixel *pTarget)
548 {
549  ULWord Red,Green,Blue;
550  Fixed_ ConvertedY;
551 
552  ConvertedY = 0x12ACF*((LWord)pSource->y - CCIR601_10BIT_BLACK);
553 
554  Red = ULWord(FixedRound(ConvertedY +
555  0x1DF71*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))));
556 
557  //Red = Red<<4; // only 12 bits used, put them in the MSB
558  pTarget->Red = (UWord)ClipRGB_16BIT(Red); // TBD: fix coefficents instead
559 
560  Blue = ULWord(FixedRound(ConvertedY +
561  0x22A86*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) )));
562 
563  //Blue = Blue<<4; // only 12 bits used, put them in the MSB
564  pTarget->Blue = (UWord)ClipRGB_16BIT(Blue); // TBD: fix coefficents instead
565 
566  Green = ULWord(FixedRound(ConvertedY -
567  0x3806*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
568  0x8C32*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) )));
569 
570  //Green = Green<<4; // only 12 bits used, put them in the MSB
571  pTarget->Green = (UWord)ClipRGB_16BIT(Green); // TBD: fix coefficents instead
572 
573  // TBD: shift alpha???
574  pTarget->Alpha = pSource->Alpha;
575 }
576 
578  RGBAlphaPixel *pTarget)
579 {
580  LWord Red,Green,Blue;
581  Fixed_ ConvertedY;
582 
583  ConvertedY = 0xFF40*((LWord)pSource->y - CCIR601_8BIT_BLACK);
584 
585  Red = FixedRound(ConvertedY +
586  0x15DDF*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
587 
588  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
589 
590  Blue = FixedRound(ConvertedY +
591  0x1BA34*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
592 
593  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
594 
595  Green = FixedRound(ConvertedY -
596  0x55E1*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET)) -
597  0xB237*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
598 
599  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
600 
601  pTarget->Alpha = pSource->Alpha;
602 }
603 
605  RGBAlphaPixel *pTarget)
606 {
607  LWord Red,Green,Blue;
608  Fixed_ ConvertedY;
609 
610  ConvertedY = 0x3FD1*((LWord)pSource->y - CCIR601_10BIT_BLACK);
611 
612  Red = FixedRound(ConvertedY +
613  0x5778*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
614 
615  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
616 
617  Blue = FixedRound(ConvertedY +
618  0x6E8E*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
619 
620  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
621 
622  Green = FixedRound(ConvertedY -
623  0x1579*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
624  0x2C8E*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
625 
626  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
627 
628  pTarget->Alpha = (UByte)pSource->Alpha;
629 }
630 
632  RGBAlphaPixel *pTarget)
633 {
634  LWord Red,Green,Blue;
635  Fixed_ ConvertedY;
636 
637  ConvertedY = 0xFFDF*((LWord)pSource->y - CCIR601_8BIT_BLACK);
638 
639  Red = FixedRound(ConvertedY +
640  0x19A8C*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
641 
642  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
643 
644  Blue = FixedRound(ConvertedY +
645  0x1DAD7*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
646 
647  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
648 
649  Green = FixedRound(ConvertedY -
650  0x2FF9*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET)) -
651  0x780D*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
652 
653  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
654 
655  pTarget->Alpha = pSource->Alpha;
656 }
657 
659  RGBAlphaPixel *pTarget)
660 {
661  LWord Red,Green,Blue;
662  Fixed_ ConvertedY;
663 
664  ConvertedY = (0xFFDF>>2)*((LWord)pSource->y - CCIR601_10BIT_BLACK);
665 
666  Red = FixedRound(ConvertedY +
667  (0x19A8C>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
668 
669  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
670 
671  Blue = FixedRound(ConvertedY +
672  (0x1DAD7>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
673 
674  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
675 
676  Green = FixedRound(ConvertedY -
677  (0x2FF9>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
678  (0x780D>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
679 
680  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
681 
682  pTarget->Alpha = (UByte)pSource->Alpha;
683 }
684 
685 
687  RGBAlpha10BitPixel *pTarget)
688 {
689  LWord Red,Green,Blue;
690  Fixed_ ConvertedY;
691 
692  ConvertedY = 0xFF40*((LWord)pSource->y - CCIR601_10BIT_BLACK);
693 
694  Red = FixedRound(ConvertedY +
695  0x15DDF*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
696 
697  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
698 
699  Blue = FixedRound(ConvertedY +
700  0x1BA34*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
701 
702  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
703 
704  Green = FixedRound(ConvertedY -
705  0x55E1*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
706  0xB237*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
707 
708  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
709 
710  pTarget->Alpha = pSource->Alpha;
711 }
712 
714  RGBAlpha10BitPixel *pTarget)
715 {
716  LWord Red,Green,Blue;
717  Fixed_ ConvertedY;
718 
719  ConvertedY = 0xFFDF*((LWord)pSource->y - CCIR601_10BIT_BLACK);
720 
721  Red = FixedRound(ConvertedY +
722  0x19A8C*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
723 
724  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
725 
726  Blue = FixedRound(ConvertedY +
727  0x1DAD7*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
728 
729  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
730 
731  Green = FixedRound(ConvertedY -
732  0x2FF9*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
733  0x780D*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
734 
735  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
736 
737  pTarget->Alpha = pSource->Alpha;
738 }
739 
740 #endif // NTV2TRANSCODE_H
HDConvertRGBAlphatoYCbCr
void HDConvertRGBAlphatoYCbCr(RGBAlphaPixel *pSource, YCbCrPixel *pTarget)
Definition: ntv2transcode.h:284
SByte
int8_t SByte
Definition: ajatypes.h:249
PackRGB10BitFor10BitRGBPacked
void PackRGB10BitFor10BitRGBPacked(RGBAlpha10BitPixel *pBuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:780
LWord
int32_t LWord
Definition: ajatypes.h:252
RGBAlpha10BitPixel::Alpha
UWord Alpha
Definition: ntv2videodefines.h:149
ajaexport.h
Defines the import/export macros for producing DLLs or LIBs.
ConvertLine_8bitABGR_to_10bitABGR
bool ConvertLine_8bitABGR_to_10bitABGR(const UByte *pInSrcLine_8bitABGR, ULWord *pOutDstLine_10BitABGR, const ULWord inNumPixels)
Converts a single 8-bit ABGR raster line to 10-bit ABGR (from NTV2_FBF_ABGR to NTV2_FBF_10BIT_RGB ).
Definition: ntv2transcode.cpp:90
Convert8BitYCbCrToYUY2
void Convert8BitYCbCrToYUY2(UByte *ycbcrBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:613
YCbCrPixel::cb
unsigned char cb
Definition: ntv2videodefines.h:195
ConvertRGBALineToRGB
void ConvertRGBALineToRGB(RGBAlphaPixel *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:429
ConvertRGBALineToBGR
void ConvertRGBALineToBGR(RGBAlphaPixel *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:453
SDConvert10BitYCbCrtoRGB
void SDConvert10BitYCbCrtoRGB(const YCbCr10BitAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:378
RGBAlphaPixel::Alpha
unsigned char Alpha
Definition: ntv2videodefines.h:141
ConvertARGBYCbCrToABGR
void ConvertARGBYCbCrToABGR(UByte *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:646
Convert16BitARGBTo16BitRGB
void Convert16BitARGBTo16BitRGB(RGBAlpha16BitPixel *rgbaLineBuffer, UWord *rgbLineBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:692
ConvertLineto10BitYCbCrA
void ConvertLineto10BitYCbCrA(const UWord *pInYCbCrBuffer, ULWord *pOutYCbCrABuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:551
RGBAlphaPixel::Red
unsigned char Red
Definition: ntv2videodefines.h:140
YCbCrAlphaPixel::Alpha
unsigned char Alpha
Definition: ntv2videodefines.h:187
YCbCr10BitPixel::cb
UWord cb
Definition: ntv2videodefines.h:202
ConvertLineto8BitYCbCr
void ConvertLineto8BitYCbCr(UWord *ycbcr10BitBuffer, UByte *ycbcr8BitBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:601
YCbCrPixel::y
unsigned char y
Definition: ntv2videodefines.h:196
YCbCr10BitAlphaPixel::cb
UWord cb
Definition: ntv2videodefines.h:210
YCbCr10BitPixel::cr
UWord cr
Definition: ntv2videodefines.h:204
FixedRound
#define FixedRound(__x__)
Definition: ntv2fixed.h:37
YCbCr10BitAlphaPixel::y
UWord y
Definition: ntv2videodefines.h:211
HDConvert10BitYCbCrto16BitRGB
void HDConvert10BitYCbCrto16BitRGB(YCbCr10BitAlphaPixel *pSource, RGBAlpha16BitPixel *pTarget)
Definition: ntv2transcode.h:546
YCbCr10BitAlphaPixel::Alpha
UWord Alpha
Definition: ntv2videodefines.h:209
ConvertLineto16BitRGB
void ConvertLineto16BitRGB(UWord *ycbcrBuffer, RGBAlpha16BitPixel *rgbaBuffer, ULWord numPixels, bool fUseSDMatrix, bool fUseSMPTERange=false)
Definition: ntv2transcode.cpp:850
RGBAlphaPixel::Green
unsigned char Green
Definition: ntv2videodefines.h:139
ntv2videodefines.h
Declares common video macros and structs used in the SDK.
HDConvertYCbCrtoRGBSmpte
void HDConvertYCbCrtoRGBSmpte(YCbCrAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:631
YCbCr10BitAlphaPixel
Definition: ntv2videodefines.h:207
ConvertLine_8bitABGR_to_10bitRGBDPXLE
bool ConvertLine_8bitABGR_to_10bitRGBDPXLE(const UByte *pInSrcLine_8bitABGR, ULWord *pOutDstLine_10BitDPXLE, const ULWord inNumPixels)
Converts a single 8-bit ABGR raster line to 10-bit RGB DPX (from NTV2_FBF_ABGR to NTV2_FBF_10BIT_DPX_...
Definition: ntv2transcode.cpp:129
ajatypes.h
Declares the most fundamental data types used by NTV2. Since Windows NT was the first principal devel...
YCbCrPixel
Definition: ntv2videodefines.h:193
PackRGB10BitFor10BitRGB
void PackRGB10BitFor10BitRGB(RGBAlpha10BitPixel *pBuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:746
RGBAlpha16BitPixel::Alpha
UWord Alpha
Definition: ntv2videodefines.h:156
SDConvert10BitYCbCrto10BitRGBSmpte
void SDConvert10BitYCbCrto10BitRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:686
YCbCrAlphaPixel::cb
unsigned char cb
Definition: ntv2videodefines.h:190
YCbCr10BitPixel
Definition: ntv2videodefines.h:200
ConvertLine_8bitABGR_to_10bitRGBDPX
bool ConvertLine_8bitABGR_to_10bitRGBDPX(const UByte *pInSrcLine_8bitABGR, ULWord *pOutDstLine_10BitDPX, const ULWord inNumPixels)
Converts a single 8-bit ABGR raster line to 10-bit RGB DPX (from NTV2_FBF_ABGR to NTV2_FBF_10BIT_DPX ...
Definition: ntv2transcode.cpp:110
ULWord
uint32_t ULWord
Definition: ajatypes.h:253
SDConvert10BitYCbCrtoRGBSmpte
void SDConvert10BitYCbCrtoRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:604
SDConvertYCbCrtoRGBSmpte
void SDConvertYCbCrtoRGBSmpte(YCbCrAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:577
YCbCrAlphaPixel
Definition: ntv2videodefines.h:185
UWord
uint16_t UWord
Definition: ajatypes.h:251
ConvertLine_8bitABGR_to_24bitBGR
bool ConvertLine_8bitABGR_to_24bitBGR(const UByte *pInSrcLine_8bitABGR, UByte *pOutDstLine_24BitBGR, const ULWord inNumPixels)
Converts a single 8-bit ABGR raster line to 24-bit BGR (from NTV2_FBF_ABGR to NTV2_FBF_24BIT_BGR ).
Definition: ntv2transcode.cpp:167
RGBAlpha10BitPixel::Green
UWord Green
Definition: ntv2videodefines.h:147
SDConvert10BitYCbCrto10BitRGB
void SDConvert10BitYCbCrto10BitRGB(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:460
ConvertLine_8bitABGR_to_48bitRGB
bool ConvertLine_8bitABGR_to_48bitRGB(const UByte *pInSrcLine_8bitABGR, ULWord *pOutDstLine_48BitRGB, const ULWord inNumPixels)
Converts a single 8-bit ABGR raster line to 48-bit RGB (from NTV2_FBF_ABGR to NTV2_FBF_48BIT_RGB ).
Definition: ntv2transcode.cpp:187
RGBAlpha16BitPixel::Red
UWord Red
Definition: ntv2videodefines.h:155
HDConvert10BitYCbCrtoRGB
void HDConvert10BitYCbCrtoRGB(const YCbCr10BitAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:432
SDConvertYCbCrtoRGB
void SDConvertYCbCrtoRGB(YCbCrAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:351
CCIR601_10BIT_BLACK
#define CCIR601_10BIT_BLACK
Definition: videoutilities.h:18
ntv2fixed.h
Declares several fixed-point math routines. Assumes 16-bit fraction.
ClipRGB_10BIT
#define ClipRGB_10BIT(__x__)
Definition: videoutilities.h:50
RGBAlpha16BitPixel::Blue
UWord Blue
Definition: ntv2videodefines.h:153
ConvertLinetoRGB
void ConvertLinetoRGB(UByte *ycbcrBuffer, RGBAlphaPixel *rgbaBuffer, ULWord numPixels, bool fUseSDMatrix, bool fUseSMPTERange=false)
Definition: ntv2transcode.cpp:280
ConvertLine_2vuy_to_yuy2
bool ConvertLine_2vuy_to_yuy2(const UByte *pInSrcLine_2vuy, UWord *pOutDstLine_yuy2, const ULWord inNumPixels)
Converts a single 8-bit YCbCr '2vuy' raster line to 10-bit YCbCr 'v210' (from NTV2_FBF_8BIT_YCBCR to ...
Definition: ntv2transcode.cpp:32
CCIR601_8BIT_BLACK
#define CCIR601_8BIT_BLACK
Definition: videoutilities.h:22
ConvertARGBToRGB
void ConvertARGBToRGB(UByte *rgbaLineBuffer, UByte *rgbLineBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:662
PackRGB10BitFor10BitDPX
void PackRGB10BitFor10BitDPX(RGBAlpha10BitPixel *pBuffer, const ULWord inNumPixels, const bool bigEndian=true)
Definition: ntv2transcode.cpp:761
ConvertLine_8bitABGR_to_24bitRGB
bool ConvertLine_8bitABGR_to_24bitRGB(const UByte *pInSrcLine_8bitABGR, UByte *pOutDstLine_24BitRGB, const ULWord inNumPixels)
Converts a single 8-bit ABGR raster line to 24-bit RGB (from NTV2_FBF_ABGR to NTV2_FBF_24BIT_RGB ).
Definition: ntv2transcode.cpp:148
RGBAlpha16BitPixel
Definition: ntv2videodefines.h:152
UByte
uint8_t UByte
Definition: ajatypes.h:248
RGBAlphaPixel::Blue
unsigned char Blue
Definition: ntv2videodefines.h:138
ConvertRGBLineto10BitRGB
void ConvertRGBLineto10BitRGB(const RGBAlphaPixel *pInRGBA8Buffer, RGBAlpha10BitPixel *pOutRGBA10Buffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:583
ConvertLine_v210_to_2vuy
bool ConvertLine_v210_to_2vuy(const ULWord *pInSrcLine_v210, UByte *pOutDstLine_2vuy, const ULWord inNumPixels)
Converts a single 10-bit YCbCr 'v210' raster line to 8-bit YCbCr '2vuy'.
Definition: ntv2transcode.cpp:49
ConvertARGBToBGR
void ConvertARGBToBGR(const UByte *pInRGBALineBuffer, UByte *pOutRGBLineBuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:731
YCbCr10BitAlphaPixel::cr
UWord cr
Definition: ntv2videodefines.h:212
YCbCrAlphaPixel::y
unsigned char y
Definition: ntv2videodefines.h:189
HDConvert10BitYCbCrtoRGBSmpte
void HDConvert10BitYCbCrtoRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:658
Convert16BitARGBTo12BitRGBPacked
void Convert16BitARGBTo12BitRGBPacked(RGBAlpha16BitPixel *rgbaLineBuffer, UByte *rgbLineBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:705
AJAExport
#define AJAExport
Definition: export.h:33
ConvertLineToYCbCr422
void ConvertLineToYCbCr422(RGBAlphaPixel *RGBLine, UByte *YCbCrLine, LWord numPixels, LWord startPixel, bool fUseSDMatrix)
Definition: ntv2transcode.cpp:209
CCIR601_8BIT_CHROMAOFFSET
#define CCIR601_8BIT_CHROMAOFFSET
Definition: videoutilities.h:24
YCbCrPixel::cr
unsigned char cr
Definition: ntv2videodefines.h:197
CCIR601_10BIT_CHROMAOFFSET
#define CCIR601_10BIT_CHROMAOFFSET
Definition: videoutilities.h:20
RGBAlpha10BitPixel::Red
UWord Red
Definition: ntv2videodefines.h:148
RGBAlpha16BitPixel::Green
UWord Green
Definition: ntv2videodefines.h:154
RGBAlpha10BitPixel::Blue
UWord Blue
Definition: ntv2videodefines.h:146
HDConvertYCbCrtoRGB
void HDConvertYCbCrtoRGB(YCbCrAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:405
YCbCrAlphaPixel::cr
unsigned char cr
Definition: ntv2videodefines.h:188
ClipRGB_16BIT
#define ClipRGB_16BIT(__x__)
Definition: ntv2videodefines.h:37
ConvertARGBYCbCrToRGBA
void ConvertARGBYCbCrToRGBA(UByte *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:630
RGBAlpha10BitPixel
Definition: ntv2videodefines.h:145
YCbCr10BitPixel::y
UWord y
Definition: ntv2videodefines.h:203
SDConvert10BitYCbCrto16BitRGB
void SDConvert10BitYCbCrto16BitRGB(YCbCr10BitAlphaPixel *pSource, RGBAlpha16BitPixel *pTarget)
Definition: ntv2transcode.h:515
ConvertLineto10BitRGB
void ConvertLineto10BitRGB(UWord *ycbcrBuffer, RGBAlpha10BitPixel *rgbaBuffer, ULWord numPixels, bool fUseSDMatrix, bool fUseSMPTERange=false)
Definition: ntv2transcode.cpp:475
RGBAlphaPixel
Definition: ntv2videodefines.h:137
SDConvertRGBAlphatoYCbCr
void SDConvertRGBAlphatoYCbCr(RGBAlphaPixel *pSource, YCbCrPixel *pTarget)
Definition: ntv2transcode.h:262
ConvertLine_2vuy_to_v210
bool ConvertLine_2vuy_to_v210(const UByte *pInSrcLine_2vuy, ULWord *pOutDstLine_v210, const ULWord inNumPixels)
Converts a single 8-bit YCbCr '2vuy' raster line to 10-bit YCbCr 'v210' (from NTV2_FBF_8BIT_YCBCR to ...
Definition: ntv2transcode.cpp:14
ClipRGB_8BIT
#define ClipRGB_8BIT(__x__)
Definition: videoutilities.h:45
Convert16BitARGBTo16BitRGBEx
void Convert16BitARGBTo16BitRGBEx(UWord *rgbaLineBuffer, UWord *rgbLineBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:677
Fixed_
int Fixed_
Definition: ajatypes.h:319
HDConvert10BitYCbCrto10BitRGBSmpte
void HDConvert10BitYCbCrto10BitRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:713
HDConvert10BitYCbCrto10BitRGB
void HDConvert10BitYCbCrto10BitRGB(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:487