17
17
# You should have received a copy of the GNU Lesser General Public
18
18
# License along with this program; if not, write to the
19
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
# Boston, MA 02111-1307, USA.
19
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
20
# Boston, MA 02110-1301, USA.
23
23
Encoding-related utilities and classes
29
29
from pitivi.factories.base import OperationFactory, SinkFactory
30
30
from pitivi.factories.operation import TransformFactory, get_modifier_for_stream
32
33
class EncoderFactory(TransformFactory):
34
35
Creates one-to-one encoding bins based on provided L{StreamEncodeSettings}.
162
164
def _requestNewInputStream(self, bin, input_stream):
163
165
raise NotImplementedError
165
168
class RenderSinkFactory(SinkFactory):
167
170
Convenience class combining a L{RenderFactory} and a L{SinkFactory}.
241
244
factory = gst.registry_get_default().lookup_feature(factoryname)
242
245
if factory == None:
243
log.warning("encode","%s is not a valid factoryname", factoryname)
246
log.warning("encode", "%s is not a valid factoryname", factoryname)
247
250
sinkpads = [x for x in factory.get_static_pad_templates() if x.direction == gst.PAD_SINK]
248
251
for p in sinkpads:
250
log.log("encode","sinkcaps %s", c.to_string())
253
log.log("encode", "sinkcaps %s", c.to_string())
251
254
inter = caps.intersect(c)
252
log.log("encode","intersection %s", inter.to_string())
255
log.log("encode", "intersection %s", inter.to_string())
254
257
res.append(p.name_template)
259
263
def get_compatible_sink_caps(factoryname, caps):
261
265
Returns the compatible caps between 'caps' and the sink pad caps of 'factoryname'
263
log.log("encode","factoryname : %s , caps : %s", factoryname, caps.to_string())
267
log.log("encode", "factoryname : %s , caps : %s", factoryname, caps.to_string())
264
268
factory = gst.registry_get_default().lookup_feature(factoryname)
265
269
if factory == None:
266
log.warning("encode","%s is not a valid factoryname", factoryname)
270
log.warning("encode", "%s is not a valid factoryname", factoryname)
270
274
sinkcaps = [x.get_caps() for x in factory.get_static_pad_templates() if x.direction == gst.PAD_SINK]
271
275
for c in sinkcaps:
272
log.log("encode","sinkcaps %s", c.to_string())
276
log.log("encode", "sinkcaps %s", c.to_string())
273
277
inter = caps.intersect(c)
274
log.log("encode","intersection %s", inter.to_string())
278
log.log("encode", "intersection %s", inter.to_string())
276
280
res.append(inter)
351
358
self._factories = None
353
360
_cached_encoder_list = None
354
363
def encoderlist():
355
364
global _cached_encoder_list
356
365
if _cached_encoder_list is None:
357
366
_cached_encoder_list = CachedEncoderList()
358
367
return _cached_encoder_list
360
370
def available_muxers():
361
371
""" return all available muxers """
362
372
enclist = encoderlist()
363
373
return enclist.available_muxers()
365
376
def available_video_encoders():
366
377
""" returns all available video encoders """
367
378
enclist = encoderlist()
368
379
return enclist.available_video_encoders()
370
382
def available_audio_encoders():
371
383
""" returns all available audio encoders """
372
384
enclist = encoderlist()
373
385
return enclist.available_audio_encoders()
375
388
def encoders_muxer_compatible(encoders, muxer, muxsinkcaps=[]):
376
389
""" returns the list of encoders compatible with the given muxer """
388
402
raw_audio_caps = gst.Caps("audio/x-raw-float;audio/x-raw-int")
389
403
raw_video_caps = gst.Caps("video/x-raw-yuv;video/x-raw-rgb")
390
406
def muxer_can_sink_raw_audio(muxer):
391
407
""" Returns True if given muxer can accept raw audio """
392
408
return my_can_sink_caps(muxer, raw_audio_caps)
394
411
def muxer_can_sink_raw_video(muxer):
395
412
""" Returns True if given muxer can accept raw video """
396
413
return my_can_sink_caps(muxer, raw_video_caps)
399
416
def available_combinations():
401
417
"""Return a 3-tuple of (muxers, audio, video), where:
402
418
- muxers is a list of muxer factories
403
419
- audio is a dictionary from muxer names to compatible audio encoders