AJA NTV2 SDK  18.0.0.2717
NTV2 SDK 18.0.0.2717
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  bool fAlphaFromLuma = false);
158 
159 // ConvertLineto10BitYCbCrA
160 // 10 Bit YCbCr to 10 Bit YCbCrA
161 AJAExport void ConvertLineto10BitYCbCrA (const UWord * pInYCbCrBuffer,
162  ULWord * pOutYCbCrABuffer,
163  const ULWord inNumPixels);
164 
165 // ConvertRGBLineto10BitRGB
166 // 8 Bit RGB and 10 Bit RGB Version
167 AJAExport void ConvertRGBLineto10BitRGB (const RGBAlphaPixel * pInRGBA8Buffer,
168  RGBAlpha10BitPixel * pOutRGBA10Buffer,
169  const ULWord inNumPixels);
170 
171 // ConvertRGBALineToRGB
172 // 8 bit RGBA to 8 bit RGB (RGB24)
173 // Conversion is done into the same buffer
174 AJAExport void ConvertRGBALineToRGB (RGBAlphaPixel * rgbaBuffer,
175  ULWord numPixels);
176 
177 // ConvertRGBALineToBGR
178 // 8 bit RGBA to 8 bit BGR (BGR24)
179 // Conversion is done into the same buffer
180 AJAExport void ConvertRGBALineToBGR (RGBAlphaPixel * rgbaBuffer,
181  ULWord numPixels);
182 
183 // ConvertLineto10BitRGB
184 // 8 Bit RGBA to and 10 Bit RGB Packed Version
185 AJAExport void ConvertLineto10BitRGB (const RGBAlphaPixel * pInRGBA8Buffer,
186  ULWord * pOutRGB10BitBuffer,
187  ULWord inNumPixels);
188 
189 // ConvertLineto8BitYCbCr
190 // 10 Bit YCbCr to 8 Bit YCbCr
191 AJAExport void ConvertLineto8BitYCbCr (UWord * ycbcr10BitBuffer,
192  UByte * ycbcr8BitBuffer,
193  ULWord numPixels);
194 
195 // Converts UYVY(2yuv) -> YUY2(yuv2) in place
196 AJAExport void Convert8BitYCbCrToYUY2 (UByte * ycbcrBuffer,
197  ULWord numPixels);
198 
199 // Converts 8 Bit ARGB 8 Bit RGBA in place
200 AJAExport void ConvertARGBYCbCrToRGBA (UByte * rgbaBuffer,
201  ULWord numPixels);
202 
203 
204 // Converts 8 Bit ARGB 8 Bit ABGR in place
205 AJAExport void ConvertARGBYCbCrToABGR (UByte * rgbaBuffer,
206  ULWord numPixels);
207 
208 // Convert 8 Bit ARGB to 8 bit RGB
209 AJAExport void ConvertARGBToRGB (UByte * rgbaLineBuffer,
210  UByte * rgbLineBuffer,
211  ULWord numPixels);
212 
213 // Convert 16 Bit ARGB to 16 bit RGB
214 AJAExport void Convert16BitARGBTo16BitRGBEx (UWord * rgbaLineBuffer,
215  UWord * rgbLineBuffer,
216  ULWord numPixels);
217 
218 // Convert 16 Bit ARGB to 16 bit RGB
220  UWord * rgbLineBuffer,
221  ULWord numPixels);
222 
223 // Convert 16 Bit ARGB to 12 bit RGB Packed // New in SDK 15.5
225  UByte * rgbLineBuffer,
226  ULWord numPixels);
227 
228 // Convert 8 Bit ARGB to 8 bit BGR
229 AJAExport void ConvertARGBToBGR (const UByte * pInRGBALineBuffer,
230  UByte * pOutRGBLineBuffer,
231  const ULWord inNumPixels);
232 
233 // ConvertLineto16BitRGB
234 // 10 Bit YCbCr and 16 Bit RGB Version
235 AJAExport void ConvertLineto16BitRGB (UWord * ycbcrBuffer,
236  RGBAlpha16BitPixel * rgbaBuffer,
237  ULWord numPixels,
238  bool fUseSDMatrix,
239  bool fUseSMPTERange = false);
240 
241 /*
242 // ConvertLinetoRGB
243 // 10 Bit YCbCr Version -> 10 Bit RGB
244 AJAExport
245 void ConvertLinetoRGB(UWord * ycbcrBuffer,
246  RGBAlpha10BitPixel * rgbaBuffer,
247  ULWord numPixels);
248 */
249 
250 // Pack 10 Bit RGBA to 10 Bit RGB Format for our board
252  const ULWord inNumPixels);
253 
254 // Pack 10 Bit RGBA to 10 Bit DPX Format for our board
256  const ULWord inNumPixels,
257  const bool bigEndian = true);
258 
259 // Pack 10 Bit RGBA to NTV2_FBF_10BIT_RGB_PACKED Format for our board
261  const ULWord inNumPixels);
262 
263 // Pack 10 Bit RGBA to NTV2_FBF_10BIT_ARGB Format for our board
265  const ULWord inNumPixels);
266 
267 
268 inline void SDConvertRGBAlphatoYCbCr(RGBAlphaPixel * pSource, YCbCrPixel * pTarget)
269 {
270  LWord Y,Cb,Cr;
271 
272  Y = CCIR601_8BIT_BLACK + FixedRound((Fixed_)0x41BC*pSource->Red +
273  (Fixed_)0x810F*pSource->Green +
274  (Fixed_)0x1910*pSource->Blue );
275  pTarget->y = (UByte)Y;
276 
277  Cb = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)-0x25F1*pSource->Red -
278  (Fixed_)0x4A7E*pSource->Green +
279  (Fixed_)0x7070*pSource->Blue );
280 
281  pTarget->cb = (UByte)Cb;
282 
283  Cr = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)0x7070*pSource->Red -
284  (Fixed_)0x5E27*pSource->Green -
285  (Fixed_)0x1249*pSource->Blue );
286 
287  pTarget->cr = (UByte)Cr;
288 }
289 
290 inline void HDConvertRGBAlphatoYCbCr(RGBAlphaPixel * pSource, YCbCrPixel * pTarget)
291 {
292  LWord Y,Cb,Cr;
293 
294  Y = CCIR601_8BIT_BLACK + FixedRound((Fixed_)0x2E8A*pSource->Red +
295  (Fixed_)0x9C9F*pSource->Green +
296  (Fixed_)0x0FD2*pSource->Blue );
297  pTarget->y = UByte(Y);
298 
299  Cb = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)-0x18F4*pSource->Red -
300  (Fixed_)0x545B*pSource->Green +
301  (Fixed_)0x6DA9*pSource->Blue );
302 
303  pTarget->cb = uint8_t(SByte(Cb));
304 
305  Cr = CCIR601_8BIT_CHROMAOFFSET + FixedRound((Fixed_)0x6D71*pSource->Red -
306  (Fixed_)0x6305*pSource->Green -
307  (Fixed_)0x0A06*pSource->Blue );
308 
309  pTarget->cr = uint8_t(SByte(Cr));
310 }
311 
312 
313 inline void SDConvertRGBAlphatoYCbCr(const RGBAlphaPixel * pSource, YCbCr10BitPixel * pTarget)
314 {
315  LWord Y,Cb,Cr;
316 
317  Y = CCIR601_10BIT_BLACK + (((Fixed_)0x41BC*pSource->Red +
318  (Fixed_)0x810F*pSource->Green +
319  (Fixed_)0x1910*pSource->Blue )>>14);
320  pTarget->y = UWord(Y);
321 
322  Cb = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)-0x25F1*pSource->Red -
323  (Fixed_)0x4A7E*pSource->Green +
324  (Fixed_)0x7070*pSource->Blue )>>14);
325 
326  pTarget->cb = UWord(Cb&0x3FF);
327 
328  Cr = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)0x7070*pSource->Red -
329  (Fixed_)0x5E27*pSource->Green -
330  (Fixed_)0x1249*pSource->Blue )>>14);
331 
332  pTarget->cr = UWord(Cr&0x3FF);
333 }
334 
335 inline void HDConvertRGBAlphatoYCbCr(const RGBAlphaPixel * pSource, YCbCr10BitPixel * pTarget)
336 {
337  LWord Y,Cb,Cr;
338 
339  Y = CCIR601_10BIT_BLACK + (((Fixed_)0x2E8A*pSource->Red +
340  (Fixed_)0x9C9F*pSource->Green +
341  (Fixed_)0x0FD2*pSource->Blue )>>14);
342  pTarget->y = (UWord)Y;
343 
344  Cb = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)-0x18F4*pSource->Red -
345  (Fixed_)0x545B*pSource->Green +
346  (Fixed_)0x6DA9*pSource->Blue )>>14);
347 
348  pTarget->cb = UWord(Cb&0x3FF);
349 
350  Cr = CCIR601_10BIT_CHROMAOFFSET + (((Fixed_)0x6D71*pSource->Red -
351  (Fixed_)0x6305*pSource->Green -
352  (Fixed_)0x0A06*pSource->Blue )>>14);
353 
354  pTarget->cr = UWord(Cr&0x3FF);
355 }
356 
358  RGBAlphaPixel *pTarget)
359 {
360  LWord Red,Green,Blue;
361  Fixed_ ConvertedY;
362 
363  ConvertedY = 0x12A15*((LWord)pSource->y - CCIR601_8BIT_BLACK);
364 
365  Red = FixedRound(ConvertedY +
366  0x19895*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET)));
367 
368  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
369 
370  Blue = FixedRound(ConvertedY +
371  0x20469*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ));
372 
373  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
374 
375  Green = FixedRound(ConvertedY -
376  0x644A*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ) -
377  0xD01F*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET) ));
378 
379  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
380 
381  pTarget->Alpha = pSource->Alpha;
382 }
383 
385  RGBAlphaPixel *pTarget)
386 {
387  LWord Red,Green,Blue;
388  Fixed_ ConvertedY;
389 
390  ConvertedY = 0x4A86*((LWord)pSource->y - CCIR601_10BIT_BLACK);
391 
392  Red = FixedRound(ConvertedY +
393  0x6626*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
394 
395  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
396 
397  Blue = FixedRound(ConvertedY +
398  0x811B*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
399 
400  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
401 
402  Green = FixedRound(ConvertedY -
403  0x1913*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
404  0x3408*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
405 
406  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
407 
408  pTarget->Alpha = (UByte)pSource->Alpha;
409 }
410 
412  RGBAlphaPixel *pTarget)
413 {
414  LWord Red,Green,Blue;
415  Fixed_ ConvertedY;
416 
417  ConvertedY = 0x12ACF*((LWord)pSource->y - CCIR601_8BIT_BLACK);
418 
419  Red = FixedRound(ConvertedY +
420  0x1DF71*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET)));
421 
422  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
423 
424  Blue = FixedRound(ConvertedY +
425  0x22A86*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ));
426 
427  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
428 
429  Green = FixedRound(ConvertedY -
430  0x3806*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET) ) -
431  0x8C32*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET) ));
432 
433  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
434 
435  pTarget->Alpha = pSource->Alpha;
436 }
437 
439  RGBAlphaPixel *pTarget)
440 {
441  LWord Red,Green,Blue;
442  Fixed_ ConvertedY;
443 
444  ConvertedY = (0x12ACF>>2)*((LWord)pSource->y - CCIR601_10BIT_BLACK);
445 
446  Red = FixedRound(ConvertedY +
447  (0x1DF71>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
448 
449  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
450 
451  Blue = FixedRound(ConvertedY +
452  (0x22A86>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
453 
454  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
455 
456  Green = FixedRound(ConvertedY -
457  (0x3806>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
458  (0x8C32>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
459 
460  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
461 
462  pTarget->Alpha = (UByte)pSource->Alpha;
463 }
464 
465 
467  RGBAlpha10BitPixel *pTarget)
468 {
469  LWord Red,Green,Blue;
470  Fixed_ ConvertedY;
471 
472  ConvertedY = 0x12A15*((LWord)pSource->y - CCIR601_10BIT_BLACK);
473 
474  Red = FixedRound(ConvertedY +
475  0x19895*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
476 
477  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
478 
479  Blue = FixedRound(ConvertedY +
480  0x20469*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
481 
482  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
483 
484  Green = FixedRound(ConvertedY -
485  0x644A*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
486  0xD01F*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
487 
488  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
489 
490  pTarget->Alpha = pSource->Alpha;
491 }
492 
494  RGBAlpha10BitPixel *pTarget)
495 {
496  LWord Red,Green,Blue;
497  Fixed_ ConvertedY;
498 
499  ConvertedY = 0x12ACF*((LWord)pSource->y - CCIR601_10BIT_BLACK);
500 
501  Red = FixedRound(ConvertedY +
502  0x1DF71*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET)));
503 
504  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
505 
506  Blue = FixedRound(ConvertedY +
507  0x22A86*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ));
508 
509  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
510 
511  Green = FixedRound(ConvertedY -
512  0x3806*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
513  0x8C32*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) ));
514 
515  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
516 
517  pTarget->Alpha = pSource->Alpha;
518 }
519 
520 // KAM - start
522  RGBAlpha16BitPixel *pTarget)
523 {
524  ULWord Red,Green,Blue;
525  Fixed_ ConvertedY;
526 
527  ConvertedY = 0x12A15*((LWord)pSource->y - CCIR601_10BIT_BLACK);
528 
529  Red = ULWord(FixedRound(ConvertedY +
530  0x19895*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))));
531 
532  //Red = Red<<4; // only 12 bits used, put them in the MSB
533  pTarget->Red = (UWord)ClipRGB_16BIT(Red<<6); // TBD: fix coefficents instead
534 
535  Blue = ULWord(FixedRound(ConvertedY +
536  0x20469*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) )));
537 
538  //Blue = Blue<<4; // only 12 bits used, put them in the MSB
539  pTarget->Blue = (UWord)ClipRGB_16BIT(Blue<<6); // TBD: fix coefficents instead
540 
541  Green = ULWord(FixedRound(ConvertedY -
542  0x644A*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
543  0xD01F*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) )));
544 
545  //Green = Green<<4; // only 12 bits used, put them in the MSB
546  pTarget->Green = (UWord)ClipRGB_16BIT(Green<<6); // TBD: fix coefficents instead
547 
548  // TBD: shift alpha???
549  pTarget->Alpha = pSource->Alpha;
550 }
551 
553  RGBAlpha16BitPixel *pTarget)
554 {
555  ULWord Red,Green,Blue;
556  Fixed_ ConvertedY;
557 
558  ConvertedY = 0x12ACF*((LWord)pSource->y - CCIR601_10BIT_BLACK);
559 
560  Red = ULWord(FixedRound(ConvertedY +
561  0x1DF71*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))));
562 
563  //Red = Red<<4; // only 12 bits used, put them in the MSB
564  pTarget->Red = (UWord)ClipRGB_16BIT(Red); // TBD: fix coefficents instead
565 
566  Blue = ULWord(FixedRound(ConvertedY +
567  0x22A86*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) )));
568 
569  //Blue = Blue<<4; // only 12 bits used, put them in the MSB
570  pTarget->Blue = (UWord)ClipRGB_16BIT(Blue); // TBD: fix coefficents instead
571 
572  Green = ULWord(FixedRound(ConvertedY -
573  0x3806*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET) ) -
574  0x8C32*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET) )));
575 
576  //Green = Green<<4; // only 12 bits used, put them in the MSB
577  pTarget->Green = (UWord)ClipRGB_16BIT(Green); // TBD: fix coefficents instead
578 
579  // TBD: shift alpha???
580  pTarget->Alpha = pSource->Alpha;
581 }
582 
584  RGBAlphaPixel *pTarget)
585 {
586  LWord Red,Green,Blue;
587  Fixed_ ConvertedY;
588 
589  ConvertedY = 0xFF40*((LWord)pSource->y - CCIR601_8BIT_BLACK);
590 
591  Red = FixedRound(ConvertedY +
592  0x15DDF*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
593 
594  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
595 
596  Blue = FixedRound(ConvertedY +
597  0x1BA34*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
598 
599  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
600 
601  Green = FixedRound(ConvertedY -
602  0x55E1*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET)) -
603  0xB237*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
604 
605  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
606 
607  pTarget->Alpha = pSource->Alpha;
608 }
609 
611  RGBAlphaPixel *pTarget)
612 {
613  LWord Red,Green,Blue;
614  Fixed_ ConvertedY;
615 
616  ConvertedY = 0x3FD1*((LWord)pSource->y - CCIR601_10BIT_BLACK);
617 
618  Red = FixedRound(ConvertedY +
619  0x5778*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
620 
621  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
622 
623  Blue = FixedRound(ConvertedY +
624  0x6E8E*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
625 
626  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
627 
628  Green = FixedRound(ConvertedY -
629  0x1579*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
630  0x2C8E*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
631 
632  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
633 
634  pTarget->Alpha = (UByte)pSource->Alpha;
635 }
636 
638  RGBAlphaPixel *pTarget)
639 {
640  LWord Red,Green,Blue;
641  Fixed_ ConvertedY;
642 
643  ConvertedY = 0xFFDF*((LWord)pSource->y - CCIR601_8BIT_BLACK);
644 
645  Red = FixedRound(ConvertedY +
646  0x19A8C*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
647 
648  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
649 
650  Blue = FixedRound(ConvertedY +
651  0x1DAD7*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
652 
653  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
654 
655  Green = FixedRound(ConvertedY -
656  0x2FF9*((LWord)(pSource->cb-CCIR601_8BIT_CHROMAOFFSET)) -
657  0x780D*((LWord)(pSource->cr-CCIR601_8BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
658 
659  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
660 
661  pTarget->Alpha = pSource->Alpha;
662 }
663 
665  RGBAlphaPixel *pTarget)
666 {
667  LWord Red,Green,Blue;
668  Fixed_ ConvertedY;
669 
670  ConvertedY = (0xFFDF>>2)*((LWord)pSource->y - CCIR601_10BIT_BLACK);
671 
672  Red = FixedRound(ConvertedY +
673  (0x19A8C>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
674 
675  pTarget->Red = (UByte)ClipRGB_8BIT(Red);
676 
677  Blue = FixedRound(ConvertedY +
678  (0x1DAD7>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
679 
680  pTarget->Blue = (UByte)ClipRGB_8BIT(Blue);
681 
682  Green = FixedRound(ConvertedY -
683  (0x2FF9>>2)*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
684  (0x780D>>2)*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_8BIT_BLACK;
685 
686  pTarget->Green = (UByte)ClipRGB_8BIT(Green);
687 
688  pTarget->Alpha = (UByte)pSource->Alpha;
689 }
690 
691 
693  RGBAlpha10BitPixel *pTarget)
694 {
695  LWord Red,Green,Blue;
696  Fixed_ ConvertedY;
697 
698  ConvertedY = 0xFF40*((LWord)pSource->y - CCIR601_10BIT_BLACK);
699 
700  Red = FixedRound(ConvertedY +
701  0x15DDF*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
702 
703  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
704 
705  Blue = FixedRound(ConvertedY +
706  0x1BA34*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
707 
708  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
709 
710  Green = FixedRound(ConvertedY -
711  0x55E1*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
712  0xB237*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
713 
714  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
715 
716  pTarget->Alpha = pSource->Alpha;
717 }
718 
720  RGBAlpha10BitPixel *pTarget)
721 {
722  LWord Red,Green,Blue;
723  Fixed_ ConvertedY;
724 
725  ConvertedY = 0xFFDF*((LWord)pSource->y - CCIR601_10BIT_BLACK);
726 
727  Red = FixedRound(ConvertedY +
728  0x19A8C*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
729 
730  pTarget->Red = (UWord)ClipRGB_10BIT(Red);
731 
732  Blue = FixedRound(ConvertedY +
733  0x1DAD7*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
734 
735  pTarget->Blue = (UWord)ClipRGB_10BIT(Blue);
736 
737  Green = FixedRound(ConvertedY -
738  0x2FF9*((LWord)(pSource->cb-CCIR601_10BIT_CHROMAOFFSET)) -
739  0x780D*((LWord)(pSource->cr-CCIR601_10BIT_CHROMAOFFSET))) + CCIR601_10BIT_BLACK;
740 
741  pTarget->Green = (UWord)ClipRGB_10BIT(Green);
742 
743  pTarget->Alpha = pSource->Alpha;
744 }
745 
746 #endif // NTV2TRANSCODE_H
HDConvertRGBAlphatoYCbCr
void HDConvertRGBAlphatoYCbCr(RGBAlphaPixel *pSource, YCbCrPixel *pTarget)
Definition: ntv2transcode.h:290
SByte
int8_t SByte
Definition: ajatypes.h:272
PackRGB10BitFor10BitRGBPacked
void PackRGB10BitFor10BitRGBPacked(RGBAlpha10BitPixel *pBuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:787
LWord
int32_t LWord
Definition: ajatypes.h:275
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:620
YCbCrPixel::cb
unsigned char cb
Definition: ntv2videodefines.h:195
ConvertRGBALineToRGB
void ConvertRGBALineToRGB(RGBAlphaPixel *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:431
ConvertRGBALineToBGR
void ConvertRGBALineToBGR(RGBAlphaPixel *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:455
SDConvert10BitYCbCrtoRGB
void SDConvert10BitYCbCrtoRGB(const YCbCr10BitAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:384
RGBAlphaPixel::Alpha
unsigned char Alpha
Definition: ntv2videodefines.h:141
ConvertARGBYCbCrToABGR
void ConvertARGBYCbCrToABGR(UByte *rgbaBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:653
Convert16BitARGBTo16BitRGB
void Convert16BitARGBTo16BitRGB(RGBAlpha16BitPixel *rgbaLineBuffer, UWord *rgbLineBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:699
ConvertLineto10BitYCbCrA
void ConvertLineto10BitYCbCrA(const UWord *pInYCbCrBuffer, ULWord *pOutYCbCrABuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:558
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:608
YCbCrPixel::y
unsigned char y
Definition: ntv2videodefines.h:196
ConvertLineto10BitRGB
void ConvertLineto10BitRGB(UWord *ycbcrBuffer, RGBAlpha10BitPixel *rgbaBuffer, ULWord numPixels, bool fUseSDMatrix, bool fUseSMPTERange=false, bool fAlphaFromLuma=false)
Definition: ntv2transcode.cpp:477
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:552
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:876
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:637
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:753
RGBAlpha16BitPixel::Alpha
UWord Alpha
Definition: ntv2videodefines.h:156
SDConvert10BitYCbCrto10BitRGBSmpte
void SDConvert10BitYCbCrto10BitRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:692
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:276
SDConvert10BitYCbCrtoRGBSmpte
void SDConvert10BitYCbCrtoRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:610
SDConvertYCbCrtoRGBSmpte
void SDConvertYCbCrtoRGBSmpte(YCbCrAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:583
PackRGB10BitFor10BitARGBPacked
void PackRGB10BitFor10BitARGBPacked(RGBAlpha10BitPixel *pBuffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:803
YCbCrAlphaPixel
Definition: ntv2videodefines.h:185
UWord
uint16_t UWord
Definition: ajatypes.h:274
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:466
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:438
SDConvertYCbCrtoRGB
void SDConvertYCbCrtoRGB(YCbCrAlphaPixel *pSource, RGBAlphaPixel *pTarget)
Definition: ntv2transcode.h:357
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:669
PackRGB10BitFor10BitDPX
void PackRGB10BitFor10BitDPX(RGBAlpha10BitPixel *pBuffer, const ULWord inNumPixels, const bool bigEndian=true)
Definition: ntv2transcode.cpp:768
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:271
RGBAlphaPixel::Blue
unsigned char Blue
Definition: ntv2videodefines.h:138
ConvertRGBLineto10BitRGB
void ConvertRGBLineto10BitRGB(const RGBAlphaPixel *pInRGBA8Buffer, RGBAlpha10BitPixel *pOutRGBA10Buffer, const ULWord inNumPixels)
Definition: ntv2transcode.cpp:590
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:738
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:664
Convert16BitARGBTo12BitRGBPacked
void Convert16BitARGBTo12BitRGBPacked(RGBAlpha16BitPixel *rgbaLineBuffer, UByte *rgbLineBuffer, ULWord numPixels)
Definition: ntv2transcode.cpp:712
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:411
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:637
RGBAlpha10BitPixel
Definition: ntv2videodefines.h:145
YCbCr10BitPixel::y
UWord y
Definition: ntv2videodefines.h:203
SDConvert10BitYCbCrto16BitRGB
void SDConvert10BitYCbCrto16BitRGB(YCbCr10BitAlphaPixel *pSource, RGBAlpha16BitPixel *pTarget)
Definition: ntv2transcode.h:521
RGBAlphaPixel
Definition: ntv2videodefines.h:137
SDConvertRGBAlphatoYCbCr
void SDConvertRGBAlphatoYCbCr(RGBAlphaPixel *pSource, YCbCrPixel *pTarget)
Definition: ntv2transcode.h:268
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:684
Fixed_
int Fixed_
Definition: ajatypes.h:342
HDConvert10BitYCbCrto10BitRGBSmpte
void HDConvert10BitYCbCrto10BitRGBSmpte(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:719
HDConvert10BitYCbCrto10BitRGB
void HDConvert10BitYCbCrto10BitRGB(YCbCr10BitAlphaPixel *pSource, RGBAlpha10BitPixel *pTarget)
Definition: ntv2transcode.h:493