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