File: Pipeline.chs

package info (click to toggle)
haskell-gstreamer 0.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 720 kB
  • sloc: haskell: 635; ansic: 116; makefile: 11; sh: 7
file content (140 lines) | stat: -rw-r--r-- 4,648 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
--  GIMP Toolkit (GTK) Binding for Haskell: binding to gstreamer -*-haskell-*-
--
--  Author : Peter Gavin
--  Created: 1-Apr-2007
--
--  Copyright (c) 2007 Peter Gavin
--
--  This library is free software: you can redistribute it and/or
--  modify it under the terms of the GNU Lesser General Public License
--  as published by the Free Software Foundation, either version 3 of
--  the License, or (at your option) any later version.
--  
--  This library is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--  Lesser General Public License for more details.
--  
--  You should have received a copy of the GNU Lesser General Public
--  License along with this program.  If not, see
--  <http://www.gnu.org/licenses/>.
--  
--  GStreamer, the C library which this Haskell library depends on, is
--  available under LGPL Version 2. The documentation included with
--  this library is based on the original GStreamer documentation.
--  
-- | Maintainer  : gtk2hs-devel@lists.sourceforge.net
--   Stability   : alpha
--   Portability : portable (depends on GHC)
module Media.Streaming.GStreamer.Core.Pipeline (
  Pipeline,
  PipelineClass,
  castToPipeline,
  gTypePipeline,

  pipelineNew,
  pipelineGetBus,
  pipelineSetClock,
  pipelineUseClock,
  pipelineSetNewStreamTime,
  pipelineGetLastStreamTime,
  pipelineSetAutoFlushBus,
  pipelineGetAutoFlushBus,
  pipelineSetDelay,
  pipelineGetDelay,
  
  pipelineAutoFlushBus,
  pipelineDelay
  ) where

import Control.Monad (liftM)
{#import Media.Streaming.GStreamer.Core.Types#}
import System.Glib.UTFString
import System.Glib.FFI
import System.Glib.Attributes ( Attr
                              , newAttr )

{# context lib = "gstreamer" prefix = "gst" #}

pipelineNew :: String
            -> IO Element
pipelineNew name =
    withUTFString name {# call pipeline_new #} >>=
        takeObject

pipelineGetBus :: PipelineClass pipeline
               => pipeline
               -> IO Bus
pipelineGetBus pipeline =
    {# call pipeline_get_bus #} (toPipeline pipeline) >>= takeObject

pipelineSetClock :: (PipelineClass pipeline, ClockClass clock)
                 => pipeline
                 -> clock
                 -> IO Bool
pipelineSetClock pipeline clock =
    liftM toBool $
        {# call pipeline_set_clock #} (toPipeline pipeline) (toClock clock)

pipelineUseClock :: (PipelineClass pipeline, ClockClass clock)
                 => pipeline
                 -> clock
                 -> IO ()
pipelineUseClock pipeline clock =
    {# call pipeline_use_clock #} (toPipeline pipeline) (toClock clock)

pipelineSetNewStreamTime :: PipelineClass pipeline
                         => pipeline
                         -> ClockTime
                         -> IO ()
pipelineSetNewStreamTime pipeline time =
    {# call pipeline_set_new_stream_time #} (toPipeline pipeline)
                                            (fromIntegral time)

pipelineGetLastStreamTime :: PipelineClass pipeline
                          => pipeline
                          -> IO ClockTime
pipelineGetLastStreamTime pipeline =
    liftM fromIntegral $
        {# call pipeline_get_last_stream_time #} (toPipeline pipeline)

pipelineSetAutoFlushBus :: PipelineClass pipeline
                        => pipeline
                        -> Bool
                        -> IO ()
pipelineSetAutoFlushBus pipeline autoFlush =
    {# call pipeline_set_auto_flush_bus #} (toPipeline pipeline) $ fromBool autoFlush

pipelineGetAutoFlushBus :: PipelineClass pipeline
                        => pipeline
                        -> IO Bool
pipelineGetAutoFlushBus pipeline =
    liftM toBool $
        {# call pipeline_get_auto_flush_bus #} (toPipeline pipeline)

pipelineSetDelay :: PipelineClass pipeline
                 => pipeline
                 -> ClockTime
                 -> IO ()
pipelineSetDelay pipeline delay =
    {# call pipeline_set_delay #} (toPipeline pipeline)
                                  (fromIntegral delay)

pipelineGetDelay :: PipelineClass pipeline
                 => pipeline
                 -> IO ClockTime
pipelineGetDelay pipeline =
    liftM fromIntegral $
        {# call pipeline_get_delay #} (toPipeline pipeline)

pipelineAutoFlushBus :: PipelineClass pipelineT
                     => Attr pipelineT Bool
pipelineAutoFlushBus = newAttr
    pipelineGetAutoFlushBus
    pipelineSetAutoFlushBus

pipelineDelay :: PipelineClass pipelineT
              => Attr pipelineT ClockTime
pipelineDelay = newAttr
    pipelineGetDelay
    pipelineSetDelay