]> git.sesse.net Git - casparcg/commitdiff
2.0. Optimized YUV conversion.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 11 Aug 2011 12:55:19 +0000 (12:55 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 11 Aug 2011 12:55:19 +0000 (12:55 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1142 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_kernel.cpp
shell/casparcg.config
shell/main.cpp

index 013d6b801732c4cf3d81f51fa92a32783fcb1a6d..bb6da6b5bf9ae3444518e1712f929467d82d4345 100644 (file)
@@ -177,40 +177,51 @@ struct image_kernel::implementation : boost::noncopyable
                (compability_mode ? get_simple_blend_color_func() : get_blend_color_func())\r
                \r
                +\r
-\r
-               "                                                                                                                                                                       \n"\r
-               "// NOTE: YCbCr, ITU-R, http://www.intersil.com/data/an/an9717.pdf                                      \n"\r
-               "// TODO: Support for more yuv formats might be needed.                                                         \n"\r
+               "//http://slouken.blogspot.com/2011/02/mpeg-acceleration-with-glsl.html                         \n"\r
                "vec4 ycbcra_to_rgba_sd(float y, float cb, float cr, float a)                                           \n"\r
                "{                                                                                                                                                                      \n"\r
-               "       cb -= 0.5;                                                                                                                                              \n"\r
-               "       cr -= 0.5;                                                                                                                                              \n"\r
-               "       y = 1.164*(y-0.0625);                                                                                                                   \n"\r
+               "       // YUV offset                                                                                                                                   \n"\r
+               "       const vec3 offset = vec3(-0.0625, -0.5, -0.5);                                                                  \n"\r
+               "                                                                                                                                                                       \n"\r
+               "       // RGB coefficients                                                                                                                     \n"\r
+               "       const vec3 Rcoeff = vec3(1.164,  0.000,  1.596);                                                                \n"\r
+               "       const vec3 Gcoeff = vec3(1.164, -0.391, -0.813);                                                                \n"\r
+               "       const vec3 Bcoeff = vec3(1.164,  2.018,  0.000);                                                                \n"\r
                "                                                                                                                                                                       \n"\r
-               "       vec4 color;                                                                                                                                             \n"\r
-               "       color.r = y + 2.018 * cb;                                                                                                               \n"\r
-               "       color.b = y + 1.596 * cr;                                                                                                               \n"\r
-               "       color.g = y - 0.813 * cr - 0.391 * cb;                                                                                  \n"\r
-               "       color.a = a;                                                                                                                                    \n"\r
+               "       vec3 yuv = vec3(y, cr, cb);                                                                                                             \n"\r
+               "   vec4 rgba;                                                                                                                                          \n"\r
                "                                                                                                                                                                       \n"\r
-               "       return color;                                                                                                                                   \n"\r
+               "       yuv += offset;                                                                                                                                  \n"\r
+               "       rgba.r = dot(yuv, Rcoeff);                                                                                                              \n"\r
+               "       rgba.g = dot(yuv, Gcoeff);                                                                                                              \n"\r
+               "       rgba.b = dot(yuv, Bcoeff);                                                                                                              \n"\r
+               "       rgba.a = a;                                                                                                                                             \n"\r
+               "                                                                                                                                                                       \n"\r
+               "       return rgba;                                                                                                                                    \n"\r
                "}                                                                                                                                                                      \n"                     \r
                "                                                                                                                                                                       \n"\r
                "vec4 ycbcra_to_rgba_hd(float y, float cb, float cr, float a)                                           \n"\r
                "{                                                                                                                                                                      \n"\r
-               "       cb -= 0.5;                                                                                                                                              \n"\r
-               "       cr -= 0.5;                                                                                                                                              \n"\r
-               "       y = 1.164*(y-0.0625);                                                                                                                   \n"\r
+               "       // YUV offset                                                                                                                                   \n"\r
+               "       const vec3 offset = vec3(-0.0625, -0.5, -0.5);                                                                  \n"\r
+               "                                                                                                                                                                       \n"\r
+               "       // RGB coefficients                                                                                                                     \n"\r
+               "       const vec3 Rcoeff = vec3(1.164,  0.000,  1.793);                                                                \n"\r
+               "       const vec3 Gcoeff = vec3(1.164, -0.213, -0.534);                                                                \n"\r
+               "       const vec3 Bcoeff = vec3(1.164,  2.115,  0.000);                                                                \n"\r
+               "                                                                                                                                                                       \n"\r
+               "       vec3 yuv = vec3(y, cr, cb);                                                                                                             \n"\r
+               "   vec4 rgba;                                                                                                                                          \n"\r
                "                                                                                                                                                                       \n"\r
-               "       vec4 color;                                                                                                                                             \n"\r
-               "       color.r = y + 2.115 * cb;                                                                                                               \n"\r
-               "       color.b = y + 1.793 * cr;                                                                                                               \n"\r
-               "       color.g = y - 0.534 * cr - 0.213 * cb;                                                                                  \n"\r
-               "       color.a = a;                                                                                                                                    \n"\r
+               "       yuv += offset;                                                                                                                                  \n"\r
+               "       rgba.r = dot(yuv, Rcoeff);                                                                                                              \n"\r
+               "       rgba.g = dot(yuv, Gcoeff);                                                                                                              \n"\r
+               "       rgba.b = dot(yuv, Bcoeff);                                                                                                              \n"\r
+               "       rgba.a = a;                                                                                                                                             \n"\r
                "                                                                                                                                                                       \n"\r
-               "       return color;                                                                                                                                   \n"\r
+               "       return rgba;                                                                                                                                    \n"\r
                "}                                                                                                                                                                      \n"                     \r
-               "                                                                                                                                                                       \n"                     \r
+               "                                                                                                                                                                       \n"             \r
                "vec4 ycbcra_to_rgba(float y, float cb, float cr, float a)                                                      \n"\r
                "{                                                                                                                                                                      \n"\r
                "       if(is_hd)                                                                                                                                               \n"\r
index 91558aba70391cd437ab656106fc3e08fff493cd..43cce0d66c27cbd2a2668e1badcae04cefc874be 100644 (file)
         </screen>\r
       </consumers>\r
     </channel>\r
+    <channel>\r
+      <video-mode>1080p5000</video-mode>\r
+      <consumers>\r
+        <decklink>\r
+          <device>2</device>\r
+          <embedded-audio>true</embedded-audio>\r
+          <low-latency>true</low-latency>\r
+        </decklink>\r
+      </consumers>\r
+    </channel>\r
 </channels>\r
   <controllers>\r
     <tcp>\r
index 98b8a25d777cd3fc066f5d374292f1331cc4ae7b..acca06142eb0164c49e82e59c3bc075e2687b2f0 100644 (file)
@@ -179,7 +179,7 @@ int main(int argc, wchar_t* argv[])
                tbb_thread_installer(){observe(true);}\r
                void on_scheduler_entry(bool is_worker)\r
                {\r
-                       caspar::detail::SetThreadName(GetCurrentThreadId(), "tbb-worker-thread");\r
+                       //caspar::detail::SetThreadName(GetCurrentThreadId(), "tbb-worker-thread");\r
                        caspar::win32_exception::install_handler();\r
                }\r
        } tbb_thread_installer;\r