[ruby-gnome2-doc-cvs] [Hiki] create - tut-gst-pads-elem

Back to archive index

ruby-gnome2-hiki-pt_BR****@sourc***** ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 11日 (日) 06:05:43 JST


-------------------------
REMOTE_ADDR = 200.216.145.78
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-gst-pads-elem
-------------------------
= Pegando "Pads" de um Elemento
{{link("tut-gst-plugins", nil, "tut-gst", "tut-gst-pads-caps")}}

Como v$ByN(Bos no cap$ByU(Bulo anterior (Gst::Element), os "pads" (Gst::Pad) s$BeP(B os links dos elementos com o mundo exterior.

O tipo espec$ByG(Bico de multim$ByE(Bia que o elemento pode lidar serexposto pelos "pads". A descri$Bne(Bo desse tipo de m$ByE(Bia feita com as capacidades (Gst::Caps).

Uma vez que voctenha criado um elemento, vocpode conseguir um de seus "pads" com:

  src_pad = element.get_pad("src")

Esse m$BqU(Bodo pegaro "pad" de nome "src" do elemento fornecido.

Alternativamente, voce pode pedir uma lista de "pads" do elemento. O exemplo de c$B(Bigo a seguir imprimiros nomes de todos os "pads" de um elemento. 

  element.each_pad do |pad|
    puts "Nome do pad: " + pad.name
  end

== "Pads" Din$BeN(Bicos

Alguns elementos podem n$BeP(B ter seus "pads" quando eles s$BeP(B criados. Isso pode acontecer, por exemplo, com um sistema "demultiplexer" de MPEG2. O "demultiplexer" criarseus "pads" em tempo de execu$Bne(Bo, quando detectar os fluxos element$BaS(Bios diferentes no fluxo de sistema de MPEG2.

Ao executar (({gst-inspect mpegdemux})) sermostrado que o elemento tem apenas um "pad": um "pad" de entrada ("sink"). Os outros "pads" est$BeP(B inativos como vocpode ver nos "padtemplates" da propriedade "Existe: $B_T(B vezes" ('Exists: Sometimes').
Dependendo do tipo de arquigo de MPEG2 que voctoque, os "pads" s$BeP(B criados. N$B(B veremos que isso muito importante quando vocfor criar "pipelines" din$BcN(Bicos mais tarde neste manual.

Vocpode anexar um sinal a um elemento para informar vocquando o elemento criou um "pad" de um dos seus "padtemplates". O segmento de c$B(Bigo a seguir um exemplo de como fazer isso: 

  # Cria o "pipeline" e faz algo $B(Bil
  pipeline = Gst::Pipeline.new
  ...

  mpeg2parser = Gst::ElementFactory.make("mpegdemux")
  mpeg2parser.signal_connect("new_pad") do |parser, pad|
      puts "um novo pad #{pad.name} foi criado!"
      pipeline.pause
      if pad.name == "private_stream_1.0"
          # configura um "pipeline" decodificador de AC3
          ...

          # conecta o pad ao "pipeline" decodificador de AC3
          ...
      end
  end

  # inicia o "pipeline"
  pipeline.play
  ...

== "Request Pads"

Um elemento pode tamb$BqN(B ter "request pads". Esses "pads" n$BeP(B s$BeP(B criados automaticamente, mas s$BeP(B apenas criados sob demanda. Isso muito $B(Bil para elementos "multiplexers", agregadores ("aggregators") e "tee".

O elemento "tee", por exemplo, tem um "pad" de entrada e um "request padtemplate" para os "pads" de sa$ByE(Ba. Sempre que um elemento quiser pegar um "pad" de sa$ByE(Ba de um elemento "tee", ele tem que pedir o "pad".

O segmento de c$B(Bigo a seguir pode ser usado para pegar um "pad" de um eelemento "tee". Ap$B(B o "pad" ser pedido, ele pode ser usado para conectar um outro elemento a ele. 

  element = Gst::ElementFactory.make("tee")
  pad = element.request_pad("src%d")
  puts "novo pad: " + pad.name

O m$BqU(Bodo Gst::Element#request_pad pode ser usado para pegar um "pad" do elemento baseado no "nome do template" de "padtemplate".

tamb$Bim(B poss$Bmv(Bel pedir um "pad" que seja compat$Bmv(Bel com outro "pad template". Isso bastante $Bzt(Bil se vocquiser conectar um elemento a um elemento "multiplexer" e vocprecisa pedir um "pad" que seja compat$Bmv(Bel. O Gst::Element#get_compatible_pad usado para pedir um "pad" compat$Bmv(Bel, como mostrado no pr$Bsx(Bimo exemplo.

  element = Gst::ElementFactory.make("tee")
  mad = Gst::ElementFactory.make("mad")

  templ = mad.get_pad_template_by_name("sink")

  pad = element.get_compatible_pad(templ)
  puts "novo pad: " = pad.name





ruby-gnome2-cvs メーリングリストの案内
Back to archive index