]> git.sesse.net Git - casparcg/blob - core/producer/transition/transition_producer.h
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / core / producer / transition / transition_producer.h
1 /*\r
2 * copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
3 *\r
4 *  This file is part of CasparCG.\r
5 *\r
6 *    CasparCG is free software: you can redistribute it and/or modify\r
7 *    it under the terms of the GNU General Public License as published by\r
8 *    the Free Software Foundation, either version 3 of the License, or\r
9 *    (at your option) any later version.\r
10 *\r
11 *    CasparCG is distributed in the hope that it will be useful,\r
12 *    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14 *    GNU General Public License for more details.\r
15 \r
16 *    You should have received a copy of the GNU General Public License\r
17 *    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
18 *\r
19 */\r
20 #pragma once\r
21 \r
22 #include "../frame_producer.h"\r
23 \r
24 #include <common/utility/tweener.h>\r
25 \r
26 #include <string>\r
27 #include <memory>\r
28 \r
29 namespace caspar { namespace core {\r
30 \r
31 struct transition\r
32 {\r
33         enum type\r
34         {\r
35 \r
36                 cut = 1,\r
37                 mix,\r
38                 push,\r
39                 slide,\r
40                 wipe\r
41         };\r
42 \r
43         static std::wstring print(type t)\r
44         {\r
45                 switch(t)\r
46                 {\r
47                 case transition::cut:   return L"cut";\r
48                 case transition::mix:   return L"mix";\r
49                 case transition::push:  return L"push";\r
50                 case transition::slide: return L"slide";\r
51                 case transition::wipe:  return L"wipe";\r
52                 default:                                return L"";\r
53                 }\r
54         }\r
55 };\r
56 \r
57 struct transition_direction\r
58 {\r
59         enum type\r
60         {\r
61                 from_left = 1,\r
62                 from_right\r
63         };\r
64 };\r
65 \r
66 struct transition_info\r
67 {\r
68         transition_info() \r
69                 : type(transition::cut)\r
70                 , duration(0)\r
71                 , direction(transition_direction::from_left)\r
72                 , tweener(get_tweener(L"linear")){}\r
73                 \r
74         size_t                                          duration;\r
75         transition_direction::type      direction;\r
76         transition::type                        type;\r
77         tweener_t                                       tweener;\r
78 };\r
79 \r
80 safe_ptr<frame_producer> create_transition_producer(const video_format_desc& format_desc, const safe_ptr<frame_producer>& destination, const transition_info& info);\r
81 \r
82 }}