Escolar Documentos
Profissional Documentos
Cultura Documentos
vermelho3
viso temporal
viso espacial
verde1
3 segundos
vermelho2 verde1 verde3 vermelho2 verde1 vermelho3
Figura 18.2 Vises temporal e espacial do Exemplo 18.1.
A Figura 18.3 exibe a viso estrutural do documento NCL. O primeiro
NCLua ligado aos outros por meio de um elo onBeginStart. Como o
primeiro NCLua est ligado porta de entrada do documento, os trs objetos
iniciam juntamente com a aplicao. Cada NCLua se liga por meio de um elo
onBeginStart com seu respectivo boto verde, para que eles sejam exibidos
com o incio de cada NCLua. Para esconder seu respectivo boto verde e
exibir o vermelho, cada NCLua tambm utiliza um elo onEndStopStart
com seus botes, conforme mostra a figura.
378
lua1
vermelho1 verde1
onEnd
start
stop
onBegin
start
start
pInicio
onBegin
start
lua3
vermelho3 verde3
onEnd
start
stop
start
lua2
vermelho2 verde2
onEnd
start stop
onBegin
start
onBegin
Figura 18.3 Viso estrutural do Exemplo 18..
O documento NCL responsvel por definir e iniciar os trs objetos
NCLua, assim como pela cola lgica entre cada NCLua e seus botes
correspondentes, conforme definido na Listagem 18.6.
<body>
<!-- INICIA primeiro o NCLua -->
<port id="pInicio" component="lua1"/>
<!-- MIDIAS -->
<media id="lua1" src="1.lua"/>
<media id="lua2" src="2.lua"/>
<media id="lua3" src="3.lua"/>
<media id="verde1" src="verde1.png" descriptor="ds1"/>
<media id="vermelho1" src="verm1.png" descriptor="ds1"/>
<media id="verde2" src="verde2.png" descriptor="ds2"/>
<media id="vermelho2" src="verm2.png" descriptor="ds2"/>
<media id="verde3" src="verde3.png" descriptor="ds3"/>
<media id="vermelho3" src="verm3.png" descriptor="ds3"/>
<!-- BEGIN lua1 -> START lua2/lua3 -->
<link xconnector="onBeginStart">
<bind role="onBegin" component="lua1"/>
379
<bind role="start" component="lua2"/>
<bind role="start" component="lua3"/>
</link>
<!-- BEGIN luaN -> START greenN -->
<link xconnector="onBeginStart">
<bind role="onBegin" component="lua1"/>
<bind role="start" component="verde1"/>
</link>
... <!-- Cdigo idntico para os outros NCLua -->
<!-- END luaN -> STOP greenN | START redN -->
<link xconnector="onEndStopStart">
<bind role="onEnd" component="lua1"/>
<bind role="stop" component="verde1"/>
<bind role="start" component="vermelho1"/>
</link>
... <!-- Cdigo idntico para os outros NCLua -->
</body>
Listagem 18.6 Cdigo NCL do Exemplo 18.1.
Note como neste exemplo o NCL no aciona o trmino de nenhum objeto
NCLua. Esse papel ficou a cargo de cada script NCLua, como mostrado a
seguir.
O primeiro NCLua um script vazio (sem nenhuma linha de cdigo).
Em particular, como no possui um tratador de eventos, nunca sinaliza o
seu trmino para o documento NCL. O efeito visual a exibio
permanente do primeiro boto verde.
-- 1.lua
-- vazio
Listagem 18.7 Cdigo do arquivo 1.lua do Exemplo 18.1.
O segundo NCLua registra um tratador de eventos que gera seu fim
natural ao receber um start do documento NCL. Visualmente, assim
que o segundo boto verde exibido, exibido instantaneamente o boto
vermelho correspondente (o boto verde pode nem ser visto).
380
-- 2.lua:
function tratador (evt)
if (evt.class == 'ncl') and (evt.type ==
'presentation')
and (evt.action == 'start') then
event.post {
class = 'ncl',
type = 'presentation',
action = 'stop'
}
end
end
event.register(tratador)
Listagem 18.8 Cdigo do arquivo 2.lua do Exemplo 18.1.
To logo o evento indicando seu incio recebido, o NCLua posta um
evento para sinalizar o seu fim natural.
O terceiro NCLua registra um tratador de eventos que cria um
temporizador de trs segundos que, por sua vez, gera seu fim natural ao
expirar. Como efeito visual, temos a exibio do terceiro boto verde e,
aps trs segundos, a mudana para vermelho.
-- 3.lua:
function tratador (evt)
if (evt.class == 'ncl') and
(evt.type == 'presentation') and
(evt.action == 'start') then
event.timer(3000,
function()
event.post {
class = 'ncl',
type = 'presentation',
action = 'stop'
}
end)
end
end
event.register(tratador)
Listagem 18.9 Cdigo do arquivo 3.lua do Exemplo 18.1.
O temporizador de trs segundos (3.000 milissegundos) criado assim que
o evento de incio recebido, passando a funo que deve ser executada
quando o temporizador expira. Essa funo posta um evento idntico ao do
segundo NCLua para sinalizar seu fim natural.
381
Enquanto executa indefinidamente, o primeiro NCLua no consome
recursos e pode responder a eventos (apesar de no o fazer por no possuir
um tratador para tal fim). O mesmo ocorre com o terceiro NCLua enquanto
aguarda os trs segundos para terminar.
18.3.1 Eventos em ncoras de Contedo e Propriedades
No exemplo anterior, apenas a ncora de contedo principal de cada
NCLua foi acionada. No entanto, ncoras de contedo especficas e
propriedades tambm podem ser relacionadas entre o documento NCL e o
objeto NCLua.
Dados os tipos de eventos gerados pelo formatador NCL, o campo type de
um evento da classe ncl pode assumir os valores presentation ou
attribution, conforme o atributo eventType dos conectores NCL (ver Seo
10.5). Eventos do tipo selection so tratados pela classe key.
18.3.1.1 Eventos do Tipo presentation
Eventos de apresentao esto associados apresentao de ncoras de
contedo, sendo identificadas pelo campo label do evento. O campo action
indica a ao a ser realizada ou sinalizada pelo NCLua, dependendo de ele
estar recebendo ou gerando o evento.
Um evento de apresentao possui a seguinte estrutura:
class: 'ncl'
type: 'presentation'
label: [string] rtulo da ncora associada ao evento
action: [string] pode assumir os seguintes valores: 'start',
'stop', 'abort', 'pause' e 'resume'
18.3.1.2 Eventos do Tipo attribution
Eventos de atribuio esto associados s propriedades do objeto NCLua,
sendo identificados pelo campo name.
O campo value preenchido com o valor a ser atribudo propriedade e
sempre uma string, uma vez que vem de um atributo NCL. A ao de start
em um evento de atribuio corresponde ao papel set (ou start) de um elo
NCL.
Um evento de atribuio possui a seguinte estrutura:
382
class: 'ncl'
type: 'attribution'
name: [string] nome da propriedade associada ao evento
action: [string] pode assumir os seguintes valores: 'start',
'stop', 'abort', 'pause' e 'resume'
value: [string] novo valor a ser atribudo propriedade
O campo action de um evento ncl (seja ele de apresentao ou atribuio)
pode assumir os valores correspondentes aos seus tipos, como mostrado nas
Tabelas 10.6 e 10.7. No entanto, o nome das transies na Tabela 10.6
usado sem o s final (starts vira start), de maneira a unificar a sintaxe
para eventos recebidos ou sinalizados pelo NCLua.
Exemplo 18.2 Contador de Cliques
Vamos supor uma aplicao NCL que exiba um boto Clique aqui em
quatro momentos diferentes. Se o usurio selecion-lo com o controle remoto
por pelo menos trs vezes, ao final da apresentao ser exibido o boto Voc
ganhou, caso contrrio ser exibido o boto Voc Perdeu. A Figura 18.4
mostra as vises temporal e espacial da aplicao.
temp
viso temporal
viso espacial
aqui
ganhou
OU
perdeu
area01 area02 area03 area04
aqui aqui aqui aqui
resultado
ganhou
perdeu
cliques
Figura 18.4 Vises temporal e espacial do Exemplo 18.2.
No possvel fazer a contagem de cliques puramente em NCL de forma
simples, uma vez que no h suporte a expresses aritmticas na linguagem.
Neste exemplo, usaremos um NCLua para contar e armazenar o nmero de
383
cliques em uma propriedade, que ser consultada ao final para determinar o
resultado.
O documento NCL mostrado a seguir define um temporizador (temp)
com quatro ncoras temporais (area01 at area04) durante as quais o
boto Clique aqui exibido. O temporizador tambm define uma ncora
temporal para exibir o resultado aps o boto ser exibido por quatro vezes.
Alm do temporizador e os botes, o documento define um NCLua
responsvel pela contagem dos cliques e exporta a propriedade contador
para manter esse valor. A Figura 18.5 mostra a viso estrutural da aplicao.
temp
pInicio
area02
area03
cliques
aqui
ganhou
perdeu
onEnd
stop
stop
stop
stop
resultado
and
onBegin
inc
test
contador >= 3
start
and
onBegin
start
test
contador < 3
( ... )
stop
onBegin
start
onBegin onEnd
start stop
onBegin
start
stop
onEnd
area04
contador
start
onSelection
area01
Figura 18.5 Viso estrutural do Exemplo 18.2.
A porta de entrada da aplicao o temporizador, que tambm dispara o
NCLua por meio de um elo onBeginStart. Cada ncora de exibio do
boto Clique aqui possui um elo onBeginStart e onEndStop para o
384
mesmo. Toda vez que o boto selecionado pelo usurio (o que s pode
acontecer enquanto est sendo exibido), a ncora inc do NCLua iniciada e
o boto escondido, conforme o elo onSelectionStopStart saindo do
prprio boto. O tratamento dado ncora inc e propriedade contador
especificado no cdigo do NCLua. Ao final da ncora resultado do
temporizador, dois elos testam se o valor da propriedade contador maior
ou menor que trs cliques. Dependendo do resultado, a imagem Voc ganhou
ou Voc perdeu exibida.
O documento NCL para a aplicao exibido na Listagem 18.1.
<body>
<!-- INCIO PELO TEMPORIZADOR -->
<port id="pInicio" component="temp"/>
<!-- TEMPORIZADOR -->
<media id="temp">
<!-- NCORAS PARA EXIBIR O BOTO "CLIQUE AQUI" -->
<area id="area01" begin="3s" end="6s"/>
<area id="area02" begin="10s" end="13s"/>
<area id="area03" begin="17s" end="20s"/>
<area id="area04" begin="24s" end="27s"/>
<!-- NCORA PARA EXIBIR O RESULTADO -->
<area id="resultado" begin="35s"/>
</media>
<!-- NCLua -->
<media id="cliques" src="cliques.lua">
<area id=incrementa label="inc"/>
<property name="contador"/>
</media>
<!-- "CLIQUE AQUI"/"VOC GANHOU"/"VOC PERDEU" -->
<media id="aqui" descriptor="dsBotao" src="aqui.jpg"/>
<media id="ganhou" descriptor="dsBotao" src="ganhou.jpg"/>
<media id="perdeu" descriptor="dsBotao" src="perdeu.jpg"/>
<!-- TEMPORIZADOR -> NCLua -->
<link xconnector="onBeginStart">
<bind role="onBegin" component="temp"/>
<bind role="start" component="cliques"/>
</link>
<!-- AREA[N] -> BOTO "CLIQUE AQUI" -->
<link xconnector="onBeginStart">
<bind role="onBegin" component="temp"
385
interface="area01"/>
<bind role="start" component="aqui"/>
</link>
... <!-- Cdigo idntico para as outras ncoras -->
<link xconnector="onEndStop">
<bind role="onEnd" component="temp" interface="area01"/>
<bind role="stop" component="aqui"/>
</link>
... <!-- Cdigo idntico para as outras ncoras -->
<!-- SELECT "CLIQUE AQUI" -> CLIQUES.INCREMENTA -->
<link xconnector="onSelectionStopStart">
<bind role="onSelection" component="aqui"/>
<bind role="stop" component="aqui"/>
<bind role="start" component="cliques"
interface="incrementa"/>
</link>
<!-- TESTE DO RESULTADO -->
<link xconnector="onCondGteBeginStart">
<linkParam name="var" value="3"/>
<bind role="onBegin component="temp"
interface="resultado"/>
<bind role="attNodeTest" component="cliques"
interface="contador"/>
<bind role="start" component="ganhou"/>
</link>
<link xconnector="onCondLtBeginStart">
<linkParam name="var" value="3"/>
<bind role="onBegin" component="temp"
interface="resultado"/>
<bind role="attNodeTest" component="cliques"
interface="contador"/>
<bind role="start" component="perdeu"/>
</link>
</body>
Listagem 18.10 Cdigo NCL parcial do Exemplo 18.2.
O cdigo do NCLua deve lidar em sua funo tratadora de eventos com as
duas interfaces com o documento NCL a ncora inc e a propriedade
contador. A Listagem 18.11 apresenta o cdigo do script.
386
local contador = 0
function tratador (evt)
contador = contador + 1
local evtContador = {
class = 'ncl',
type = 'attribution',
name = 'contador',
value = contador,
}
evtContador.action = 'start'
event.post(evtContador)
evtContador.action = 'stop'
event.post(evtContador)
event.post {
class = 'ncl',
type = 'presentation',
label = 'inc',
action = 'stop',
}
end
event.register(tratador,'ncl','presentation','inc','start')
Listagem 18.11 Cdigo NCLua do Exemplo 18.2.
O script comea declarando uma varivel para guardar a contagem de
cliques. A varivel no possui relao direta com a propriedade do NCLua,
de mesmo nome, definida no documento NCL. O manuseio da propriedade
feito atravs da postagem de eventos, conforme apresentado a seguir.
A funo tratador ento definida e registrada (na ltima linha do
cdigo). Os parmetros extras na chamada funo register servem para
filtrar apenas os eventos desejados; no caso, eventos ncl de incio de
apresentao da ncora inc. Quando o boto selecionado, iniciando a
ncora inc, a funo tratador executada. A funo incrementa o contador
interno e posta um evento de incio de atribuio (action='start'), para indicar
a mudana na propriedade contador.
IMPORTANTE: Note que necessrio sinalizar tambm o fim da
atribuio, fazendo com que a mquina de estados da propriedade contador
volte ao estado sleeping e futuras atribuies surtam efeito. Pelo mesmo
motivo, necessrio sinalizar o trmino da ncora inc, postando o evento
de stop da apresentao, no fim da funo.
O NCLua no tem como saber o momento exato em que a propriedade
contador ser consultada pelo documento NCL por isso, sempre que
incrementa o valor, tambm atualiza a propriedade.
387
Neste ponto, uma releitura do exemplo O Primeiro Joo, da Seo 3.12,
pode ser til para firmar os conceitos discutidos at aqui neste captulo.
18.4 Desenhando na Regio do Objeto
Quando um NCLua carregado, o formatador NCL cria um objeto grfico
para representar a regio associada mdia NCLua no documento. Esse
objeto grfico pr-carregado na varivel global canvas do script, e
atravs dela que todas as operaes grficas so efetuadas. Caso o objeto de
mdia NCLua no esteja associado a nenhuma regio, o valor do canvas
ser igual a nil.
Como exemplo (Listagem 18.12), caso a regio a seguir esteja associada ao
objeto NCLua, a varivel canvas do script ir represent-la, com tamanho
300100 e posicionada em (20,200).
<region id="luaRegion" width="300" height="100"
top="200" left="20"/>
Listagem 18.12 Cdigo NCL de uma regio a ser associada com um objeto NCLua
Existem diversas operaes grficas suportadas pelo mdulo de canvas,
tais como desenho de linhas, textos e imagens. A lista completa de operaes
pode ser consultada no Captulo 10 da NBR 15606-2 [ABNT, 2011]. O
exemplo a seguir cria um novo canvas representando a imagem passada,
desenhando-a centralizada na regio e acompanhada de uma legenda. A
Figura 18.6 exibe o resultado visual da execuo do script da Listagem 18.3.
Figura 18.6 Resultado da execuo do script da Listagem 18.13.
388
local regLarg, regAlt = canvas:attrSize()
local img = canvas:new('ginga.png')
local imgLarg, imgAlt = img:attrSize()
local imgX = (regLarg - imgLarg) / 2
local imgY = (regAlt - imgAlt) / 2
canvas:compose(imgX, imgY, img)
local txt = 'TV Digital se faz com Ginga'
local txtLarg, txtAlt = canvas:measureText(txt)
local txtX = (regLarg - txtLarg) / 2
local txtY = imgY + imgAlt + 2
canvas:attrColor('white')
canvas:drawText(txtX, txtY, txt)
canvas:flush()
Listagem 18.13 Script ilustrando o uso do canvas.
O script da Listagem 18.13 comea guardando as dimenses da regio
inteira do NCLua nas variveis regLarg e regAlt com a chamada funo
canvas:attrSize(), que retorna a largura e a altura do canvas. Em seguida,
o mtodo canvas:new() recebe uma imagem e retorna um novo canvas,
img, que a representa. As dimenses da imagem so ento recuperadas e
utilizadas para calcular a posio centralizada na qual a imagem desenhada
na regio (imgX e imgY). A chamada canvas:compose(imgX,imgY,img)
sobrepe a imagem do Ginga regio do NCLua na posio informada.
4
Para desenhar a legenda do texto, primeiramente medido o tamanho que o
texto ocupa no canvas, com a chamada canvas:measureText(). A
posio horizontal centralizada do texto calculada de maneira similar da
imagem. J sua posio vertical calculada para um pouco abaixo da
imagem. Por fim, a chamada a canvas:attrColor('white') altera o
atributo de cor para branco, em futuras operaes sobre o canvas, para ento
desenhar o texto na posio calculada. Apenas com a chamada funo
canvas:flush() as operaes grficas descritas so de fato efetuadas.
Como se pode deduzir ao observar o exemplo, um objeto canvas guarda
em seu estado diversos atributos sob os quais as primitivas grficas devem
operar. Os atributos so acessados atravs de mtodos de prefixo attr
4
As coordenadas passadas para todos os mtodos grficos so sempre relativas ao ponto mais
esquerda e no topo do canvas (0,0), como comum entre sistemas grficos.
389
acompanhado do nome do atributo (por exemplo, attrColor), e servem tanto
para leitura, quando chamados sem parmetros (como o caso da chamada a
attrSize()), como para escrita, quando chamados com os novos parmetros
(como o caso da chamada a attrColor('white')).
Como mencionamos, a referncia completa do mdulo canvas, com todos
os atributos e operaes grficas suportados, pode ser encontrada no Captulo
10 da NBR 15606-2 [ABNT, 2011].
Exemplo 18.3 Grficos e Controle Remoto
Este exemplo apresenta um jogo bastante simples, no qual so exibidos os
logotipos das linguagens Lua e NCL. O usurio deve mover com o controle
remoto o logotipo de Lua at o de NCL, quando exibida uma imagem
indicando o fim do jogo. O exemplo explora os eventos da classe key e o
pacote grfico canvas. A Figura 18.7 mostra as vises temporal e espacial da
aplicao.
lua
lua
viso temporal
viso espacial
ganhou
tempo do movimento que o usurio
faz do logotipo NCL
lua
chegou
ganhou
Figura 18.7 Vises temporal e espacial do Exemplo 18.3.
O documento NCL possui como mdias apenas o objeto NCLua (lua)
com o jogo e a imagem Voc ganhou (ganhou), que exibida quando o
logotipo de Lua encontra o de NCL (acontecimento representado pela ncora
chegou do NCLua). O jogo inicia assim que o documento carregado. A
Figura 18.18 mostra a viso estrutural da aplicao.
390
lua
ganhou
chegou
pInicio
onBegin start
Figura 18.8 Viso estrutural do Exemplo 18.3.
O cdigo NCL bem simples, como definido na Listagem 18.14. Note
que a aplicao NCL propositalmente no tem fim, para manter sua
simplicidade.
<body>
<port id="pInicio" component="lua"/>
<media id="lua" src="jogo.lua" descriptor="dsLua">
<area id="chegou" label=chegou/>
</media>
<media id="ganhou" src="ganhou.jpg"
descriptor="dsGanhou"/>
<link xconnector="onBeginStart">
<bind role="onBegin" component="lua" interface="ganhou"/>
<bind role="start" component="ganhou"/>
</link>
</body>
Listagem 18.14 Cdigo NCL do Exemplo 18.3.
Nos exemplos anteriores, o cdigo da aplicao estava concentrado no
documento NCL; agora praticamente todo o cdigo est dentro do NCLua. As
primeiras linhas do cdigo NCLua criam duas tabelas para representar os
logotipos de Lua e NCL (Listagem 18.15).
local img = canvas:new('lua.png')
local larg, alt = img:attrSize()
local logoLua = { canvas=img, x=10,y=10, larg=larg,alt=alt }
local img = canvas:new('ncl.png')
local larg, alt = img:attrSize()
local logoNcl = { canvas=img, x=10,y=10, larg=larg,alt=alt }
Listagem 18.15 Primeira parte do cdigo NCLua do Exemplo 18.3.
391
Conforme a Listagem 18.15, o logotipo de Lua representado pela tabela
logoLua, guardando o canvas com a imagem lua.png, as coordenadas x e y
onde ela deve ser desenhada, e sua largura e altura. A tabela logoNcl guarda
os mesmos atributos (mas para a imagem ncl.png) para representar o logotipo
de NCL.
A Listagem 18.16 define a funo de redesenho da tela, chamada durante a
execuo do NCLua toda vez que o usurio movimenta o logotipo de Lua.
Sempre que chamada, a funo redraw desenha um retngulo preto ocupando
a regio inteira (para limp-la) e em seguida compe os canvas das duas
tabelas logoNcl e logoLua, sobre o canvas principal, em suas posies
correntes.
function redraw ()
canvas:attrColor('black')
canvas:drawRect('fill', 0,0, canvas:attrSize())
canvas:compose(logoNcl.x, logoNcl.y, logoNcl.canvas)
canvas:compose(logoLua.x, logoLua.y, logoLua.canvas)
canvas:flush()
end
Listagem 18.16 Segunda parte do cdigo NCLua do Exemplo 18.3.
Por fim, a Listagem 18.17 define a funo tratadora de eventos,
responsvel por tratar as teclas do controle remoto e por sinalizar, ao
documento NCL, o momento em que os logotipos se sobrepem.
function tratador (evt)
-- apenas eventos de tecla interessam
if evt.class == 'key' and evt.type == 'press'
then
-- apenas as setas que movem o logotipo Lua
interessam
if evt.key == 'CURSOR_UP' then
logoLua.y = logoLua.y - 10
elseif evt.key == 'CURSOR_DOWN' then
logoLua.y = logoLua.y + 10
elseif evt.key == 'CURSOR_LEFT' then
logoLua.x = logoLua.x - 10
elseif evt.key == 'CURSOR_RIGHT' then
logoLua.x = logoLua.x + 10
end
-- testa se os logotipos esto sobrepostos
if sobrepondo(logoLua, logoNcl) then
-- sinaliza que a ancora "chegou" esta ocorrendo
392
event.post {
class = 'ncl',
type = 'presentation',
label = 'chegou',
action = 'start',
}
end
redraw() -- redesenha a tela inteira
end
end
event.register(tratador)
Listagem 18.17 Terceira parte do cdigo NCLua do Exemplo 18.3.
Na Listagem 18.17, o script inicia testando se alguma das teclas direcionais
foi pressionada (campo key do evento de tecla), alterando a posio do
logotipo de Lua de acordo com a tecla. Caso os logotipos estejam se
sobrepondo, postado o evento para sinalizar que a ncora chegou iniciou.
A funo sobrepondo foi omitida sem prejuzo do entendimento. Por fim, a
tela redesenhada, qualquer que seja a tecla que tenha sido pressionada.
Em um evento da classe key, o valor da tecla uma string, guardada no
campo key. O campo type pode ser press ou release, dependendo de a
tecla ter sido pressionada ou solta.
18.4.1 Programando com Animaes
Imaginemos agora que o logotipo de Lua fosse movimentado com o passar
do tempo, como em uma animao, em vez de ser guiado pelo controle
remoto. Ao receber a instruo de start, o trecho hipottico da Listagem
18.18 atualiza a posio do logotipo a cada 30 milissegundos, at que sua
posio chegue a 100.
function tratador (evt)
if evt.action == 'start' then
while logoLua.x < 100 do
logoLua.x = logoLua.x + 5
redraw()
sleep(30)
end
end
end
event.register(tratador, 'ncl', 'presentation')
Listagem 18.18 Exemplo (ruim) de animao em NCLua.
393
O problema com esse cdigo que a chamada funo sleep bloqueia o
tratador, no permitindo que outros eventos sejam processados, inviabilizando
essa proposta.
Uma possvel soluo seria criar uma funo de update a ser chamada a
cada 30 milissegundos por um temporizador (Listagem 18.19).
function update ()
logoLua.x = logoLua.x + 5
redraw()
if logoLua.x < 100 then
event.timer(update, 30)
end
end
function tratador (evt)
if evt.action == 'start' then
update()
end
end
event.register(tratador, 'ncl', 'presentation')
Listagem 18.19 Exemplo de animao em NCLua que utiliza um temporizador.
Pela listagem anterior, ao ser chamado, o tratador ativa a funo update,
que atualiza a posio do logotipo de Lua, chama a funo de redesenho e,
caso o logotipo ainda no tenha alcanado a posio 100, se programa para
ser chamado novamente aps 30 milissegundos de espera.
Essa soluo no to legvel quanto um loop localizado, mas mantm o
NCLua reativo a possveis eventos que possam chegar durante os 30
milissegundos.
18.4.2 Corrotinas de Lua
O mecanismo de corrotinas de Lua simplifica muito a programao de
aplicaes em que muitos objetos interagem e devem estar permanentemente
sincronizados.
Apesar de serem comumente comparadas a threads, as corrotinas so,
na verdade, muito mais prximas do conceito comum de funo (ou rotina).
Da mesma forma que as funes, chamadas a corrotinas so sncronas, isto ,
o cdigo que chama uma corrotina sempre aguarda o seu retorno. No entanto,
uma corrotina pode explicitamente suspender sua prpria execuo,
preservando o seu estado corrente (isto , variveis locais, contador de
instrues), antes do seu trmino completo. Ao se suspender, uma corrotina
retorna imediatamente o controle a quem a chamou. Nesse caso, a corrotina
394
pode, a partir de outro trecho do cdigo, ter sua execuo continuada do
ponto onde parou, executando at o seu trmino ou nova suspenso. Note que
uma corrotina que no se suspende antes de terminar exatamente uma rotina
comum.
O uso de corrotinas em Lua feito atravs das seguintes primitivas:
- coroutine.create (f): retorna uma nova corrotina a partir da funo
passada como parmetro. Cria os meios pelos quais o estado de uma
corrotina preservado entre suspenses
- coroutine.resume (co): recomea a execuo da corrotina do ponto onde
parou. Tambm serve para iniciar a corrotina
- coroutine.yield (): suspende a execuo da corrotina em execuo
- coroutine.status (co): retorna o estado da corrotina passada, que pode ser
running, suspended, normal ou dead
Voltando ao exemplo da animao do logotipo de Lua, agora podemos
usar o loop problemtico da Listagem 18.18, bastando coloc-lo dentro de
uma corrotina e trocando a chamada sleep() por coroutine.yield() (Listagem
18.20).
function animaLogoLua ()
while lua.x < 100 do
lua.x = lua.x + 5
redraw()
coroutine.yield() -- sleep(30)
end
end
coAnimaLogoLua = coroutine.create(animaLogoLua)
function update ()
coroutine.resume(coAnimaLogoLua)
if coroutine.status(coAnimaLogoLua) ~= 'dead' then
event.timer(30, update)
end
end
function tratador (evt)
if evt.action == 'start' then
update()
end
end
event.register(tratador, 'ncl', 'presentation')
Listagem 18.20 Exemplo de uso de corrotinas para realizar uma animao.
395
Na listagem, a funo update acorda a corrotina a cada 30
milissegundos at que ela termine, o que acontece quando o logotipo chega
posio 100 quando o loop encerrado.
O uso de corrotinas simula a execuo sequencial de cdigo em
situaes em que, na verdade, uma entidade externa aplicao controla sua
execuo (o temporizador, no exemplo apresentado).
possvel, ainda, trocar valores entre chamadas e suspenses de
corrotinas, analogamente passagem de parmetros de funes. Para uma
descrio mais detalhada do suporte a corrotinas de Lua, o manual da
linguagem deve ser consultado [Ierusalimschy et al., 2006].
Exemplo 18.4 Corrida de Cavalos (Parte I)
Imaginemos a simulao de uma corrida de cavalos. Neste exemplo, a
primeira parte da simulao, o script para a animao de apenas um cavalo,
criado. A segunda parte, apresentada no Exemplo 18.5, resa esse script na
definio de todos os cavalos.
A Figura 18.9 apresenta uma tira de imagens, com o cavalo em diversas
posies. A cada intervalo de tempo, uma imagem diferente do cavalo ser
mostrada na tela, dando uma sensao de realidade animao.
Figura 18.9 Imagem dos cavalos do Exemplo 18.4.
A tabela representando o cavalo um pouco diferente da usada para
representar os logotipos do exemplo anterior (Listagem 18.21).
local img = canvas:new('cavalo.png')
local larg, alt = img:attrSize()
local cavalo = { canvas=img, quadro=0,
larg=larg/5, alt=alt }
Listagem 18.21 Tabela representando os cavalos
A largura do cavalo igual largura da imagem dividida pelo nmero de
quadros da tira. Alm disso, a tabela tambm guarda o quadro a ser exibido,
que varia durante a animao.
A funo de redesenho deve exibir apenas a parte da imagem dos cavalos
que representa o quadro corrente. A funo compose aceita parmetros extras
para indicar que regio do canvas de origem (cavalo.img) deve ser composta.
396
Os parmetros so as posies x,y da origem e a largura e altura a partir
desse ponto (Listagem 18.22).
function redraw ()
canvas:attrColor('black')
canvas:drawRect('fill', 0,0, canvas:attrSize())
canvas:compose( cavalo.x, cavalo.y, cavalo.canvas,
cavalo.quadro*cavalo.larg,0,
cavalo.larg,cavalo.alt) )
canvas:flush()
end
Listagem 18.22 Funo de redesenho
Para animar o cavalo, usaremos uma corrotina, como no exemplo anterior
(Listagem 18.23).
function animaCavalo ()
local partida = 10 -- posio da linha de partida
local chegada = 500 -- posio da linha de chegada
local mudaQuadro = 20 -- muda de quadro a cada 20px
cavalo.x = partida
while cavalo.x < chegada do
coroutine.yield()
local deslocamento = 3 + math.random(1,3)
cavalo.x = cavalo.x + deslocamento
mudaQuadro = mudaQuadro deslocamento
if mudaQuadro < 0 then
quadro = (quadro + 1) % 6
mudaQuadro = 20
end
redraw()
end
end
coAnimaCavalo = coroutine.create(animaCavalo)
Listagem 18.23 Corrotina para animao dos cavalos
O deslocamento do cavalo, a cada 30 milissegundos, varia de 3 a 6 pixels,
de acordo com a chamada funo math.random, para que a aplicao tenha
alguma imprevisibilidade. O cdigo para a funo update e o tratador de
eventos so iguais aos do exemplo anterior, bastando trocar o nome da
corrotina de animao.
Novamente, o uso de uma corrotina permite que o cdigo do cavalo seja
escrito sequencialmente, facilitando o desenvolvimento e o entendimento do
mesmo.
397
18.5 Reso de Cdigo Lua
Conforme mencionado por diversas vezes, um documento NCL no contm
cdigo Lua diretamente, mas referencia um objeto contendo o cdigo Lua.
Isso cria dois ambientes isolados de programao e tambm permite que um
mesmo cdigo Lua possa ser reusado em diversos objetos de mdia NCL.
Para tornar ainda mais verstil essa abordagem, elos de atribuio em NCL
podem ser usados para informar parmetros a scripts Lua. ncoras em
objetos de mdia NCLua permitem tanto que o cdigo Lua sirva como
condio para o disparo de elos quanto permitem que o cdigo Lua trate
aes provenientes de elos, como j vimos.
O reso de cdigo Lua permite, por exemplo, que se definam componentes
grficos (ou widgets), tais como caixas de texto ou painis de opo, uma
nica vez. Cada componente grfico poderia ser reusado e parametrizado em
documentos NCL como um objeto de mdia orquestrado, tal como qualquer
outro objeto de mdia.
Exemplo 18.5 Corrida de Cavalos (Parte II)
Este exemplo estende o Exemplo 18.4 para ilustrar uma corrida entre
cavalos. O mesmo script NCLua, responsvel pela animao de um nico
cavalo, reusado na especificao de quatro objetos de mdia, demonstrando
o uso de NCL como um orquestrador entre objetos de cdigo imperativo de
igual contedo.
A Figura 18.10 apresenta a viso estrutural do exemplo. O objeto de mdia
cavalo1 a porta de incio da exibio do documento. Quando cavalo1
iniciado, os outros objetos de mdia cavalo2, cavalo3 e cavalo4
tambm so iniciados. Os quatro objetos de mdia referenciam o mesmo
arquivo de extenso .lua.
cavalo1
cavalo2
pInicio
cavalo3
onBegin
start
start
cavalo4
start
Figura 18.10 Viso Estrutural do Exemplo 18.5.
398
A Figura 18.11 ilustra as vises temporal e espacial do exemplo. Na viso
temporal, as quatro animaes em NCLua aparecem com o mesmo tempo
total de exibio, por simplificao. Na prtica, conforme explicado no
Exemplo 18.4, o tempo total de cada animao imprevisvel, j que cada
cavalo possui um fator de deslocamento que varia de 4 a 6 pixels a cada 30
milissegundos.
viso temporal
viso espacial
cavalo1
cavalo2
cavalo3
cavalo4
cavalo1
cavalo2
cavalo3
cavalo4
Figura 18.11 Vises temporal e espacial do Exemplo 18.5.
Exemplo 18.6 Passagem de Valores
Esta seo apresenta uma aplicao que ilustra o reso de cdigo Lua em
documentos NCL e a passagem de valores de propriedades entre objetos
NCLua.
Quando inicia a aplicao, um campo de entrada e dois campos de sada
so exibidos na tela. Enquanto o usurio preenche o campo de entrada, o
primeiro campo de sada automaticamente atualizado com o texto que vai
sendo digitado. Apenas quando o usurio encerra a digitao por meio do
boto OK do controle remoto ou atravs do ENTER no teclado alfanumrico,
o texto digitado at o momento copiado para o segundo campo de sada.
A Figura 18.12 ilustra a viso estrutural deste exemplo. O objeto NCLua
entrada disparado no incio do documento, o que faz iniciar tambm os
outros dois objetos NCLua saida1 e saida2. O foco para a digitao
inicia no campo de entrada onde a propriedade texto armazena o valor
atual digitado pelo usurio. A cada mudana no valor da propriedade texto,
399
seu valor copiado para a propriedade texto do objeto saida1, o que
atualiza o que exibido pelo primeiro campo de sada. Por outro lado, apenas
quando a ncora selecao do objeto entrada iniciada, seu valor
copiado para a propriedade texto do objeto saida2.
entrada
saida1
selecao
onBeginSet
set
output2.texto = input.texto
pInicio
saida2
onBeginStart
start
start
onEndAttributionSet
texto
set
saida1.texto = entrada.texto
Figura 18.12 Viso estrutural do Exemplo 18.5.
Os campos de entrada e sada so implementados em dois scripts Lua
diferentes. Ambos os cdigos tratam a propriedade texto mantendo-a com o
texto visualizado. No caso do campo de entrada, a propriedade texto
controlada pelo prprio NCLua e alterada toda vez que uma nova tecla
pressionada. No caso do campo de sada, a propriedade texto deve ser
controlada pelo documento NCL, atravs de elos de atribuio.
Neste exemplo, os objetos NCLua podem ser vistos como caixas-pretas,
no importando o contedo dos arquivos .lua. Para o autor do documento
NCL basta saber a interface que cada um dos NCLua oferece com suas
propriedades texto e a ncora selecao, especificamente no campo de
entrada. Dessa forma, os arquivos .lua podem ser reusados em outras
aplicaes.
O campo de entrada representado em NCL pelo cdigo na Listagem
18.24.
<media id="entrada" src="input.lua" descriptor="dsInput">
<area id="selecao" label=sel/>
<property name="texto"/>
</media>
Listagem 18.24 Elemento <media> para a entrada
O objeto possui a ncora selecao, que iniciada sempre que o usurio
pressiona OK no controle remoto ou ENTER no teclado alfanumrico.
400
Os campos de sada so representados com o cdigo da Listagem 18. 25.
<media id="saida1" src="output.lua" descriptor="dsOutput1">
<property name="texto"/>
</media>
<media id="saida2" src="output.lua" descriptor="dsOutput2">
<property name="texto"/>
</media>
Listagem 18.25 Elementos <media> para as sadas
A parte mais importante do documento a que contm os elos responsveis
por copiar o contedo do campo de entrada para os campos de sada.
O primeiro campo de sada atualizado sempre que a propriedade texto
do campo de entrada alterada (Listagem 18.26).
<link xconnector="onEndAttributionSet">
<bind role="onEndAttribution" component="entrada"
interface="texto"/>
<bind role="set" component="saida1" interface="texto">
<bindParam name="var" value="$get"/>
</bind>
<bind role="get" component="entrada" interface="texto"/>
</link>
Listagem 18.26 Relacionando o campo de entrada e o primeiro campo de sada
A associao com o papel get, definido no prprio elo, permite consultar
o valor de uma propriedade de qualquer objeto, guardando-o na varivel
$get. No exemplo, a propriedade consultada texto do objeto entrada.
A varivel $get, por sua vez, utilizada na associao com o papel de
atribuio set, fazendo com que o valor da entrada seja copiado para a
propriedade texto do objeto saida1.
O segundo campo de sada atualizado somente quando a ncora
selecao do objeto de entrada iniciada (Listagem 18.27).
<link xconnector="onBeginSet">
<bind role="onBegin" component="entrada"
interface="selecao"/>
<bind role="set" component="saida2" interface="texto">
<bindParam name="var" value="$get"/>
</bind>
<bind role="get" component="entrada" interface="texto"/>
</link>
Listagem 18.27 Relacionando o campo de entrada e o segundo campo de sada
401
O mesmo mecanismo de cpia de valores de uma propriedade para outra
tambm usado para a cpia do valor digitado no campo de entrada para o
segundo campo de sada.
Bibliografia
ABNT, NBR 15606-2, 2011. Associao Brasileira de Normas Tcnicas,
Televiso digital terrestre Codificao de dados e especificaes de
transmisso para radiodifuso digital, Parte 2: Ginga-NCL para receptores
fixos e mveis Linguagem de aplicao XML para codificao de
aplicaes, Sistema Brasileiro de TV Digital Terrestre, NBR 15606-2.
Ierusalimschy, R.; Figueiredo, L.H.; Celes, Waldemar. Lua 5.1 Reference
Manual. Lua.org, Agosto de 2006. ISBN 85-903798-3-3.
ITU-T, H.761, 2011. Nested Context Language (NCL) and Ginga-NCL for
IPTV. ITU-T Rec. H.761.
SantAnna F.; Soares Neto, C.S.; Barbosa, S.D.J. Aplicaes
Declarativas NCL com Objetos NCLua Imperativos Embutidos.
Monografias em Cincia da Computao do Departamento de Informtica,
PUC-Rio, N. 17/09. Rio de Janeiro, junho de 2009. ISSN 0103-9741.
Soares, L.F.G.; SantAnna, F.F; Cerqueira, R. (2008). Nested Context
Language 3.0 Part 10 Imperative Objects in NCL: The NCLua
Scripting Language. Monografias em Cincia da Computao do
Departamento de Informtica, PUC-Rio, N. 02/08. Rio de Janeiro, janeiro
de 2008. ISSN 0103-9741.
Soares, L.F.G.; Moreno, M.F.; SantAnna (2009). Relating Declarative and
Imperative Objects through the NCL Glue Language. Proceedings of the
ACM Symposium on Document Engineering. Munique, setembro de 2009
402
Apndices
403
Apndice A
Codificao Digital
na Comunicao de
Dados Multimdia
A digitalizao presenciada nos sistemas de telecomunicao, em
paralelo aos avanos que a tecnologia digital j estava proporcionando aos
sistemas computacionais, motivou, nos anos 1990, a idia de que a
convergncia dessas duas reas traria benefcios incomparveis. A evoluo
tecnolgica tornou possvel o desenvolvimento de sistemas para
processamento e comunicao de informaes representadas pela integrao
de vrias mdias: texto, udio, vdeo etc. O efeito da convergncia sobre os
usurios , entretanto, menos tecnolgico e mais prtico. O que se percebe, ao
longo desse processo, a crescente disponibilidade de um conjunto de
servios totalmente integrados, oferecidos de forma padronizada, de fcil
acesso e a preos baixos, alm da introduo de servios, chamados de valor
adicionado, que se juntam a um servio principal complementando-o de forma
a agregar valor e gerar mais interesse por parte do consumidor.
A mistura de diferentes tipos de mdia em sistemas integrados de
transmisso de informao decorrente da convergncia digital exige novas
formas para a codificao eficiente dos dados. Neste captulo, apresentaremos
os principais conceitos envolvidos na codificao digital dessas informaes e
na sua comunicao.
404
A.1 Informao e Sinal
Os seres humanos adquirem informao atravs de seus sentidos: viso,
audio, tato, olfato e paladar. Esses sentidos so denominados mdias
1
de
percepo. As informaes adquiridas so ento codificadas em estruturas de
dados que denominamos mdias de representao, ou simplificadamente
mdias. So exemplos de mdias de representao as mdias texto, grfico,
udio e vdeo. Note que no existe uma correspondncia biunvoca entre as
mdias de percepo e de representao e que ainda , no mnimo, pouco
usual a utilizao de mdias representando informaes adquiridas pelo olfato,
tato e paladar, embora j existam estudos nesse sentido.
Podemos definir [Soares et al., 1995] sinais como ondas que se
propagam atravs de algum meio fsico, possuindo, por exemplo, uma
amplitude que varia ao longo do tempo, correspondendo codificao da
informao transmitida. Um sinal pode ser distorcido durante sua
transmisso, por ele ter em suas componentes de frequncia atenuaes
diferentes devido a limitaes do meio de transmisso. provvel tambm
termos perda ou deformao de parte do sinal por rudos, como tambm
discutido em Soares et al. (1995). Ao transmitir informaes esperamos, no
entanto, preservar seu significado e recuperar seu entendimento.
Podemos, ento, introduzir informalmente o conceito de qualidade de
sinal e qualidade da informao transmitida, atravs de um exemplo. Um
vdeo transmitido a 30 quadros por segundo (padro de TV), certamente tem
uma qualidade de sinal melhor do que se fosse transmitido a 10 quadros por
segundo (imagine, por exemplo, que a cada trs quadros dois so perdidos).
Se estivssemos filmando uma paisagem sem qualquer movimento, a
qualidade da informao transmitida seria, entretanto, a mesma (nesse caso
extremo bastaria at mesmo a transmisso de um nico quadro),
independentemente do sinal recebido. Se, no entanto, o vdeo tivesse muito
movimento, a qualidade da informao transmitida no seria boa a 10
quadros por segundo e a sensao obtida seria a de vrias imagens com
movimentos bruscos, sem naturalidade.
Do exemplo anterior, podemos notar que um sinal pode carregar muita
informao redundante. Tcnicas para reduo dessa redundncia,
denominadas tcnicas de compresso e de compactao, so usualmente
empregadas. Sobre elas teremos muito o que discutir ao longo deste apndice.
Vamos, no entanto, primeiramente, aprofundar um pouco mais a discusso
sobre informaes e sinais, analgicos e digitais.
1
Em portugus, mdia vem da palavra latina medius (de onde derivou a palavra anglo-saxnica
medium), e seu plural mdias (correspondendo palavra anglo-saxnica media).
405
Inicialmente, os computadores estavam restritos ao processamento e
comunicao de dois tipos de dados letras e nmeros. Cdigos para
nmeros (binrios, BCD, ponto flutuante IEEE etc.) esto hoje padronizados
e estabilizados. Cdigos para caracteres alfanumricos (ASCII, EBCDIC
etc.) so tambm amplamente aceitos. Enfim, a mdia textual hoje
razoavelmente bem entendida como codificao digital.
A mdia grfica foi a segunda mdia a ganhar representao nos
computadores digitais. Ela possui dois formatos: o vetorial e o matricial. O
formato vetorial bastante utilizado em modelagem geomtrica e nele as
figuras so representadas por um conjunto de segmentos de reta ou curvas,
dados pelas coordenadas de seus pontos e pelos atributos das linhas que os
unem. Imagens no formato matricial so usualmente chamadas de imagens
estticas. Nesse formato, as imagens so divididas em pequenas regies,
chamadas de elementos de fotografia, ou pixels (picture elements, algumas
vezes tambm chamados de pels). Para cada uma dessas regies guarda-se
sua informao codificada de cor. Quanto maior o nmero de bits para
codificar a cor, mais cores pode-se codificar e mais prximo pode-se chegar
da cor original. Temos, assim, uma matriz de M linhas e N colunas, onde
cada elemento representa um dos MxN pixels que compem a imagem. Na
reproduo da imagem, os pixels so reconstrudos utilizando-se a informao
de cor armazenada na matriz. Quanto menor for o tamanho do pixel, mais fiel
ser sua colorao com relao original, mas maior ser a matriz da
imagem. Ao tamanho da matriz d-se o nome de resoluo geomtrica da
imagem. A quantidade de bits utilizados para armazenar a cor de um pixel
chama-se resoluo de cor da imagem.
Informaes capturadas nas mdias textual e grfica so originalmente
digitais. Por isso, muitas vezes essas mdias so referidas como mdias
discretas. J informaes geradas por fontes sonoras e de vdeo apresentam
variaes contnuas de amplitude, constituindo o tipo de informao que
comumente percebida pelos sentidos humanos atravs de sinais que
denominamos analgicos. Devido a isso, as mdias de vdeo e udio so
usualmente referidas como mdias contnuas.
importante que se entenda que qualquer tipo de informao (seja
analgica ou digital) pode ser codificada em uma estrutura de dados (mdia de
representao) digital, e essa codificao digital pode ser transmitida em um
sinal analgico ou digital, como veremos.
A codificao digital de informaes tem, em geral, vantagens em uma
comunicao. Isso se deve, principalmente, possibilidade de podermos
restaurar, no receptor, a informao codificada original, mesmo na presena
de distores, falhas ou rudos no sistema de transmisso.
406
A.2 Converso de Sinais
Para utilizarmos as vantagens da codificao digital, devemos
transformar as mdias contnuas de udio e vdeo, normalmente adquiridas
atravs de sinais analgicos. A essa transformao chamamos de converso
analgica digital, ou converso A/D.
Uma vez processados e transmitidos, os sinais digitais
2
podem ter de ser
transformados em analgicos para percepo pelos sentidos humanos. A essa
transformao chamamos de converso digital analgica, ou simplesmente
converso D/A.
A.2.1 Converso A/D
O teorema de Nyquist [Soares et al., 1995] assegura que uma taxa de
amostragem de 2W vezes por segundo o suficiente para recuperar um sinal
com largura de banda de W Hz. Isso quer dizer que, de um sinal analgico,
basta guardar os valores das amplitudes de suas amostras tomadas a
intervalos regulares de 1/2W segundos para que se possa ter toda a
informao necessria para reconstru-lo integralmente. O processo de
amostrar e guardar os valores dessas amostras, ilustrado na Figura A.1,
conhecido como Pulse Amplitude Modulation (PAM).
t
t
t 0
1
2
3
4
5
6
7
3,0
4,6
6,9
5,1
6,5
2,8
1,0
011 101 111 101 110 011 001
Sinal Original
Pulsos PAM
Quantizao
Sada PCM 011101111101110011001
Figura A.1 Pulsos PAM e PCM.
2
Um sinal digital pode ser transformado em sinal analgico, para transmisso em um dado meio,
tambm pelo processo de modulao, comentado no Captulo1.
407
A partir dos pulsos PAM, podemos produzir os pulsos PCM (Pulse
Code Modulation) atravs de um processo conhecido como quantizao, em
que cada amostra PAM aproximada a um inteiro de n bits. No exemplo da
Figura A.1, escolhemos n = 3, dando origem a oito nveis (2
3
) de
quantizao. A sada PCM corresponde ao resultado dessa quantizao.
Podemos calcular, a partir desse processo, denominado converso A/D,
a taxa gerada pela transmisso de informao analgica atravs de sinais
digitais.
3
Considere o caso de sinais de voz, por exemplo. Se assumirmos que
a banda passante necessria desses sinais tem largura igual a 3.100 Hz, a
taxa de amostragem de Nyquist , nesse caso, igual a 6.200 amostras por
segundo. Normalmente, amostra-se a uma taxa maior, para facilitar a
construo dos codecs (codificadores/decodificadores). Se escolhermos uma
taxa de 8.000 amostras por segundo e codificarmos cada amostra com oito
bits, a taxa gerada ser 8.000 8 = 64 Kbps, que a taxa definida pelo
padro ITU-T G.711 [ITU-T G.711, 1988] para telefonia digital.
A Figura A.1 ilustra o caso em que os nveis de quantizao so
igualmente espaados, ou seja, o quantum AQ (diferena entre nveis)
constante. Como consequncia, o erro mximo de quantizao dado por
AQ/2. Chamamos esse caso de quantizao linear. Nele, as amostras
pequenas so, em termos proporcionais, mais penalizadas pelo erro de
quantizao do que as grandes.
Para melhorar a qualidade do sinal amostrado, podemos usar uma
quantizao logartmica, onde o sinal primeiro transformado,
logaritmicamente, de forma a manter o erro mximo de quantizao
aproximadamente constante, a despeito da amplitude da amostra. Vrias
funes logartmicas foram propostas e estudadas com esse intento. Duas
dessas funes so largamente utilizadas e padronizadas, sendo denominadas
lei A e lei (Figura A.2). A primeira mais utilizada na Europa, enquanto a
segunda predomina nos Estados Unidos.
3
Neste apndice, consideraremos sempre o sinal digital gerado a partir de uma informao codificada
digitalmente com um bit por intervalo de sinalizao, ou seja, um sinal onde sua taxa em bauds a mesma
que sua taxa em bits por segundo [Soares et al., 1995].
408
Figura A.2: Lei A e lei .
A Tabela A.1 apresenta o resultado da converso A/D de alguns sinais
de udio e vdeo.
Tabela A.1 Converso A/D para alguns sinais de udio e vdeo
Sinais Faixa
Passante
Frequncia de
Amostragem
Codificao
Bits/Amostra (b/a)
Taxa de
Bits
Voz
(ITU-T G711)
3003.400 Hz 8.000 Hz Log PCM (8b/a) 64 Kbps
Qualidade CD
(estreo)
0 21 KHz 44,1 KHz Log PCM (16 b/a
por canal)
1,41 Mbps
(2 720,6
Kbps)
Vdeo (NTSC -
luminncia)
04,2 MHz 10 MHz 8 b/a 80 Mbps
A.2.2 Converso D/A
Pode-se demonstrar que um trem de pulsos PCM, obtido pela
amostragem de um sinal em uma frequncia maior ou igual dada pelo
teorema de Nyquist, tem o mesmo espectro de frequncia que o sinal
amostrado, no intervalo de frequncias dado pela banda passante desse sinal.
A converso D/A se faz, ento, pela simples passagem do trem de pulsos
409
PCM por um filtro na faixa passante (e, assim, com a largura de banda) do
sinal originalmente amostrado.
No fosse pelo erro de quantizao, o sinal obtido da sada do filtro
seria idntico ao sinal analgico original.
Note que o sinal de sada to mais prximo do sinal original quanto
menor for o erro de quantizao. O erro de quantizao, por sua vez, to
menor quanto maior o nmero de nveis de quantizao, ou seja, quanto maior
o nmero de bits utilizados na codificao.
A.2.3 Outros Codificadores de Onda
A codificao PCM representa cada amostra pelo seu valor absoluto,
mas essa no a nica representao possvel. Alternativamente, possvel
representar apenas a diferena entre o valor de uma amostra e o valor de sua
antecessora. Esse esquema de codificao denominado DPCM (Differencial
Pulse Code Modulation). Quando os valores das amostras so muito
prximos uns dos outros, necessitamos de um menor nmero de nveis para
representar as diferenas do que o necessrio para representar os valores
absolutos das amostras, para um mesmo erro de quantizao. Como um
menor nmero de nveis pode representar um menor nmero de bits para
codificar todos os nveis, utilizando o DPCM poderemos ter um menor
nmero de bits gerados pela codificao. O DPCM um caso particular de
codificao preditiva, em que o valor predito da amostra corrente o valor
da amostra anterior, guardando-se (codificando-se) ento o erro (diferena) de
predio.
A ideia do DPCM pode ser ainda refinada um pouco mais, variando-se
dinamicamente os nveis de quantizao, dependendo de o sinal variar muito
ou pouco. Dessa forma, prev-se no apenas o valor da amostra corrente
baseado na amostra anterior, mas tambm o valor do quantum, baseado em
uma funo, bem conhecida, dos valores de amostras anteriores. Esse
esquema denominado ADPCM, de Adaptative Differencial Pulse Code
Modulation.
Existem ainda outras formas de codificao que independem do tipo do
sinal analgico. Vamos citar apenas mais uma, a SBC (SubBand Coding). Na
codificao por sub-bandas, o espectro de frequncia do sinal dividido em
vrias bandas de frequncia. Cada banda ento tratada como se
representasse um sinal distinto, e nela aplicada qualquer uma das tcnicas
anteriores. A vantagem da SBC que, atravs da anlise de um sinal,
podemos identificar suas bandas mais importantes no transporte da
informao. Para essas bandas, utilizamos um erro de quantizao menor do
que aquele usado nas bandas menos importantes, ou seja, podemos codificar
410
as bandas menos importantes utilizando um nmero menor de bits por
amostras.
A.3 Compresso e Compactao
Um sinal digital, em geral, carrega muita informao redundante. Se
eliminarmos essa redundncia conseguiremos reduzir em muito a quantidade
de bits gerados, que, em alguns casos, pode ser muito grande; pela Tabela
A.1, por exemplo, observa-se que apenas 1 minuto de vdeo preto-e-branco
gera 600 Mbytes.
Quando eliminamos apenas a redundncia de um sinal, no h perda de
informao e dizemos que fizemos uma compactao, ou compresso sem
perdas. No entanto, podemos tambm diminuir a quantidade de bits com
alguma perda de informao. Dependendo de quem for o usurio da
informao, parte dela pode ser considerada pouco til. Raramente
necessrio manter o sinal original intacto no caso das mdias vdeo, udio e
imagens estticas, uma vez que o usurio final perderia de qualquer forma
parte da informao por limitaes fsicas; tal o caso do ouvido e do olho
humanos. Vemos, assim, que a quantidade de informao que podemos perder
dependente do usurio, mas ela tambm pode depender da tarefa em
desenvolvimento: por exemplo, perder um pouco da nitidez de um vdeo em
uma videotelefonia perfeitamente aceitvel, enquanto a perda da qualidade
do vdeo pode ser inadmissvel em uma aplicao mdica. Quando na reduo
dos dados gerados h perda de informao, dizemos que fizemos uma
compresso com perdas, ou simplesmente compresso.
Existem vrias tcnicas de compresso sem perdas (compactao) que
podem ser aplicadas a qualquer tipo de dados, independentemente da mdia
representada. As Sees A.3.1 a A.3.5 so dedicadas a algumas dessas
tcnicas mais usuais. As tcnicas de compresso com perdas sero estudadas
para cada mdia em particular nas Sees A.3.6 a A.3.8.
A.3.1 Codificao por Carreira
O desempenho da codificao por carreira (run length coding) depende
muito da estatstica dos dados de entrada. Ela consiste simplesmente em
representar os dados pelo seu valor e o nmero de vezes que ele se repete. A
unidade para codificao pode ser um bit, um byte, um caractere, um pixel,
uma amostra etc. A Figura A.3 ilustra o caso da unidade ser um pixel de 8
bits e o caso da unidade ser o bit.
411
13 13 13 13 13 14 15 15 15 15 16 16
13 | 05 14 | 01 15 | 04 16 | 02
imagem binria
0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0
0 | 06 1 | 05
1
. . .
0 | 05
Figura A.3 Codificao por carreira.
A.3.2 Codificao de Shannon-Fano
Para as duas prximas tcnicas de codificao, imagine que nossos
dados sejam apenas os smbolos A, B, C, D e E (que podem representar um
pixel, uma amostra de udio ou vdeo, um caractere etc.) e que eles ocorram
na frequncia dada pela tabela a seguir.
Smbolo A B C D E
Nmero de
Ocorrncias
15 7 6 6 5
A codificao de Shannon-Fano constri a rvore de codificao
seguindo o seguinte algoritmo:
1. Alinhe os smbolos de acordo com suas
frequncias/probabilidades, por exemplo, ABCDE.
2. Divida recursivamente em duas partes, cada uma com
aproximadamente o mesmo nmero de contagem (soma das
frequncias).
A rvore gerada fica ento:
412
E temos a seguinte codificao, gerando uma compactao de 117:89.
Smbolo Frequncia Cdigo Subtotal (n. de
bits)
A 15 00 30
B 7 01 14
C 6 10 12
D 6 110 18
E 5 111 15
A.3.3 Codificao de Huffman
Tomando o mesmo exemplo da seo anterior, a codificao de
Huffman constri a rvore de codificao seguindo o seguinte algoritmo:
1. Iniciao: ponha todos os ns em uma lista ABERTA.
Mantenha a lista alinhada todo o tempo de aplicao do
algoritmo (por exemplo, ABCDE).
2. Repita at que a lista ABERTA contenha apenas um n:
a. Pegue os dois ns de mais baixas frequncias/probabilidades
e crie um n pai para ambos.
b. Atribua ao n pai a soma das frequncias/probabilidades
dos filhos e o insira na lista ABERTA.
c. Atribua cdigos 0 e 1 aos dois ramos da rvore e retire os
filhos da lista ABERTA.
A rvore gerada fica ento:
E temos a seguinte codificao, gerando uma compactao de 117:87.
413
Smbolo Frequncia Cdigo Subtotal (n. de
bits)
A 15 0 15
B 7 100 21
C 6 101 18
D 6 110 18
E 5 111 15
Note que, quer usando a codificao de Huffman ou de Shannon-Fano, o
decodificador deve usar o mesmo dicionrio de cdigos gerado pelo
codificador para recuperar os smbolos originais.
A.3.4 Codificao de Lempel-Ziv-Welch
Um procedimento diferente dos dois anteriores processar smbolo a
smbolo e ir construindo o dicionrio de cdigos passo a passo. medida que
o dicionrio vai sendo construdo, ele pode ser usado na codificao do
prximo smbolo, dinamicamente.
No esquema de Lempel e Ziv, posteriormente estendido por Welch, o
dicionrio construdo como uma estrutura de dados, uma tabela que mantm
sequncias de smbolos, em conjunto com um identificador nico (cdigo)
para toda a sequncia. A tabela contm at, digamos, 2
j
posies
(sequncias). Ela iniciada simplesmente com o conjunto dos 2
k
possveis
smbolos, isto , todas as sequncias de tamanho 1. Os melhores desempenhos
so conseguidos quando k << j, dependendo, obviamente, do grau de
redundncia dos dados.
A codificao se inicia definindo a sequncia de smbolos corrente S
como o primeiro smbolo a codificar. Note que S membro do dicionrio. A
codificao ento continua como a seguir:
1. Se no existem mais smbolos para codificar, d como sada o cdigo
da sequncia (j bits) para S. Em caso contrrio,
2. Pegue o prximo smbolo P e concatene a S, obtendo a nova
sequncia SP.
3. Se SP j estiver no dicionrio, faa S = SP e volte para o passo 1.
Em caso contrrio,
4. D como sada o cdigo da sequncia (j bits) para S.
5. Adicione SP ao dicionrio, se ainda houver espao.
6. Faa S = P e volte para o passo 1.
414
Note que, assim procedendo, o decodificador no tem a necessidade de
conhecer a priori todo o dicionrio, pois pode reconstru-lo passo a passo,
dinamicamente, a partir dos dados codificados. A decodificao se inicia
definindo a sequncia de smbolos corrente S como a entrada no dicionrio
correspondente ao primeiro cdigo a decodificar e dando como sada o
smbolo S. Se houver mais cdigos a decodificar:
1. Leia prximo cdigo X.
2. Se houver a entrada no dicionrio (P) correspondente a X:
a) D como sada P.
b) Adicione S concatenado ao primeiro smbolo de P no dicionrio,
caso a entrada no exista.
Se no houver a entrada no dicionrio (P) correspondente a X:
a) Faa P igual a S concatenado ao primeiro smbolo de S e
adicione ao dicionrio.
b) D como sada P.
3. Faa S igual a P e volte para o passo 1, se houver mais smbolos a
decodificar.
A.3.5 Outras Tcnicas de Compactao
Alm das tcnicas anteriormente mencionadas, outras so encontradas,
bem como variantes das primeiras. Uma, no entanto, merece destaque por ser
comumente utilizada: a codificao aritmtica.
A codificao aritmtica tambm parte do conhecimento da frequncia
de ocorrncias dos smbolos, tal qual as codificaes de Shannon-Fano e de
Huffman. Baseado na frequncia de ocorrncias, intervalos so associados
aos smbolos e, a partir desses intervalos, novos intervalos so construdos
para sequncias de smbolos. Uma sequncia pode ento ser codificada por
qualquer nmero dentro do intervalo calculado para a sequncia, garantindo
sua decodificao posterior sem ambiguidade. Em Cormen et al. (2002) pode-
se encontrar a especificao detalhada do algoritmo.
A.3.6 Compresso em Imagem Esttica
As imagens geram, normalmente, uma quantidade de informao muito
grande. Se levarmos em considerao a correlao do valor (cor) de cada
pixel, poderemos reduzir a quantidade de informao gerada.
Existe grande nmero de formatos para imagens estticas, com base em
esquemas diferentes de compresso. Dentre os mais usuais atualmente
415
podemos citar os formatos TIFF e GIF, que so baseados no algoritmo de
Lempel-Ziv, apresentado na Seo A.3.4, e o padro ISO para imagens
estticas, chamado JPEG [ISO/IEC 10918-1, 1994], baseado em
transformadas, como veremos mais adiante.
A forma mais simples de compresso de uma imagem a reduo da
sua resoluo geomtrica. Isso implica aumentarmos o tamanho da regio de
um pixel. Tal procedimento pode ser feito at um certo limite, dependendo do
usurio final e do dispositivo de exibio, para evitar o efeito apresentado na
Figura A.4, onde vemos primeiro a imagem original dividida em pixels e, em
seguida, a imagem reproduzida; a diferena se deve ao fato de o pixel
representar uma regio grande.
Figura A.4 Efeito do tamanho da regio de um pixel na codificao/decodificao.
Outra forma de compresso a reduo do espao de cor pela simples
utilizao de um nmero menor de bits para representao de cada pixel.
Cabe antes, no entanto, uma discusso sobre como as cores so
representadas.
Atravs das adies das cores vermelha, verde e azul, podemos obter
quase todas as cores visveis pelo olho humano. Assim, uma representao
bem comum a RGB (de Red, Green, Blue), na qual um pixel representado
pelos valores dessas componentes. comum encontrarmos o padro RGB 8-
8-8, em que se utilizam 8 bits para codificao de cada componente, e o
padro 5-6-5, em que reservado um nmero maior de bits (6) para a
componente verde, por ser o olho humano mais sensvel a essa componente.
Outra representao bastante utilizada o sistema YC
r
C
b
. A componente Y
denominada luminncia, e uma medida da sensibilidade do olho humano s
vrias componentes de frequncia de uma cor. Para as fontes usuais de luz
provenientes de dispositivos de vdeo, Y dada por:
416
Y = 0,299R + 0,587G + 0,114B
As componentes C
r
e C
b
so chamadas de crominncia e sua definio
varia de padro para padro, bem como o seu nome (componentes I e Q, no
padro NTSC de TV, e componentes U e V, no padro PAL de TV). C
r
e C
b
so os nomes utilizados pelos padres MPEG e JPEG, e tm seus valores
dados por:
C
r
= ((R Y)/1,6) + 0,5
C
b
= ((B Y)/2) + 0,5
O leitor deve observar que o conjunto de equaes para Y, C
r
e C
b
linearmente independente (isso tambm acontece para as outras definies de
C
r
e C
b
), ou seja, dados Y, C
r
e C
b
, obtm-se facilmente R, G e B.
O olho humano mais sensvel luminncia do que crominncia;
assim, na compresso pela reduo da resoluo de cor, podemos utilizar um
nmero menor de bits para as componentes da crominncia. Mais comum, no
entanto, utilizarmos uma menor resoluo geomtrica para as componentes
de crominncia do que aquela utilizada para a luminncia.
Uma outra forma de compresso de imagem esttica, geralmente sem
perdas, a codificao preditiva. De forma anloga explicao da Seo
A.2.3, na codificao preditiva de uma imagem realiza-se uma predio do
valor do pixel baseada em valores de outros pixels da imagem. A diferena do
valor real para o valor predito ento codificada. A Figura A.5 ilustra o caso.
Figura A.5 Imagem original e imagem com apenas os erros de predio.
Se, na imagem, os pixels tiverem valores muito prximos, pode-se usar
um nmero menor de bits para armazenar o erro da predio do que aquele
usado para codificar o valor absoluto do pixel. Alm disso, uma imagem com
poucos contornos vai gerar muitos valores pequenos ou mesmo o valor zero,
tornando o emprego de um outro mtodo de compresso posterior bem
eficiente.
417
Antes de continuarmos nossa discusso sobre tcnicas de compresso,
devemos ressaltar que, normalmente, as tcnicas de compresso so seguidas
pela aplicao de algum esquema de compactao. Muitas vezes, o esquema
de compresso simplesmente prepara os dados para que possam sofrer maior
compactao. Nada impede tambm que apliquemos vrias tcnicas de
compresso em sequncia.
Um exemplo de codificao preditiva pode ser encontrado no padro
JPEG [ISO/IEC 10918-1, 1994] no modo sem perdas, onde a codificao de
Huffman aplicada aps a codificao preditiva. No esquema apresentado na
Figura A.6, o codificador por entropia utiliza a codificao de Huffman. Note
tambm, pela figura, que existem sete possveis predies para um pixel X.
imagem
fonte
imagem
comprimida
Preditor
Codificador
por entropia
Tabela de
especificao
A
C
X
B
Selees
0
1
2
3
4
5
6
7
Predio
sem predio
A
B
C
A+BC
A+((BC)/2)
B+((AC)/2)
(A+B)/2
Figura A.6 JPEG sem perdas.
Existem ainda outras tcnicas para compresso de imagem, tais como a
codificao por sub-bandas (similar apresentada na Seo A.2.3) e a
quantizao vetorial. Entretanto, nos deteremos apenas em mais uma, por ser
utilizada nos padres JPEG e MPEG: a codificao por transformadas.
O leitor j deve ter percebido, pelas vrias referncias Seo A.2.3,
que existem vrias similaridades entre amostras no tempo e pixels. Na
verdade, podemos considerar os pixels como se fossem amostras do sinal
imagem, s que amostras obtidas no no tempo, mas no espao.
exatamente por isso que podemos aplicar todas as tcnicas da Seo A.2.3
nas imagens estticas. Note tambm que, em um sinal de vdeo, o grupo de
vrias amostras temporais forma um quadro (por exemplo, no sistema de TV
brasileiro, existem 30 quadros por segundo). Esse quadro uma imagem
esttica onde as amostras temporais do vdeo so os pixels (amostras
espaciais). Esse fato que nos permite no somente tratar o vdeo como um
sinal contnuo e nele aplicarmos todas as tcnicas de compresso conhecidas
para sinal contnuo, como tambm trat-lo como uma sequncia de imagens
estticas no tempo, aplicando as mesmas tcnicas de compresso utilizadas
para imagens.
418
Uma vez que uma imagem esttica pode ser considerada uma sequncia
de amostras espaciais, podemos agora pensar, como fizemos com os sinais
analgicos, em aplicar uma transformada (por exemplo, Fourier) para
descrever o mesmo sinal no domnio da frequncia. S que, agora, no domnio
das frequncias espaciais. Como estamos com um sinal discreto, precisaremos
de uma transformada discreta. Poderamos usar a transformada discreta de
Fourier, como mencionado, mas outra transformada leva a melhores
resultados na compresso: a transformada discreta de cossenos.
No espao bidimensional de uma imagem de 88 pixels, a transformada
discreta de cossenos (FDCT Forward Discrete Cosine Transform) dada
por:
F u v C u C v f x y
x u y v
x y
( , ) ( ) ( ) ( , ) cos
( )
cos
( )
=
+
(
+
(
= =
1
4
2 1
16
2 1
16
0
7
0
7
t t
C w para w ( ) =
=
1
2
0
C w para w ( ) , , ... , = = 1 1 2 7
F u v C u C v f x y
x u y v
x y
( , ) ( ) ( ) ( , ) cos
( )
cos
( )
=
+
(
+
(
= =
1
4
2 1
16
2 1
16
0
7
0
7
t t
C w para w ( ) =
=
1
2
0
C w para w ( ) , , ... , = = 1 1 2 7 C w para w ( ) , , ... , = = 1 1 2 7
E a transformada inversa (IDCT Inverse Discrete Cosine Transform)
por:
f x y C u C v F u v
x u y v
u v
( , ) ( ) ( ) ( , ) cos
( )
cos
( )
=
+
(
+
(
= =
1
4
2 1
16
2 1
16
0
7
0
7
t t
No domnio da frequncia, as mudanas abruptas que acontecem nos
contornos de uma figura esto concentradas nas frequncias mais altas.
Assim, uma imagem com poucos contornos deve concentrar seus coeficientes
nas frequncias baixas. Mais ainda, os coeficientes das frequncias altas so
menos importantes, e perdas nesses coeficientes podem diminuir um pouco a
nitidez da imagem, mas para muitas aplicaes isso pode ser aceitvel.
Pelos motivos mencionados no pargrafo anterior, aps uma imagem ser
transformada os coeficientes gerados so quantizados de forma diferenciada,
usando maior preciso (quantum menor) para as frequncias mais baixas.
Assim procede o padro JPEG [ISO/IEC 10918-1, 1994] no modo
sequencial, dividindo uma imagem em blocos de 88 pixels e aplicando uma
compresso em cada bloco, conforme o diagrama mostrado na Figura A.7. A
imagem varrida uma nica vez, da esquerda para a direita, de cima para
baixo.
419
Tabela de
especificao
imagem
fonte
imagem
comprimida
FDCT Quantizador
Codificador por
entropia
Tabela de
especificao
Figura A.7 Codificao JPEG modo sequencial.
No JPEG, aps a aplicao da transformada discreta de cossenos e a
quantizao dos coeficientes, estes so organizados da mais baixa frequncia
para a mais alta,
4
quando ento aplicada a codificao por carreira, seguida
da codificao de Huffman (ou codificao aritmtica), ilustradas na Figura
A.7 pelo bloco codificador por entropia.
A decodificao JPEG modo sequencial ilustrada na Figura A.8.
Tabela de
especificao
imagem
reconstruda
imagem
comprimida
IDCT Dequantizador
Decodificador
por entropia
Tabela de
especificao
Figura A.8 Decodificao JPEG modo sequencial.
O padro JPEG ainda possui mais dois modos de compresso: o
progressivo e o hierrquico.
O modo progressivo tambm utiliza a transformada de cossenos, mas a
imagem codificada em vrias varreduras. Na variante denominada seleo
de espectro, a cada varredura so codificados coeficientes das mesmas
frequncias de todos os blocos, da mais baixa frequncia para a maior
frequncia. J na variante denominada aproximao sucessiva, primeiro
codificado o coeficiente de mais baixa frequncia de todos os blocos e depois
so codificados, paulatinamente, os bits dos demais coeficientes de todos os
blocos, do mais significativo para o menos significativo.
4
Na verdade, um passo adicional existe no JPEG, quando os coeficientes DC (frequncia zero) de um
bloco so codificados pela diferena entre seu valor e o valor do coeficiente DC do bloco anterior.
420
Note que, no modo progressivo, os primeiros dados da imagem que so
decodificados j permitem ter uma viso completa da cena, embora ainda sem
muita nitidez. Com o restante dos dados, a nitidez vai se tornando cada vez
melhor. Isso pode ser til em vrios casos. Muitas vezes, navegando na Web,
queremos apenas ter uma ideia da informao que vem na pgina a seguir.
Certas vezes essa informao nem aquela que desejamos. Ter uma viso
rpida dessa informao, ainda que no com todos os detalhes, pode acelerar
em muito a tarefa sendo executada. Outras vezes podemos estar trafegando
com a imagem em um meio de pequena banda passante ou mesmo em um
trecho congestionado de uma rede. Nesses casos, o descarte seletivo dos
dados que no trazem muita informao pode ser a nica forma vivel de
manter a aplicao em funcionamento. Como veremos, um bom sistema de
comunicao deve poder identificar a parte da informao que ele deve
manter ntegra e quais partes ele pode perder, em caso de necessidade ou
convenincia.
O modo JPEG hierrquico tambm permite separar da imagem os dados
mais relevantes dos menos relevantes, mas atravs do aumento progressivo da
resoluo geomtrica. Nesse modo, a imagem codificada com mltiplas
resolues, de forma que a menor resoluo pode ser decodificada sem a
necessidade de se ter a resoluo maior.
A.3.7 Compresso em udio
A compresso de um sinal de udio depende muito do tipo de sinal.
Vamos comear pela voz humana.
Um ser humano falando emite surtos de voz apenas durante 35% a 40%
do tempo de fala. O restante do tempo preenchido com silncio que existe
entre palavras e entre uma sentena e outra. Se pudermos detectar esse
silncio e elimin-lo da codificao, de forma que ele possa ser recuperado na
decodificao, reduziremos muito a quantidade de dados gerados. Essa
tcnica aplicada telefonia digital com o nome TASI (Time Assignment
Digital Interpolation). Ainda como outra caracterstica da voz e do ouvido
humanos, a perda tolerada de surto de voz e de silncio muito diferente.
Perdas da ordem de 1% da informao do surto de voz so tolerveis,
5
ao
passo que podemos tolerar a perda de at 50% do silncio. Note que, com a
deteco de silncio, transformamos um trfego de voz contnuo em um
trfego em rajadas.
5
Na realidade, a porcentagem de perda depende do tamanho do surto de voz e se a perda ocorre no
incio ou no meio do surto. Em Gruber (1985] possvel encontrar uma discusso sobre o assunto.
421
Uma outra forma de comprimir a voz humana codificar, em vez de
suas amostras, os parmetros de um modelo analtico do trato vocal capaz de
gerar aquelas amostras. No mtodo conhecido como LPC (Linear Predictive
Coding), apenas os parmetros que descrevem o melhor modelo que se adapta
s amostras codificado. Um decodificador LPC usa esses parmetros para a
gerao sinttica da voz, que usualmente parecida com a original. O
resultado inteligvel, mas a tonalidade aquela de um rob falando (voz
metlica).
O CELP (Code Excited Linear Predictor) bastante similar ao LPC. O
codificador CELP gera os mesmos parmetros LPC, mas computa os erros
entre a fala original e a fala gerada pelo modelo sinttico. Tanto os
parmetros do modelo analtico do trato vocal quanto uma representao
comprimida dos erros so codificados. A representao comprimida um
ndice em um vetor de excitao (que pode ser pensado como um livro de
cdigos compartilhado pelo codificador e o decodificador). O resultado do
CELP tem uma qualidade de fala muito boa a uma taxa bem baixa. A Tabela
A.2 apresenta alguns padres para voz recomendados pelo ITU-T [ITU-T
G.711, 1988; ITU-G.722, 1988; ITU-T G.723, 1996; ITU-T G.726, 1990;
ITU-T G.728, 1992; ITU-T G.729, 1996].
Tabela A.2 Padres ITU-T para voz
Padro Algoritmo
Taxa de
Compresso (Kbps)
Recursos de
Processamento
Necessrios
Qualidade da
Voz Resultante
Atraso
Adicionado
G.711 PCM
48, 56, 64 (sem
compresso)
Nenhum Excelente Nenhum
G.722 SBC/ADPCM
64 (faixa passante
de 50 Hz a 7 KHz)
Moderado Excelente Alto
G.723 MP-MLQ 5.3, 6.3 Moderado
Boa (6.3)
Moderada (5.3)
Alto
G.726 ADPCM 16, 24, 32, 40 Baixo
Boa (40)
Moderada (24)
Muito baixo
G.728 LD-CELP 16 Muito alto Boa Baixo
G.729 CS-ACELP 8 Alto Boa Baixo
Mais especificamente para udio, de forma geral, um padro muito
importante o MPEG udio [ISO/IEC 11172-,3 1993; ISO/IEC 13818-3,
1998; ISO/IEC 13818-7, 1997; ISO/IEC 14496-3, 2004].
O MPEG udio leva em conta o modelo psicoacstico humano para
realizar uma compresso perceptualmente sem perdas. O modelo divide o
domnio de frequncia audvel (entre 20 Hz e 20 KHz) em 32 bandas,
chamadas bandas crticas. O sistema de audio tem uma resoluo limitada e
422
dependente da frequncia. A medida perceptualmente uniforme de frequncias
pode ser expressa em termos das larguras das bandas crticas. A Figura A.9
mostra a sensibilidade do ouvido humano nas diversas frequncias.
40
30
20
10
0
0 2 4 6 8 10 12 14 16
d
B
Frequncia (kHz)
Limite no Silncio
Figura A.9 Sensibilidade do ouvido humano.
Note que a sensibilidade do ouvido ilustrada na Figura A.9 medida em
decibis (dB SPL dB Sound Preassure Level ou, simplificadamente,
dB). O decibel uma unidade conveniente para expressar o que se chama de
nvel sonoro. O som, de forma geral, tem uma medida de intensidade que a
potncia transferida por uma onda sonora por rea de uma superfcie que
intercepta essa onda. O decibel nada mais do que uma forma comparativa
de analisar valores. Nesse caso, em vez de fornecer o valor absoluto da
intensidade sonora para uma frequncia, podemos fornecer o seu valor
dividido pela menor intensidade perceptvel ao ouvido humano
6
e utilizar uma
escala logartmica para representar essa razo, j que o intervalo de
intensidades produzido pela voz humana muito grande. Assim, o nvel
sonoro em decibis | definido como:
|
|
.
|
\
|
=
0
10
log 10
I
I
|
onde I
0
o menor valor de intensidade sonora perceptvel ao ouvido e I a
intensidade do som sendo medido. Note que, para I = I
0
, temos | = 0 dB, ou
seja, a nossa referncia de menor intensidade perceptvel corresponde a 0 dB.
Voltando ao MPEG udio, seu modelo leva em conta o mascaramento
de frequncias, caracterstica do ouvido humano que, quando submetido a um
sinal de certa amplitude em dada frequncia, mascara as outras frequncias
6
O valor de referncia definido como I
0
= 10
12
watts/m
2
. Ele corresponde a aproximadamente o
limiar da audio humana. No entanto, o limiar de audio varia de frequncia para frequncia e com a
intensidade do som, como descoberto por Fletcher e Munson em 1933.
423
ao redor que possuam uma amplitude abaixo de um certo limite. A Figura
A.10 ilustra o caso.
Amplitude
Sinal tonal forte
Regio onde os sinais
fracos so mascarados
Frequncia
Figura A.10 Mascaramento de frequncias.
O MPEG udio transforma o sinal para o domnio da frequncia e
aplica o mascaramento de frequncias, codificando apenas aquelas
componentes de frequncia que no so mascaradas. A Figura A.11 ilustra o
procedimento.
0 Frequncia
Depois
20.000
0 Frequncia 20.000
Antes
Figura A.11 Mascaramento de frequncias nas bandas crticas MPEG.
O MPEG udio tambm leva em considerao resultados psicoacsticos
que mostram que, para frequncias maiores que 2 KHz, o ouvido percebe a
424
imagem estereofnica baseado mais no envelope temporal do udio do que em
sua estrutura mais refinada. Assim, no modo intensity stereo, o codificador
soma as frequncias mais altas do sinal estereofnico em um nico sinal. Os
canais de esquerda e direita so reconstrudos com a mesma forma, mas com
magnitudes diferentes, baseadas em fatores de escala.
Na codificao MPEG, para cada intervalo de tempo de udio
codificado (isto , para cada conjunto de amostras), existe um nmero fixo de
bits total para todas as 32 sub-bandas. Escolhe-se o nmero de bits de uma
banda de forma a minimizar a percepo auditiva do rudo de quantizao
levando em conta, como j mencionamos, o mascaramento de frequncias.
O MPEG 1 udio [ISO/IEC 11172-3, 1993] define trs mtodos de
compresso, denominados camadas 1, 2 e 3 (MP1, MP2, MP3).
O MP1 agrupa 12 amostras para cada uma das 32 sub-bandas. Cada
grupo de 12 recebe, ento, os bits para codificao e, se o nmero de bits no
for zero, um fator de escala.
O MP2 e o MP3 ainda levam em conta uma outra caracterstica
psicoacstica, o mascaramento temporal. Quando emitido um tom em uma
dada frequncia e com uma certa amplitude, esse tom mascara os tons, na
mesma frequncia, abaixo de uma certa amplitude, que varia no tempo. A
Figura A.12 ilustra o fato com um tom emitido a 60 dB.
-5 0 5 10 20 50 100 200 500
Tempo (ms)
Tom de teste
60
40
20
d
B
Tom de
mascaramento
Figura A.12 Mascaramento temporal.
O MP2 codifica os dados em grupos maiores: para cada sub-banda,
agrupa trs grupos de 12 amostras. Isso modela um pouco da mscara
temporal, pois faz-se uma alocao de bits e usam-se trs fatores de escala
para cada trio de 12 amostras.
Tanto o MP1 quanto o MP2 usam bandas uniformes, isto , do mesmo
tamanho, que no modelam bem o ouvido humano, como pode ser visto pela
425
Figura A.9. O MP3 usa bandas no-uniformes e faz uma alocao de bits
melhor. Faz tambm melhor clculo do quantum de cada banda, isto , melhor
distribuio de bits, usando inclusive o conceito de reservatrio de bits (como
mencionado, o nmero de bits total para as 32 bandas fixo para cada grupo
de amostras, mas no MP3 pode haver emprstimos de bits de um grupo de
amostras para outro).
O MP2 e o MP3 tambm permitem o MS stereo mode, alm do stereo
intensity mode. O modo MS stereo codifica os sinais de frequncias mais
altas dos canais direito e esquerdo como a soma (middle-channel) e a
diferena (side-channel). Tcnicas de sintonizao so ento utilizadas para
comprimir o sinal side-channel.
A Tabela A.3 apresenta uma comparao das vrias camadas MPEG 1
udio.
Tabela A.3 Camadas MPEG 1 udio (a codificao pode ser realizada com taxas de
amostragem de 32, 41.1 e 48 KHz)
Camadas Taxa de Bits Alvo
(Kbps)
Taxa de
Compresso
Qualidade Retardo
Mximo (ms)
MP1 32 a 448 4:1 50
MP2 32 a 384 6:1 100
MP3 32 a 320 12:1
Telefonia: 8 Kbps
Rdio AM: 32 Kbps
Rdio FM: 64 Kbps
CD: 128 Kbps
150
As camadas do padro MPEG 1 udio, denominadas fase 1 (MP1, MP2
e MP3) preveem apenas o uso de dois canais em um fluxo de udio, ou seja,
apenas o estreo tradicional. O padro MPEG 2 [ISO/IEC 13818-3, 1998]
introduz algumas extenses. O padro MPEG 2 udio (fase 2) comum,
chamado de BC (Backward Compatible), tem as mesmas camadas e usa os
mesmos algoritmos com os mesmos parmetros do udio MPEG 1. A
diferena que o MPEG 2 prev a formao de fluxos de udio com at seis
canais (5.1), em vez de implementar apenas o estreo com dois canais.
A codificao AAC (Advanced Audio Coding) novidade do udio
trazida pelo MPEG-2, conhecida como NBC (Non Backward Compatible),
de no-compatvel com MPEG 1 (tambm conhecido como MPEG-2 Parte 7
[ISO/IEC 13818-7, 1997] ou MPEG-4 Parte 3 [ISO/IEC 14496-3, 2004]).
426
Essa codificao mais eficiente que o MPEG 1 (MP3 etc.), tolera at 48
canais de udio e 15 canais de frequncias baixas, com taxas de amostragem
de 8 a 96 KHz. A AAC necessita de menos processamento e,
consequentemente, tem retardo menor na (de)codificao.
A AAC considerada o estado da arte para udio de alta qualidade em
uma taxa de bits tpica de 128 Kbps. Abaixo dessa taxa, a qualidade do udio
comea a degradar, o que pode ser compensado por tcnicas de
melhoramento, como SBR (Spectral Band Replication) e PS (Parametric
Stereo).
A SBR uma tcnica de extenso que permite a mesma qualidade de
som a aproximadamente metade da taxa de bits. A combinao de AAC e
SBR chamada de HE-AAC (High efficiency-AAC) verso 1 [ISO/IEC
14496-3, 2004], tambm conhecida como aacPlus v1.
A PS aumenta a eficincia de codificao ainda mais, atravs de uma
representao paramtrica da imagem estreo de um sinal de entrada. A
combinao de AAC, SBR e PS chamada de HE-AAC (High efficiency-
AAC) verso 2 [ISO/IEC 14496-3, 2004].
Note assim que HE-AAC, definido no padro MPEG-4, um
superconjunto do ncleo AAC, que estende a alta qualidade de udio AAC
para taxas de bits mais baixas. Decodificadores HE-AAC v2 so capazes de
decodificar fluxos HE-AAC v1 e fluxos AAC. Por sua vez, decodificadores
HE-AAC v1 so tambm capazes de decodificar fluxos AAC. Como vimos
no Captulo 1, o sistema brasileiro de TV digital terrestre adotou o padro
MPEG-4 para a codificao do udio principal de um programa [ABNT
NBR 15602-2 ,2007], com as caractersticas apresentadas na Tabela 1.1.
Alm das codificaes apresentadas, ainda existem vrias outras em uso
atualmente. Entre elas podemos citar a DD e a DTS.
AC-3 era o antigo nome da codificao chamada hoje de Dolby Digital
(DD). Essa codificao propriedade da empresa Dolby, mas foi adotada
pelos Estados Unidos como codificao de udio a ser utilizada nos DVDs e
em HDTV (High Definition TV). Ela utiliza seis canais de udio, sendo cinco
com qualidade de CD (20 Hz a 20 KHz) e um apenas para as baixas
frequncias (20 a 120 Hz). A taxa dessa codificao de cerca de 384 Kbps.
A Figura A.13 apresenta a distribuio sugerida de autofalantes para os seis
canais de udio.
427
Surround
Esquerdo
Principal
Direito
Principal
Esquerdo
Subwoofer
Central
Surround
Direito
Figura A.13 udio multicanal.
A Europa usa ainda uma outra codificao proprietria, a DTS. Essa
codificao tambm multicanal, mas a taxa gerada de cerca de 1,536
Mbps. Tanto DD quanto DTS trabalham com codificao por sub-bandas
(at 576 na DD). Testes exaustivos com especialistas em udio no
conseguem chegar a uma definio sobre qual codificao a melhor. No
entanto, trilhas DD obviamente ocupam menos espao de armazenamento (e
de banda, quando transmitidas) e, por isso, a codificao DD tem sido
preferida pelos fabricantes de DVD.
A.3.8 Compresso em Vdeo
Como vimos na Seo A.2, o sinal de vdeo pode ser codificado usando
qualquer uma das tcnicas l mencionadas: PCM, DPCM, ADPCM, SBC
etc. Tambm conforme vimos na Seo A.3.6, um vdeo pode ser considerado
como uma sequncia de imagens estticas ou quadros. Cada um desses
quadros pode ser codificado usando as mesmas tcnicas empregadas para as
imagens estticas. Em particular, poderamos empregar a codificao JPEG
em cada quadro. Essa tcnica constitui a base da codificao chamada
MJPEG (Motion JPEG). Entretanto, ao empregarmos essa codificao,
estaremos levando em conta apenas a redundncia de informao contida em
428
um quadro (redundncia intraquadro), quando a maior redundncia pode
estar nas informaes contidas em quadros consecutivos (redundncia
interquadros).
Nesta seo nos deteremos na anlise de dois padres de codificao de
vdeo que levam em conta no apenas a redundncia intraquadro, mas
tambm a existente interquadros: os padres H.261 e MPEG vdeo. Antes,
porm, vamos analisar alguns padres de sinal de vdeo.
Sinais de TV so, em geral, adquiridos no formato RGB, mas
transmitidos no formato YC
r
C
b
, no qual a resoluo geomtrica dos canais de
crominncia menor que a de luminncia, levando em conta a maior
sensibilidade do olho humano luminncia, como discutimos na Seo A.3.6.
Os sinais so ento multiplexados e modulados, gerando um sinal chamado
vdeo composto modulado, conforme ilustrado na Figura A.14.
R
G
B
Cmera
Componentes de
vdeo (BNC)
S-VHS (mini DIN)
Y
Cr
Cb
Vdeo Composto
(RCA)
VC
VCM
Vdeo Composto
Modulado
Subamostragem
na crominncia
Somador
Subtrator
Multiplexador
Modulador
Figura A.14 Gerao de sinal de vdeo de TV.
Sistemas de vdeo apresentam informaes como uma sequncia de
quadros, sendo cada quadro composto de linhas. Um dos sistemas de
distribuio de televiso mais utilizados usa 525 linhas por quadro, a uma
taxa de 30 quadros por segundo ( o padro M de TV, utilizado tanto pelo
padro americano NTSC quanto pelo padro brasileiro PAL-M).
7
As
televises tm uma relao de aspecto de 4:3, dando ao padro M uma
resoluo para a luminncia de 700 525 pixels por quadro.
Nem todas as linhas da televiso so visveis. A maioria dos formatos de
vdeo digital est relacionada com a rea visvel para cada padro de
7
Na verdade, a taxa de quadros de 29,97 quadros por segundo para TV em cores. Os padres
europeus, em geral, usam 25 quadrospor segundo e 625 linhas por quadro.
429
televiso. A recomendao BT 601-4 [ITU-R BT.601-4, 1994] especifica 483
linhas ativas, com 720 pixels por linha. Apenas 480 das 483 linhas e 704 dos
720 pixels (os primeiros e ltimos 8 pixels so descartados) so usados para
codificao. O padro especifica a subamostragem de crominncia 4:2:2,
conforme dado pela Figura A.15, indicando que, para cada dois valores de
luminncia na horizontal, apenas um de cada crominncia deve ser gerado.
Isso implica uma taxa gerada de:
704 480 29,97 16 = 162 Mbps
A Figura A.15 apresenta tambm outras subamostragens de
crominncia utilizadas em outros padres de codificao, como veremos.
4:2:0 4:4:4 4:2:2 4:1:1
1 pixel de luminncia 1 pixel de crominncia Cr e 1 pixel de crominncia Cb
Figura A.15 Subamostragem de crominncia MPEG 2.
O padro H.261 do ITU-T, discutido mais adiante, usa os formatos CIF
(Common Interchange Format), com 288 linhas e 352 pixels por linha, e
QCIF (Quarter CIF), com 144 linhas e 176 pixels por linha, para a
luminncia. Sua extenso, H.263, acrescenta trs novos formatos: o sub-
QCIF (128 96), o 4CIF (704 576), tambm conhecido como SCIF, e o
16CIF (1408 1152). Todos os formatos citados possuem subamostragem de
crominncia (relao de aspecto) 4:2:0, conforme ilustrado na Figura A.15.
O padro MPEG 1 vdeo pode codificar imagens de at 4.096 linhas
4.096 pixels 60 quadros por segundo. No entanto, a maioria das aplicaes
usa o formato SIF, com 240 linhas, 352 pixels por linha e subamostragem de
crominncia 4:2:0.
O padro MPEG 2 pode codificar imagens de at 16.383 linhas
16.383 pixels. O padro organizado tal qual o padro MPEG-4, como
veremos, em diversos perfis e nveis, que especificam o formato utilizado.
Exemplos de formato so: nvel baixo (240 linhas 352 pixels por linha 30
quadros por segundo idntico ao SIF MPEG 1), nvel principal, visando
codificao com qualidade de TV (720 480 30), e os nveis altos, visando
TV de alta resoluo HDTV e produo de filmes (em geral, 1280
430
720 30; 1920 1080 30 ou 1440 1152 30). O padro permite
subamostragem de crominncia 4:2:0, 4:2:2 e 4:4:4.
Note que vrios formatos so menores que os tamanhos de TV atuais.
Note tambm que as imagens de TV so significativamente menores do que as
telas atuais das estaes de trabalho. Quase todos os formatos de vdeo digital
apresentam a imagem em uma rea menor do que a tela da estao. Alguns
padres, no entanto, chegam a resolues suficientes para atender qualidade
das TVs de alta resoluo, a HDTV.
H.261
H.261 [ITU-T H.261, 1993] o padro de compresso mais usado em
sistemas de videoconferncia. Seu objetivo inicial foram as aplicaes para
redes comutadas por circuito, mais especificamente RDSI-FE (Redes Digitais
de Servios Integrados de Faixa Estreita). Da decorre sua gerao de trfego
CBR (Constant Bit Rate, isto , taxa constante) nas taxas de p 64 Kbps, p
variando de 1 a 30.
H.261 divide cada quadro (QCIF ou CIF) em macroblocos de 16 16
pixels, gerando seis blocos de 8 8 pixels (4 de luminncia e 2 de
crominncia), conforme ilustra a Figura A.16.
(a) Blocos
Pixels
(b) Macroblocos
Y
Cb Cr
Figura A.16 Blocos H.261.
O padro define dois tipos de codificao. Na codificao intraquadro, o
macrobloco codificado levando em conta apenas a redundncia espacial do
bloco. Cada bloco passa por um processo muito parecido com o descrito no
431
JPEG modo sequencial, gerando os blocos codificados. Na codificao
preditiva, realizada uma pesquisa no quadro anterior procura de um
macrobloco, o mais parecido possvel com o macrobloco que se quer codificar
(a pesquisa realizada apenas na componente de luminncia e apenas em uma
regio que circunda o macrobloco). O erro de predio (diferena entre os
macroblocos) ento enviado para codificao, sofrendo o mesmo processo
descrito para a codificao intraquadro. No caso da codificao preditiva,
deve tambm ser codificado o vetor (chamado de vetor de deslocamento), que
especifica o deslocamento entre o macrobloco corrente e o macrobloco do
quadro anterior usado para a predio.
Todo macrobloco sofre uma codificao intraquadro e preditiva. A que
gera a maior compresso escolhida. Uma vez codificados, os quadros so
enviados a um buffer que vai regular o fluxo de informao para uma taxa de
bits constante. Lembre-se de que o H.261 foi pensado para uma rede
comutada por circuitos. Como a taxa de entrada no buffer VBR (Variable
Bit Rate, isto , taxa varivel), se no fosse tomada nenhuma providncia
poderia ocorrer estouro de buffer ou falta de bits codificados. Para que isso
no acontea, o tamanho do passo do quantizador (o quantum), dos
coeficientes gerados a partir da transformada de cossenos, ajustado, quando
necessrio, conforme a quantidade de dados no buffer, para se chegar taxa
CBR desejada de sada.
O ajuste no passo do quantizador afeta a qualidade do vdeo gerado,
privilegiando os vdeos com poucas mudanas de cena. Pouca mudana de
cena implica maior compresso, isto , menos bits gerados na codificao que
entra no buffer, o que faz o processo de realimentao diminuir o quantum
para aumentar a quantidade de bits gerados. Como consequncia da
diminuio do quantum, tem-se uma imagem de melhor qualidade. Como em
aplicaes de videoconferncia e videotelefonia no existem, em geral, muitas
mudanas de cenas, o padro bem apropriado para elas.
O padro H.263 [ITU-T H.263, 2005] estende o padro H.261,
introduzindo novos formatos de quadros, como discutimos anteriormente,
otimizando o H.261 para codificao de vdeo a taxas inferiores a 64 Kbps e
adicionando facilidades para maior qualidade e melhores servios. Contudo,
as idias bsicas de compresso so as mesmas.
MPEG-1 e MPEG-2 Vdeo
Idnticos ao H.261, os padres MPEG-1 e MPEG-2 vdeo [ISO/IEC
11172-2, 1993 e ISO/IEC 13818-2, 2000] dividem um quadro em
macroblocos, como apresentado na Figura A.16, vlido tambm para o
MPEG com amostragem de crominncia 4:2:0.
432
Cada bloco pode ser codificado usando apenas a informao
intraquadro, de forma idntica ao que foi apresentado para o JPEG. Quadros
em que todos os blocos so codificados dessa forma so denominados
quadros I.
Um macrobloco pode tambm ser codificado de forma preditiva,
semelhante ao H.261. No entanto, a predio MPEG-1 mais rica, uma vez
que pode ser feita baseada em quadros passados e em quadros futuros da
sequncia de um vdeo. Quando a predio feita baseada em um quadro
passado, tal qual o H.261, codificado o erro de predio (diferena do
macrobloco que se quer codificar para o macrobloco de referncia do quadro
passado), usando os mesmos procedimentos usados para os macroblocos
intraquadros e o vetor de movimento (que d a posio relativa do
macrobloco que se quer codificar para o macrobloco de referncia do quadro
passado). Quadros codificados usando esse tipo de predio so chamados
quadros P. A predio sempre baseada no primeiro quadro do tipo I ou P
anterior.
A estimao do movimento (estimao do macrobloco mais prximo
daquele que se quer codificar) se d dentro de uma regio do quadro de
referncia, conforme ilustra a Figura A.17. Para TV, por exemplo, obtm-se
bom desempenho com p = 15 pixels em cenas comuns de noticirio e p = 63
em cenas de muito movimento, como por exemplo, cenas de esporte.
Figura A.17 Estimao de movimento.
433
Macroblocos tambm podem ser codificados com base no primeiro
quadro I ou P, posterior ou anterior. Nesse caso, teremos dois quadros de
referncia para a procura do melhor casamento. A codificao pode ser
realizada com base no quadro anterior no quadro posterior, ou na
interpolao do quadro anterior e posterior. Quadros codificados usando esse
tipo de predio so chamados quadros B.
Quadros B apresentam como vantagem o fato de, normalmente,
apresentarem uma compresso maior que os quadros I e P (Tabela A.4). So
tambm quadros que, se perdidos, no afetam tanto a qualidade da imagem,
pois o erro cometido no se propagar, uma vez que esses quadros no so
usados como referncia de predio (note que a perda de um quadro I ou P
implica a perda de todos os quadros at o prximo quadro I). No entanto,
quadros B introduzem um retardo extra no processo de codificao porque
devem ser codificados fora da sequncia, alm de exigirem mais
processamento para codificao.
Tabela A.4 Tamanhos tpicos de quadros MPEG 1
Tipo de Quadro Tamanho (Kbytes) Compresso
I 18 2:1
P 6 7:1
B 2,5 50:1
Mdia 4,8 27:1
Ao contrrio do H.261, que escolhe sempre a melhor codificao para o
macrobloco, no MPEG o padro de codificao de quadros um parmetro
da escolha do usurio, isto , o usurio escolhe qual a sequncia de quadros I,
P ou B a ser utilizada. Note que essa escolha vai depender das aplicaes. Por
exemplo, como veremos na Seo A.4.3, o retardo de transferncia pode ser
crtico em aplicaes em que h interatividade em tempo real entre os
participantes, como em um sistema de videoconferncia. Nesse caso, o
nmero de quadros B em sequncia no pode ser muito grande, devido ao
retardo que isso introduz.
O padro MPEG-1 trabalha, em geral, com o formato SIF, embora
maior resoluo tambm seja permitida por sua sintaxe. O padro MPEG-2,
como j mencionado, admite vrios formatos de quadros e diferentes
resolues para as componentes de crominncia. De fato, o MPEG-2
especifica vrios conjuntos de parmetros de restrio, que so definidos nos
434
seus perfis e nveis. Um perfil especifica as facilidades de codificao que
sero utilizadas. Um nvel especifica a resoluo dos quadros, as taxas de bits
etc. Vrias combinaes de perfis e nveis foram definidas, como veremos
mais adiante. O MPEG-2 usa os mesmos tipos de quadro I, P e B, como o
MPEG-1, mas introduz outros mtodos de predio [Netravali et al., 1995]
para lidar com vdeo entrelaado.
8
O MPEG-2 tambm apresenta vrias extenses de escalabilidade
[ISO/IEC 13818-2, 2000]. As extenses proveem, basicamente, duas ou mais
sequncias de bits, ou camadas, que podem ser combinadas para prover um
nico sinal de vdeo de alta qualidade. A camada-base pode, por definio,
ser totalmente decodificada por si mesma, de forma a prover um vdeo de
baixa qualidade. Como veremos a seguir, muitas das tcnicas empregadas so
semelhantes s codificaes progressivas e hierrquica do JPEG.
Com a escalabilidade SNR (Signal to Noise Ratio), outra camada pode
ser adicionada camada-base, oferecendo melhoria na preciso dos
coeficientes da DCT (Discrete Cosine Transform), adicionando valores de
correo para serem utilizados antes da decodificao (aplicao da DCT
inversa). Essa extenso tambm prov a codificao do vdeo na resoluo
4:2:2, tendo por camada-base o vdeo na resoluo 4:2:0.
Escalabilidade por partio de dados uma verso simplificada da
escalabilidade SNR. Com essa extenso, at um certo nmero de coeficientes
de frequncias DCT enviado pela camada-base. Os coeficientes restantes
so enviados por outra camada a ser adicionada bsica.
Na escalabilidade espacial, a camada-base tem uma resoluo espacial
(resoluo geomtrica de cada imagem) menor do que a do vdeo original. A
camada de melhoramento ento acrescida camada-base para se obter a
resoluo original.
Na escalabilidade temporal, a camada-base tem uma resoluo
temporal (nmero de quadros por segundo) menor do que a do vdeo original.
Novamente, a camada de melhoramento adicionada camada-base para a
obteno da resoluo original.
Escalabilidade especialmente til em redes que permitem distinguir os
tipos de fluxos e privilegiar a entrega do mais importante. Assim, em caso de
necessidade ou convenincia de perda, um sinal de vdeo com um mnimo de
qualidade ainda poder ser recebido.
8
Vdeo entrelaado tipicamente usado em TV, onde so primeiro varridas as linhas mpares e
depois as pares. Aos conjuntos de linhas mpares e pares chamamos campos. Assim, um quadro composto
de dois campos.
435
No MPEG-2, o perfil principal (main profile) utiliza os quadros I, P e B
e uma amostragem de cor 4:2:0. O perfil simples (simple profile)
basicamente o perfil principal sem os quadros B. O perfil escalvel SNR
(SNR Profile) adiciona a escalabilidade SNR ao perfil principal. O perfil
escalvel espacialmente (spatially scalable profile) adiciona a escalabilidade
espacial ao perfil escalvel SNR. O perfil alto adiciona cor 4:2:2 ao perfil
escalvel espacialmente. Todos os perfis so limitados ao mximo de trs
camadas. O nvel principal (main level), como mencionado no incio desta
seo, est definido basicamente para o vdeo ITU-R Rec. 601. O nvel
simples (simple level) definido para vdeo SIF. Os dois nveis altos para
HDTV so o nvel alto 1440 (high-1440 level), com um mximo de 1.440
pixels por linha, e o nvel alto (high level) com no mximo 1.920 pixels por
linha. Nem todas as combinaes de perfis e nveis foram padronizadas. No
futuro, quando necessrio, perfis e nveis podero ser adicionados ao padro.
MPEG-4 Vdeo
O MPEG 4 (ISO/IEC 14496) foi finalizado em outubro de 1998 e
tornou-se um padro internacional nos primeiros meses de 1999. No final de
1999 foram acrescentadas novas extenses (MPEG-4 verso 2), tornando-se
um padro internacional formal no comeo de 2000.
O padro em sua forma atual dividido em vrias partes, entre elas:
- Parte 1 Sistema
- Parte 2 Vdeo
- Parte 3 udio
- Parte 10 Codificao Avanada de Vdeo
Das diversas partes, em termos de codificao de vdeo, interessa-nos
especialmente a Parte 10, por incorporar todas as melhorias trazidas pelo
MPEG-4 com relao ao padro MPEG-2.
Em 2001, o grupo de trabalho da especificao MPEG da ISO
reconheceu o potencial dos trabalhos desenvolvidos pelo grupo H.26L
(VCEG Video Coding Expert Group) do ITU-T, como evoluo dos
trabalhos do H.263, e a partir de ento os trabalhos dos dois grupos se
fundiram (JVT Joint Video Team) para a definio de um novo padro de
codificao de vdeo. O resultado foram dois padres idnticos: ISO MPEG-4
Parte 10 [ISO/IEC 14496-10, 2005] e ITU-T H.264, oficialmente conhecidos
como AVC (Advanced Video Coding), publicado pela primeira vez em 2003.
436
Como o MPEG-2, o padro dividido em perfis. O perfil baseline visa
a fluxos de vdeo simples (de baixa resoluo); por exemplo, para
videotelefonia; o perfil principal visa qualidade de TV de definio padro;
o perfil alto (perfil estendido) visa a fluxos de vdeo de alta definio. Esse
ltimo perfil subdividido em quatro perfis: o perfil alto (para o suporte a
vdeo de 8 bits por amostra com subamostragem de crominncia 4:2:0); o
perfil alto 10 (para o suporte a vdeo de at 10 bits por amostra com
subamostragem de crominncia 4:2:0); o perfil alto 4:2:2 (para o suporte a
vdeo de at 10 bits por amostra com subamostragem de crominncia 4:2:2) e
o perfil alto 4:4:4 (para o suporte a vdeo de at 12 bits por amostra com
subamostragem de crominncia 4:4:4 e transformada de cor residual inteira
para codificao de sinal RGB).
Os elementos funcionais bsicos (predio, transformada, quantizao,
codificao por entropia) do AVC tm poucas diferenas com relao aos
padres anteriores (MPEG-1, MPEG-2, MPEG-4 Parte 2, H.261, H.263). As
mudanas importantes ocorrem em detalhes de cada um dos elementos.
O processo de codificao processa quadros de vdeo em unidades de
macroblocos (1616 pixels). Ele forma a predio do macrobloco baseada em
dados j previamente codificados, ou do quadro corrente (predio intra) ou
de quadros j codificados e transmitidos (predio inter).
O mtodo de predio AVC mais flexvel do que os dos padres por
ns anteriormente discutidos, permitindo uma predio mais precisa e, assim,
uma melhor compresso. Os blocos de predio so de tamanhos variveis. A
predio intra pode usar blocos de tamanho 1616 ou 44. A predio inter
pode usar blocos 1616, 168, 816, 88, 84, 48 ou 44.
Diferentemente do MPEG-1, do MPEG-2 e do MPEG-4 Parte 2, a
predio de cada macrobloco pode ser baseada em um ou dois quadros
quaisquers, passados ou futuros, que j foram codificados. Essa possibilidade
extremamente importante quando o movimento na cena peridico.
Um bloco, obtido aps a predio, transformado usando uma
transformada inteira 44 ou 88 (a transformada inteira uma forma
aproximada da transformada discreta de cosseno).
Os valores e parmetros resultantes (elementos sintticos) so
convertidos em cdigo binrio usando codificao por carreia e/ou
codificao aritmtica, tambm com algumas melhoras incorporadas.
A Figura A.18 ilustra o processo de codificao, e a Figura A.19, o
processo de decodificao .
437
Reordena
Codifica
por
entropia
T Q Fn (atual)
Fn-1
(referncia)
MC
ME
Escolhe
predio
Intra
Predio
Intra
Fn
(reconstrudo)
T
-1
Q
-1
Dn X
NAL
Inter
Intra
uFn
Dn
(1 ou 2 quadros
previamente
codificados)
+
+
+
P
Filtro
Figura A.18 Processo de codificao AVC.
Reordena
Decodifica
por
entropia
T
-1
Q
-1 Fn
(reconstrudo)
Fn-1
(referncia)
MC
Predio
Intra
Dn X
NAL
Inter
Intra
(1 ou 2 quadros
previamente
codificados)
+
P
+
Filtro
uFn
Figura A.19 Processo de decodificao AVC.
A.3.9 Multiplexao e Sincronizao
Tanto o H.261 quanto o MPEG padronizam a forma como informaes
audiovisuais devem ser multiplexadas (unidas em um nico fluxo). No caso
do MPEG, a padronizao MPEG System [ISO/IEC 11172-1, 1993 e
ISO/IEC 13818-1, 2000] responsvel por essa especificao, como
mencionamos no Captulo 1. Ambos os padres adicionam aos fluxos
elementares de udio e vdeo informaes para suas exibies sincronizadas.
A sincronizao realizada pela adio de selos de tempo (timestamps) a
conjuntos de amostras codificadas de vdeo e udio, baseadas em um relgio
compartilhado. A Figura A.20 ilustra o procedimento.
438
Fonte de
udio
Codificador
de udio
Fonte de
vdeo
Codificador
de vdeo
Codificador e
Multiplexador
Relgio do sistema
Fluxo
Figura A.20 Multiplexao e sincronizao dos fluxos de udio e vdeo.
Um fluxo MPEG-1 organizado em duas camadas: a camada pack e a
camada packet. A camada pack contm informaes utilizadas por todos os
fluxos elementares, e a camada packet, as informaes particulares a cada
fluxo. Um fluxo MPEG consiste em um ou mais packs. O cabealho pack
contm informaes de temporizao do sistema e sobre as taxas de dados. O
cabealho packet contm a identificao do fluxo elementar, os requisitos de
armazenamento e informaes de temporizao. Os dados packet contm um
nmero de bytes varivel de um mesmo fluxo elementar. Assim, depois de
remover o cabealho packet, os dados packet de todos os packets com o
mesmo identificador so concatenados para a recuperao de um fluxo
elementar. At 32 fluxos de udio e 16 fluxos de vdeo podem ser
multiplexados em um fluxo MPEG-1. A Figura A.21 apresenta a estrutura de
camadas MPEG-1 System [ISO/IEC 11172-1, 1993].
Figura A.21 Camadas MPEG-1 System.
439
A funo do MPEG-2 System [ISO/IEC 13818-1, 2000] idntica do
MPEG-1. Contudo, o MPEG-2 System especifica dois formatos de dados: o
fluxo de programa (program stream) e o fluxo de transporte (transport
stream) (Figura A.22), conforme j mencionamos no Captulo 1. O fluxo de
programa similar e compatvel com o fluxo MPEG-1 System. Ele foi
otimizado para aplicaes multimdia e para ser processado por software.
O fluxo de transporte pode transportar mltiplos programas
simultaneamente e otimizado para aplicaes nas quais a perda de dados
comum. O fluxo de transporte consiste em pacotes de tamanho fixo (188
bytes, incluindo 4 bytes de cabealho).
Codificador
de vdeo
Empacotador
Codificador
de udio
Empacotador
Program stream
Dados de
vdeo
Dados de
udio
Mux PS
Mux TS
Transport stream
Abrangncia da Especificao System
Vdeo
PES
udio
PES
Figura A.22 MPEG-2 System.
Similar ao MPEG-1 e MPEG-2, o MPEG-4 System [ISO/IEC 14496-1,
2001] desenvolvido para fornecer multiplexao de fluxos de dados
elementares, sincronizao e empacotamento. Adicionalmente, o MPEG 4
System fornece parmetros de representao/manipulao bsicos
(translao, rotao e zoom) no cabealho da camada de fluxo de dados de
cada objeto.
Diferentemente da codificao linear de udio e vdeo do MPEG-1 e
MPEG-2, a codificao MPEG 4 , no entanto, baseada em objetos, isto , as
cenas audiovisuais so codificadas em termos de objetos. Um objeto pode ser
uma imagem, um vdeo ou um udio.
Objetos codificados separadamente fornecem trs benefcios:
reusabilidade a abordagem orientada a objeto permite aos autores
reusarem material audiovisual mais rapidamente; escalabilidade objetos
podem ser codificados usando diferentes resolues espaciais e temporais (a
resoluo do objeto pode ser ajustada para casar com a capacidade do meio
de transporte); interatividade porque os objetos audiovisuais so
compostos em quadros no decodificador, o usurio pode controlar a sada.
440
O MPEG-4 considera uma cena como sendo composta de objetos de
vdeo (Video Objects) VOs. Os VOs tm propriedades como forma,
movimento, textura etc. Eles vo constituir as entidades no fluxo de bits que o
usurio pode manipular e ter acesso. Um plano de objetos de vdeo (Video
Object Plane VOP) uma ocorrncia de um VO em dado instante de
tempo. Cada quadro consiste em vrios VOPs. Uma cena que contm somente
um VOP pode corresponder aos padres correntes, tais como MPEG-1,
MPEG-2 e MPEG-4. Cada VOP tem sua prpria resoluo espacial e
temporal.
Uma cena dividida em objetos, como mencionado, possui uma
organizao hierrquica. Uma informao adicional enviada com os VOPs a
fim de informar ao receptor como compor a cena. A descrio de cada cena
baseia-se em conceitos da Virtual Reality Modeling Language (VRML
linguagem de modelagem de realidade virtual). Contudo, o padro MPEG 4
introduziu novos conceitos de modelagem e otimizou os j existentes, dando
origem a uma linguagem diferente e mais poderosa: Binary Format for
Scenes (BIFS).
Note que, ao dividir uma cena em objetos e relacion-los utilizando uma
linguagem de descrio de cenas, o padro MPEG-4 est de fato tentando
padronizar uma linguagem que pode ser usada na descrio de
relacionamentos para a transmisso de dados assncronos, conforme
discutimos na Seo 1.2.3.1 do Captulo 1. Naquele captulo comentamos que
o padro MPEG-2 System, utilizado em todos os principais sistemas de
televiso digital terrestre, especificava os vrios tipos de servio, mas no
especificava a linguagem usada para sincronizao no servio assncrono. O
padro MPEG-4 vai um passo adiante na especificao do BIFS. Mais
recentemente discute-se dentro do MPEG-4 a adoo de uma linguagem mais
eficiente e de mais alto nvel (MPEG-4 Parte 20) dentro da representao
denominada LASeR (Lightweight Application Scene Representation)
[ISO/IEC 14496-20, 2006].
A.4 Requisitos de Comunicao das Diversas
Mdias
As caractersticas e requisitos de comunicao exigidos pelos diversos
tipos de mdia so muito diferentes. Vrias caractersticas devem ser
consideradas ao classificarmos fontes de trfego. A natureza do trfego
gerado uma de suas caractersticas mais importantes, dando origem a trs
classes bsicas: a classe de trfego contnuo com taxa constante (Constant Bit
Rate CBR), a classe de trfego em rajadas (bursty) e a classe de trfego
contnuo com taxa varivel (Variable Bit Rate VBR).
441
Na classe de trfego contnuo com taxa constante,
9
o trfego, como o
prprio nome diz, constante e, por conseguinte, sua taxa mdia igual sua
taxa de pico. Essa taxa o nico parmetro necessrio para caracterizar tal
fonte.
As fontes cujo trfego gerado tem caracterstica de rajadas apresentam
perodos ativos (durante os quais h gerao de informao pela fonte, que
opera na sua taxa de pico) intercalados por perodos de inatividade (durante
os quais a fonte no produz trfego algum). Para caracterizar uma fonte com
trfego em rajadas no suficiente utilizarmos a taxa mdia de gerao de
informao, j que essa taxa no representa corretamente o seu
comportamento. A taxa mdia nem sequer representa uma taxa na qual a
fonte opera em algum momento. Muito mais significativas so informaes
sobre a distribuio das rajadas ao longo do tempo, a durao das rajadas e a
taxa de pico atingida durante as rajadas. Alguns parmetros comumente
utilizados para caracterizao desse tipo de trfego incluem a durao mdia
dos perodos de atividade e a explosividade (burstiness) da fonte a razo
entre a taxa de pico e a taxa mdia de utilizao do canal.
10
Por fim, as fontes de trfego contnuo com taxa varivel apresentam
variaes na taxa de transmisso ao longo do tempo. Parmetros como a
mdia e a varincia da taxa de transmisso podem ser utilizados para
caracterizar o comportamento de fontes com essa caracterstica. O parmetro
de explosividade (burstiness) tambm bastante utilizado na caracterizao
dessas fontes.
Requisitos sobre a qualidade do servio de comunicao desejado
(QoS), tais como retardo mximo de transferncia, variao estatstica do
retardo (jitter), vazo mdia, taxas aceitveis de erro de bit e de pacote de
dados, variam muito de uma mdia para outra e so dependentes da aplicao.
De forma geral, podemos caracterizar as diversas mdias, quanto aos
requisitos de comunicao exigidos, como se segue.
A.4.1 Texto
O trfego gerado por informaes em texto , em sua grande maioria, de
rajada. Para compreender essa natureza do trfego, pense na comunicao de
um terminal com um computador durante a execuo interativa de um
programa. A vazo mdia dos dados vai depender muito da aplicao,
9
Em geral, os padres de comunicao utilizam a palavra contnuo para caracterizar sem
interrupo e a taxas constantes. Note, no entanto, que temos, alm do trfego em rajadas, o trfego sem
interrupo mas com taxa varivel. Em geral, os padres chamam apenas de trfego com taxa varivel
(VBR) a ambos os trfegos (em rajadas e contnuo com taxa varivel), independentemente de serem sem
interrupo ou no.
10
Existem outras definies para a medida da explosividade da fonte: a razo entre o desvio padro e
a taxa mdia gerada, por exemplo.
442
variando desde alguns poucos bits por segundo para aplicaes de correio
eletrnico, at alguns megabits por segundo em transferncia de arquivos.
Para texto, excetuando-se algumas aplicaes em tempo real, como por
exemplo para controle de processos crticos, o retardo mximo de
transferncia e a variao estatstica do retardo no constituem problemas,
sendo seus requisitos, em geral, facilmente satisfeitos pelo sistema de
comunicao. Quanto tolerncia a erros, na grande maioria das aplicaes
no se pode tolerar erro nem em um nico bit: suponha, por exemplo, o caso
da perda de um bit numa transferncia eletrnica de fundos.
A.4.2 Imagem
O trfego gerado em aplicaes grficas animadas, onde vrios quadros
so gerados em intervalos regulares de tempo, tem caractersticas bem
semelhantes s da mdia de vdeo, comentadas mais frente. Excetuando o
caso de imagens animadas, a natureza do trfego gerado pela mdia grfica
tambm de rajadas, com vazes mdias chegando a algumas dezenas de
megabits por segundo. Como em textos, o retardo mximo e a variao
estatstica do retardo, em geral, no so relevantes.
Como discutido na Seo A.1, as imagens grficas podem estar no
formato vetorial ou matricial. Para imagens no formato matricial e sem
compresso, a taxa de erro de bit pode ser bem maior que a taxa de erro de
pacote, uma vez que, em geral, no haver nenhum problema se, por exemplo,
um nico pixel de uma tela ficar azul em vez de verde. O mesmo no se pode
dizer da perda de um pacote, que poder, por exemplo, apagar um bloco da
imagem na tela. Para imagens no formato vetorial e imagens (vetoriais ou
matriciais) em que foram utilizadas tcnicas de compresso ou compactao,
a tolerncia perda depende muito da aplicao e de seus usurios. Como
discutimos na Seo A.3.6, existem mtodos de compresso que identificam a
poro mais importante dos dados de uma imagem. Para esses dados, deve-se
evitar ao mximo as perdas. As pores menos importantes podem ser
descartadas, se necessrio (seja por erro na transmisso, por
congestionamento no sistema de comunicao ou mesmo porque o usurio
final no necessita delas para obter a informao que deseja). Um sistema de
comunicao deve poder identificar as pores que ele deve manter ntegras.
Outro caso importante, com relao s perdas, so as imagens que no so
processadas somente pelo olho humano, mas tambm pelo computador como,
por exemplo, imagens mdicas ou cartogrficas. Nesse caso, a perda de um
nico bit (seja devido comunicao ou ao mtodo de compresso) pode ser
intolervel (imagine uma doena que se quer diagnosticar atravs de uma
imagem mdica).
443
A.4.3 udio
A mdia de udio tem caractersticas bem distintas das mencionadas nos
dois pargrafos anteriores, principalmente em aplicaes de tempo real com
interatividade, como os servios conversacionais do ITU-T. Comeando pela
natureza do trfego gerado, a mdia de udio se caracteriza por gerar um
trfego contnuo com taxa constante. Mesmo quando, no sinal de voz,
realizada a compactao por deteco de silncio, por exemplo, passando a se
caracterizar como um trfego de rajada [Gruber, 1982], ele deve ser
reproduzido no destino a uma taxa constante. O trfego gerado para
comunicao dessa mdia do tipo CBR, caso no seja empregada nenhuma
tcnica de compactao ou compresso. Em caso contrrio, o trfego se
caracteriza como VBR e, s vezes, como no caso da voz com deteco de
silncio, como um trfego em rajadas.
A vazo mdia gerada pela mdia de udio depende da qualidade do
sinal, da codificao e compactao ou compresso utilizadas. Para sinais de
voz, por exemplo, j apresentamos a tcnica PCM, que gera 64 Kbps se
utilizarmos 8 bits para codificar cada amostra (tomada a cada 125 seg, isto
, 8.000 amostras por segundo). Com qualidade aproximadamente igual, a
codificao ADPCM gera 32 Kbps. Sinais de udio de alta qualidade
(qualidade de CD estreo, por exemplo) geram taxas bem superiores, como,
por exemplo, os CDs de udio, onde a taxa de 1,411 Mbps, como vimos na
Seo A.2.1.
Quanto s perdas, as taxas de erros de bits ou de pacotes podem ser
relativamente altas, devido ao alto grau de redundncia presente nos sinais de
udio. O nico requisito que os pacotes no sejam muito grandes (no caso
da voz, menores que uma slaba), o que normalmente j satisfeito para no
se perder tempo no empacotamento e, assim, no aumentar o retardo de
transferncia. Perdas da ordem de 1% da informao de voz so tolerveis
11
[Gopal, 1984; Gruber, 1985]. Uma vez que as redes de comunicao
utilizam, hoje em dia, meios fsicos de alta confiabilidade, a deteco de erros
para a voz nessas redes pode ser tranquilamente dispensada, em benefcio de
um maior desempenho. Apesar da baixa taxa de erros das redes, por exemplo
em fibra tica, nas mdias grfica e de texto a deteco de erros ainda , na
maioria das vezes, necessria, e em alguns casos at a deteco e a correo.
Um cuidado adicional deve ser tomado quando, devido s tcnicas de
compresso utilizadas no udio, um erro pode se propagar para outros bits.
Nesse caso, o erro pode ser intolervel. Ainda com respeito ao udio, pores
da informao podem ser diferenciadas quanto tolerncia s perdas. No
caso da voz, por exemplo, perdas nos intervalos de silncio so muito mais
11
Na realidade, como j comentamos, a porcentagem de perda depende do tamanho do surto de voz e
se a perda ocorre no incio ou no meio do surto.
444
tolerveis do que perdas durante os surtos de voz. Um sistema de
comunicao deve poder identificar as pores mais sensveis a perdas, caso
seja necessrio o descarte de dados.
No caso da utilizao de sistemas de comunicao que apresentam
variao estatstica do retardo (como as redes comutadas por pacotes em um
sistema de WebTV), tal variao deve ser compensada. Para entendermos
melhor o problema, analisemos a Figura A.23.
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
TEMPO
ORIGEM
TEMPO
DESTINO
Surto de Voz
Perodo de Silncio
Silncio Introduzido Silncio Eliminado
Figura A.23 Efeito da variao estatstica do retardo na comunicao de voz.
Na linha horizontal superior vemos os surtos de voz e de silncio sendo
gerados na fonte a uma taxa constante. Os surtos de voz so divididos em
pacotes, que so as unidades que transitaro no sistema de comunicao (os
surtos de silncio no so transmitidos). Uma vez que o pacote gerado, ele
imediatamente entregue para transmisso (veremos a seguir que o retardo
mximo um requisito importante). Se os pacotes sofrerem retardos
variveis, chegaro ao destino no mais preservando a continuidade,
conforme mostra a linha horizontal inferior da figura, podendo gerar
intervalos de silncio dentro de um surto de voz ou diminuir, e at mesmo
eliminar, intervalos de silncio, o que pode causar a perda da inteligibilidade
da informao no destino. Alguma forma de compensao dessa variao
estatstica do retardo deve ser realizada.
12
A estratgia utilizada pelos
algoritmos de compensao baseia-se fundamentalmente em assegurar uma
12
Note que a variao estatstica do retardo no necessariamente introduzida s pela rede de
comunicao, mas por todo o sistema. Ela introduzida desde a interao da placa de udio com o sistema
operacional da estao, passando pelos protocolos de comunicao (sistema operacional de rede), at chegar
ao sistema de transmisso. No destino, o caminho semelhante, mas em ordem inversa, tambm pode
introduzir aleatoriedade no retardo antes da reproduo. Assim, embora muitas vezes o sistema de
transmisso no introduza aleatoriedade no retardo, a compensao ainda deve ser feita.
445
reserva de pacotes antes de dar incio ao processo de reproduo,
introduzindo um retardo inicial a cada surto de voz. Aparentemente, o
problema estaria resolvido se escolhssemos o retardo inicial bem grande;
entretanto, o valor desse retardo est limitado pelo mximo retardo de
transferncia (desde a gerao at a reproduo) permitido para o sinal de
voz, sem que haja perda da interatividade da comunicao [Bastos et al.,
1992]. As referncias [Soares et al., 1991; Bastos et al.. 1992; Soares et al..
1992; Gopal. 1984; Adams et al.. 1985; Faria. 1992] discutem com algum
detalhe a anlise de desempenho de vrios algoritmos para compensao da
variao estatstica de retardo, com o objetivo de manter a continuidade em
sinais de voz. Embora apresentados para sinais de voz, os algoritmos podem
ser facilmente estendidos para qualquer sinal contnuo (com taxa constante ou
varivel).
O retardo de transferncia mximo crtico para o udio,
principalmente no caso de conversaes. Um dos motivos o problema do
eco, mas, mesmo nos casos em que o eco no causa problemas ou que
canceladores de eco sejam utilizados, o retardo de transferncia mximo pode
ser crtico. Cada interlocutor, em uma conversao, normalmente espera o fim
do discurso do outro para dar incio sua fala; se o retardo de transferncia
for muito grande, a conversao comea a sentir um efeito de ruptura,
podendo at se tornar invivel (se o leitor j utilizou a rede telefnica via
satlite, deve ter sentido esse efeito). Um retardo de transferncia maior que
200 ms j comea a incomodar os interlocutores [Bastos et al., 1992]. Os
padres de telefonia estipulam 40 ms para distncias continentais e 80 ms
para distncias intercontinentais como limites para o retardo mximo de
transferncia. bom frisarmos novamente que os problemas de retardo s so
crticos em aplicaes que exigem comunicao interativa em tempo real.
Nesse caso, como no podemos introduzir um retardo inicial muito grande
para compensarmos a variao estatstica do retardo, a compensao s
poder ser efetiva se a variao estatstica apresentada for pequena.
A.4.4 Vdeo
Tal qual a mdia de udio, a mdia de vdeo se caracteriza por gerar um
trfego contnuo com taxa constante. Da mesma forma que no udio, mesmo
quando no sinal realizada alguma tcnica de compactao ou compresso e
o trfego gerado para comunicao se caracterizar como um trfego com
taxas variveis, o sinal deve ser reproduzido no destino a uma taxa constante.
Como na mdia de udio, o retardo de transferncia mximo tem grande
importncia, e a variao estatstica do retardo deve ser compensada.
Normalmente, como o vdeo vem acompanhado de udio (sincronizado com
446
udio), uma vez obedecidos os requisitos de retardo deste, so obedecidos os
daquele.
A vazo mdia gerada por uma fonte de vdeo varia com a qualidade do
sinal e os algoritmos de codificao, compactao e compresso empregados,
conforme discutido na Seo A.3.8.
Em vdeo, a taxa de erro de bit pode ser maior que a taxa de erro de
pacote, pelos mesmos motivos explicitados para as imagens grficas no
formato matricial. No entanto, no vdeo, como a imagem no esttica e
devem ser gerados vrios quadros por segundo, a taxa de erro de pacote no
to crtica. Mesmo a taxa de erro de bit tolervel maior do que aquela para
imagens estticas [Hehmann et al., 1990]. Na verdade, a discusso sobre a
taxa de erro aceitvel no to simples. Quando utilizamos tcnicas de
compresso, um erro pode se propagar. Dessa forma, alguns quadros em que
o erro no se propaga podem tolerar erros de bits e de pacotes. Naqueles em
que o erro se propaga, s vezes at um nico erro de bit pode ser intolervel.
Tal qual nas imagens no formato matricial, quando se utilizam tcnicas de
compresso ou compactao, a tolerncia perda depende muito da aplicao
e de seus usurios. Como discutimos na Seo A.3.8, existem mtodos de
compresso que identificam a poro mais importante dos dados de um vdeo.
Para esses dados, deve-se evitar ao mximo as perdas, as pores menos
importantes podem ser descartadas, se necessrio (por erro na transmisso ou
por congestionamento no sistema de comunicao, ou mesmo porque o
usurio final no necessita delas para obter a informao que deseja). Mais
uma vez, um sistema de comunicao deve poder identificar as pores em
que deve minimizar as perdas.
Bibliografia:
ABNT NBR 15602-1 (2007). Associao Brasileira de Normas Tcnicas,
Televiso digital terrestre codificao de vdeo, udio e multiplexao,
Parte 1: Codificao de vdeo, Sistema Brasileiro de TV Digital
Terrestre, NBR 15602-1.
Adam, C. e Ades, S. Voice Experiments in the Universe Project.
Proceedings of International Conference on Communications, 29.4.1
29.4.9, 1985.
Bastos, T.L.P. e Soares, L.F.G. Anlise de algoritmos para reproduo em
tempo real de voz em redes de pacotes. Relatrio Tcnico IBM CCR-141,
Rio de Janeiro. Janeiro, 1992.
Cormen, T.H.; Leiserson, C.E.; Rivest, R.L.; Stein, C. Algoritmos. Traduo
da 2. ed. americana. Teoria e Prtica. 2002.
447
Faria, A.L.A. Implementao do mecanismo de controle de acesso por
deteco de silncio em um sistema de teleconferncia. Dissertao de
Mestrado, Depto. de Engenharia Eltrica, PUC-Rio. Maro, 1992.
Gruber, J.G. A Comparison of Mesure and Calculated Speech Temporal
Parameters Relevant to Speech Activity Detection. IEEE Transactions
on Communications, vol. com-30, n.4. Abril, 1982.
Gruber, J.G. Subjective Effects of Variable Delay and Speech Loss in
Dinamically Managed Voice Systems. IEEE Transactions on Com-
munications, vol. com-33. Agosto, 1985.
Gopal, P.M., Wong, J.W. e Majithia, J.C. Analysis of Playout Strategies for
Voice Transmission Using Packet Switching Techniques. Performance
Evaluation, n.4. Fevereiro, 1984.
Hehmann, D. B., M.G. Salmony, and H.J. Stuttgen. Transport services for
multimedia applications on broadband networks. Computer
Communications Vol. 13 N. 4, 1990, pp. 197-203.
ISO/IEC 10918-1 (1994). International Organization for
Standardization/International Eletrotecnical Committee, Digital
Compression and Coding of Continuous-Tone Still Images, Part 1:
Requirements and Guidelines, ISO/IEC IS 10918-1.
ISO/IEC 11172-1 (1993). International Organization for
Standardization/International Eletrotecnical Committee. Information
Technology Coding of Moving Pictures and Associated Digital Storage
Media at up to About 1.5 Mbits/s, Part 1: Systems. ISO/IEC IS 11172-1.
ISO/IEC 11172-2 (1993). International Organization for
Standardization/International Eletrotecnical Committee. Information
Technology Coding of Moving Pictures and Associated Digital Storage
Media at up to About 1.5 Mbits/s, Part 2: Video, ISO/IEC IS 11172-2.
ISO/IEC 11172-3 (1993). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Coding of Moving Pictures and Associated Digital Storage
Media at up to About 1.5 Mbits/s, Part 3: Audio, ISO/IEC 11172-3.
ISO/IEC 13818-1 (2000). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 1: Systems, ISO/IEC 13818-1.
ISO/IEC 13818-2 (2000). International Organization for
Standardization/International Eletrotecnical Committee, Information
448
Technology Generic coding of moving pictures and associated
information, Part 2: Video, ISO/IEC 13818-2.
ISO/IEC 13818-3 (1998). International Organization for
Standardization/International Eletrotecnical Committee. Information
Technology Generic Coding of Moving Pictures and Associated Audio:
Audio. ISO/IEC JTC1/SC29/WG11 13818-3.
ISO/IEC 13818-7 (1997). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 7: Advanced Audio Coding (AAC), ISO/IEC 13818-7.
ISO/IEC 14496-1 (2001). International Organization for
Standardization/International Eletrotecnical Committee. Coding of
Audio-Visual Objects, Part 1: Systems. ISO/IEC JTC1/SC29/WG11
14496-1. 2001.
ISO/IEC 14496-2 (2001). International Organization for
Standardization/International Eletrotecnical Committee. Coding of
Audio-Visual Objects, Part 2: Visual.ISO/IEC JTC1/SC29/WG11
14496-2. 2001.
ISO/IEC 14496-3 (2004). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Coding of Audio-Visual Objects, Part 3: Audio, ISO/IEC
14496-3.
ISO/IEC 14496-10 (2005). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Coding of Audio-Visual Objects, Part 10: Advanced
Video, ISO/IEC 14496-10.
ISO/IEC 14496-20 (2005). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Coding of Audio-Visual Objects, Part 20: Lightweight
Application Scene Representation (LASeR) and Simple Aggregation
Format (SAF), ISO/IEC 14496-20.
ITU-R BT.601-4 (1994). International Communication Union Encoding
Parameters of Digital Television for Studios, Recommendation BT.601-
4, BT Series Volume, Geneva.
ITU-T G.711 (1988). International Communication Union. Pulse Code
Modulation of Voice Frequencies. Recommendation G.711. Geneva.
ITU-T G.722 (1988). International Communication Union. 7 khz Audio-
Coding Within 64 kbit/s. Recommendation G.722. Geneva.
449
ITU-T G.723.1 (1996). International Communication Union. Dual Rate
Speech Coder for Multimedia Communications Transmitting at 5.3 and
6.3 kbit/s. Recommendation G.723.1. Geneva.
ITU-T G.726 (1990). ITU-T. 40, 32, 24, 16 kbit/s Adaptive Differential
Pulse Code Modulation (ADPCM). ITU-T G.726.
ITU-T G.728 (1992). International Communication Union. Coding of
Speech at 16 kbit/s Using Low-Delay Code Excited Linear Prediction.
Recommendation G.728. Geneva.
ITU-T G.729 (1996). International Communication Union. Coding of
Speech at 8kbit/s Using Conjugate-Structure Algebraic-Code-Excited
Linear-Prediction (CS-ACELP). Recommendation G.729. Geneva.
ITU-T H.261 (1993). International Communication Union. Video Codec for
Audiovisual Services at p*64 kbit/s. Recommendation H.261. Geneva.
ITU-T H.263(2005). International Communication Union. Video Coding for
Low Bit Rate Communication. Recommendation H.263. Geneva.
Netravali, A.N.; Haskell, B.G. Digital Pictures. 2. ed. Plenum Press,
1995.
Soares, L.F.G., Martins, S.L. e Bastos, T.L.P. Um algoritmo para
compensao da variao estatstica do retardo em redes comutadas por
pacotes. Anais do 8. Simpsio Brasileiro de Redes de Computadores,
1991.
Soares, L.F.G. e Bastos, T.L.P. Anlise de algoritmos para reproduo em
tempo real de voz em redes depPacotes. Anais do 10. Simpsio
Brasileiro de Redes de Computadores. Recife. 1992.
Soares, L.F.G.; Colcher, S. e Souza, G.L. Redes de computadores: das
LANs, MANs e WANs s redes ATM. Rio de Janeiro: Campus, 1995.
450
Apndice B
DSM-CC
Digital Storage Media
Command and
Control
O DSM-CC (Digital Storage Media Command and Control) tem uma
especificao extremamente complexa, e grande parte dela no est
diretamente relacionada a nenhum dos padres dos sistemas de TV digital.
Como consequncia, neste apndice ignoraremos grande parte do padro,
simplificaremos em muito a discusso de outras partes e consideraremos
apenas os casos necessrios ao entendimento de como o DSM-CC atua na
difuso de dados nos principais sistemas de TV digital.
451
B.1 Introduo
O DSM-CC [ISSO/IEC 13818-6, 1998] foi originalmente projetado
para ser implementado usando algum tipo de mecanismo RPC (Remote
Procedure Call) em outras palavras, onde os dados seriam buscados
(pulled from) de um provedor de contedos. Sistemas de difuso, como a TV
digital terrestre, so, no entanto, de natureza diferente. Neles, os dados so
enviados sem requisio (pushed to), do provedor para o cliente consumidor.
Uma outra soluo deve ento ser encontrada para o acesso aos dados.
A soluo encontrada bastante simples, mas nem um pouco eficiente.
Arquivos de dados devem ser periodicamente transmitidos pelo provedor de
contedos, devendo o cliente receptor aguardar pelo arquivo que deseja. Esse
tipo de soluo chamada de carrossel.
O DSM-CC d suporte a dois tipos de carrossel: carrossel de dados e
carrossel de objetos, assunto das Sees B.2 e B.3, respectivamente.
B.2 Carrossel de Dados
O carrossel de dados a forma mais simples de transmisso de dados
DSM-CC. Nele no existe qualquer indicao sobre em que consistem os
dados. Cabe ao receptor analisar os dados de um modo que faa sentido para
ele. As especificaes ATSC (padro americano) [ATSC A/90, 2001] e
ARIB (padro japons) [ARIB STB-B24 V 4.0, 2004] fazem uso dessa
modalidade de transmisso.
Um carrossel de dados consiste em um nmero de mdulos, em que cada
mdulo contm um item de dados como, por exemplo, um arquivo. No existe
nenhuma estruturao de mais alto nvel acima do mdulo.
Cada mdulo pode, por sua vez, ser quebrado em blocos, como mostra a
Figura B.1.
Figura B.1 Mdulo de um carrossel.
452
Elementos de um carrossel DSM-CC so inseridos em um conjunto de
mensagens DSM-CC:
- DSM-CC DownloadDataBlock message (DDB), que contm os dados dos
mdulos de um carrossel. Cada mensagem contm um bloco, todos do
mesmo tamanho, exceto o ltimo bloco de um mdulo, o que torna mais
fcil o parser de mensagens. A Figura B1 ilustra tais mensagens.
- DSM-CC download control messages, que especificam, para o receptor,
como as mensagens DSM-CC DownloadDataBlock so organizadas em
mdulos, isto , como a estrutura do mdulo.
Existe apenas um tipo de mensagem DDB. Cada mensagem contm uma
identificao do mdulo a que pertence e da verso do mdulo, alm da
numerao do bloco correspondente ao mdulo.
Como mencionamos, a estrutura de um mdulo definida em uma ou
mais mensagens de controle (download control messages), que podem ser de
vrios tipos.
Como mdulos grandes podem necessitar de mais de um bloco, e um
carrossel pode ter mais de um mdulo, necessria alguma informao
adicional para descrever como os blocos so agrupados em mdulos. Isso
feito dentro da mensagem DownloadInfoIndication (DII).
Cada DII contm uma descrio para um conjunto de mdulos e os
parmetros usados para suas transmisses. Todos os mdulos em uma DII
so ditos pertencerem ao mesmo grupo.
A DII especifica o tamanho das mensagens DownloadDataBlock usadas
na transmisso dos mdulos, o ID de cada um dos mdulos, seus tamanhos e
suas verses, assim como vrios descritores que podem dar mais informaes
de cada mdulo.
Sabendo o tamanho de cada mdulo e o tamanho de cada um de seus
blocos, um receptor pode calcular quantos blocos so necessrios para a
recepo completa. O nmero de verso permite ao receptor saber quando o
contedo de um mdulo mudou.
Mensagens DDB e DII so transportadas em sees privadas MPEG-2,
por ns apresentadas no Captulo 1. Assim, uma limitao que o MPEG
impe ao DSM-CC o tamanho mximo de suas mensagens, igual ao
tamanho mximo de uma seo, isto , 4 KBytes.
Carrossis que podem ser descritos por uma nica mensagem DII (de
valor menor que 4 KBytes) so chamados carrossis de uma camada.
Para carrossis maiores, mais de uma mensagem DII pode ser
necessria. Nesse caso, uma mensagem DownloadServerInitiate (DSI) atua
453
como uma mensagem de alto nvel para as demais mensagens DII. Ela agrupa
mensagens DII e os grupos de mdulos de cada uma delas em um
supergrupo.Carrossis em que vrias mensagens DII so reunidas em um
supergrupo so chamados de carrossis de duas camadas.
Como mencionamos, uma aplicao que se utiliza do carrossel de dados
tem de saber o formato dos dados contidos e como manipul-los. Em
estruturaes de dados mais complexas, o carrossel de dados no muito til.
Como uma estrutura de arquivos e diretrios uma forma muito importante
de organizao, o carrossel de objetos oferece uma soluo melhor para esse
caso, como discutido na prxima seo.
B.3 Carrossel de Objetos
Carrossis de objetos so construdos tendo por base o modelo de
carrossel de dados, adicionando a ele o conceito de arquivos, diretrio e
fluxos. As especificaes SBTVD-T (padro brasileiro) [ABNT NBR 15606-
3, 2007] e DVB (padro europeu) [ETSI TS 102 812 v1.2.1, 2003] fazem
uso dessa modalidade de transmisso, que tambm foi adotado pelo ACAP
[ATSC A/90, 2001].
Nos carrossis de objetos, os dados so representados por objetos
(objeto de diretrio, objeto de arquivo, objetos de fluxo, objetos de eventos de
fluxo e objeto Service Gateway), que contm atributos (nome, tipo e,
possivelmente, contedo).
Objetos de fluxo permitem a um carrossel de objeto referenciar fluxos
elementares que so parte da difuso. Pode haver um nico tap (uma nica
referncia), que se refere a um fluxo completo, ou pode haver vrios taps, que
se referem a vrios fluxos que formam um nico fluxo lgico. Por exemplo,
um programa de TV pode conter duas trilhas de udio para lnguas diferentes.
Um nico objeto de fluxo DSM-CC pode referenciar a todo o servio, mas
pode tambm haver dois objetos de fluxo, cada um referenciando o vdeo e
um dos dois fluxos de udio.
Embora a forma mais bvia de se referenciar a um fluxo seja atravs do
seu PID, isso traz duas desvantagens: PIDs s se referem a fluxos
elementares e no a programas inteiros; o PID de um fluxo pode mudar
quando ele remultiplexado, o que implicaria atualizar cada referncia feita
pelo carrossel.
Para referncias, o DSM-CC introduz outro identificador chamado
association tag (ou component tag, no SBTVD e no DVB). Ele prov uma
identificao nica de um fluxo que no afetada pela remultiplexao. O
association tag ligado a um fluxo por meio de um descritor de association
454
tag associado ao fluxo pela PMT (Programming Mapping Table). Cada
programa tem uma PMT, e cada PMT tem uma lista de fluxos de um
programa; para cada elemento da lista, vrios descritores podem ser
associados, incluindo o descritor de association tag.
Objetos de eventos de fluxo permitem a um receptor saber a respeito de
um ponto especfico de sincronizao dentro desse fluxo elementar, como
veremos na Seo B.4.
Alm dos objetos de fluxos e objetos de eventos de fluxo, cada carrossel
de objetos contm uma rvore de diretrios, que quebrada em uma srie de
mdulos, que podem conter um ou mais arquivos (objetos de arquivo) ou
diretrios (objetos de diretrios e objetos Service Gateway). Cada mdulo
pode conter vrios objetos, desde que o tamanho seja menor que 64 Kbytes.
No possvel dividir um arquivo em mais de um mdulo. Dessa forma,
arquivos com tamanho maior que 64 Kbytes devem ser transportados em um
nico mdulo. Esse o nico caso em que um mdulo pode exceder o
tamanho de 64 Kbytes. Arquivos em um mdulo podem vir de qualquer parte
da rvore de diretrios porque eles no tm necessidade de pertencer ao
mesmo diretrio.
Objetos Service Gateway representam um conceito similar a um
diretrio. A principal diferena que um objeto Service Gateway identifica o
diretrio raiz da rvore de diretrios de um carrossel de objetos. Isso significa
que existir um e apenas um objeto Service Gateway em um carrossel de
objetos.
Quando quiser ter acesso a um determinado arquivo, o receptor deve
esperar pelo mdulo que contm o arquivo, quando poder analisar os dados
recebidos e delimitar o arquivo.
Um carrossel de objetos tambm chamado de service domain. Em
sistemas de difuso, no h distino entre os dois termos.
Segundo as especificaes DSM-CC, que so compatveis com o
framework ORB (Object Request Broker) definido pelas especificaes
CORBA (Common Object Request Broker Architecture) [OMG, 2004], cada
objeto deve ser encapsulado em uma mensagem BIOP (Broadcast Inter ORB
Protocol) que transmitida em um mdulo.
Uma mensagem BIOP deve ser transmitida em um nico mdulo, mas
um mdulo pode conter mais de uma mensagem, como consequncia do que
mencionamos anteriormente sobre o encapsulamento de objetos em mdulos.
A Figura B.2 ilustra o processo de quebra dos dados em um carrossel de
objetos DSM-CC, passando pela estrutura do carrossel de dados at a
gerao final de sees privadas DSM-CC. Cada seo DSM-CC de um
455
carrossel transmitida no fluxo de transporte MPEG, como um fluxo
elementar de dados, uma aps a outra.
Figura B.2 Mdulo de um carrossel.
Um mdulo pode ser inserido mais de uma vez em um ciclo do carrossel
(isso verdade tambm para os carrossis de dados). Como usual nos
carrossis, os mdulos so transmitidos um aps o outro at que todos os
mdulos de um ciclo tenham sido transmitidos, quando todo o processo
recomea, repetidamente.
Vamos tomar como exemplo a rvore de diretrios da Figura B.3,
representando uma aplicao NCL, contendo um objeto de mdia vdeo, dois
objetos de imagem e um objeto de mdia contendo cdigo Lua. Para criar o
carrossel para difuso, vamos adicionar arquivos em mdulos. Adicionar os
dois primeiros arquivos (joo.ncl e foto.png) no mesmo mdulo (Mdulo 1)
possvel, mas no podemos adicionar o arquivo chuteira.png nesse mesmo
mdulo porque ultrapassaria o tamanho mximo de 64 Kbytes. Assim, o
arquivo chuteira.png deve ir para o Mdulo 2, no qual poderemos tambm
adicionar o arquivo contendo o cdigo Lua (gols.lua). O arquivo drible.mp4
deve ocupar um nico mdulo (Mdulo3), por ser maior que 64 Kbytes.
Vamos, ento, adicionar as informaes do diretrio imagens no Mdulo 1, as
do diretrio cdigos lua no Mdulo 2, e as informaes do diretrio raiz no
objeto Service Gateway tambm no Mdulo1.
456
Aplicacoes
joao.ncl (2 Kbytes)
imagens
foto.png (50 Kbytes)
chuteira.png (40 Kbytes)
videos
drible.mp4 (108 Kbytes)
codigos Lua
goals.lua (1 Kbyte)
NCL
LUA
Figura B.3 rvore de diretrios para um carrossel.
A diviso anterior pode no ser a melhor diviso dos arquivos em
mdulos. A diviso depende de quando os arquivos sero necessrios, os
relacionamentos entre eles etc.
Vamos agora colocar os mdulos no carrossel. Como o Mdulo 1
contm a aplicao e ela deve ser carregada antes de tudo, para diminuir o seu
retardo de acesso vamos inserir o Mdulo 1 mais de uma vez no carrossel,
como ilustra a Figura B.4.
Mdulo 1
Mdulo 2
Mdulo 1
Mdulo 3
Figura B.4 Carrossel de objetos para o exemplo da Figura B.3.
Como mencionamos, transmitir um mdulo mais de uma vez em um
carrossel diminui seu tempo de acesso, mas aumenta o tamanho do carrossel e
o tempo de acesso dos outros mdulos. Mais ainda, como a banda passante de
difuso constante (6 MHz no caso do Brasil), aumentar o tamanho do
carrossel diminuir a banda dos outros fluxos que iro no mesmo sinal TS
(Transpor Stream), incluindo o udio e o vdeo principal de um programa de
TV. Diminuir a banda desses sinais diminuir sua qualidade.
Alternativamente, poderamos ter optado por colocar o arquivo joo.ncl nos
mdulos 1 e 2, pois nada impede que um arquivo seja transmitido mais de
uma vez, em mais de um mdulo. Entretanto, os mesmos cuidados devem ser
tomados. De fato, a otimizao de um carrossel um problema extremamente
complexo. No existe maneira de saber qual o carrossel de objetos mais
eficiente para todos os casos. necessrio saber a estrutura e o projeto de
cada aplicao especfica carregada pelo carrossel e, mesmo assim, no
nada fcil chegar soluo mais eficiente.
457
Como j mencionamos, cada instncia do carrossel de objetos
representada por um Service Domain, que consiste em uma identificao
nica do carrossel de objetos. Todo Service Domain possui um objeto Service
Gateway, que contm referncias para todos os objetos dispostos na raiz do
carrossel de objetos.
O Service Gateway um objeto do carrossel de objetos cuja localizao
transmitida em uma mensagem DownloadServerInitiate (DSI), que
apresentamos na Seo B.2 (um carrossel de objetos ser sempre
transportado em um carrossel de duas camadas).
O padro DSM-CC utiliza a mesma estrutura de referncias IOR
(Interoperable Object Reference), definidas nas especificaes CORBA para
referenciar um objeto no carrossel. No contexto do protocolo carrossel de
objetos, uma IOR normalmente composta pelo identificador do carrossel,
seguido do identificador do mdulo e pelo identificador do objeto.
Vamos a um exemplo um pouco mais simples que o anterior para tornar
mais claro o processo. Considere a rvore de diretrios apresentada na Figura
B.5 e o carrossel de objetos gerado a partir dessa rvore, com o Service
Domain de valor hexadecimal 1. Nesse Service Domain, dois mdulos so
gerados e identificados com valores em hexadecimal 1 e 2. O
identificador de cada objeto apresentado atravs do campo objectKey. O
objeto que representa o Service Gateway (na Figura B.5: objeto do tipo srg)
identificado com o valor 1 e encapsulado no Mdulo 1. Como
consequncia, a IOR do objeto Service Gateway transmitida na mensagem
DownloadServerInitiate definida por 1,1,1 (Service Domain = 1, id do
mdulo = 1 e id do objeto = 1). Os objetos que representam o arquivo
weatherConditions.ncl e o diretrio images so identificados pelos
valores hexadecimais 2 e 3, respectivamente, e tambm so encapsulados
no Mdulo 1. J o objeto que representa o arquivo contendo o contedo da
imagem identificado com o valor 1, mas encapsulado no Mdulo 2.
O objeto Service Gateway possui, por sua vez, duas IORs. Para
relacionar uma IOR ao nome do objeto que a mesma referencia, bem como ao
tipo desse objeto (arquivo, diretrio etc.), as especificaes DSM-CC utilizam
o conceito de binding. Assim, no exemplo, o objeto Service Gateway possui
dois bindings para os dois objetos do Mdulo 1 que so filhos diretos da
raiz do sistema de arquivos representado pelo carrossel.
458
Service Domain = 1
moduleId = 1
objectKey = 1
objectKind = srg
2 bindings
binding #1
objectName = weatherConditions.ncl
objectType = fil
IOR = 1,1,2
binding #2
objectName = images
objectType = dir
IOR = 1,1,3
...
objectKey = 2
objectKind = fil
data
...
objectKey = 3
objectKind = dir
1 binding
binding #1
objectName = brazilianMap.png
objectType = fil
IOR = 1,2,1
moduleId = 2
objectKey = 1
objectKind = fil
data
...
objectKey = 2
objectKind = ste
eventList
eventName = nclEditingCommand
eventId = 3
...
Sistema de Arquivos
weather
weatherConditions.ncl
images
brazilianMap.png
NCL
Figura B.5 rvore de diretrios e carrossel de objetos correspondente.
Os objetos do tipo diretrio (dir) possuem a mesma sintaxe e
semntica dos objetos do tipo Service Gateway. Os objetos do tipo arquivo
(fil) possuem como atributo, alm da identificao do seu tipo, os dados
relativos ao seu contedo.
A Figura B.5 apresenta tambm um objeto do tipo eventos de fluxo
(ste). Esse objeto utilizado para definir tipos de eventos DSM-CC
possveis de serem descritos no fluxo de transporte. Para isso, o objeto
relaciona identificadores de descritores de eventos DSM-CC a uma string (na
figura, contedo do campo eventName). Vamos nos aprofundar um pouco
mais nesse tpico na Seo B.4.
Finalmente, importante notar, no exemplo da Figura B.5, que a
identificao da raiz do sistema de arquivos (diretrio weather) perdida
quando da gerao do carrossel. A consequncia dessa perda e a soluo para
o problema so discutidos no Captulo 16.
B.4 Eventos de Fluxo
Eventos de fluxo so descritores embutidos em um fluxo elementar
DSM-CC. Esses descritores vo fornecer um modo de sincronizar eventos
com um fluxo de mdia. Assim como os objetos de fluxo, os eventos de fluxo
contm uma lista de taps que se referem a fluxos elementares.
ncl
459
Eventos de fluxo so bastante teis para especificar eventos no-
previsveis. Por exemplo, em uma partida de futebol, o momento de um gol
que se quer sincronizar com outro objeto de mdia qualquer, como um
ranking dos artilheiros do campeonato.
Do ponto de vista da especificao DSM-CC, o tratamento de eventos
de fluxo so divididos em duas partes:
1. Objetos de eventos de fluxo, transportados em carrossis DSM-CC.
2. Descritores de eventos de fluxo, transportados em sees privadas
DSM-CC.
Um descritor de evento de fluxo determina o disparo de um evento e
pode ser referido por um objeto de eventos de fluxo, que descreve em mais
alto nvel o que significa o evento. Mais de um descritor de evento de fluxo
pode ser referido por um mesmo objeto de evento de fluxo.
Um objeto de eventos de fluxo possui um identificador (eventId) que
deve ser nico dentro de um carrossel e um nome legvel para o ser humano,
por exemplo, nclEditingCommand. Uma aplicao pode se registrar para
receber eventos por esse nome legvel. Por exemplo, o Gerenciador de Base
Privada do ambiente declarativo Ginga-NCL se registra para receber eventos
nclEditingCommand que correspondem a comandos de edio de documentos
NCL, como discutido no Captulo 16. O exemplo da Figura B.5 apresenta um
desses objetos do evento (tipo ste), identificando no campo eventName a
string nclEditingCommand associada ao evento 3.
Descritores de eventos so transportados em fluxos listados na tabela
PMT com o tipo igual a 0x0C. Cada descritor de evento possui um
identificador numrico nico (que o associa ao objeto de eventos de fluxo) e
uma referncia temporal, que indica ao receptor em qual instante o evento
dever ocorrer (usualmente baseado em um fluxo denominado Normal Play
Time NPT, como discutido no Apndice E).
Como caso particular, um descritor de eventos pode informar ao sistema
receptor que o evento deve ocorrer imediatamente; esse tipo de evento
chamado de evento do it now.
O SBTVD especifica que, para a maioria dos eventos de fluxo, um
descritor de evento deve ser enviado uma vez a cada segundo, pelo menos
cinco vezes, antes do tempo de disparo do evento. Uma exceo, claro, o
evento do it now, que enviado apenas uma vez.
Descritores de evento de fluxo com valores de NPT permitem ao
receptor saber antecipadamente o momento exato de ocorrncia do evento,
permitindo maior previsibilidade, uma vez que no possvel precisar o
momento da chegada de um descritor no receptor. Eles tambm so mais
confiveis, uma vez que so enviados mais de uma vez.
460
Alm do identificador e da referncia temporal, o descritor de evento
possui tambm um campo para dados especficos das aplicaes, que pode ser
utilizado de acordo com sintaxes e semnticas a serem tratadas pelas prprias
aplicaes, como discutido na Seo 16 para os comandos de edio para o
Ginga-NCL.
Resumindo, no middleware Ginga, quando um descritor de evento de
fluxo chega em um receptor, ele deve checar se um objeto de eventos de fluxo
de mesmo eventID est presente no carrossel de objetos associado. Se no
estiver, o descritor ignorado. Se o evento do tipo do it now, o evento
disparado imediatamente. Se no for do it now, o receptor verifica se o evento
j est agendado para disparar. Se estiver, o descritor ignorado; em caso
contrrio, o evento agendado, dependendo do tempo NPT.
B.5 MPE: Multi-protocol Encapsulation
Para alguns tipos de dados, os carrossis DSM-CC podem no ser
adequados como estrutura de transmisso. Isso pode ser particularmente
verdade para dados provenientes do mundo Internet. Assim, o DSM-CC
tambm prov um meio para transporte de dados IP (em uma nica direo)
diretamente em sees privadas MPEG-2, chamadas Datagram Sections.
Essas sees suportam qualquer protocolo do nvel 3, mas o alvo , em geral,
o protocolo IP.
Cada receptor deve ter atribudo um endereo MAC de 48 bits, usado
para identific-lo como destino de um datagrama. Contudo, o DSM-CC no
especifica como um endereo MAC atribudo a um receptor.
Cada Datagram Section carrega um nico datagrama para um nico
endereo MAC (Medium Access Control), embora este possa ser um
endereo de multicast. Embora um datagrama IP possa ter tamanho maior do
que uma seo MPEG-2, isso no permitido pelo DSM-CC.
Bibliografia
ABNT NBR 15606-3 (2007). Associao Brasileira de Normas Tcnicas,
Televiso digital terrestre codificao de dados e especificaes de
transmisso para radiodifuso digital, Parte 3: Especificao de
transmisso de dados, Sistema Brasileiro de TV Digital Terrestre, NBR
15606-3.
461
ARIB STB-B24 V 4.0 (2004). Association of Radio Industries and Business,
Data Coding and Transmission Specifications for Digital Broadcasting,
ARIB Standard. Fevereiro de 2004.
ATSC A/90 (2001). Advanced Television Systems Committee,
Implementation Guidelines for ATSC Data Broadcast Standard, ATSC
Recommended Practice. Junho de 2001.
ETSI TS 102 812 v1.2.1 (2003). European Broadcasting Union, Digital
Bideo Broadcasting (DVB); Multimedia Home Platform (MHP)
Specification 1.1.1. Technical Specification.
ISO/IEC 13818-1 (2000). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 1: Systems, ISO/IEC 13818-1.
ISO/IEC 13818-6 (1998). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 6: Extensions for DSM-CC, ISO/IEC 13818-6.
OMG Specification (2004). Common Object Request Broker Architecture
(CORBA/IIOP).
Steven Morris (2004) Interactive TV Web. A technical (and non-technical)
guide to DSM-CC. Disponvel em
http://interactivetvweb.org/tutorial/dtv-intro/dsm-cc/index.shtml.
Acesso em 21 de maro de 2008.
Balabanian, Casey and Greene (1996). Vahe Balabanian; Liam Casey; Nancy
Greene. An Introduction to Digital Storage Media Command and
Control (DSM-CC). Nortel, 1996.
462
Apndice C
Modelo de Contextos
Aninhados
NCM 3.0 Bsico
Este apndice descreve as entidades bsicas da verso 3.0 do NCM (Nested
Context Model). O NCM um modelo conceitual centrado na representao e
tratamento de documentos hipermdia. A linguagem NCL do middleware
Ginga do sistema brasileiro de TV digital tem por base o modelo NCM.
1
1
Este captulo foi baseado em Soares et al. (2005). O uso do material foi gentilmente cedido pelo
Departamento de Informtica da PUC-Rio.
463
C.1 Introduo
A definio de documentos hipermdia
2
no NCM [Soares et al., 2005]
baseada nos conceitos usuais de ns e elos. Ns (nodes) (ou objetos) so
fragmentos de informao, e elos (links) so usados para a definio de
relacionamentos entre os ns. No entanto, os elos no so a nica forma de
definio de relacionamentos, como ficar evidente a seguir.
O modelo distingue duas classes bsicas de ns, chamados de ns de
contedo (content nodes) (ou objetos de mdia) e ns de composio
(composite nodes), sendo estes ltimos o ponto central do modelo. A Figura
C.1 ilustra a viso geral da hierarquia de classes do modelo,
3
que ser
detalhada ao longo deste apndice, seguindo uma abordagem top-down.
GenericDescriptor
ContentNode
TextNode ImageNode AudioNode VideoNode ApplicationNode
ContextNode
linkSet
presentationCollection
CompositeNode
portList
Node
content
anchorList
descriptor
SwitchNode
ruleList
nodeDefault
presentationCollection
defaultPresentationCollection
Link
bindSet
connector
DescriptorSwitch
ruleList
descAlternatives
defaultDescriptor
Descriptor
player
eventDescriptions
Entity
id
name
description
owner
date
extendedProperties
TimeNode
PrivateBase
linkSet
descriptorSet
Trail
currentNode
view
PublicHyperbase
descriptorSet
SettingsNode
GenericDescriptor
ContentNode
TextNode ImageNode AudioNode VideoNode ApplicationNode
ContextNode
linkSet
presentationCollection
CompositeNode
portList
Node
content
anchorList
descriptor
SwitchNode
ruleList
nodeDefault
presentationCollection
defaultPresentationCollection
Link
bindSet
connector
DescriptorSwitch
ruleList
descAlternatives
defaultDescriptor
Descriptor
player
eventDescriptions
Entity
id
name
description
owner
date
extendedProperties
TimeNode
PrivateBase
linkSet
descriptorSet
Trail
currentNode
view
PublicHyperbase
descriptorSet
SettingsNode
Figura C.1 Viso geral da hierarquia de classes do NCM.
4
2
Uma especifica de aplicao para TV digital um caso particular de documento hipermdia.
3
necessrio salientar que, embora seguindo uma especificao orientada a objetos, o NCM no
obriga que sua implementao seja orientada a objetos. O NCM apenas um modelo hipermdia.
4
Com o objetivo de no poluir visualmente as figuras, os mtodos das classes foram omitidos nos
diagramas.
464
C.2 Entidades e Propriedades
Toda entidade (entity) do modelo possui como atributos: um
identificador nico (ID), um nome, uma descrio, a data de criao e um
autor.
5
Alm dessa coleo bsica de atributos, uma entidade NCM mantm
uma lista de atributos estendidos, para permitir extenses que no se
restrinjam apenas a heranas de classes. No NCM, a maioria dos atributos
chamada propriedade e eles devem ser envolvidos (wrapped) por uma classe
do modelo chamada propriedade (property). Isso permite ao NCM o suporte
para manuteno, para cada propriedade da entidade (bsica ou estendida),
de informaes acerca de direitos de acesso, do ltimo usurio que modificou
o seu valor, da data dessa modificao, se a mudana deve ocasionar ou no
um versionamento da entidade etc. Em outras palavras, o NCM prev um
controle granular bastante fino quando da implementao de suporte a
controle de verses e controle de acesso das entidades, obrigando que as
propriedades mantenham outros atributos. No entanto, sistemas que no
tenham interesse em explorar todas as capacidades do modelo podem optar
por representar os campos das classes como atributos tradicionais, em vez de
utilizar o wrapper propriedade oferecido pelo modelo. Mesmo para aqueles
sistemas que implementam controles de acesso e/ou de verses, campos de
classes que no necessitem ser monitorados com tal granularidade podem ser
representados sem a utilizao dos wrappers.
Entidades do modelo devem oferecer mtodos get e set para cada
propriedade bsica (por exemplo, getId, setId, getName, setName, etc.),
6
mtodos para adicionar/remover propriedades estendidas, e dois mtodos
genricos para consultar (get) e modificar (set) valores das propriedades
estendidas.
C.3 Ns e ncoras
Um n (node) uma entidade NCM que tem como propriedades bsicas
adicionais: um contedo, um descritor genrico (propriedade opcional) e uma
lista ordenada de ncoras.
O contedo de um n composto por uma coleo de unidades de
informao. A noo exata do que constitui uma unidade de informao
5
O NCM define um tipo usurio cuja implementao fica a cargo dos sistemas hipermdia que
utilizem as classes do modelo.
6
Deste ponto em diante, ser assumido que as subclasses devero especificar mtodos do tipo get e
set para manipular cada uma de suas propriedades.
465
parte da definio do n e depende de sua especializao, conforme ser
exemplificado mais adiante.
Descritores NCM sero explicados nas Sees C.10 e C.11. A definio
de um descritor como propriedade do n opcional. Quando especificado, ele
conter informaes (proprieadades) determinando como o n deve ser
exibido no tempo e no espao.
Cada elemento da lista ordenada de ncoras chamado ncora do n,
ou simplesmente ncora. Toda ncora (anchor) uma entidade NCM, que
pode ser especializada, conforme ilustrado no diagrama de classes da Figura
C.2.
7
O modelo define dois tipos de ncora (ou interfaces). O primeiro tipo
chamado de ncora de contedo (content anchor ou area anchor), que
possui um atributo denominado regio (region). A regio da ncora define
uma coleo de unidades de informao do contedo do n. Qualquer
subconjunto de unidades de informao do contedo de um n pode definir
uma ncora. Tem-se, assim, que a definio exata da regio da ncora
dependente do tipo de contedo do n. No entanto, o modelo requer que todo
n contenha uma ncora de contedo com uma regio representando a
marcao de todo o contedo do n. Essa ncora chamada de ncora
contedo total e sua regio correspondente representada pelo smbolo . A
ncora contedo total deve sempre ser a primeira ncora na lista de ncoras
do n. ncoras sero extremamente importantes na especificao de
relacionamentos entre ns.
Interface
Anchor
Port
node
nodeIntPt
AllContentAnchor
SwitchPort
nodeList
intPointList
Entity
ContentAnchor
region
AttributeAnchor
attributeName
Figura C.2 Hierarquia de classes das interfaces de ns NCM.
7
Na verdade, ncoras NCM herdam da classe ponto de interface, que por sua vez herda da classe
entidade.
466
O segundo tipo de ncora definido no modelo a ncora de atributo
(attribute anchor). A ncora de atributo aponta para um atributo (ou
propriedade) do n. Como ser explicado na Seo C.10, durante a
apresentao de documentos NCM, ns so associados a descritores. Na
especificao das ncoras de atributo do n, os autores podem referenciar no
apenas atributos do n, mas tambm atributos definidos no descritor que
venha a ser associado ao n. Na verdade, a ncora de atributo pode identificar
qualquer atributo recursivamente contido no n, atravs de referncias
qualificadas. Como exemplo, um autor pode usar o nome qualificado
descritorSelecionado.posicaoX para criar uma ncora de atributo que aponte
para um atributo posicaoX definido em um descritor selecionado para
apresentar o n.
Alm dos j mencionados mtodos para consultar e modificar os valores
dos atributos, os ns devem oferecer mtodos para manipulao de suas listas
de ncoras (por exemplo, adicionar, remover, recuperar uma ncora,
percorrer a lista etc.).
C.4 Ns de Mdia
Um n de mdia, tambm chamado n de contedo (content node) ou
objeto de mdia, um n que representa um objeto em uma mdia qualquer.
Ns de contedo devem ser especializados em subclasses para melhor definir
a interpretao do contedo (texto, udio, imagem, vdeo, aplicao etc.).
Conforme mencionado anteriormente, a noo exata do que constitui uma
unidade de informao do contedo parte da definio da classe do n. Por
exemplo, uma unidade de informao do contedo de um n vdeo pode ser
um quadro, enquanto uma unidade de informao do contedo de um n texto
pode ser um caractere ou uma palavra. O contedo de um n de mdia pode
ser definido como uma referncia (por exemplo, um URI) para o contedo
propriamente dito ou como uma sequncia de bytes (raw data). Alm disso,
cada subclasse de n de contedo pode ser refinada. Como exemplo, ns texto
podem ser especializados em ns HTML, ns PDF etc.
Um tipo especial de n de contedo definido pelo modelo o n de
tempo (time node). Como o prprio nome sugere, esse n representa o tempo.
Esse n representa tempos absolutos (baseados, por exemplo, na hora UTC)
ou um tempo relativo (baseado em eventos, como por exemplo o incio da
apresentao de um documento). Cada instante de tempo considerado uma
unidade de informao para o seu contedo. Dessa forma, intervalos podem
ser definidos como ncoras de um n de tempo. O n de tempo vai, assim,
permitir acionar eventos (Seo C.7) baseados em instantes de tempo
especficos.
467
Outro tipo especial de n de contedo o n de ambiente (settings
node). Esse n representa todas as variveis controladas diretamente pelo
formatador (ferramenta responsvel pela apresentao de um documento
NCM). As variveis so representadas pelos atributos (propriedades) do n.
Como discutido na Seo C.8, esses atributos podem ter seus valores
modificados por aes dos elos. Como discutido nas Sees C.9 e C.11, esses
atributos podem tambm ter seus valores testados pelas regras de ns switch e
de switch de descritores, a fim de realizar a escolha entre alternativas.
C.5 Ns de Composio
Um n de composio (composite node) C, ou simplesmente
composio, um n cujo contedo uma coleo C
L
de ns (de contedo ou
de composio, recursivamente) que constituem suas unidades de informao.
Diz-se que um n N em C
L
um componente de C e que N est contido em
C. Diz-se tambm que um n A est recursivamente contido em C se e
somente se A est contido em C ou A est contido em um n recursivamente
contido em C. Devemos tambm notar que os componentes de C podem ser
ordenados (lista ordenada), o que ser til na definio de operaes de
navegao. Note tambm que um n pode estar contido mais de uma vez em
C
L
. Uma restrio importante feita, no entanto: um n no pode estar
recursivamente contido em si mesmo.
Ns de composio diferentes podem conter um mesmo n e ser
aninhados em qualquer profundidade, desde que seja obedecida a restrio de
um n no conter recursivamente a si mesmo. Para identificar atravs de que
sequncia de ns de composio aninhados uma dada instncia de um n N
est sendo observada, introduzida a noo de perspectiva de um n. A
perspectiva de um n N uma sequncia P = (N
m
,....,N
1
), com m > 1, tal que
N
1
= N, N
i+1
um n de composio, N
i
est contido em N
i+1
, para i e [1,m)
e N
m
no est contido em qualquer n. Note que pode haver vrias
perspectivas diferentes para um mesmo n N, se esse n estiver contido em
mais de uma composio. A perspectiva corrente de um n aquela
percorrida pela ltima navegao ao n (as diversas formas de navegao
sero definidas a posteriori). Dada a perspectiva P = (N
m
,....,N
1
), o n N
1
chamado n-base da perspectiva.
Ns de composio so objetos cuja semntica bem conhecida pelo
modelo. Um modelo conceitual deve representar no apenas os conceitos
estruturais dos dados, mas tambm definir operaes sobre os dados para
manipulao e atualizao das estruturas. Assim, todo n C de composio
deve possuir os seguintes mtodos:
468
- Insere n: deferido (implementao dependente da subclasse de
composio).
- Retira n: retira um n da coleo de ns da composio.
Com base nas definies de contedo de composio e regies de
ncoras de contedo (Seo C.3), conclui-se que a regio de uma ncora de
contedo de uma composio deve especificar um subconjunto dos
componentes da composio. Um subconjunto especial aquele com todos os
ns da composio (ncora contedo total [] da composio).
Alm da lista ordenada de ncoras, ns de composio tm uma outra
propriedade chamada lista ordenada de portas. Portas e ncoras possuem
propsito similar e estendem um tipo comum denominado interface. Uma
porta (port) de uma composio C uma entidade NCM que possui dois
atributos adicionais: um n N e uma interface ip, onde N deve estar
obrigatoriamente contido em C e ip deve ser uma interface definida em N, ou
seja, contido em sua lista de ncoras ou de portas.
8
Como pode ser percebido,
a porta de um n de composio permite definir mapeamentos entre a
composio e seus ns internos. Como consequncia, o n de composio
pode tornar a interface de um n constituinte visvel para referncias externas
(elos hipermdia, por exemplo). O conjunto de interfaces (ncoras ou portas)
age como uma proteo para referncias a um n, no sentido de que qualquer
entidade s pode ter acesso a segmentos do contedo ou atributos de um n se
eles estiverem disponveis na interface do n (lista de ncoras ou de portas).
Dessa forma, as interfaces podem impedir que modificaes internas em um
n se reflitam em outras entidades que o referenciam. Tome como exemplo
um n texto com uma ncora de contedo cuja regio especifique seu segundo
pargrafo. Qualquer mudana no texto (por exemplo, a eliminao do
primeiro pargrafo) deve se refletir na regio da ncora, mas no dever
afetar as demais entidades que a referenciam, assim mantendo as referncias
para a parte correta do contedo (isto , o antigo segundo pargrafo agora
posicionado como sendo o primeiro). A proteo do n atravs de interfaces
tambm trar ao modelo o conceito de composicionalidade, permitindo provas
formais de propriedades dos documentos, como a consistncia temporal.
Define-se como sequncia de mapeamentos da porta p
k
de uma
composio N
k
a sequncia de ns e interfaces (N
k
, ip
k
....,N
1
, ip
1
) com k > 1,
tal que para i e [1,k]:
i) N
i+1
um n de composio, e N
i
est contido em N
i+1
,
ii) ip
i
uma interface do n N
i
na sequncia de ns da porta, e N
i
e ip
i
so os valores dos atributos n e interface, respectivamente, da porta
ip
i+1
. Diz-se que ip
i
pertence sequncia de mapeamentos da porta p.
8
Evidentemente, ip estar contido na lista de portas de N apenas se N for uma composio.
469
Note que a definio de dois tipos de interfaces de composies (ncoras
e portas) permite dois tipos de tratamento para aes de apresentao, muitas
vezes desejvel na construo de um documento hipermdia. Um autor pode
desejar apresentar uma composio para que a estrutura da composio seja
visualizada (por exemplo, um desenho mostrando o grafo estrutural da
composio). ncoras de composies so interfaces que a princpio
expressam esse tipo de comportamento, e a regio da ncora enumerar os
componentes que devem ser desenhados. Todavia, apresentar uma
composio algumas vezes pode significar apresentar seus constituintes a
partir de um ponto de entrada, sem que a viso estrutural da composio seja
exibida. Portas servem exatamente para fornecer pontos de acesso, permitindo
que referncias externas toquem em ns contidos dentro de um n de
composio, sem se perder a propriedade de composicionalidade do modelo
(isto , pontos de entrada e sada das composies devem ser explicitamente
definidos).
Uma ao sobre um n de composio deve especificar a interface onde
se aplica. Caso no especifique, deve ser considerada como sendo aplicada em
todas as suas portas.
Subclasses de composio iro definir semnticas para colees
especficas de ns. Cinco importantes subclasses de composio definidas
pelo modelo so: n de contexto, n switch, trilha, hiperbase pblica e base
privada.
C.6 Ns de Contexto
Um n de contexto (context node), ou objeto de contexto, ou
simplesmente contexto, um n de composio tal que seu contedo contm
um conjunto de ns de contedo, ns de contexto ou ns switch.
9
Os ns de
contexto possuem como atributos adicionais um conjunto de elos e uma
coleo de apresentao.
Cada elo l contido no conjunto de elos de um n de contexto C define
um relacionamento entre ns recursivamente contidos em C
10
ou o prprio n
de contexto C. Diz-se que um elo l um componente de um n de contexto C
e que l est contido em C. Diz-se tambm que um elo l est recursivamente
contido em C se e somente se l est contido em C ou l est contido em um n
de contexto recursivamente contido em C. Elos so o assunto da Seo C.8.
9
Ns switch sero apresentados na Seo C.9. N switch uma especializao de composio e
permite definir alternativas de ns para documentos adaptativos.
10
Como ser discutido na Seo C.8, relacionamentos podem ter seus participantes definidos atravs
de mapeamentos para ns recursivamente contidos na composio C.
470
Uma coleo de apresentao contm, para cada n contido em um n
de contexto C, um grupo de descritores genricos.
11
Como mencionado na
Seo C.3, descritores renem as informaes referentes s caractersticas de
apresentao do n e sero tratados em detalhes nas Sees C.10 e C.11.
Cada grupo de descritores genricos deve necessariamente formar um
conjunto, ou seja, no pode haver repetio de descritores no grupo.
12
No caso
de o n contido em C ser um n de contexto, o grupo de descritores deve
conter no mximo um descritor genrico.
Ns de contexto vo servir, entre outras coisas, para definir uma
estrutura lgica, hierrquica ou no, para documentos hipermdia. Essa
estruturao permitir a definio de diferentes vises de um mesmo
documento e tambm melhorar a orientao do usurio na navegao sobre
um documento.
Um n de contexto C deve ter definido o mtodo deferido de n de
composio:
- Insere n: insere um n de contedo, um n switch ou um outro n de
contexto no conjunto de ns de C.
Alm dos mtodos para consultar e modificar os valores dos atributos,
dos mtodos para manipular as listas de portas e de ncoras, e dos mtodos
para manipular o conjunto de ns, ns de contexto devem tambm prover
mtodos para manipular seus conjuntos de elos e suas colees de
apresentao (por exemplo, inserir, remover, consultar, percorrer etc.).
C.7 Ns Switch (Alternativas de Ns)
O NCM possui vrias caractersticas que oferecem suporte adaptao
de documentos. Uma importante facilidade o grupo de ns alternativos, cuja
seleo feita com base em regras (rules) associadas ao documento. A
Figura C.3 descreve o diagrama de classes para regras NCM.
11
O grupo pode estar vazio para qualquer constituinte do contexto.
12
A semntica por trs da definio do grupo de descritores selecionados para cada n N contido em
um n de contexto permitir uma navegao em profundidade para N especificando vrias exibies
diferentes simultneas, como ser explicado melhor na Seo C.10. Alm disso, como ser comentado na
Seo C.11, um descritor do grupo pode ser o resultado de uma seleo entre alternativas de descritores
(switch de descritores), cuja escolha poder depender de parmetros da plataforma ou do prprio usurio.
471
SimpleRule
var
op
value
CompositeRule
op
SwitchNode
DescriptorSwitch
Rule
id
2..n
1
2..n
1
1..*
0..*
1..* ruleList
0..*
1..*
0..*
1..*
ruleList
0..*
Descriptor
0..1 0..1
rule
Figura C.3 Diagrama de classes para regras.
Baseado nas informaes contextuais (por exemplo, preferncias do
usurio, caractersticas da plataforma de exibio etc.),
13
o formatador de
documentos NCM deve avaliar cada regra para descobrir se uma determinada
entidade associada regra deve ou no ser considerada na apresentao do
documento. A forma como entidades e regras so associadas ser explicada
adiante.
Uma regra pode ser simples ou composta. Uma regra simples (simple
rule) anloga expresso assertiva do conector, que compara uma
avaliao com um valor (Seo C.8.1) e possui trs atributos: um
identificador (var) da varivel a ser testada, um operador de comparao (=,
=, <, s, >, >) e um valor. A regra composta (compound rule) uma
expresso lgica compreendendo duas ou mais regras (simples ou compostas)
relacionadas atravs de operadores lgicos AND e OR.
Com o objetivo de permitir que um autor especifique alternativas de ns
dependendo da informao contextual (atributos do contexto de exibio), o
NCM define uma entidade chamada n switch. O n switch (switch node)
uma especializao de ns de composio. O contedo de um n switch um
conjunto que pode incluir ns de contexto e de contedo. O n switch tem um
atributo adicional que define, para cada n contido no seu conjunto de ns,
uma regra associada. As regras so definidas em uma lista ordenada. O
formatador de documentos deve avaliar cada uma das regras conforme a
ordem na lista. O primeiro n que tiver a sua regra avaliada como verdadeira
deve ser eleito a alternativa selecionada.
13
Como anteriormente mencionado, as informaes contextuais podem ser representadas por
atributos (propriedades) do n de ambiente (settings node).
472
O n switch pode conter um n default. Durante a apresentao do
documento, esse n deve ser eleito a alternativa selecionada do switch se
nenhuma das regras for avaliada como verdadeira. Na ausncia de um n
default e de uma regra avaliada como verdadeira, nenhum dos ns contidos no
n switch deve ser exibido.
Alm da mencionada propriedade de lista ordenada de portas da
composio (Seo C.5), os ns switch tm uma propriedade adicional
chamada lista ordenada de portas switch (ordered switch port list). Cada
porta switch (switch port) um ponto de interface (Figura C.2) que define um
conjunto de mapeamentos para interfaces de ns contidos no n switch.
As portas de composio tradicionais permitem que um elo seja
associado a uma alternativa especfica. Se essa alternativa no for
selecionada, o ponto terminal do elo ser simplesmente ignorado durante a
apresentao do documento. A definio de portas switch permite que elos
(relacionamentos discutidos na Seo C.9) sejam definidos ancorando em ns
switch, e sejam associados a mais de uma alternativa especfica. Se nenhuma
das alternativas for selecionada, o ponto terminal do elo ser simplesmente
ignorado durante a apresentao do documento.
Como os ns de contexto (Seo C.6), um n switch tem uma coleo
de apresentao, cujo objetivo permitir que sejam definidos grupos de
descritores para cada n contido no n switch.
14
Na verdade, o grupo deve
formar um conjunto de descritores, pois no pode haver mais de uma
instncia de um mesmo descritor em um grupo. Se o n contido no n switch
for um n de contexto, o grupo de descritores dever ser composto de, no
mximo, um descritor genrico. Se o n switch contiver um n default,
tambm pode ser especificado um grupo de descritores para esse n, desde
que as regras mencionadas neste pargrafo sejam seguidas.
O formatador de documentos NCM deve decidir quando avaliar as
regras a fim de resolver os ns switch.
C.8 Eventos
Seguindo a definio de Prez-Luque e Little [Prez-Luque, 1996], um
evento uma ocorrncia no tempo que pode ser instantnea ou ter uma
durao mensurvel. O NCM define algumas classes bsicas de evento que
14
O grupo pode ser vazio para qualquer constituinte do n switch.
473
podem ser estendidas: evento de exibio, evento de composio, evento de
seleo, evento de superposio, evento de proximidade, evento de coliso,
evento de arraste, evento de foco e evento de atribuio.
Um evento de exibio (presentation event), tambm chamado evento
de apresentao, representa a exibio de uma ncora de contedo (segmento
de mdia) de um n de contedo em uma dada perspectiva seguindo as
diretrizes de um dado descritor. Dessa forma, perspectivas distintas ou
descritores diferentes para um mesmo n geram diferentes eventos de
apresentao NCM. Os eventos de apresentao tambm podem ser definidos
sobre ns de contexto e switch, representando a apresentao das unidades de
informao de qualquer n dentro desses ns de composio.
Eventos de composio so definidos pela apresentao da estrutura de
um n de composio. Os eventos de composio so utilizados para
apresentar o mapa da composio (organizao da composio).
Um evento de seleo (selection event) representa a seleo de uma
ncora de contedo de um n em uma dada perspectiva seguindo as diretrizes
de um dado descritor. A forma mais comum para o usurio selecionar uma
ncora atravs de dispositivos de entrada como mouse e teclado, no entanto
outros dispositivos tambm podem ser utilizados na gerao desse evento,
como um controle remoto de TV. Os eventos de proximidade, de coliso, de
superposio (hovering event), de arraste (drag event) e de foco (focus event)
tambm representam a ao de interao correspondente sobre uma ncora de
contedo de um n em uma dada perspectiva seguindo as diretrizes de um
dado descritor.
Um evento de atribuio (attribution event) refere-se a uma ncora de
atributo de um n, dada uma perspectiva e um descritor especfico.
15
No NCM, cada evento define uma mquina de estados que deve ser
mantida pela mquina de controle da apresentao dos documentos,
denominada formatador [Soares et al., 2006]. A Figura C.4 mostra a
mquina de estados geral dos eventos NCM.
15
importante lembrar que, como definido na Seo C.3, uma ncora de atributo do n pode
referenciar tanto um atributo do n propriamente dito como um atributo do descritor associado ao n para
apresent-lo, como discutido na Seo C.10.
474
paused
sleeping occurring
resume
stop | abort
pause
stop| natural end
abort
start
Figura C.4 Mquina de estados dos eventos NCM.
Um evento NCM pode estar em um dos seguintes estados: dormindo
(sleeping), ocorrendo (occurring) ou pausado (paused). Todo evento possui
um atributo denominado ocorrncias (occurrences), que conta o nmero de
vezes que o mesmo muda do estado ocorrendo para o estado dormindo
durante a apresentao de um documento. Eventos como os de exibio e de
atribuio tambm possuem um atributo denominado repeties (repetitions),
que determina o nmero de vezes seguidas que o mesmo deve ocorrer. Esse
atributo pode conter um valor finito ou o valor indefinido, que levar a uma
execuo em loop do evento, at que a mesma seja interrompida.
Intuitivamente, considerando um evento de exibio como exemplo
(Figura C.4), o evento inicia no estado dormindo. Ao iniciar a exibio de
suas unidades de informao, o evento passa para o estado ocorrendo. Se a
apresentao for temporariamente suspensa, o evento vai para o estado
pausado e no mesmo permanece enquanto a situao durar. Ao final da
apresentao, o evento retorna para o estado dormindo, seu atributo
ocorrncias incrementado de uma unidade, e o atributo repeties
decrementado de uma unidade. Se, aps ser decrementado, o atributo
repeties possuir um valor maior que zero, a apresentao do evento ser
reiniciada automaticamente. Quando uma apresentao de um evento
interrompida abruptamente, atravs de um comando de aborto da exibio, o
evento passa para o estado dormindo, sem que o atributo ocorrncias seja
incrementado e tornando zero o valor do atributo repeties. Eventos de
seleo permanecem no estado ocorrendo enquanto a ncora correspondente
estiver sendo selecionada. De modo similar, eventos de arraste, foco e
superposio permanecem no estado ocorrendo enquanto a respectiva
operao sobre a ncora durar. J os eventos de atribuio permanecem no
estado ocorrendo enquanto os valores dos atributos estiverem sendo
modificados. Evidentemente, eventos instantneos, como uma simples
atribuio de valor, podem permanecer por um tempo infinitesimal no estado
ocorrendo.
475
Um evento de apresentao pode mudar do estado ocorrendo para
dormindo em duas situaes: como consequncia de um trmino natural da
exibio de suas unidades de informao ou devido a uma ao que force o
trmino do evento.
A durao de um evento o tempo que ele permanece no estado
ocorrendo. No caso de um evento de apresentao, essa durao pode ser
intrnseca ao objeto de mdia ou especificada pelo descritor do evento. A
durao de um evento de apresentao ser escolhida pelo formatador de
documentos levando em considerao parmetros intrnsecos ao contedo,
parmetros do descritor, relacionamentos do documento (principalmente os
elos) e outras informaes externas, como caractersticas da plataforma de
exibio.
Um evento de apresentao associado com um n de composio
permanece no estado ocorrendo enquanto pelo menos um evento de
apresentao associado com qualquer um dos ns filhos dessa composio
estiver no estado ocorrendo ou enquanto pelo menos um elo filho do n de
composio estiver sendo avaliado.
Um evento de apresentao associado com um n de composio est no
estado pausado se pelo menos um evento de apresentao associado com
qualquer um dos ns filhos da composio estiver no estado pausado e todos
os outros eventos de apresentao associados com os ns filhos da
composio estiverem no estado preparado ou pausado. Do contrrio, o
evento de apresentao est no estado dormindo.
Um evento de apresentao associado com um n switch permanece no
estado ocorrendo enquanto um elemento filho do switch, escolhido (n
selecionado) atravs das regras de ligao (bind rules), estiver no estado
ocorrendo. Ele est no estado pausado se o n selecionado estiver no estado
pausado. Do contrrio, o evento de apresentao est no estado dormindo.
Um evento de composio permanece no estado ocorrendo enquanto o
mapa da composio estiver sendo apresentado.
Elos definidos nos ns de contexto, na verdade, especificam
relacionamentos entre eventos definidos nas ncoras dos ns, mais
precisamente entre mquinas de estados dos eventos, como ser discutido na
prxima seo. Com o objetivo de facilitar a explicao dos elos NCM, a
Tabela C.1 define nomes para as transies de estados e tambm para as
aes que produzem uma determinada transio de estado nas mquinas de
estados dos eventos NCM.
476
Tabela C.1 Nomes de transies e aes para a mquina de estados dos eventos NCM
Transio (Causada pela Ao) Nome da Transio
sleeping occurring (start) starts
occurring sleeping (stop) stops
occurring sleeping (abort) aborts
occurring paused (pause) pauses
paused occurring (resume) resumes
paused sleeping (stop ) stops
paused sleeping (abort) aborts
C.9 Elos
Um elo (link) uma entidade NCM que possui duas propriedades
adicionais: um conector e um conjunto de associaes (binds) a esse conector.
O conector uma entidade cujo objetivo definir as semnticas das
relaes hipermdia, independentemente dos participantes que iro
efetivamente interagir [Muchaluat et al., 2002]. Conectores recebem o status
de entidades de primeira classe no modelo [Muchaluat et al., 2001], isto , os
conectores podem ser definidos independentemente de outras entidades do
modelo.
Elos representando o mesmo tipo de relao, mas interconectando
participantes (ns) diferentes, podem reusar o mesmo conector.
Um conector especifica um conjunto de pontos de acesso de interface
chamados papis. Um elo NCM referencia um conector e define um conjunto
de binds que relacionam cada extremidade do elo (ponto de interface de um
n) com um papel do conector referenciado.
A Figura C.5 apresenta a hierarquia de classes do elo NCM, discutida
nas subsees seguintes.
Entity
CausalLink ConstraintLink CausalConnector ConstraintConnector
Bind
role
component
interface
descriptor
embed
Link
2..n 1 2..n
bindSet
1
Role
Glue
HypermediaConnector
* 1
connector
* 1
2..n
1
2..n
roles
1
1
1
1
glue
1
Figura C.5 Hierarquia de classes do elo NCM.
477
C.9.1 Conectores
A Figura C.6 ilustra um conector R representando uma relao com trs
papis distintos, que significam trs tipos de participantes da relao. A
figura tambm mostra dois elos diferentes, l
1
e l
2
, reusando R. Enquanto o
conector define o tipo de relao, o conjunto de binds de um elo define os
participantes. O elo l
1
especifica trs binds, interligando os ns A, B e C aos
papis de R. O elo l
2
tambm especifica trs binds, s que interligando um
conjunto diferente de ns (B, C e D). Os elos l
1
e l
2
definem relacionamentos
diferentes, j que interligam conjuntos distintos de ns, mas representam o
mesmo tipo de relao, pois usam o mesmo conector. Na especificao de um
documento NCM, um elo deve fazer referncia a uma instncia de conector.
xconnector
node node anchor/port/attribute bind bind role role
xconnector R xconnector R
A
C
Link l
1
D
Link l
2
B
R
R
A
C
Link l
1
D
Link l
2
B
RR
RR
Figura C.6 Exemplos de elos que utilizam o mesmo conector R.
Conceitualmente, conectores podem representar qualquer tipo de relao
hipermdia, tal como relaes de referncia, relaes de sincronizao,
relaes semnticas, relaes de derivao etc. Essa verso 3.0 do NCM
concentra seus esforos na especificao de relaes de sincronizao espao-
temporal, assim como relaes de referncia,
16
oferecendo o suporte
necessrio para a criao de documentos hipermdia.
O conector (connector) NCM permite a definio de relaes
multiponto com semntica causal ou de restrio. Em uma relao causal,
uma condio deve ser satisfeita para que uma ao seja executada. Um
exemplo de relao causal a tradicional relao de referncia hipermdia,
que causa a navegao para um n de destino quando uma ncora de um n
de origem for selecionada pelo usurio. Um outro exemplo de relao causal
pode iniciar a apresentao de um n quando a apresentao de outro
terminar. Alm de relaes causais, relaes de restrio, sem nenhuma
causalidade envolvida, tambm podem ser especificadas por conectores
16
Na realidade, as relaes de referncia so tratadas como casos particulares de relaes de
sincronizao espao-temporal.
478
NCM. Considere, por exemplo, uma restrio especificando que um n deve
terminar sua apresentao ao mesmo tempo que outro comea a dele. A
ocorrncia de uma apresentao sem a ocorrncia da outra tambm satisfaz a
restrio, que especifica que, se e somente se esses dois ns forem
apresentados, seus tempos de fim e incio, respectivamente, devem coincidir.
Para capturar relaes causais e de restrio, conectores so
especializados em conectores causais e conectores de restrio. Em ambos os
tipos, a definio de um conector feita por um conjunto de papis (roles)
que determinam a funo dos participantes da relao e um atributo glue, que
descreve como os papis interagem. A definio de papis baseada no
conceito de evento (Seo C.8). Cada papel descreve um evento associado a
um participante da relao e o glue descreve a combinao entre os eventos
de acordo com a semntica de causalidade ou de restrio.
Cada papel de um conector define um identificador nico (id) no
conjunto de papis do conector, um tipo de evento e sua cardinalidade. O tipo
de evento (event type) especifica o nome de uma das especializaes da classe
evento. A Tabela C.2 descreve os nomes para os tipos de evento NCM. A
cardinalidade de um papel indica o nmero mnimo e mximo de participantes
que podem desempenhar o papel (nmero de binds) quando esse conector for
usado na criao de um elo, como ser definido posteriormente.
Tabela C.2 Definies dos nomes para os tipos de evento dos conectores NCM
Especializao do Evento Nome para o Tipo de Evento
Evento de apresentao presentation
Evento de seleo selection
Evento de superposio do
dispositivo apontador
pointOver
Evento de arraste drag
Evento de atribuio attribution
Evento de foco focus
Evento de coliso collision
Evento de proximidade proximity
Papis so especializados em condio (condition), ao (action) e
avaliao (assessment). Diferentes tipos de papis so usados de acordo com
o tipo de conector. Em conectores de restrio, somente papis do tipo
avaliao devem ser usados. Em conectores causais, qualquer tipo de papel
pode ser usado. A Figura C.7 apresenta a hierarquia de classe dos papis de
conectores NCM.
479
action
Role
id
eventType
minCardinality
maxCardinality
SimpleCondition
EventStateTransitionCondition
transitionName
EventAttributeCondition
attributeName
comparator
value
Action
actionType
delay
repetitions
delayBetweenRep
ActionRole
1 1 1 1
CompoundCondition
operator
isNegated
Condition
2..n
1
2..n
1
ConditionRole
1 1 1
condition
1
NodeAttributeCondition
attributeName
comparator
value
SimpleComparisonCondition
attributeName
comparator
value
AssessmentRole Assessment
offset
1 1
assessment
1 1
EventAttributeAssessment
attributeName
NodeAttributeAssessment
attributeName
EventStateTransitionAssessment
transitionName
AssignmentAction
value
Figura C.7 Hierarquia de classes dos papis de conectores NCM.
Papis do tipo ao (action roles) capturam aes que devem ser
executadas em uma relao causal. Os tipos de ao esto ilustrados na
Figura C.4 por arcos rotulados, que causam transies na mquina de
estados. Alm de seu tipo, a ao de um papel pode definir um valor (value) a
ser imposto a um atributo participante (no caso de eventos de atribuio). Um
exemplo de papel do tipo ao pause a exibio de um evento de
apresentao.
Aes NCM podem ser estendidas. Por exemplo, aes de animao
podem ser especificadas definindo um valor inicial, um valor final e uma
durao para que uma atribuio seja realizada (por exemplo, a posio x do
objeto na tela, em um eixo de coordenadas x e y).
Em conectores causais, condies devem ser satisfeitas para disparar as
aes. As condies so capturadas por papis do tipo condio (condition
role), que definem expresses lgicas avaliando transies nos estados dos
eventos, valores de atributos dos eventos ou valores de atributos dos ns.
Quando uma condio avaliada, ela retorna um valor booleano.
As condies podem ser simples ou compostas. Uma condio simples
(simple condition) pode testar uma transio de estado de um evento, o valor
de um atributo de um evento ou o valor de um atributo de um n. No caso da
condio sobre transio de estado do evento (chamada event state-
transition condition), o resultado do teste considerado verdadeiro apenas no
momento em que a transio ocorre, especificada em seu atributo nome da
transio (transition name), conforme definido na Tabela C.3. A condio
sobre atributo (attribute condition) deve especificar o tipo do atributo a ser
480
testado (attibuteType): estado de um evento ou atributo de um evento
(occurences ou repetitions), associado por um elo a uma ncora de um n, ou
atributo de um n (nodeAttibute), associado por um elo a um atributo
qualquer de um n. O atributo referenciado ser comparado com o valor
(value) especificado na condio, usando um dos seguintes comparadores: =,
=, <, s, >, >. A condio sobre atributo do n obriga que o tipo do evento
definido no papel seja de atribuio, conforme discutido na Seo C.8. Para
os eventos de seleo, o papel condio pode especificar, adicionalmente, a
que dispositivo de seleo ele se refere (por exemplo, teclado ou teclas de um
controle remoto), atravs do attributo Key.
Uma condio composta (compound condition) de um papel do tipo
condio consiste em uma expresso lgica baseada nos operadores and ou or
envolvendo duas ou mais condies que iro atuar sobre o mesmo evento. Um
exemplo de papel com condio composta a apresentao de um
participante terminou pela segunda vez, que seria especificada como
[(eventType = presentation), ((transition = stops) AND (occurrences =
2))].
17
Note que qualquer condio composta pode ser negada utilizando o
atributo booleano est negada (isNegated).
Enquanto uma condio sempre retorna um valor booleano, um papel de
avaliao (assessment role) contm uma avaliao que retorna qualquer tipo
de valor, dependendo do tipo do alvo da avaliao. Uma avaliao de
atributo (attribute assessment) retorna o valor de um atributo do evento
(attributeType igual a um dos atributos de evento: occurences ou repetitions)
ou o valor de um estado de evento (attributeType igual a state), quando
associado por um elo a uma ncora de um n, ou retorna um valor de atributo
de um n (attributeType igual a nodeAttribute), associado por um elo. Uma
avaliao de transio de estado do evento (event-state transition
assessment) retorna o instante de tempo em que uma transio de estado do
evento, especificada no atributo nome da transio (transitionName), ocorre.
Ao se referir a um evento de seleo, um papel de avaliao pode especificar,
adicionalmente, a que dispositivo de seleo ele se refere, atravs do atributo
key.
Como mencionado anteriormente, um conector definido por um
conjunto de papis e um glue, que especifica como os papis interagem. Todo
papel de um conector deve ser usado em seu glue. Um conector de restrio
tem um glue de restrio (constraint glue), que define uma expresso
assertiva (statement expression) relacionando papis do tipo avaliao. Um
conector causal tem um glue causal (causal glue), que define tanto uma
expresso de disparo (trigger expression), relacionando papis do tipo
17
Operadores de condies compostas podem ser estendidos com outros tipos, como operadores de
lgica temporal. Evidentemente, esses operadores tero de ser corretamente interpretados pelos formatadores
dos documentos.
481
condio ou avaliao, quanto uma expresso de aes (action expression),
relacionando papis do tipo ao. Quando a expresso de disparo for
satisfeita, a expresso de aes dever ser executada. A Figura C.8 ilustra a
hierarquia de classes definida pelo modelo para as expresses dos conectores
NCM.
Glue
SimpleStatement
comparator
mainAssessmentRole
mainRoleQualifier
mainAssessmentOffset
AssessmentValueStatement
value
AssessmentStatement
otherAssessmentRole
otherRoleQualifier
otherAssessmentOffset
CompoundStatement
operator
isNegated
StatementExpression
2..n
1
2..n
1
ConstraintGlue
1 1 1
expression
1
SimpleTriggerExpression
conditionRole
roleQualifier
ActionExpression
delay
TriggerExpression
minDelay
maxDelay
CausalGlue
1 1 1
actionExpression
1
1
1
1
triggetExpression 1
ConditionExpression
CompoundTriggerExpression
operator
isNegated
2..n
1
2..n
1
SimpleActionExpression
actionRole
roleQualifier
repeat
repeatDelay
CompoundActionExpression
operator
Figura C.8 Hierarquia de classes das expresses nos conectores NCM.
A expresso assertiva do glue de restrio pode ser simples ou
composta. Uma assertiva simples (simple statement) pode comparar papis
de avaliao do mesmo tipo (assertiva entre avaliaes assessment
statement) ou um papel de avaliao com um valor, do mesmo tipo, do
resultado da avaliao (assertiva de valor de avaliao assessment value
statement). Um valor de deslocamento (offset) pode ser adicionado a um
papel de avaliao antes da comparao. Por exemplo, um deslocamento pode
ser adicionado a uma avaliao especificando: 5 segundos aps o instante de
tempo em que um evento de apresentao termina ou, ainda, a posio
vertical na tela mais 50 pixels. A comparao pode usar os mesmos
comparadores definidos para as condies simples. Por exemplo, suponha que
um papel de avaliao de transio de estado de evento P especifique o tipo
de evento como apresentao e a transio starts (incio da ocorrncia do
evento), e que um outro papel de avaliao de transio de estado de evento Q
especifique o tipo de evento como apresentao e a transio stops (trmino
da ocorrncia do evento). Se uma assertiva entre avaliaes S
1
definir que P
= Q, S
1
ser avaliada como verdadeira se um evento de apresentao
associado a P iniciar ao mesmo tempo que um outro evento de apresentao
482
associado a Q terminar.
18
Como outro exemplo, suponha que um papel de
avaliao H contenha uma avaliao de atributo do n que especifique a
posio horizontal na tela. Se uma assertiva de valor de avaliao S
2
definir
que H > 100, S
2
ser avaliada como verdadeira se a posio horizontal de
um participante desempenhando o papel H for maior que 100. Quando o
valor da cardinalidade mxima de um papel maior do que um, vrios
participantes podem desempenhar o mesmo papel. Nesse caso, um
qualificador (qualifier) precisar ser definido cada vez que o papel for
utilizado nas expresses do glue, como ser explicado na descrio da Tabela
C.4.
Uma assertiva composta (compound statement) consiste em uma
expresso lgica, baseada nos operadores and ou or, envolvendo duas ou
mais outras expresses assertivas. Assertivas compostas podem
opcionalmente ser negadas.
Apesar de expresses assertivas poderem ser utilizadas em conectores
causais, sua principal utilidade est na especificao de conectores de
restrio. A semntica de um conector de restrio a de que a expresso
assertiva deve ser mantida verdadeira durante a apresentao. A Tabela C.3
ilustra um exemplo de conector de restrio expressando uma relao de
sincronizao espacial especificando que dois ns devem ser alinhados pelo
topo (o atributo top de seus descritores deve ser idntico).
Tabela C.3 Exemplo de conector de restrio
Tipo de Papel e
Id
Tipo do
Evento
Cardinalidad
e (min, max)
Nome do
Atributo
Avaliao P
1
attribuio (1,1) descriptor.top
Avaliao P
2
attribuio (1,1) descriptor.top
Tipo do Glue Expresso Assertiva
Restrio P
1
= P
2
Uma expresso de disparo de um glue causal tambm pode ser simples
ou composta. Uma expresso de disparo simples (simple trigger expression)
se refere a um papel do tipo condio. Uma expresso de disparo composta
(compound trigger expression) consiste em uma expresso lgica, baseada
nos operadores and ou or, envolvendo duas ou mais outras expresses de
disparo ou de assertiva. Uma expresso de disparo composta pode ser
18
Como comentado, se o primeiro evento de apresentao no for iniciado ou o segundo evento de
apresentao no terminar, a expresso permanece verdadeira.
483
opcionalmente negada. Qualquer expresso de disparo (simples ou composta)
pode especificar retardos mnimo (minimum delay) e mximo (maximum
delay) para sua avaliao. Por exemplo, dado que uma expresso de disparo
C verdadeira no instante t, C definida com minimum delay=t1 e
maximum delay=t2 verdadeira no intervalo [t+t1, t+t2].
19
Expresses de disparo compostas podem relacionar qualquer nmero de
papis de condio e de avaliao (atravs das expresses assertivas e
expresses de condio). Entretanto, uma restrio necessria para garantir
a consistncia de relaes causais. Toda expresso de disparo associada a um
conector causal deve ser satisfeita somente em um instante de tempo
infinitesimal, exigindo que pelo menos um papel de condio de cada conector
causal defina uma condio sobre uma transio de estado de um evento.
Uma expresso de aes (action expression) tambm pode ser simples
ou composta. Uma expresso de aes simples (simple action expression)
refere-se a um papel do tipo ao. Se o papel do tipo ao de uma expresso
de aes simples exercido por um evento do tipo de apresentao ou de
atribuio, um atributo repeat pode ter seu valor imposto ao atributo
repeties (repetitions) do evento. Um retardo entre repeties da ao
(repeat delay) tambm pode ser especificado. Uma expresso de aes
composta (compound action expression) consiste em uma expresso, baseada
nos operadores par, seq ou excl, envolvendo duas ou mais outras expresses
de aes. Expresses compostas de aes parelelas (par) ou sequenciais (seq)
especificam que a execuo das aes deve ser feita em qualquer ordem ou
em uma ordem especfica, respectivamente. Expresses compostas de aes
exclusivas (excl) especificam que somente uma das aes deve ser executada.
No ltimo caso, o formatador do documento deve decidir qual das aes deve
ser disparada ou por sua conta ou com o auxlio do usurio.
Uma expresso de aes pode tambm especificar um retardo (delay)
que deve ser respeitado antes que a ao seja efetivamente executada.
20
Como dito anteriormente, quando a cardinalidade mxima de um papel
for maior que um, vrios participantes podem desempenhar o mesmo papel.
Nesse caso, um qualificador (qualifier) deve ser especificado toda vez que
esse papel for usado em expresses do glue. A Tabela C.4 apresenta os
possveis valores para qualificadores.
19
Note que o comportamento temporal das relaes NCM tambm pode ser obtido utilizando o n de
tempo (Seo C.4), em vez de explorar os parmetros de retardo do conector.
20
Uma aplicao baseada no NCM pode permitir a parametrizao desse valor e de outros atributos
presentes nas expresses de um glue e nos papis. Na linguagem NCL, por exemplo, uma mesma
especificao de conector pode ser reusada, com valores diferentes de parmetros derivando conectores NCM
diferentes. De fato, a parametrizao NCL usada no apenas para atributos de aes, mas tambm para
atributos de condies e de avaliaes, especificados tanto nos papis do conector quanto nas expresses de
um glue. Parametrizao, contudo, uma questo de implementao e no de modelo. Por isso, ela deixada
para as definies das aplicaes.
484
Tabela C.4 Valores para os qualificadores dos papis com cardinalidade mxima maior que
um
Tipo do
Papel
Qualificado
r
Semntica
Condio all Todas as condies devem ser verdadeiras
Condio any Ao menos uma condio deve ser verdadeira
Avaliao all Todas as avaliaes devem ser consideradas
Avaliao any
Ao menos uma avaliao deve ser
considerada
Ao par Todas as aes devem executar em paralelo
Ao seq
Todas as aes devem executar em paralelo,
mas respeitando a ordem em que os
participantes foram associados ao papel
Ao excl Apenas uma das aes deve ser executada
A Tabela C.5 ilustra um exemplo de conector causal expressando uma
relao de sincronizao temporal. A especificao do conector pode ser
interpretada como se um grupo de participantes estiver sendo apresentado
(C
1
) e outro participante for selecionado (C
2
), pare a apresentao do grupo
de participantes (A
1
) e inicie a apresentao de outro participante (A
2
). Para
parar a apresentao do mesmo grupo de participantes que desempenhou o
papel C
1
, um elo usando esse conector deve criar dois binds para cada
participante do grupo, um para o papel C
1
e outro para o papel A
1
.
Tabela C.5 Exemplo de conector causal
Tipo do Papel e
Id
Tipo do
Evento
Cardinalidad
e (min, max)
Condio Ao
Condio C
1
apresentao
(1,
unbounded)
state=occurring
Condio C
2
seleo (1, 1) transition=stops
Ao A
1
apresentao
(1,
unbounded)
stop
Ao A
2
apresentao (1, 1) start
Tipo do Glue
Expresso de
Disparo
Expresso de
Aes
Causal all(C
1
) AND C
2
seq(par(A
1
), A
2
)
Como a definio de conectores no simples de ser feita por um
usurio leigo, pois ele precisaria conhecer os conceitos de estados e transies
de estados de eventos, a ideia fazer com que usurios experientes definam
conectores, os armazenem em bibliotecas, chamadas de bases de conectores
(connector bases), e as tornem disponveis para a criao de elos.
485
C.9.2. Binds de Elos
Conforme j mencionado, elos so definidos em uma composio (na
realidade, em um n de contexto). Um elo referencia um conector e define um
conjunto de binds que associam cada extremidade do elo (interface dos ns) a
um papel do conector referenciado. Binds so limitados a conectar interfaces
de ns que estejam diretamente contidos em uma composio C onde o elo
definido ou ncoras da prpria composio C. No entanto, uma vez que a
porta de um n de composio pode ser mapeada para a porta de um outro n
de composio interno, e assim por diante, at que a ncora de um n seja
alcanada, elos definidos em uma composio C podem indiretamente
associar aos papis do seu conector eventos definidos em qualquer n
recursivamente contido em C. Isso traz a noo de elos visveis e elos
contextuais, definidos a seguir.
Lembramos que, no NCM, ns de composio diferentes podem conter o
mesmo n, e os elos podem ser definidos em qualquer composio da
perspectiva de um n, sendo necessrio identificar quais elos efetivamente
ancoram em um n ou passam por um n (no caso de ns de composio), em
uma dada perspectiva. Ao conjunto de elos que ancoram em um n, em uma
dada perspectiva P, chamamos de elos contextuais de P; ao conjunto de elos
que ancoram ou passam por um n de composio, em uma dada perspectiva,
chamamos de elos visveis de P.
Mais precisamente, dado um n N
1
e uma perspectiva P = (N
m
,....,N
1
),
com m>0:
1. Um elo l visvel em P se e somente se existe um n de composio
N
i
, para i e[1,m], tal que N
i
ocorre em P, N
i
contm l e:
i) se i>1, ento (N
i1
, p...,N
1
,p
1
) define uma sequncia de
mapeamentos de uma porta (Seo C.5) p da composio N
i1
e p
diretamente associada a um papel do conector usado por l;
ii) seno, N
1
um n que possui uma interface diretamente
associada a um papel do conector usado por l.
2. Um elo l contextual em P se e somente se existe um n de
composio N
i
, para i e[1,m], tal que N
i
ocorre em P, N
i
contm l e:
486
i) se i>1, ento (N
i1
, p...,N
1
,p
1
) define uma sequncia de
mapeamentos de uma porta p da composio N
i1
, N
1
contm uma
ncora que pertence sequncia de mapeamentos da porta p e p
diretamente associada a um papel do conector usado por l;
ii) seno, N
1
um n que possui uma ncora diretamente
associada a um papel do conector usado por l.
Por exemplo, suponha que os ns A e Z contenham o n B, que por sua
vez contm os ns C, D, E e F, com elos ilustrados na Figura C.9. Ento, a
exibio do n C, atravs da perspectiva (A, B, C), vai mostrar um elo da
ncora i de C para a ncora j de E e um elo da ncora m de C para ncora n
de F, definidos em A e B, respectivamente. Ambos so elos contextuais e
visveis em (A, B, C). A exibio do n B, atravs da perspectiva (A,B), vai
mostrar um elo de B para B, que definido no n A. Esse o nico elo visvel
em (A, B); no h elos contextuais em (A, B).
conector
ncora / atributo
A
c1
Z
c4
B
E
j
s
C m
r
i
c1
p3
p2
p1
F
c2
D
k t
p4
c3
B
E
j
s
C m
r
i
c1
p3
p2
p1
F
c2
D
k t
p4
c3
papel
n
porta
ligao (bind) mapeamento
Figura C.9 Exemplos de elos visveis em contextuais no NCM.
487
Por outro lado, a exibio do n C, atravs da perspectiva (Z, B, C), vai
mostrar um elo a partir da ncora r de C para a ncora k de D e um elo a
partir da ncora m de C para a ncora n de F, definidos em Z e B,
respectivamente. Ambos so elos contextuais e visveis em (Z, B, C). A
exibio do n B, atravs da perspectiva (Z, B), vai mostrar um elo de B para
B, definido no n Z. Esse o nico elo visvel em (Z, B), no havendo elos
contextuais nessa perspectiva.
Binds de um elo possuem outros atributos alm daqueles utilizados para
associar uma interface a um papel: descritor e embed. Um atributo descritor
opcional e especifica um descritor genrico para o n associado com o papel
do conector. Se o n associado for um n de composio N, o descritor deve
ser nulo. Note que vrios binds para o mesmo n de contedo com diferentes
descritores levam a apresentaes simultneas do mesmo n com diferentes
caractersticas de exibio, similar ao que proporcionado com o grupo de
descritores e a navegao em profundidade discutida na Seo C.5.
O atributo embed um atributo booleano que s deve ser usado na
associao entre um papel de ao (somente para as aes start ou prepare)
com um evento de apresentao E. Se o descritor do bind referenciar uma
ferramenta de exibio (Seo C.11) que j esteja sendo utilizada para
controlar a apresentao de um outro evento F, a ferramenta de exibio
solicitada a tambm controlar E, sem parar F, se o atributo embed for
verdadeiro; caso contrrio, se embed for igual a falso, a ferramenta de
exibio dever ser solicitada a substituir (parar) F por E. Quando no
especificado, esse atributo deve ser considerado como igual a falso.
A definio de portas switch apresentada na Seo C.7 permite que elos
(relacionamentos) sejam definidos ancorando em ns switch,
independentemente do n que ser selecionado, como ilustrado na Figura
C.10. As portas de composio tradicionais permitem que um elo seja
associado a uma alternativa especfica. Se essa alternativa no for
selecionada, o elo ser simplesmente ignorado durante a apresentao do
documento.
488
X
Y
C A B
regras
n switch porta switch
a b c
mapeamentos
ponto de
interface
elo
Figura C.10 Ns switch, portas switch e elos.
Com base nas entidades do modelo ns switch, portas switch e binds de
elos, um autor pode especificar documentos que contemplem adaptao de
elos. Para isso, basta colocar em um mesmo n switch cpias de um mesmo
n, com diferentes elos associados s vrias ocorrncias do n. A Figura C.11
oferece um exemplo de uso das alternativas para adaptar os relacionamentos.
No exemplo, o elo que inicia a apresentao do n Z s estar habilitado no
documento se a regra a for avaliada como falsa e a regra b for avaliada como
verdadeira.
X Y
a b
elo ignorado se a for
verdadeira ou b for falsa
Z
A A
regras
n switch
Figura C.11. Ns switch, portas switch e elos.
489
C.10 Objetos de Dados X
Objetos de Representao
O NCM define um objeto de dados (data object) como uma entidade
que compreende um n NCM e todas as operaes para manipulao desse
n, exceto as operaes relacionadas com a apresentao do seu contedo
(suas unidades de informao, conforme definido na Seo C.3). A
funcionalidade de apresentar o contedo do n dada por uma instncia de
descritor que deve ser associada ao n (objeto de dados).
A agregao de um objeto de dados e um descritor NCM chamada de
objeto de representao. A associao entre objetos de dados e descritores
representada na Figura C.12 por linhas conectando os objetos de dados no
plano intermedirio com os objetos de representao, desenhados no plano
superior. Na figura, os ns so representados por crculos, e os elos por arcos
e composies, pela incluso de crculos e arcos em crculos maiores.
Z
1
C1
A
1
A
2
A
3
X
1
Y
1
Plano de representao
Plano de dados
ns (objetos de
representao)
Z
C
A
X
Y
ns (objetos de dados)
D
1
D
2
D
3
D
X
D
Y
D
Z
D
C
descritores
Figura C.12 Associao entre objetos de dados e descritores, gerando objetos de
representao.
490
Note que um n (objeto de dados) pode ser combinado a diferentes
descritores, originando diferentes representaes (objetos de representao) da
mesma entidade. A figura mostra essa caracterstica com a associao dos
descritores D
1
, D
2
e D
3
ao objeto de dados A, criando os objetos de
representao A
1
, A
2
e A
3
. O n A possui trs diferentes representaes
porque existem, por exemplo, trs diferentes formas de navegao at ele,
atravs dos dois elos ou atravs da hierarquia de composies. Note, assim,
que, devido ao fato de um mesmo objeto de dados poder gerar vrios objetos
de representao, um contexto objeto de representao pode conter um
nmero de elementos diferente do contexto objeto de dados por exemplo, o
contexto C
1
da figura possui trs ns, ao passo que o n objeto de dados
correspondente (contexto C) s tem um.
Pelas definies do NCM, um descritor pode ser definido em uma
propriedade do n, em um grupo de descritores da composio que contm o
n ou como um atributo de binds entre o n e os elos. Alm disso, descritores
default podem ser especificados para as classes dos ns (texto, imagem etc.)
ou explicitamente sugeridos pelos usurio leitor do documento. Se um n
possuir mais de um desses descritores especificados, o sistema de
apresentao (formatador de documentos NCM) dever construir um
descritor resultante baseado na regra de cascateamento definida a seguir.
Suponha um n N da classe C com a perspectiva corrente (C
k
, , C
1
,
N) alcanada atravs de uma navegao por elo (elo l). Seja D
1
um descritor
definido para a classe do n C, D
2
o descritor definido pela propriedade
descritor de N, D
3
o nico membro do grupo de descritores especificado para
N em C
1
, e D
4
um descritor especificado no bind feito para associar N ao
conector referenciado pelo elo l. O descritor resultante ser formado pela
soma de todos os atributos/propriedades dos seguintes descritores: D
1
, D
2
, D
3
,
D
4
. Se dois ou mais descritores definirem o mesmo atributo/propriedade com
diferentes valores, D
4
(descritor do elo) ter prioridade sobre D
3
(descritor da
composio), que ter prioridade sobre D
2
(descritor do n), que ter
prioridade sobre D
1
(descritor da classe). Se o usurio especificar um quinto
descritor ao navegar para N, esse descritor ser includo na lista de
cascateamento com precedncia sobre D
4
.
C.11 Descritores Genricos, Descriptores e
Switches de Descritores
Conforme mencionado anteriormente, descritores NCM agrupam
informaes das caractersticas de apresentao, objetivando separar essas
informaes do contedo do documento e de sua estrutura.
491
O NCM define uma classe descritor genrico (generic descriptor) que
especializada nas classes descritor (descriptor) e switch de descritores
(descriptor switch). O descritor NCM uma entidade que possui como
propriedades adicionais: uma especificao de incio de apresentao, uma
especificao de fim de apresentao e uma coleo de descries de
eventos.
A propriedade especificao de incio de apresentao deve conter um
identificador da ferramenta de exibio (player) utilizada pelo formatador.
Essa ferramenta ser responsvel por processar e exibir o contedo do n
durante a apresentao. Quando essa propriedade no estiver definida ou o
seu valor apontar para uma ferramenta inexistente no formatador, o
formatador de documentos dever escolher um exibidor default com base no
tipo de contedo do n.
A especificao de incio de apresentao pode tambm conter um
atributo especificando se uma nova ferramenta de exibio deve ser
instanciada ou se uma ferramenta j instanciada pode ser usada. Alm disso,
a especificao de incio de apresentao pode conter um conjunto de
atributos particulares que ser interpretado pelo exibidor selecionado para
controlar a apresentao do n. Alguns exemplos desses parmetros so:
- para ns com apresentaes visveis, como ns de texto, vdeo e
imagem, um parmetro dispositivo (device) especifica o dispositivo
onde a apresentao ocorrer; um parmetro regio espacial (spatial
region) especifica uma localizao para apresentar o contedo do n,
identificando a posio na tela do dispositivo especificado etc.
Quando esses parmetros no forem especificados, o formatador
dever escolher um dispositivo e uma rea default para apresentao
do n;
- para ns de udio, um parmetro dispositivo (device) especifica o
dispositivo de udio onde o som deve ser apresentado; um parmetro
volume especifica o volume inicial de apresentao etc.
21
Quando
esses parmetros no forem especificados, o formatador dever
escolher um dispositivo e uma rea default para apresentao do n;
- para um n de texto que deva ser exibido por uma ferramenta TtS
(text to speech), parmetros podem especificar a voz desejada, o
sotaque etc.
A propriedade especificao de fim de apresentao define aes que
devem ser executadas ao final de uma apresentao. Ela deve conter um
21
O autor pode escolher exibir alguma informao visual associada ao udio (por exemplo, uma
barra de progresso temporal). Nesse caso, os parmetros descritos no primeiro item tambm poderiam ser
especificados.
492
atributo especificando o que acontecer com a ferramenta de exibio ao final
da apresentao, isto , se a ferramenta ser fechada ou permanecer aberta,
pronta para uma prxima apresentao. Neste ltimo caso, deve tambm ser
especificado se a ferramenta de exibio permanecer escondida ou no.
Uma descrio de um evento, em um descritor, por sua vez, consiste na
tupla <Idncora, DurExplcita, FunoCusto, Rep>. O parmetro Idncora
um identificador de uma ncora do objeto de dados (n) ao qual o descritor
ser associado para a formao do objeto de representao (essa ncora pode
ser genericamente identificada por um rtulo ou por sua posio na lista de
ncoras para permitir que um mesmo descritor seja reusado por mais de um
n). DurExplcita opcional, somente podendo ser utilizada para eventos do
tipo exibio, e sobrescreve a durao de apresentao ideal intrnseca ao
contedo do n. FunoCusto tambm opcional, tambm s podendo ser
usada em eventos do tipo exibio, e especifica uma mtrica para guiar o
formatador em ajustes que precisem ser feitos na durao de apresentao da
ncora do n. Rep especifica um valor para iniciar o atributo repeties do
evento (Seo C.8). Em particular, todo descritor contm ao menos a
descrio de evento <, DurExplcita, FunoCusto, Rep> associada sua
ncora de contedo total, onde, como j mencionado, DurExplcita,
FunoCusto so opcionais.
De forma similar entidade n switch (Seo C.7), o switch de
descritores contm uma lista ordenada de regras, estando cada regra
associada a um descritor. O formatador de documentos deve percorrer a lista
avaliando cada regra e selecionando o primeiro descritor cuja regra tiver sido
satisfeita. Se nenhuma das regras for verdadeira, o switch de descritores pode
especificar um descritor default para ser selecionado.
A entidade switch de descritores permite que formatadores de
documentos NCM adaptem caractersticas da apresentao dos ns
independentemente das informaes estruturais e dos contedos. Obviamente,
ambos os tipos de flexibilidade (adaptao de apresentao e adaptao de
contedo) podem ser combinadas. Juntas com os ajustes de durao, essas
caractersticas do modelo proporcionam um suporte flexvel para que os
autores especifiquem documentos e apresentaes de documentos hipermdia
adaptativos.
C.12 Trilhas
Caractersticas como grande nmero de ns e grande nmero de elos,
muitas mudanas no documento, tempo de resposta ruim para as aes do
usurio, diferenas visuais insuficientes entre elos e ns, e usurios no-
orientados visualmente se combinam para dificultar os mecanismos de
493
navegao em um documento. Usurios desorientados precisam de
informaes de escopo para restabelecerem a noo de localizao. Em
particular, informaes do escopo temporal so necessrias para responder a
questes do tipo como eu cheguei aqui?. Essas questes encontram suas
respostas com a introduo do conceito de trilha.
Dada uma composio C, do tipo n de contexto, base privada ou
hiperbase pblica,
22
uma trilha T para C um n de composio cujo
contedo uma lista ordenada de ns de contedo, ns de contexto ou outros
ns de trilha, tais que todos os ns, que no so trilhas, esto recursivamente
contidos em C e todos os seus ns de trilhas so trilhas para C. Mais ainda, T
tem um atributo bsico adicional denominado n corrente, cujo valor indica a
posio de um n na lista ordenada de T, chamado de entidade corrente de T.
Trilhas possuem um outro atributo bsico adicional denominado viso, cujo
valor associa a cada ocorrncia de um n N, na lista de T, um aninhamento de
ns (N
m
,....,N
1
), com m > 1, e um descritor D, tal que N
1
= N, N
m
= C, N
i+1
um n de composio, N
i
est contido em N
i+1
, para i e [1,m). Diz-se que a
trilha T associada a C.
Toda trilha deve implementar o mtodo deferido da classe composio:
- Insere n: insere um n na lista de ns da trilha, em uma posio
especificada, com uma viso associada.
Adicionalmente, toda trilha deve implementar os seguintes mtodos:
- prximo: se o atributo n corrente no apontar para o ltimo n,
incrementa o atributo n corrente;
- anterior: se o atributo n corrente no apontar para o primeiro n,
decrementa o atributo n corrente;
- primeiro: coloca o atributo n corrente apontando para o primeiro n
da lista;
- ltimo: coloca o atributo n corrente apontando para o ltimo n da
lista;
- ativa: habilita os mtodos prximo, anterior, primeiro e ltimo, e
inibe os mtodos, insere n e retira n;
- desativa: desabilita os mtodos prximo, anterior, primeiro e ltimo,
e habilita os mtodos insere n e retira n.
A razo dos mtodos ativa e desativa no permitir que uma trilha seja
usada ao mesmo tempo para navegao (pela trilha) e para manter o histrico
da navegao. Ou ela usada para a realizao de uma tarefa ou da outra.
22
Bases privadas e hiperbase pblica sero definidas na prxima seo.
494
Note que um n pode aparecer mais de uma vez na lista ordenada de T.
Alm disso, cada ocorrncia do n associada com um aninhamento de ns
relativos a C. Dessa forma, trilhas so teis para linearizao de documentos
hipermdia e para implementao de viagens guiadas. Uma trilha especial do
sistema pode manter a histria de navegao do usurio durante uma sesso
de trabalho, de tal modo que o usurio possa mover-se aleatoriamente entre os
ns e depois recordar a navegao realizada. No entanto, se um n N contido
em um n switch S pertencer a uma trilha, esse n dever obrigatoriamente
ser a alternativa selecionada de S quando o usurio navegar pela trilha,
independentemente de a regra associada ao n no for mais verdadeira no
momento da navegao atravs da trilha.
A definio de trilhas importante para sistemas hipermdia, pois elas
representam travessias ordenadas. Atravs delas, os autores podem fornecer
ordens de leitura, que auxiliam leitores no-familiarizados com o material
informativo a navegar pelo hiperdocumento ou determinar uma ordem
apropriada de apresentao para uma certa audincia. Os usurios sentem-se
menos desorientados quando seguem uma trilha j definida, pois limitado o
nmero de opes que possuem para percorrer o documento.
Seguindo o modelo NCM, uma implementao possvel para trilhas que
mantenham o histrico de navegao criar uma trilha principal (ou trilha
do sistema). Toda vez que um usurio navegar para um n, esse n, sua
perspectiva corrente e o descritor resultante (descritor cascateado) so
inseridos na trilha principal pelo sistema. Se o usurio decidir navegar atravs
da trilha, criada uma cpia da trilha principal, e o mtodo ativa chamado
sobre essa cpia. Mesmo durante a navegao nessa cpia, a trilha especial
do sistema atualizada, de forma a sempre manter o histrico da navegao.
Se o usurio fizer qualquer navegao fora da dada pela trilha cpia, a cpia
destruda.
C.13 Hiperbase Pblica e Bases Privadas
A hiperbase pblica um conceito do NCM que representa o repositrio
pblico global das entidades disponveis em um sistema hipermdia. A
hiperbase pblica (public hyperbase) um n de composio nico que,
estando um n de composio C nele contido, ento todos os ns
recursivamente contidos em C devem tambm pertencer hiperbase. A
composio hiperbase pblica tem como propriedade bsica adicional um
conjunto de descritores. Os descritores desse conjunto so aqueles utilizados
para criao dos objetos de representao (veja Seo C.10), a partir do
conjunto de ns contidos na hiperbase pblica.
Uma base privada um tipo especial de n de composio, tal que:
495
i) ela pode conter ns de contedo, ns de contexto, ns switch, trilhas e
outras bases privadas;
ii) uma base privada pode pertencer a, no mximo, uma base privada;
iii) se um n de composio estiver contido em uma base privada PB, seus
componentes podem estar contidos em PB, contidos na hiperbase pblica
ou contidos em alguma base privada recursivamente contida em PB.
Bases privadas possuem como propriedades bsicas adicionais um
conjunto de elos e um conjunto de descritores. Cada elo contido no conjunto
de elos de um n-base privada PB define um relacionamento entre ns
recursivamente contidos em PB. Os descritores no conjunto de descritores de
uma base privada so aqueles utilizados para criar os objetos de
representao (veja Seo C.10) a partir dos ns recursivamente contidos na
base privada.
Intuitivamente, uma base privada rene todas as entidades utilizadas
durante uma sesso de trabalho do usurio.
Bibliografia
Muchaluat-Saade D.C., Soares L.F.G. Hypermedia Spatio-Temporal
Synchronization Relations Also Deserve First Class Status. VIII
Multimedia Modeling Conference. MMM'2001, Amsterdam, novembro
de 2001.
Muchaluat-Saade D.C., Rodrigues R.F., Soares L.F.G. XConnector:
Extending XLink to Provide Multimedia Synchronization. ACM
Symposium on Document Engineering. DocEng02, Virginia,. novembro
de 2002.
Prez-Luque M.J., Little T.D.C. A Temporal Reference Framework for
Multimedia Synchronization. IEEE Journal on Selected Areas in
Communications (Special Issue: Synchronization Issues in Multimedia
Communication), 14(1). Janeiro de 1996, pp. 36-51.
Soares, L.F.S. e Rodrigues, R.F. Nested Context Model 3.0 Part 1 NCM
Core, Monografias em Cincia da Computao do Departamento de
Informtica, PUC-Rio, N. 18/05. Rio de Janeiro, maio de 2005. ISSN
0103-9741.
Soares, L.F.S. e Rodrigues, R.F. Nested Context Model 3.0 Part 8 NCL
(Nested Context Language) Digital TV Profiles. Monografias em Cincia
da Computao do Departamento de Informtica, PUC-Rio, N. 35/06.
Rio de Janeiro, outubro de 2006. ISSN 0103-9741.
496
Apndice D
Exemplo de
Base de Conectores
Este apndice descreve os conectores causais usados nos exemplos do
Captulo 3, O Primeiro Joo, e do Captulo 15, sobre a utilizao de
mltiplos dispositivos de exibio.
1
1
O contedo deste captulo est disponvel sob a Licena Creative Commons Atribuio Uso
No-Comercial Compartilhamento pela mesma Licena 3.0 Unported, conforme publicado em
clube.ncl.org.br.
497
D.1 Conectores Causais
No Captulo 3 tivemos a oportunidade de discutir a concepo de alguns
dos conectores causais apresentados no documento NCL da Listagem D.1.
Outros conectores, contudo, foram apenas referenciados naquele captulo e no
Captulo 15.
Neste apndice, nos limitaremos apenas a apresentar as definies dos
conectores usados nos Captulos 3 e 15, sem discutir os detalhes de suas
concepes. No Captulo 10 o leitor pode encontrar uma discusso geral e
mais aprofundada sobre a concepo de conectores causais.
<?xml version="1.0" encoding="ISO-8859-1"?>
<ncl id="causalConnBase"
xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
<head>
<connectorBase>
<causalConnector id="onBeginStart">
<simpleCondition role="onBegin"/>
<simpleAction role="start" max="unbounded" qualifier="par"/>
</causalConnector>
<causalConnector id="onBeginStart_delay">
<connectorParam name="delay"/>
<simpleCondition role="onBegin"/>
<simpleAction role="start" delay="$delay" max="unbounded"
qualifier="par"/>
</causalConnector>
<causalConnector id="onEndStop">
<simpleCondition role="onEnd"/>
<simpleAction role="stop" max="unbounded" qualifier="par"/>
</causalConnector>
<causalConnector id="onBeginSet_varStart">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start" max="unbounded"
qualifier="par"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStopSet_varStart">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop" max="unbounded"
qualifier="par"/>
<simpleAction role="set" value="$var"/>
<simpleAction role="start" max="unbounded"
qualifier="par"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndSet_var">
<connectorParam name="var"/>
498
<simpleCondition role="onEnd"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<causalConnector id="onKeySelectionStopStart">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop" max="unbounded"
qualifier="par"/>
<simpleAction role="start" max="unbounded"
qualifier="par"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionSet_var">
<connectorParam name="keyCode"/>
<connectorParam name="var"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<causalConnector id="onBeginVarStart">
<compoundCondition operator="and">
<simpleCondition role="onBegin"/>
<assessmentStatement comparator="eq">
<attributeAssessment role="var"
attributeType="nodeProperty" eventType="attribution"/>
<valueAssessment value="true"/>
</assessmentStatement>
</compoundCondition>
<simpleAction role="start"/>
</causalConnector>
<causalConnector id="onBeginStartSet_var_delay_duration">
<connectorParam name="var"/>
<connectorParam name="delay"/>
<connectorParam name="duration"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var" delay="$delay"
duration="$duration"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionSet_varStop">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var" max="unbounded"
qualifier="par"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelection_orSet_varStopStart">
<connectorParam name="var"/>
<simpleCondition role="onSelection" qualifier="or"
max="unbounded"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var" max="unbounded"
qualifier="par"/>
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
499
</causalConnector>
<causalConnector id="onBeginSet_var">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<causalConnector id="onEndSet_varStop_delay">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="stop" max="unbounded" qualifier="par"
delay="3s"/>
</compoundAction>
</causalConnector>
</connectorBase>
</head>
</ncl>
Listagem D.1 Exemplo de base de conectores causais.
500
Apndice E
NPT
Normal Play Time
Quando se trata de um fluxo elementar enviado por difuso sem solicitao, o
conceito de tempo de exibio de um objeto de mdia no pode ser
estabelecido, uma vez que podemos sintonizar (comear a receber) o fluxo em
qualquer ponto e, portanto, no h como saber quanto tempo j se passou
desde seu incio (ou at mesmo o que seja o incio). Para possibilitar uma
soluo para o problema, o padro MPEG-2 criou o conceito de Normal Play
Time, ou NPT, que o assunto deste apndice.
501
E.1 Introduo
Um receptor pode comear a receber um fluxo elementar enviado sem
solicitao a partir de qualquer ponto temporal do mesmo, uma vez que o
instante de sintonizao qualquer um. Mais ainda, usual que um fluxo
elementar carregue mais de um contedo de objeto de mdia. Por exemplo, um
fluxo elementar de uma determinada emissora de TV carrega um programa
em sequncia do outro. Pior ainda, um contedo pode ser entremeado por
outro. Por exemplo, quando uma propaganda inserida no meio de um
programa de TV. Tudo isso torna impossvel saber em que instante de tempo
estamos em um determinado contedo, se no houver algum auxlio extra.
Para possibilitar a soluo do problema, o padro MPEG-2 permite ao
difusor especificar, para o receptor, em que ponto uma mdia est sendo
apresentada, por meio da definio de um cdigo de tempo associado a fluxos
elementares. Denominado Normal Play Time, ou NPT, esse cdigo de tempo
transportado em um tipo especial de descritor em uma seo privada
MPEG-2, discutida no Captulo 1.
NPT uma linha de tempo sobre a durao de um evento, definido pelo
padro MPEG-2 [ISO/IEC 13818-11998] como sendo uma coleo de fluxos
elementares com a mesma base temporal, com um tempo de incio e um tempo
de fim associado.
Um NPT pode comear de qualquer valor e prov uma referncia de
tempo para um segmento de mdia. Embora o NPT cresa no decorrer de um
fluxo de mdia, seus valores podem apresentar descontinuidades. Isso
significa que, mesmo se um fluxo de mdia for editado, seu valores NPT no
necessitam mudar. A Figura E.1 ilustra um exemplo. Na figura, o NPT
original apresentado, bem como o NPT final, aps os cortes em cinza-claro
no vdeo e a insero de um comercial em cinza-escuro.
| | | | | | | | | | | | | | | | | | | | | | | | | | |
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
| | | | | | | | | | | | | | | | | | | | | | | | | | |
1 2 3 7 8 9 10 11 12 13 1 2 3 4 5 14 15 16 17 18 19 20 21 22 23 26 27
clip de mdia original
clip de mdia editado
Figura E.1 NPT em uma mdia editada.
502
Valores NPT podem ser aninhados. Para identificar a que contedo o
NPT se refere, os descritores de referncia NPT tm dois campos: o valor de
NPT (NPT_Reference) e um identificador (contentId) do contedo a que ele
se refere. Por exemplo, na Figura E.1, o contentId do comercial inserido
(cinza-escuro na figura) diferente do restante do vdeo.
Assim, uma descontinuidade em um NPT pode ser reconhecida como
sendo uma simples edio no fluxo original ou uma fronteira entre dois
diferentes segmentos de mdia.
Cada descritor de referncia NPT tambm inclui um valor de taxa,
especificando para o receptor quantas pulsaes do relgio STC (System
Time Clock) do fluxo associado correspondem a uma pulsao do NPT. Essa
taxa no precisa ser constante durante toda uma transmisso de um segmento
de mdia. A taxa especificada por dois campos do descritor: scaleNumerator
e scaleDenominator. Quando os dois campos so iguais a 1, significa que o
NPT est mudando a uma taxa equivalente ao STC. Se o campo
scaleNumerator igual a 0 e o scaleDenominator diferente de zero, isso
indica que o NPT no est mudando em relao ao STC, ou seja, tem um
valor constante. Se os dois campos tm o valor zero, indicado que o
descritor no carrega os dois campos mencionados. Um scaleNumerator
diferente de zero com scaleDenominator igual a zero no permitido.
A Tabela E.1 ilustra a sintaxe de um descritor de referncia NPT. Nela,
dois campos adicionais devem ser observados: postDiscontinuityIndicator e
STC_Reference. O primeiro, se receber o valor 1, indica que o descritor de
referncia NPT ser vlido na prxima descontinuidade da base temporal
STC; se receber o valor 0, indica que o descritor vlido no momento de
sua recepo. O segundo campo indica o valor de STC quando o valor de
NPT aquele dado no campo NPT_Reference.
Tabela E.1 Descritor de Referncia NPT
Sintaxe N.. de Bits
NPT ReferenceDescriptor(){
descriptorTag (igual a 0x01) 8
descriptorLength 8
postDiscontinuityIndicator 1
contentId 7
reserved 7
STC_Reference 33
reserved 31
NPT_Reference 33
scaleNumerator 16
scaleDenominator 16
}
503
Como mencionamos, um NPT pode comear (e obviamente terminar)
em qualquer valor. Para informar a um cliente receptor (que, como vimos,
pode sintonizar um fluxo com base temporal NPT em qualquer ponto do
tempo) os valores inicial e final do NPT de um evento corrente, o MPEG
define um outro descritor chamado NPT Endpoint Descriptor, ilustrado na
Tabela E.2.
Tabela E.2 Descritor de Endpoint NPT
Sintaxe N. de Bits
NPTEndpointDescriptor(){
descriptorTag (igual a 0x02) 8
descriptorLength 8
reserved 15
StartNPT 33
reserved 31
stopNPT 33
}
O Captulo 10 discute como o NPT usado para definir pontos de
sincronizao entre objetos de mdia de um documento NCL e como o
contentId de um descritor NPT associado a um trecho do fluxo.
Bibliografia
ISO/IEC 13818-1 (2000). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 1: Systems, ISO/IEC 13818-1.
ISO/IEC 13818-6 (1998). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 6: Extensions for DSM-CC, ISO/IEC 13818-6.
Steven Morris (2004). Interactive TV Web. A technical (and non-technical)
guide to DSM-CC. http://interactivetvweb.org/tutorial/dtv-
intro/dsm-cc/index.shtml. Acesso em 21 de maro de 2008.
Balabanian, Casey and Greene (1996). Vahe Balabanian; Liam Casey; Nancy
Greene. An Introduction to Digital Storage Media Command and
Control (DSM-CC). Nortel, 1996.
504
Apndice F
Transporte de
Comandos de Edio
em Sees MPEG-2
Comandos de Edio NCL podem vir de diferentes modos, como
discutido no Captulo 16, que se dedica descrio desses comandos.
Neste apndice nos centraremos na discusso das diversas formas como
esses comandos podem ser transportados, tanto atravs de estruturas de dados
recebidas sem solicitao como atravs de estruturas de dados recebidas sob
demanda, mas em especial usando Sees MPEG-2.
1
1
Este captulo foi baseado em Soares et al., (2006). O uso do material foi gentilmente cedido pelo
Departamento de Informtica da PUC-Rio.
505
F.1 Introduo
Como mencionamos no Captulo 16, os parmetros dos comandos de
edio podem vir embutidos no descritor de evento de comando ou podem vir
em estruturas de dados externas, referenciadas pelos descritores de evento.
Esse sempre o caso dos comandos de edio addDocument e addNode.
Nesta seo vamos ver alguns exemplos dessas estruturas de dados e como
elas so transportadas. Vamos ver, tambm, como os descritores de evento
podem ser envelopados e transportados.
F.2 Transporte de Comandos por Descritores de
Eventos de Fluxo e Carrossel de Objetos DSM-CC
Em sistemas de TV digital terrestre comum o uso do protocolo DSM-
CC para transporte de comandos de edio em fluxos elementares de
transporte MPEG-2.
Comandos de edio NCL podem ser transportados usando descritores de
evento de fluxo DSM-CC. Como especificado em ISO/IEC 13818-6 [1998],
descritores de evento de fluxo DSM-CC tm uma estrutura muito parecida
com a dos descritores de evento NCL apresentados no Captulo 16 (ver
Figura 16.1). Na verdade, a estrutura dos descritores de evento NCL foi
definida para tornar o mais fcil possvel esse mapeamento (no caso, tornou
trivial). A Tabela F.1 apresenta a sintaxe de um descritor de evento de fluxo
DSM-CC para transporte de comandos de edio NCL, salientando em itlico
os campos adicionados ao descritor de evento definido no Captulo 16.
506
Tabela F.1 Descritor de Eventos de Fluxo para Comandos de Edio
Sintaxe N. de Bits
StreamEventDescriptor ( ) {
descriptorTag 8
descriptorLenght 8
eventId 16
reserved 31
eventNPT 33
privateDataLength 8
commandTag 8
sequenceNumber 7
finalFlag 1
privateDataPayload 8 a 2008
FCS 8
}
Para transmisso dos parmetros dos comandos de edio, o carrossel
de objetos DSM-CC pode ser usado [ISO/IEC 13818-6, 1998]. O protocolo
de carrossel de objetos DSM-CC permite a transmisso cclica de objetos de
eventos de fluxo e sistemas de arquivos, como vimos no Apndice B.
Em um carrossel de objetos, os objetos de eventos de fluxo so
utilizados para mapear nomes de eventos de fluxo em ids de eventos de fluxo,
definidos pelos descritores de evento. No caso dos eventos de comando NCL,
ele responsvel por mapear o nome nclEditingCommand em eventIds
definidos nos descritores de evento. Os nomes dos eventos permitem
especificar tipos de eventos, oferecendo maior nvel de abstrao s
aplicaes. O gerenciador da base privada, definido no Captulo 16, deve se
registrar como observador dos eventos com os quais lida, utilizando nomes de
evento; no caso de comandos de edio, o nome nclEditingCommand.
Como mencionamos no Apndice B, alm dos objetos de eventos de
fluxos, os carrossis de objetos DSM-CC podem tambm ser usados para o
transporte de arquivos organizados em diretrios. Um demultiplexador DSM-
CC responsvel por montar a estrutura recebida no dispositivo receptor.
Parmetros dos comandos de edio especificados como documentos XML
(documentos NCL ou entidades NCL que se quer adicionar) podem, assim,
ser organizados em sistemas de arquivos a serem transportados nesses
carrossis, como alternativa ao transporte dentro dos prprios descritores de
evento que definem os comandos. O gerador de carrossel de objetos o
responsvel por juntar esses arquivos e os objetos de eventos de fluxo em
fluxos elementares de dados MPEG-2.
507
Assim, quando um comando de edio NCL precisa ser enviado, um
objeto de eventos DSM-CC deve ser criado, mapeando a string
nclEditingCommand em uma id de evento de fluxo, e ento colocado em
um carrossel de objetos DSM-CC, que enviado em um fluxo elementar (o
tipo do fluxo deve ter o valor de 0x0B). Um ou mais descritores de evento de
fluxo DSM-CC com a id previamente selecionada podem ser ento criados e
enviados em outro fluxo elementar MPEG-2 TS. Esses eventos de fluxo
podem ter sua referncia de tempo colocadas em zero, mas tambm podem ser
adiados para serem executados em um tempo especfico. O gerenciador da
base privada deve se registrar como um ouvinte nclEditingCommand e ser
notificado quando esses eventos de fluxo chegarem. O commandTag recebido
ento utilizado pelo gerenciador da base privada para interpretar a
semntica da command string.
Se, no descritor de evento de comando de edio, o command parameter
baseado em XML for curto o suficiente, ele pode ser transportado diretamente
no payload dos descritores de evento. Se no for, o privateDatePayload
transportar um conjunto de pares de referncia. Nesse caso, a especificao
XML deve ser enviada no mesmo carrossel de objetos que carrega o objeto de
eventos. O parmetro uri do primeiro par de referncias deve ter o caminho
absoluto da especificao XML (o caminho no servidor de dados). O
parmetro id correspondente no par deve fazer referncia ao IOR da
especificao XML (carouselId, moduleId, objectKey) [ISO/IEC 13818-6,
1998] no carrossel de objetos. Em comandos de edio diferentes de
addDocument e addNode, o parmetro uri pode ser omitido. Se outros
sistemas de arquivos precisarem ser transmitidos usando outros carrossis de
objeto a fim de completar o comando de edio (como usual nos comandos
addDocument ou addNode) com contedo de mdia, outros pares {uri, id}
devem estar presentes no comando. Nesse caso, o parmetro uri deve ter o
caminho absoluto da raiz do sistema de arquivos (o caminho no servidor de
transmisso de dados), e o respectivo parmetro ior no par deve fazer
referncia ao IOR (carouselId, moduleId, objectKey) de qualquer arquivo ou
diretrio filho da raiz no carrossel de objetos (o service gateway do carrossel,
conforme apresentado no Apndice B).
A Figura F.1 ilustra um exemplo de transmisso de documento NCL,
por meio de um carrossel de objetos, a ser adicionado por meio de um
comando addDocument. Nesse exemplo, um provedor de contedo quer
transmitir o programa interativo chamado "weatherConditions.ncl",
armazenado em um de seus servidores de dados (sistema local de arquivos, de
acordo com a Figura F.1).
508
Sistema de Arquivo Local
c:\nclRepository
weatherConditions.ncl
images
brazilianMap.png
NCL
weather
Service Domain = 1
moduleId = 1
objectKey = 1
objectKind = srg
2 bindings
binding #1
objectName =
weatherConditions.ncl
objectType = fil
IOR = 1,1,2
binding #2
objectName = images
objectType = dir
IOR = 1,1,3
...
objectKey = 2
objectKind = fil
data
...
objectKey = 3
objectKind = dir
1 binding
binding #1
objectName =
brazilianMap.png
objectType = fil
IOR = 1,2,1
moduleId = 2
objectKey = 1
objectKind = fil
data
...
objectKey = 2
objectKind = ste
eventList
eventName =
nclEditingCommand
eventId = 3
...
Descritor de Evento de Fluxo
descriptorTag = 0
descriptorLength = descriptorLen()
eventId = 3
Reserved
eventNPT = 0
privateDataLength = dataLen()
commandTag = 0x05
sequenceNumber = 0
finalFlag = 1
privateDataPayload = someBase,
x-sbtvd://c:/nclRepository/weather,
1,1,2
FCS = checksum()
Figura F.1 Exemplo de uma transmisso de documento NCL em carrossel DSM-CC.
Um carrossel de objetos deve ento ser gerado (domnio de servio = 1,
na Figura F.1), carregando todo o contedo do programa interativo (arquivo
.ncl e todos os arquivos de mdia) e tambm um objeto de eventos (moduleId
= 2 e objectKey = 2, de acordo com a Figura F.1) mapeando o nome
nclEditingCommand para o valor de eventId (valor 3 na Figura F.1).
Um descritor de evento de fluxo tambm deve ser transmitido com o
valor de eventId apropriado, no exemplo 3, e o valor 0x05 de
commandTag, que indica um comando addDocument (ver Captulo 16). O
parmetro uri conter opcionalmente o esquema (no caso x-sbtvd,
indicando o recebimento no carrossel) e o caminho absoluto do documento
NCL (C:\nclRepository\weather de acordo com Figura F.1). Finalmente, o
IOR do documento NCL no carrossel de objetos transportado no parmetro
xmlDocument (carouselId = 1, moduleId = 1, objectKey = 2, tambm de
acordo com a Figura F.1).
Note que os pares {uri, id} transportados nos descritores de evento so
suficientes para que a identificao dos recursos da aplicao no dispositivo
receptor possa ser feita de forma idntica quela realizada no ambiente de
autoria do documento, a despeito de os identificadores dos recursos usarem
URLs absolutas ou relativas e de um carrossel de objetos usados no
transporte fazer referncia a recursos transportados em outro carrossel. Por
exemplo, a aplicao weatherConditions.ncl poderia se referir ao arquivo
brazilianMap.jpg de forma absoluta ou relativa. Mais ainda, a aplicao
poderia se referir a um contedo armazenado em um provedor de contedos
diferente do da aplicao, que dever, ento, ser transportado em um
509
carrossel de objetos diferente daquele que transporta a aplicao. O
mapeamento para a localizao dos recursos realizado automaticamente
pelo gerenciador de bases privadas.
F.3 Transporte de Comandos de Edio Usando
Estruturas Especficas Definidas pelo Ginga-NCL
Na Seo F.2 discutimos o transporte de parmetros de comandos de
edio em sees MPEG-2 transportando carrossis de objetos. Nesta seo
discutiremos o uso de outras estruturas para transporte desses parmetros
[ABNT, NBR 15606-2, 2011].
Descritores de evento podem ser enviados em fluxo elementar MPEG-2
TS usando eventos de fluxo DSM-CC, como vimos na seo anterior, como
tambm usando qualquer protocolo para transmisso de dados sem solicitao
(pushed data).
Trs tipos de estrutura de dados so definidos [Soares et al., 2006] para
dar suporte transmisso de parmetros dos comandos de edio NCL, alm
da estrutura de descritor de evento j definida: mapa, metadados e arquivos de
dados.
Para estruturas de mapa, o campo mappingType identifica o tipo do
mapa. Se o valor de mappingType for igual a 0x01 (events), um mapa de
eventos caracterizado. Nesse caso, depois do campo mappingType, vem
uma lista de identificadores de eventos, como definido na Tabela F.2. Outros
valores para o campo mappingType podem ser definidos, mas no so
relevantes para nossa discusso.
Tabela F.2 Lista de Identificadores de Eventos Definidos pela Estrutura de Mapa
Sintaxe Nmero de Bits
mappingStructure ( ) {
mappingType 8
for (i=1; i<N; i++){
eventId 8
eventNameLength 8
eventName 8 to 255
}
}
510
Mapas do tipo events (mapas de eventos) so usados para mapear
nomes de eventos em eventIds dos descritores de evento. Mapas de eventos
so usados para indicar quais eventos devem ser recebidos (qualquer
semelhana com a funo dos objetos de eventos de fluxo DSM-CC no
mera coincidncia). Nomes de eventos permitem especificar tipos de eventos,
oferecendo maior nvel de abstrao s aplicaes. Assim, quando precisamos
enviar um comando de edio NCL, devemos criar um mapa de eventos,
mapeando a string nclEditingCommand em um eventId previamente
selecionado de um descritor de evento. Um ou mais descritores de evento com
o eventId previamente selecionado devero ser criados e enviados. Esses
descritores de evento podem ter os seus tempos de referncia como zero ou
podem ter sua execuo postergada para um tempo especificado. O
gerenciador de bases privadas de um sistema receptor deve se registrar como
ouvinte de um evento nclEditingCommand para ser notificado da chegada
desse tipo de evento.
Cada estrutura arquivos de dados de fato o contedo de um arquivo
que compe uma aplicao NCL ou um documento XML definindo uma
entidade NCL: um arquivo contendo a especificao XML da aplicao ou
entidade NCL, ou um dos arquivos com contedo de mdia da aplicao ou de
um n NCL (vdeo, udio, texto, imagem, ncl, lua etc.).
Uma estrutura de metadados um documento XML, como definido no
esquema a seguir. Note que o esquema define, para cada dado entregue sem
solicitao (pushed file), uma associao entre sua localizao no sistema de
transporte (identificao do sistema de transporte atributo component_tag
e a identificao do arquivo no sistema de transporte atributo
structureId) e seu identificador de recurso universal (atributo uri).
<!--
XML Schema for NCL Section Metadata File
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights
Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCLSectionMetadataFile.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Section Metadata File namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:NCLSectionMetadataFile="http://www.ncl.org.br/
NCLSectionMetadataFile"
targetNamespace="http://www.ncl.org.br/NCL3.0/
NCLSectionMetadataFile"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="NCLSectionMetadataType">
<sequence>
511
<sequence>
<element ref="NCLSectionMetadataFile:baseData"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<element ref="NCLSectionMetadataFile:pushedRoot"
minOccurs="0" maxOccurs="1"/>
<sequence>
<element ref="NCLSectionMetadataFile:pushedData"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</sequence>
<attribute name="name" type="string" use="optional"/>
<attribute name="size" type="positiveInteger" use="optional"/>
</complexType>
<complexType name="baseDataType">
<sequence>
<element ref="NCLSectionMetadataFile:pushedRoot"
minOccurs="0" maxOccurs="1"/>
<sequence>
<element ref="NCLSectionMetadataFile:pushedData"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</sequence>
<attribute name="uri" type="anyURI" use="required"/>
</complexType>
<complexType name="pushedRootType">
<attribute name="component_tag" type="positiveInteger"
use="optional"/>
<attribute name="structureId" type="string" use="required"/>
<attribute name="uri" type="anyURI" use="required"/>
<attribute name="size" type="positiveInteger" use="optional"/>
</complexType>
<complexType name="pushedDataType">
<attribute name="component_tag" type="positiveInteger"
use="optional"/>
<attribute name="structureId" type="string" use="required"/>
<attribute name="uri" type="anyURI" use="required"/>
<attribute name="size" type="positiveInteger" use="optional"/>
</complexType
<!-- declare global elements in this module -->
<element name="metadata"
type="NCLSectionMetadataFile:NCLSectionMetadataType"/>
<element name="baseData"
type="NCLSectionMetadataFile:baseDataType"/>
<element name="pushedRoot"
type="NCLSectionMetadataFile:pushedRootType"/>
<element name="pushedData"
type="NCLSectionMetadataFile:pushedDataType"/>
</schema>
Para cada arquivo de documento NCL ou outros arquivos de documento
XML usados nos comandos de edio addDocument ou addNode, pelo menos
uma estrutura de metadados deve ser definida. Apenas um arquivo de
aplicao NCL ou um arquivo de documento XML representando um n
NCL a ser inserido pode ser definido por estrutura de metadados. Mais
precisamente, pode haver apenas um elemento <pushedRoot> em um
512
documento XML representando o metadados. Contudo, uma aplicao NCL
(e seus arquivos de contedo) ou um documento de especificao de um n
NCL (e seus arquivos de contedo) pode se estender por mais de uma
estrutura de metadados. Mais ainda, podem existir estruturas de metadados
sem qualquer aplicao NCL ou documento XML descritos em seus
elementos <pushedRoot> e <pushedData>.
As trs estruturas anteriormente definidas podem ser transmitidas
usando sistemas de transporte diferentes, como exemplificado no que se
segue.
F.3.1 Transporte em um Tipo Especfico de Seo MPEG-2
O uso de um tipo especfico de seo MPEG-2 (identificado por um
valor especfico do campo table_id de uma seo privada MPEG-2, conforme
apresentado no Apndice B), a partir de agora chamada de seo NCL, nos
permite transmitir as trs estruturas de dados anteriormente definidas: mapas,
metadados e arquivos de dados.
Cada Seo NCL pode conter os dados de apenas uma estrutura.
Contudo, uma estrutura pode se estender por vrias sees. Estruturas de
dados podem ser transmitidas em qualquer ordem e quantas vezes forem
necessrias.
O comeo de uma estrutura de dados delimitada pelo campo
payload_unit_start_indicator de um pacote TS. Depois dos quatro bytes do
cabealho TS, a carga (payload) do pacote TS comea, com um campo
ponteiro de um byte indicando o incio de uma seo NCL [ISO/IEC 13818-1,
2000]. O cabealho da seo NCL ento definido como uma seo MPEG-2
[ISO/IEC 13818-1, 2000]. O primeiro byte da carga (payload) da seo NCL
identifica o tipo da estrutura transportada (0x01 para metadatos; 0x02 para
arquivos de dados e 0x03 para mapa de eventos). O segundo byte carrega um
identificador nico da estrutura (structureId) no fluxo elementar de
transporte.
2
Depois do segundo byte vem uma estrutura de dados serializada que
pode ser a mappingStructure (como ilustrado pela Tabela F.2) ou a estrutura
de matadados (um documento XML), ou uma estrutura de arquivos de dados
2
O fluxo elementar e o identificador da estrutura so aqueles que devem ser associados pela estrutura
de metadados, atravs dos atributos component_tag e structureId dos elementos <pushedRoot> e
<pushedData>, a localizadores de arquivos (URL).
513
(um contedo de arquivo serializado). O demultiplexador de sees NCL
responsvel por montar toda a estrutura da aplicao no dispositivo receptor.
3
No mesmo fluxo elementar que carrega a especificao XML (o arquivo
do documento NCL ou outro documento XML usado nos comandos de
edio) recomendado que um arquivo mapa de eventos seja transmitido,
para que seja mapeado o nome nclEditingCommand no eventId do
descritor de evento que dever transportar os comandos de edio, como
descrito no Captulo 16. O campo privateDataPayload do descritor de evento
deve carregar o par de referncias {uri, id}, como sempre. Os parmetros uri
tm sempre o valor null. No caso dos comandos addDocument e addNode,
o parmetro id do primeiro par deve identificar o fluxo elementar
(component_tag) e a estrutura de metadados que ele transporta
(structureId). A estrutura de metadados, por sua vez, contm o caminho
absoluto do documento NCL ou da especificao do n NCL (o caminho no
servidor de dados) e a estrutura arquivos de dados relacionada (structureId)
transportada em sees NCL do mesmo fluxo elementar. Se outras estruturas
de metadados adicionais forem necessrias para completar os comandos de
edio addDocument ou addNode, outros pares {uri, id} devem estar
presentes no comando. Nesse caso, os parmetros uri devem tambm ter o
valor null e os parmetros id correspondentes devem referir-se ao
component_tag e estrutura de metadados transportada (structureId)
correspondente.
A Figura F.2 ilustra um exemplo de transmisso de um documento NCL
atravs de sees NCL. Nesse exemplo, um provedor de contedo quer
transmitir um programa interativo chamado weatherConditions.ncl,
armazenado em um de seus servidores de dados (sistema de arquivo local na
Figura F.2). Um fluxo elementar MPEG-2 (component_tag= 0x09) deve
ento ser gerado, carregando todo o contedo do programa interativo (o
arquivo ncl e todos os arquivos de contedo de mdia). Um mapa de eventos
tambm deve ser gerado (structureType=0x03; structureId=0x0C, na
Figura F.2), mapeando o nome nclEditingCommand ao valor de eventId
(valor 3, Figura F.2). Um descritor de evento tambm deve ser transmitido,
com o valor apropriado para eventId, no exemplo o valor 3, e o valor de
commandTag igual a 0x05, que indica um comando addDocument (veja
Captulo 16). O parmetro uri deve ter o valor null e o parmetro id deve
ter o valor (component_tag= 0x09, structureId= 0x0B), como na Figura
F.2.
3
importante salientar que sees NCL podem tambm transportar as estruturas de dados definidas
encapsuladas em outras estruturas de dados. Por exemplo, o MPE (Multi-protocol Encapsulation) pode ser
usado. Nesse caso, sees NCL seriam sees MPEG-2 de datagrama. Mais ainda, todas as estruturas de
dados mencionadas podem ser envelopadas em outro formato de dados de protocolo, como, por exemplo,
pacotes FLUTE.
514
C:\nclRepository
Sistema de Arquivo Local
weather
images
brazilianMap.png
weatherConditions.ncl
Descritor de Evento
descriptorTag = 0
descriptorLenght= descriptorLen ()
eventId= 3
Reserved
eventNPT = 0
privateDataLenght=dataLen()
commandTag= 0x05
Sequence number= 0
finalFlag= 1
privateDataPayload= someBase,
null, 0x09, 0x0B
FCS = checksum()
<metadata name=weatherConditions size= 110kb>
<baseData uri=file://c:/nclRepository/ weather/
<pushedRoot structureId=0x0A uri=weatherConditions.ncl
size=10kb/>
<pushedData structureId=0x09 uri=../images/brazilianMap.png
size=100kb/>
</baseData>
</metadata>
Estrutura de Metadados
Arquivo Mapa de Eventos
eventId = 3
eventNameLength = 0x0C
eventName = nclEditingCommand
Figura F.2 Exemplo de transmisso de documento NCL usando sees NCL MPEG-2.
F.3.2 Transporte das Estruturas de Metadados como
Parmetro de Comandos de Edio
Uma alternativa ao transporte de estruturas de metadados diretamente
em sees NCL tratar essas estruturas como parmetros dos comandos
addDocument and addNode, transportados no campo privateDataPayload
dos descritores de evento.
Nesse caso, o conjunto de pares {uri, id} dos comandos addDocument e
addNode substitudo por parmetros da estrutura de metadados, que
definem um conjunto de pares {uri, component_tag, structureId} para
cada arquivo transmitido sem solicitao (pushed file).
Voltando ao exemplo da Figura F.2, o novo transporte seria exatamente
o mesmo, com exceo do descritor de evento. Em vez de esses descritores
terem o par {uri; id} igual ao valor {null; 0x09, 0x0B} como parmetro,
eles teriam a estrutura de metadados serializada. Na estrutura de metadados,
os atributos component-tag dos elementos <pushedRoot> e <pushedData>
devem, nesse caso, ser definidos, uma vez que a estrutura no mais
transportada no mesmo fluxo elementar que transporta os arquivos da
aplicao NCL.
515
F.3.3 Transporte de Estruturas de Metadados em Sees
de Metadados MPEG-2
Uma outra alternativa transportar as estruturas de metadados em
sees de metadados MPEG-2, transportadas em fluxos MPEG-2 do tipo
0x16 [ISO/IEC 13818-1, 2000]. Como sempre, cada seo de metadados
MPEG-2 poder conter dados de apenas uma estrutura de metadados.
Contudo, uma estrutura de metadados pode se estender por vrias sees de
metadados.
A Tabela F.3 ilustra a sintaxe da seo de metadados para o transporte
de estruturas de metadados, que devem estar de acordo com ISO/IEC 13818-
1, 2000.
Tabela F.3 Sintaxe da Seo para o Transporte de Estruturas de Metadados
Sintaxe N. de Bits Valor
Metadata section() {
table_id 8 0x06
section_syntax_indicator 1 1
private_indicator 1 1
random_access_indicator 1 1
decoder_config_flag 1 0
metadata_section_length 12 Inteiro
metadata_service_id 8 Inteiro
reserved 8
section_fragment_indication 2 De acordo com
a Tabela F.4
version_number 5 Inteiro
current_next_indicator 1 1
section_number 8 Inteiro
last_section_number 8 Inteiro
structureId 8 Inteiro
For (i=1; i< N; i++) {
serialized_metadata_structure_byte 8
}
CRC_32 32
}
516
Tabela F.4 Indicao de Fragmento de Seo
Valor Descrio
1
1
Uma nica seo de metadados carregando uma estrutura de metadados
completa.
1
0
Primeira seo de metadados de uma srie, com dados de uma mesma estrutura
de metadados.
0
1
ltima seo de metadados de uma srie, com dados de uma mesma estrutura
de metadados.
0
0
Uma seo de metadados de uma srie, com dados de uma mesma estrutura de
metadados, mas que no nem a primeira nem a ltima seo.
Como anteriormente, no mesmo fluxo elementar que transporta a
especificao XML (o arquivo do documento NCL ou um outro arquivo
XML usados nos comandos de edio), devemos transmitir um arquivo mapa
de eventos a fim de mapear o nome nclEditingCommand ao eventId do
descritor de evento que carregar o comando de edio. No caso dos
comandos addDocument e addNode, o campo privateDataPayload do
descritor de evento deve transportar um conjunto de pares de referncia {uri,
id}. Os parmetros uri devem ter o valor null. No caso de comandos
addDocument e addNode, o parmetro id do primeiro par deve identificar o
fluxo elementar (component_tag) do tipo= 0x16 e a estrutura de
metadados (structureId) que carrega o caminho absoluto do documento
NCL ou da especificao do n NCL (o caminho no servidor de dados). Se
outras estruturas de metadados forem usadas para relacionar arquivos
presentes no documento NCL ou na especificao do n NCL, a fim de
completar os comandos addDocument ou addNode com contedos de mdia,
outros pares de referncia {uri, id} devem ser definidos no comando. Nesse
caso, o parmetro uri deve ter o valor null, e o parmetro id correspondente
no par deve referir-se ao component_tag e ao structureId do metadado
correspondente.
Voltando ao exemplo da Figura F.2, com a nova estrutura de
transmisso tudo seria similar. Devemos fazer apenas pequenas mudanas, de
forma que o descritor de evento refira o fluxo elementar e sua seo que
carrega a estrutura de metadados (component_tag= 0x08 e structureId=
0x0B), e que a estrutura de metadados tambm refira o fluxo elementar
onde os arquivos do documento sero transportados. A Figura F.3 ilustra a
nova situao.
517
C:\nclRepository
Sistema de Arquivo Local
weather
images
brazilianMap.png
weatherConditions.ncl
Descritor de Eventos
descriptorTag = 0
descriptorLenght= descriptorLen ()
eventId= 3
Reserved
eventNPT = 0
privateDataLenght=dataLen()
commandTag= 0x05
Sequence number= 0
finalFlag= 1
privateDataPayload= someBase,
null, 0x08, 0x0B
FCS = checksum()
<metadata name=weatherConditions size= 110kb>
<baseData uri=file://c:/nclRepository/ weather/
<pushedRoot component_tag= 0x09 structureId=0x0A
uri=weatherConditions.ncl size=10kb/>
<pushedData component_tag= 0x09 structureId=0x09
uri=../images/brazilianMap.png size=100kb/>
</baseData>
</metadata>
Estrutura de Metadados
Arquivo Mapa de Eventos
eventId = 3
eventNameLength = 0x0C
eventName = nclEditingCommand
Figura F.3 Exemplo de transmisso de documento NCL usando sees de metadados
MPEG-2.
Bibliografia
ABNT, NBR 15606-2 (2011). Associao Brasileira de Normas Tcnicas,
Televiso digital terrestre Codificao de dados e especificaes de
transmisso para radiodifuso digital, Parte 2: Ginga-NCL para receptores
fixos e mveis Linguagem de aplicao XML para codificao de
aplicaes, Sistema Brasileiro de TV Digital Terrestre, NBR 15606-2.
ISO/IEC 13818-1 (2000). International Organization for
Standardization/International Eletrotecnical Committee, Information
Technology Generic coding of moving pictures and associated audio
information, Part 1: Systems, ISO/IEC 13818-1.
ISO/IEC 13818-6 (1998). International Organization for Standardizatio
International Eletrotecnical Committee, Information Technology
Generic coding of moving pictures and associated audio information, Part
6: Extensions for DSM-CC, ISO/IEC 13818-6.
Soares, L.F.S. e Rodrigues, R.F.; Costa, R.R; Moreno, M. (2006). Nested
Context Language 3.0 Part 9 NCL Live Editing Commands.
Monografias em Cincia da Computao do Departamento de Informtica,
PUC-Rio, N. 35/06. Rio de Janeiro, dezembro de 2006. ISSN 0103-9741.
518
Apndice G
HTG
A apresentao com qualidade de uma aplicao NCL depende de uma srie
de procedimentos de escalonamento que devem ser realizados tanto pelos
receptores quanto pelos provedores de contedo das aplicaes.
Para a realizao desses procedimentos, estruturas de dados especficas
devem ser computadas. Este apndice traz uma discusso a respeito dessas
estruturas de dados e de como elas podem ser deduzidas de uma outra
estrutura de dados nica chamada HTG (Hypermedia Temporal Graph).
519
G.1 Escalonadores
Como j discutimos em diversas parte do livro, nas aplicaes em que o
sincronismo depende da ocorrncia de eventos com durao varivel ou
mesmo imprevisvel no momento da especificao, imperativo que essa
especificao seja realizada de forma relativa ocorrncia desses eventos,
isto , independentemente do momento temporal em que eles ocorrem e se de
fato eles ocorrerem. nesse paradigma orientado a eventos que se baseia a
linguagem NCL e a sua linguagem de script Lua.
Quando o sincronismo especificado de forma relativa, os instantes
temporais de ocorrncia dos eventos somente sero conhecidos na fase de
execuo da aplicao.
O uso do paradigma orientado a eventos traz no s o problema de
como especificar relacionamentos temporais e espaciais entre eventos,
solucionados pelo uso de NCL, como dois outros problemas adicionais:
1) como controlar a execuo de uma aplicao de forma a garantir que os
relacionamentos especificados sejam respeitados;
2) como gerenciar as transmisses, dos servidores de contedos para os
clientes receptores, mantendo uma qualidade de servio tal que garanta que os
contedos estejam presentes no receptor nos momentos necessrios de suas
apresentaes.
O primeiro problema diz respeito apenas aos receptores das aplicaes e
vai exigir o trabalho complementar de dois escalonadores na implementao
do formatador NCL.
O primeiro escalonador (escalonador de exibidores) responsvel por
instanciar os vrios exibidores de mdia, de forma que eles estejam prontos
nos momentos necessrios apresentao dos vrios objetos. Esse trabalho
no simples porque, devido limitao de memria da maioria dos
dispositivos receptores para TV, importante manter o mnimo de
componentes exibidores instanciados ou mesmo na memria principal (RAM)
do receptor.
O segundo escalonador (escalonador de apresentao) o ncleo
central do formatador, sendo responsvel por entregar os contedos a serem
apresentados pelos exibidores de mdia em um dado instante. Em outras
palavras, esse escalonador que de fato resolve todos os relacionamentos de
sincronismo temporal em tempo de execuo, transformando os tempos
relativos dos relacionamentos em tempos absolutos.
Entre os vrios problemas que deve tratar, o escalonador de
apresentao deve permitir que uma aplicao inicie a partir de qualquer
ponto de sua cadeia temporal de exibio de objetos. Isso muito importante
em aplicaes para TV digital, por exemplo, na qual um servio ou canal
520
pode ser sintonizado em qualquer instante de tempo de um programa de TV.
O escalonador deve tambm permitir que uma aplicao sofra operaes de
pausa e retomada, que exigem que ela prossiga, mesmo em um instante
temporal posterior ao da pausa. Esse tipo de operao comum quando o
usurio troca e, em seguida, retorna ao mesmo canal (ou servio) de TV.
Para enfrentar o segundo problema, o gerenciamento das transmisses,
devemos definir procedimentos, tanto nos provedores de contedo quanto nos
clientes receptores. Esses procedimentos dependem de os dados serem
recebidos sem solicitao (pushed data) ou sob demanda (pulled data).
No caso de dados recebidos sem solicitao, eles so geralmente
enviados ciclicamente (em carrossel), como discutido em detalhes no
Apndice F. A colocao e a retirada dos dados no carrossel e em qual
posio do carrossel so fundamentais para diminuir a banda necessria para
transmisso dos dados e para garantir que eles estaro presentes no receptor
quando necessrio. O escalonador de carrossel o responsvel por essas
tarefas nos provedores de contedo.
Do lado do cliente receptor, um escalonador de pr-busca necessrio
para retirar, nos momentos precisos, dados dos carrossis e carreg-los na
memria do receptor. Esse escalonador tambm responsvel por requisitar
dados sob demanda, de forma a garantir sua presena no dispositivo receptor
quando necessrio. Devemos notar, mais uma vez, que devido usual
limitao de memria dos dispositivos receptores importante manter o
mnimo de contedos de mdia na memria principal. Para busca desses
dados, pode ser necessria a negociao de QoS (Quality of Service) na rede.
Nesse caso, um escalonador de negociao de QoS responsvel pela
tarefa, garantindo a reserva de recursos na rede quando o escalonador de pr-
busca requisitar os dados.
Para dar suporte realizao das tarefas executadas pelos diversos
escalonadores mencionados, vrias estruturas de dados so computadas a
partir da especificao da aplicao NCL. Na implementao de referncia do
middleware Ginga, elas so baseadas e derivadas de uma estrutura de dados
nica, denominada Hypermedia Temporal Graph ou HTG.
G.2 Hypermedia Temporal Graph (HTG)
Para controlar o comportamento temporal das aplicaes durante a sua
execuo, o Ginga-NCL adota uma estrutura formada por grafos
direcionados (dgrafos). Essa estrutura, conhecida como Hypermedia
Temporal Graph ou HTG[Costa et al., 2008; Moreno et al., 2008], oferece
suporte ao incio ou retomada sncrona da apresentao a partir de um
instante de tempo qualquer.
521
No HTG, cada vrtice representa uma transio de estado de um evento.
Os eventos representados nessa estrutura so os mesmos definidos na NCL,
ou seja, os eventos de apresentao, seleo e atribuio, cada um controlado
por uma mquina de estados, repetida por comodidade de leitura na Figura
G.1.
paused
sleeping occurring
resume
stop | abort
pause
stop| natural end
abort
start
Figura G.1 Mquina de estado de um evento.
O grafo temporal obtido atravs da modelagem de uma aplicao deve
preservar todos os relacionamentos entre os eventos, sejam eles previsveis ou
imprevisveis, bem como o estado atual de cada mquina de estados associada
a um evento.
No HTG, as arestas entre os vrtices representam os relacionamentos
entre as transies de estados dos eventos. Cada aresta possui uma condio
associada que deve ser satisfeita para que a transio, representada pelo seu
vrtice de destino, seja disparada. Em resumo, os grafos nessa estrutura so
definidos por um conjunto de vrtices, arestas e condies de caminhamento
(V, A, C), onde:
- V = (v0, v1, v2, v3, ..., vn 1) um conjunto finito de vrtices, em que
cada vrtice representa uma transio na mquina de estados associada a
um evento. Cada vrtice representado por uma tripla: o nome da ao
que dispara a transio, o tipo de evento correspondente e o identificador
da ncora que identifica o objeto ou parte de seu contedo (se o evento
do tipo apresentao ou seleo) ou o identificador nico da propriedade e
seu valor (se for um evento de atribuio);
- A = (a0, a1, a2, a3, ..., am 1) um conjunto finito de arestas que
representam, individualmente, um relacionamento entre transies. Para
cada aresta a, v e w so os vrtices de origem e destino, respectivamente
((v, w) e V x V);
- C = {cij} um conjunto finito de condies associadas s arestas. Uma
condio cij associada com a aresta (vi, vj) e A e deve ser satisfeita
para que o disparo do vrtice (disparo da transio) destino da aresta
considerada seja realizado.
522
As condies podem ser simples ou compostas. Uma condio simples
definida por:
- um intervalo temporal que deve ser obedecido para que a transio,
representada no vrtice destino da aresta, seja executada;
- uma varivel que pode ser testada em relao a um valor desejado,
inclusive (e na maioria das vezes) variveis cujo valor so intervalos
temporais;
- aes externas aplicao, como as interaes do usurio.
Condies compostas so definidas atravs de operadores lgicos (OR,
AND, NOT), relacionando duas ou mais condies (simples ou compostas).
Para exemplificar o uso dos grafos temporais, considere a mesma
aplicao apresentada na Seo 3.6 do Captulo 3, cuja viso estrutural
apresentada na Figura G.2.
onBegin
Start
Stop
onBegin
Start
onBegin
Start
Start
onEnd
Stop
Set
size
Start
onSelection
Set
size
onBegin
Start
Stop
onEnd
Start
Figura G.2 Viso estrutural da aplicao O Primeiro Joo.
Recordando o Captulo 3, ao iniciar a animao propriamente dita da
aplicao O Primeiro Joo, logo aps um pequeno trecho de prefcio do
vdeo, iniciada uma msica de fundo e o pano de fundo de toda a exibio.
Em um trecho da aplicao apresentado um vdeo com o drible semelhante
quele em exibio no vdeo da animao. Mais adiante, uma foto de um
jogador cado, aps receber um drible, apresentada, tambm sincronizada
com o vdeo da animao. Um pouco mais frente exibido um cone de uma
chuteira que, se selecionado, exibe um vdeo de propaganda e uma pgina
HTML para que a compra seja realizada. A ao interativa provoca tambm
o redimensionamento do vdeo principal, que volta ao seu tamanho original
aps um certo tempo, em que tanto o vdeo da propaganda como o formulrio
523
HTML j terminaram (na verdade, volta ao tamanho original ao final da
apresentao do formulrio). A aplicao NCL para esse exemplo pode ser
revisitada na Listagem 3.22. Recomenda-se a leitura dessa listagem,
principalmente para entender alguns dos tempos especificados no grafo.
A Figura G.3 apresenta o grafo resultante da modelagem do exemplo da
Figura G.2. Para simplificar a figura, a descrio dos eventos de apresentao
foi suprimida nas triplas que definem os vrtices.
1 21
(start, animation)
4
2
5
11
10
7
8
6
a
n
i
m
a
t
i
o
n
D
u
r
=
1
2
s
anim
ationD
ur = 45 s
anim
ationDur =
41 s
d
e
l
a
y
L
M
u
s
i
c
D
u
r
=
5
s
3
9
dribleDur = 5 s
photoDur = 6 s
d
e
l
a
y
L
M
u
s
i
c
D
u
r
=
5
s
0 s
0 s
(start, segDrible)
(start, segPhoto)
(start, drible)
(natural end, drible)
(start, segIcon)
(natural end, photo)
(natural end, animation)
0 s
(start, background)
(start, choro)
(stop, background)
(natural end | stop, icon)
23
22
(stop, choro)
animationDur = 01:10 s
13 (start, icon)
14
Ao interativa
(start, selection, icon)
15 (start, attribution, bounds=V1)
0 s
0
s
16
17
0 s
(start, shoes)
(start, ptForm)
18
0 s
19
(natural end, shoes)
(natural end, ptForm)
20
ptformDur = 15 s
shoesDur = 13 s
(start, attribution, bounds=V2)
0
s
iconDur = 6 s
choroDur = indeterminado
backgroundDur = indeterminado
Figura G.3 Grafo temporal da aplicao O Primeiro Joo.
Na Figura G.3, o vrtice 1 o ponto de entrada da aplicao e
representa a transio de incio da apresentao do vdeo da animao.
Passados cinco segundos do incio da animao (delay especificado no elo
lMusic na Listagem 3.22 do Captulo 3), disparada a transio de incio
dos objetos de mdia background (vrtice 2) e choro (vrtice 3).
Decorridos 12 segundos a partir do incio do vdeo da animao, uma de
suas ncoras (elemento <area id=segDrible>) iniciada (vrtice 4). A
transio de incio dessa ncora dispara a transio de incio do objeto de
mdia drible, representada pelo vrtice 5, cuja durao de apresentao de
cinco segundos.
Nesse ponto temos vrios pontos a observar. Note que alguns intervalos
de tempo (por exemplo, 0 segundos) foram especificados diretamente como
524
condio de percurso de uma aresta, e outros como valores de variveis de
condies para o percurso, por exemplo delayLMusicDur=5s e
animationDur=12s. A diferena que certos intervalos de tempo podem ser
pausados, por efeito de aes de pausa em um objeto de mdia (caso do
intervalo animationDur) ou em objetos de composio.
Voltando ao nosso exemplo, decorridos 41 segundos a partir do incio do
vdeo da animao, outra de suas ncoras (elemento <area id=segPhoto>)
iniciada (vrtice 7). A transio de incio dessa ncora dispara a transio de
incio do objeto de mdia photo, representada pelo vrtice 8, cuja durao
de apresentao de seis segundos.
De forma anloga, decorridos 45 segundos a partir do incio do vdeo da
animao, outra de suas ncoras (elemento <area id=segIcon>) iniciada
(vrtice 10), o que causa o disparo da transio de incio do objeto de mdia
icon, representada pelo vrtice 11, indicando ao usurio a possibilidade de
interao com a aplicao. Se a apresentao desse objeto de mdia no
interrompida, ele tem seu fim natural aps decorridos seis segundos, conforme
representado pelo vrtice 13.
O vrtice 14 representa a transio de incio do evento de seleo. A
aresta, que relaciona esse vrtice com o vrtice 11, tem como condio a ao
de interatividade do usurio. O leitor deve notar que um nico grafo
utilizado para representar toda a aplicao e que, durante a apresentao,
podem ser retiradas partes desse grafo quando os eventos imprevisveis que
ligam essas partes ao restante do grafo no puderem mais ser disparados. No
contexto do nosso exemplo, se o usurio no realizar a ao interativa at o
fim da apresentao do objeto de mdia icon, representado pelo vrtice 13,
os eventos representados no grafo a partir do vrtice 14 nunca iro ocorrer.
Note, assim, que o HTG um grafo dinmico.
A partir da ocorrncia do evento interativo (vrtice 14), a disposio
espacial do objeto de mdia animation alterada (vrtice 15, propriedade
bounds=V1), e so iniciadas as exibies do vdeo de propaganda shoes
(vrtice 16) e do formulrio XHTML (vrtice 17). Note tambm que a
ocorrncia do evento interativo (vrtice 14) leva interrupo da
apresentao do cone de interao (vrtice 13).
Nesse ponto devemos fazer uma nova observao: as aes natural end
e stop so o nico caso de aes que podem levar a um mesmo vrtice, pois o
comportamento decorrente da entrada no estado sleeping ser indiferente a
qualquer um dos dois tipos de ao mencionados que levou a esse estado.
O objeto de mdia shoes tem seu fim natural aps 13 segundos de seu
incio (vrtice 18). O objeto de mdia ptForm tem seu fim natural aps 15
segundos de seu incio (vrtice 19). Ao trmino desse ltimo objeto, a
525
disposio espacial inicial do objeto de mdia animation restabelecida
(vrtice 20).
O leitor deve notar que foram criados dois vrtices (V15 e V20) para a
mesma propriedade (bounds), um para cada valor atribudo. Poderamos ter
criado apenas um vrtice, mas isso tornaria mais confuso o gerenciamento do
HTG, embora minimizasse o nmero de vrtices e arestas do grafo.
Finalmente, o trmino natural do vdeo de animao (vrtice 21) dispara
as transies de trmino do udio (choro) e do pano de fundo
(background), representadas pelos vrtices 22 e 23, respectivamente.
Terminando esta seo, cabe ressaltar que no exemplo da Figura G.1
exploramos apenas um tipo de no-determinismo, a interao do usurio.
Outros no-determinismos podem ocorrer; por exemplo, a resoluo de uma
regra de um elemento <switch> em tempo de execuo. Note que, nesse caso,
o no-determinismo pode ser representado por condies associadas s
arestas, tendo como variveis as regras.
G.2.1 Clculo das Duraes das Arestas
Durante a execuo das aplicaes, os exibidores de objetos de mdia
devem reportar todos os eventos, incluindo os no-determinsticos, para que
outros eventos relacionados possam ser disparados no HTG. O tempo de
exibio (media time) individual de cada objeto de mdia dever ser
controlado, uma vez que os eventos podem estar associados a trechos
especficos de seu contedo.
Para os contedos de mdia que estejam previamente disponveis junto
aos exibidores, o controle do tempo de exibio pode ser realizado
simplesmente verificando o tempo transcorrido a partir do incio de sua
exibio. Alm disso, estando os contedos previamente disponveis, seu
tempo total de durao (total media time) pode ser calculado. Ao contrrio,
para contedos entregues em tempo de exibio atravs de fluxos contnuos
(streaming), determinar o instante inicial do contedo ou seu tempo total de
exibio exige que o receptor esteja sintonizado desde o incio do fluxo ou,
ento, que mecanismos adicionais estejam disponveis.
Como discutido no Apndice E, um receptor pode comear a receber um
fluxo elementar, enviado sem solicitao, a partir de qualquer ponto temporal
do mesmo, uma vez que o instante de sintonizao qualquer um. Mais
ainda, usual que um fluxo elementar carregue mais de um contedo de
objeto de mdia. Por exemplo, um fluxo elementar de uma determinada
emissora de TV carrega um programa em sequncia do outro. Pior ainda, um
contedo pode ser entremeado por outro; por exemplo, quando uma
526
propaganda inserida no meio de um programa de TV. Tudo isso torna
impossvel saber em que instante de tempo estamos em um determinado
contedo, sem nenhum auxlio extra.
O Apndice E discute a soluo proposta pelo padro MPEG System
para o problema, por meio do uso de descritores de referncia NPT (Normal
Play Time). Atravs dos diferentes tipos de descritores, dos campos NPT e
contentId, possvel determinar o ponto exato de uma mdia.
G.3 Planos de Escalonamento
Tendo por base o HTG, as estruturas de dados para dar suporte aos
vrios escalonadores discutidos na Seo G.1 podem ser calculadas.
O conjunto de transies de eventos disparados sobre os objetos de uma
aplicao e os seus correspondentes momentos no tempo define o plano de
apresentao, a estrutura de suporte do escalonador de apresentao.
Aps modelar uma aplicao atravs de seu HTG, como apresentado no
exemplo da Figura G.3, os tempos para o disparo de seus eventos podem ser
estimados atravs do caminhamento nas arestas do grafo. Para aplicaes que
contm apenas eventos previsveis, os instantes para o disparo das transies
dos seus eventos podem ser totalmente calculados antes da execuo da
aplicao. Quando uma aplicao contm eventos imprevisveis, o clculo dos
instantes para o disparo das transies dos eventos tambm pode ser realizado
a priori; no entanto, nesse caso, alguns tempos de disparo sero computados
de forma relativa ocorrncia de um evento imprevisvel. Considerando o
exemplo apresentado na Figura G.3, os tempos dos eventos representados
pelos vrtices numerados de 15 a 20 so calculados com base no tempo da
ocorrncia do vrtice 14.
A Tabela G.1resume o plano de apresentao obtido a partir do grafo da
Figura G.3. Na tabela, as duas primeiras colunas representam os eventos que
no dependem da ao interativa, com exceo do evento de seleo. Nas
duas ltimas colunas encontram-se os eventos disparados a partir do evento
de seleo representado pelo vrtice 14. Como os tempos dessa coluna so
relativos ocorrncia do evento imprevisvel, seus tempos estimados esto
vinculados ao tempo da ocorrncia do evento imprevisvel.
527
Tabela G.1 Eventos do Plano de Apresentao
Incio, Apresentao, animation 70 s
Fim, Apresentao, icon (X+0)s
Incio, Apresentao, background 5 s Incio, Atribuio, bounds=V1
(X+0)s
Incio, Apresentao, choro 5 s Inicio, Apresentao, shoes
(X+0)s
Incio, Apresentao, segDrible 12 s Inicio, Apresentao, form
(X+0)s
Incio, Apresentao, drible 12 s Fim, Apresentao, shoes (X+13)s
Fim, Apresentao, drible 17 s Fim, Apresentao, form (X+15)s
Incio, Apresentao, segPhoto 41 s Incio, Atribuio, bounds=V2
(X+15)s
Incio, Apresentao, Photo 41 s
Incio, Apresentao, segIcon 45 s
Incio, Apresentao, icon 45 s
Incio, Seleo, icon X s
Fim, Apresentao, photo 47 s
Fim, Apresentao, icon 51 s
Fim, Apresentao, animation 70 s
Fim, Apresentao, choro 70 s
Fim, Apresentao, background 70 s
Com base no plano construdo, o escalonador de apresentao agora
capaz de entregar aos exibidores, no momento preciso, os contedos a serem
exibidos.
A partir do plano de apresentao, as operaes de incio/retomada da
exibio de uma aplicao NCL podem ser realizadas simplesmente
desprezando-se os eventos no-determinsticos que poderiam ter ocorrido
antes do tempo em que se pretende iniciar/retomar a apresentao, mas
levando em considerao todos os que de fato ocorreram, no caso de retomada
da exibio.
Voltemos ao nosso exemplo. Vamos considerar que estamos recebendo o
vdeo da animao como o vdeo principal do programa da emissora e que
estamos recebendo os outros objetos por datacasting. Conforme vimos no
Captulo 16, comandos de edio addDocument e startDocument so tambm
enviados ciclicamente aos receptores. Assim, ao sintonizar um canal, o
receptor passa a receber os fluxos elementares do fluxo de transporte,
incluindo os objetos de mdia transmitidos por datacasting, os descritores
NPT (ver Apndice E) e os comandos de edio (ver Captulo 16).
O comando addDocument ser interpretado pelos receptores fazendo
com que a especificao da aplicao seja adicionada s suas bases privadas.
O comando startDocument gera uma notificao ao formatador NCL, que
528
passa a construir o grafo temporal (HTG). Com o grafo construdo, o plano
de apresentao calculado.
Vamos agora supor que a sintonizao se deu durante a exibio da
animao, mas 43 segundos aps o seu comeo. Note que o middleware pode
calcular esse valor pela monitorao de descritores NPT. O escalonador de
apresentao ento informado desse tempo. De posse do valor, o
escalonador posiciona a aplicao nesse instante temporal do plano de
apresentao. No caso especfico do exemplo, o usurio ainda poderia
realizar a ao interativa e ser capaz de ter a foto (elemento de mdia photo)
exibida por quatro segundos (e no seis segundos, como na especificao para
a aplicao comeando do tempo zero).
O leitor deve notar que o mesmo procedimento pode ser utilizado para
operaes de pausa e retomada, com mudana intermediria de canal. Ao se
mudar o canal, a aplicao que estava executando entra em modo de espera
(stand by). Ao retornar ao canal, quando a base temporal for retomada
1
(quando voltar a receber o descritor NPT com o mesmo contentId, como
discutimos no Apndice E e no Captulo 9), a aplicao continua sua
execuo, a partir do ponto informado pelo valor do descritor NPT,
desconsiderando qualquer evento no-determinstico que poderia ter ocorrido
desde o momento de sua pausa at o momento de sua retomada.
Com base no plano de apresentao e levando em conta o tempo de
instanciao de cada exibidor, o plano de instanciao de exibidores pode ser
construdo. Esse plano a base para a operao do escalonador de exibidores,
conforme vimos na Seo G.1.
Tambm a partir do plano de apresentao, mas agora levando em conta
os retardos introduzidos pelo transporte dos vrios objetos de mdia at a
memria do receptor (retardos na rede, retardos de acesso ao carrossel etc.), o
plano de pr-busca pode ser construdo. Fundamentado nesse plano, base de
operao do escalonador de pr-busca e de retardos na reserva de recursos em
redes com QoS, planos de negociao de QoS podem ser calculados.
At agora focamos a construo do HTG do lado do cliente, isto , do
lado do receptor. Entretanto, para o controle da transmisso no-solicitada de
objetos de mdia, isto , para dar suporte ao escalonador de carrossel,
apresentado na Seo G.1, necessrio que o HTG seja tambm construdo
pelo provedor de datacasting. Tendo por base o HTG e alguma heurstica de
otimizao de banda passante e retardo de transmisso, o escalonador de
carrossel saber que objetos devem ser colocados em um carrossel para
transmisso cclica, quantas vezes deve ser colocado e em que posies.
1
Note que a base temporal pode ser retomada, mas no imediatamente aps o retorno ao canal, pois
no momento pode estar sendo exibido outro contedo, por exemplo, uma propaganda.
529
Bibliografia
Costa, R.R.; Moreno, M.F.; Soares, L.F.G. Intermedia Synchronization
Management in DTV Systems. Proceedings of the ACM Symposium on
Document Engineering. So Paulo, setembro de 2008, pp. 289-297.
ISBN: 978-1-60558-081-4.
Moreno, M.F.; Costa, R.R.; Soares, L.F.G.. Sincronismo entre Fluxos de
Mdia Contnua e Aplicaes Multimdia em Redes por Difuso. Anais do
XIV Simpsio Brasileiro de Sistemas Multimdia e Hipermdia, Vila
Velha, outubro de 2008, pp. 202-209. ISBN: 857669198-1.
530
Apndice H
Comportamento de
Exibidores
Para que no haja surpresa na execuo de uma aplicao declarativa NCL,
necessrio que o autor da aplicao saiba com preciso o comportamento do
formatador NCL e dos diversos exibidores de objetos de mdia envolvidos na
apresentao de um documento.
Este apndice apresenta a interpretao dada pelos vrios exibidores de mdia,
incluindo os objetos de mdia com cdigo imperativo e declarativo, a
comandos enviados pelo formatador NCL, a partir de aes determinadas nos
elementos <link> e tambm em alguns comandos de edio NCL. O apndice
tambm apresenta a interpretao dada pelo formatador quando as aes so
submetidas em ns de composio NCL (representados pelos elementos
<body>, <context> e <switch>).
1
1
Este captulo foi baseado em Soares et al. (2006). O uso do material foi gentilmente cedido pelo
Departamento de Informtica da PUC-Rio.
531
H.1 Introduo
A apresentao de um documento NCL requer o controle da
sincronizao de vrios objetos de mdia (especificados atravs do elemento
<media>). Para cada objeto de mdia, um player (exibidor de mdia)
carregado para o controle do objeto e de seus eventos NCL. Um exibidor de
mdia (ou seu adaptador) deve ser capaz de receber os comandos de
apresentao, controlar (notificar) as mquinas de estado dos eventos do
objeto de mdia controlado e responder s demandas do formatador.
O comportamento dos exibidores de mdia e do formatador NCL so
apresentados nas Sees H2 e H3, respectivamente.
H.2 Comportamento dos Exibidores de Objetos de
Mdia No-Declarativos
Nesta seo discutiremos o comportamento para exibidores de objetos
de mdia, incluindo os objetos de mdia com cdigo imperativo, mas excluindo
os objetos de mdia cujo contedo um cdigo declarativo (objetos de mdia
declarativos). Esses ltimos so apresentados por exibidores de documentos,
que tm um comportamento semelhante ao formatador NCL, por isso so
discutidos em uma seo parte (Seo H.4). Afinal, o prprio formatador
NCL um exibidor de mdia declarativo para a linguagem NCL.
Um objeto de mdia em apresentao identificado pelo atributo id do
elemento <media> correspondente, e os atributos id dos elementos
<descriptor> que foram associados ao objeto de mdia. Por simplicidade,
chamaremos essa identificao de representationObjectId.
H.2.1 Comportamento na Execuo de Aes sobre
Eventos de Apresentao
H.2.1.1 Instruo start
Antes de enviar a instruo start, o formatador NCL encontra o exibidor
de mdia mais apropriado, com base no tipo de contedo a ser exibido. Para
tanto, o formatador leva em considerao o atributo player associado com o
objeto de mdia a ser exibido. Se esse atributo no for especificado, o
formatador leva em conta o atributo type do elemento <media>. Se esse
atributo tambm no for especificado, o formatador considera a extenso do
arquivo especificado no atributo src do elemento <media>.
532
A instruo start emitida por um formatador NCL informa ao exibidor
de mdia os seguintes parmetros: o localizador do contedo do objeto de
mdia a ser controlado, uma lista de todas as propriedades associadas ao
objeto de mdia, a identificao do objeto de mdia em apresentao
(representationObjectId), uma lista de eventos (apresentao, seleo ou
atribuio, definidos pelos elementos <area>, <property> e pelas ncoras de
contedo default do elemento <media>) que precisam ser monitorados pelo
exibidor de mdia, o evento de apresentao a ser iniciado (chamado evento
principal), um tempo de compensao (offset-time), opcional, e um tempo de
retardo, opcional. No caso de objetos de mdia imperativo, o evento de
apresentao a ser iniciado identificado pelo atributo label de suas ncoras
de contedo ou , por omisso (default), o evento associado ncora de
contedo principal.
O atributo src do elemento <media> usado, pelo exibidor de mdia,
para localizar o contedo e iniciar sua apresentao. Se o contedo no puder
ser localizado ou se o exibidor de mdia no souber como lidar com o tipo de
contedo, o exibidor de mdia encerra a operao de iniciao sem realizar
nenhuma ao.
Os descritores a serem utilizados so escolhidos pelo formatador
seguindo as diretrizes especificadas no documento NCL. Se a instruo start
resultar de uma ao de um elo que tenha um descritor explicitamente
declarado em seu elemento <bind> (atributo descriptor), o descritor resultante
informado pelo formatador mescla os atributos do descritor especificado pelo
<bind> com os atributos do descritor especificado no elemento <media>
correspondente, se esse atributo tiver sido especificado. Para atributos em
comum, a informao do descritor do <bind> sobrepe a do descritor do
<media>. Se o elemento <bind> no contiver um descritor explcito, o
descritor informado pelo formatador o descritor especificado pelo elemento
<media>, se o atributo tiver sido especificado. Caso contrrio, um descritor
default para o tipo de <media> especfico pode ser escolhido pelo formatador.
Baseado nesse procedimento, a lista dos ids dos descritores associados ao
objeto de mdia computada e, unificando as propriedades definidas no
descritor resultante com as propriedades explicitamente declaradas no
elemento <media> correspondente, a lista de propriedades associada ao objeto
de mdia avaliada.
A lista de eventos a serem monitorados por um exibidor de mdia
computada pelo formatador, levando em conta a especificao do documento
NCL. Para tanto, ele checa todos os elos dos quais participa o objeto de mdia
com o descritor resultante. Ao computar os eventos a serem monitorados, o
formatador considera a perspectiva do objeto de mdia, isto , o caminho a
partir do elemento <body> por vrios elementos <context> para alcanar em
profundidade o elemento <media> correspondente. Apenas os elos contidos
533
nesses elementos <body> e <context> so considerados na computao dos
eventos monitorados.
O parmetro offset-time opcional e tem zero como seu valor default.
O parmetro significativo somente para mdia contnua, ou esttica com
durao explcita. Nesse caso, o parmetro define um tempo de compensao,
desde o incio (beginning-time) do evento principal, a partir do qual a
apresentao desse evento imediatamente iniciada (isto , ele comanda o
exibidor para pular para o tempo de partida = beginning-time + offset-time).
Obviamente, o valor do offset-time deve ser menor que a durao do evento
principal. Caso contrrio, a instruo start ignorada.
Se o offset-time for maior que zero, o exibidor de mdia coloca o evento
principal no estado ocorrendo (occurring), mas a transio de incio (starts)
do evento no notificada. Se o offset-time for zero, o exibidor de mdia
coloca o evento principal no estado occurring e notifica a ocorrncia da
transio de incio. No caso de objetos de mdia que no so objetos
imperativos, os eventos que teriam seus tempos de trmino anteriores ao
tempo de incio do evento principal e os eventos que teriam seus tempos de
incio aps o tempo de trmino do evento principal no precisam ser
monitorados pelo exibidor de mdia (o formatador faz essa verificao quando
constri a lista de eventos monitorados).
Os eventos monitorados que teriam seus tempos de trmino aps o
tempo de incio do evento principal, mas antes do tempo de partida
(beginning-time + offset-time), tm seu atributo occurrences incrementado,
mas as transies de incio e trmino (stops) no so notificadas. Os eventos
monitorados que tm seu tempo de incio antes do tempo de partida
(beginning time + offset-time) e tempo de trmino aps o tempo de partida
so colocados no estado occurring, mas as transies de incio
correspondentes no so notificadas.
O tempo de retardo tambm um parmetro opcional, e seu valor
default tambm zero. Se maior que zero, esse parmetro contm um
tempo a ser esperado pelo exibidor de mdia antes de iniciar sua apresentao.
Com exceo dos objetos de mdia imperativos, se o exibidor receber
uma instruo de start para um objeto que j est sendo apresentado (pausado
ou no), ele ignora a instruo e mantm o controle da apresentao em
andamento. Nesse caso, o elemento <simpleAction> que causou a instruo
start no causa qualquer transio na mquina de estados do evento a ele
associado.
Diferentemente dos procedimentos realizados para os outros tipos de
elementos <media>, se um exibidor de objeto de mdia imperativo receber
uma instruo start para um evento associado a um elemento <area> e esse
evento estiver no estado sleeping, ele inicia a execuo do cdigo imperativo
534
associado ao elemento, mesmo se outra parte do cdigo imperativo do objeto
de mdia estiver em execuo (pausado ou no). Contudo, se o evento
associado ao elemento-alvo <area> estiver no estado occurring ou paused, a
instruo start ignorada pelo exibidor imperativo, que continuar
controlando a execuo anteriormente iniciada.
H.2.1.2 Instruo stop
No caso de objetos de mdia com cdigo imperativo, a instruo stop
precisa identificar um trecho de cdigo que j est sendo controlado.
Identificar o trecho de cdigo significa identificar o objeto de mdia sendo
controlado (representationObjectId) e a interface que identifica o trecho de
cdigo. Se a interface no for especificada, a ncora de contedo total
assumida. Nesse caso, a ao stop aplicada em todas as ncoras de
contedo. Para os outros objetos de mdia comuns, a instruo stop no
precisa especificar a interface; se um elemento <simpleAction> com o
actionType igual a stop ligado por um elo a uma interface desse n, a
interface ignorada quando a ao for executada.
A instruo stop ignorada pelo exibidor de objeto de mdia imperativo
se o trecho de cdigo associado com a interface especificada na instruo no
estiver sendo executado (se o evento correspondente no estiver nos estados
occurring ou paused) e se o exibidor do objeto imperativo no estiver
esperando devido a uma instruo retardada de start. Se o cdigo
correspondente da interface especificada na instruo start estiver em
execuo, a execuo parada, o evento de apresentao correspondente
transita para o estado sleeping, sua transio stops notificada ao formatador
e seu atributo occurrences no incrementado. Se o atributo repetitions do
evento for maior que zero, ele diminudo em um, e a apresentao do evento
associado interface reiniciada, aps o tempo entre repeties (o tempo de
retardo entre repeties transmitido ao exibidor de mdia como parmetro de
retardo de incio). Se um trecho de cdigo do objeto de mdia imperativo
estiver esperando para ser executado aps uma instruo start atrasada, e
uma instruo stop for emitida, a instruo de start anterior removida. Todo
esse procedimento, exceto para o evento associado ncora de contedo
total, deve ser realizado por instrues programadas pelo autor
(programador) do objeto imperativo para cada trecho de cdigo que pode ser
parado.
Ainda, apenas para os objetos de mdia com cdigo imperativo, se
qualquer ncora de contedo for parada e todos os outros eventos de
apresentao estiverem no estado sleeping, a ncora de contedo total ser
colocada no estado sleeping. Se uma ncora de contedo for parada e pelo
menos um outro evento de apresentao do objeto estiver no estado
535
occurring, a ncora de contedo total ser mantida no estado occurring. Em
todos os demais casos, se uma ncora de contedo for parada, a ncora de
contedo total ser colocada no estado paused. Novamente, todo esse
procedimento deve ser realizado por instrues programadas pelo autor
(programador) do objeto imperativo para cada trecho de cdigo que pode ser
parado.
Para objetos de mdia que no tm cdigo imperativo, se o objeto no
estiver sendo apresentado (isto , se nenhum dos eventos na lista de eventos
do objeto estiver no estado occurring ou paused) e o exibidor de mdia no
estiver aguardando devido a uma instruo atrasada de start, a instruo stop
ignorada. Se o objeto estiver sendo apresentado, o evento principal (evento
passado como parmetro quando o objeto de mdia foi iniciado) e todos os
eventos monitorados no estado occurring ou paused com tempo de trmino
igual ou anterior ao tempo de trmino do evento principal transitam para o
estado sleeping (mesmo que um efeito de transio esteja sendo aplicado ao
objeto de mdia, isto , o efeito de transio tambm deve ser parado), e suas
transies stops so notificadas.
Ainda para objetos de mdia que no tm cdigo imperativo declarativo,
quando da aplicao de uma instruo stop, os eventos monitorados no estado
occurring ou paused com tempo de trmino posterior ao tempo de trmino do
evento principal so colocados no estado sleeping, mas suas transies stops
no so notificadas e seus atributos occurrences no so incrementados. A
apresentao do contedo do objeto parada. Se o atributo repetitions do
evento for maior que zero, ele diminudo em um e a apresentao do evento
principal reiniciada aps o tempo entre repeties (novamente, o tempo de
retardo entre repeties transmitido ao exibidor de mdia como parmetro de
retardo de incio). Se o objeto de mdia estiver esperando para ser apresentado
aps uma instruo start atrasada e se uma instruo stop for emitida, a
instruo de start anterior removida.
NOTA: Na norma brasileira para o Ginga-NCL [ABNT, NBR 15606-2,
2007], quando todos os objetos de mdia que se referem ao fluxo elementar que
transporta o vdeo principal de um programa estiverem no estado sleeping, a
exibio do vdeo principal deve ocupar a tela inteira. S por meio de um objeto de
mdia em execuo referindo ao vdeo principal, esse vdeo pode ser
redimensionado. O mesmo acontece com o udio principal de um programa:
quando todos os objetos de mdia que se referem ao fluxo elementar que transporta
o udio principal de um programa estiverem no estado sleeping, a exibio do
udio principal deve ocorrer com 100% de seu volume original.
536
H.2.1.3 Instruo abort
No caso de objetos de mdia com cdigo imperativo, a instruo abort
precisa identificar um trecho de cdigo que j est sendo controlado. Como
sempre, identificar o trecho de cdigo significa identificar o objeto de mdia
sendo controlado (representationObjectId) e a interface que identifica o
trecho de cdigo. Mais uma vez, se a interface no for especificada, a ncora
de contedo total assumida. Nesse caso, a instruo abort aplicada em
todas as ncoras de contedo. Para os outros objetos de mdia comuns, a
instruo abort precisa apenas identificar um objeto de mdia que j est
sendo controlado; se um elemento <simpleAction> com o actionType igual a
abort ligado por um elo a uma interface de n, a interface ignorada
quando a instruo for executada.
A instruo abort ignorada pelo exibidor de objeto de mdia
imperativo se o trecho de cdigo associado com a interface especificada na
instruo no estiver sendo executado (se o evento correspondente no estiver
nos estados occurring ou paused) e se o exibidor do objeto imperativo no
estiver esperando devido a uma instruo retardada de start. Se o cdigo
correspondente da interface especificada na instruo start estiver em
execuo, a execuo abortada, o evento de apresentao correspondente
transita para o estado sleeping, sua transio aborts notificada ao
formatador e seu atributo occurrences no incrementado. O atributo
repetitions do evento colocado em zero, e em nenhuma hiptese a
apresentao do evento associado interface reiniciada. Se um trecho de
cdigo do objeto de mdia imperativo estiver esperando para ser executado
aps uma instruo start atrasada e uma instruo abort for emitida, a
instruo de start anterior ser removida. Todo esse procedimento, exceto
para o evento associado ncora de contedo total, deve ser realizado por
instrues programadas pelo autor (programador) do objeto imperativo para
cada trecho de cdigo que pode ser parado.
Ainda, apenas para os objetos de mdia com cdigo imperativo, se a
execuo de qualquer ncora de contedo for abortada e todos os outros
eventos de apresentao estiverem no estado sleeping, a ncora de contedo
total colocada no estado sleeping. Se uma ncora de contedo for abortada
e pelo menos um outro evento de apresentao do objeto estiver no estado
occurring, a ncora de contedo total ser mantida no estado occurring. Em
todos os demais casos, se uma ncora de contedo for abortada, a ncora de
contedo total ser colocada no estado paused. Novamente, todo esse
procedimento deve ser realizado por instrues programadas pelo autor
(programador) do objeto imperativo para cada trecho de cdigo que pode ser
parado.
537
Para objetos de mdia que no tm cdigo imperativo, se o objeto no
estiver sendo apresentado e no estiver esperando para ser apresentado aps
uma instruo de start atrasada, a instruo abort ignorada. Se o objeto
estiver sendo apresentado, o evento principal e todos os eventos monitorados
no estado occurring ou paused transitam para o estado sleeping e suas
transies aborts so notificadas. Qualquer apresentao de contedo
abortada.
Se o atributo repetitions do evento for maior que zero, ele colocado em
zero e a apresentao do objeto de mdia no reiniciada. Se o objeto de
mdia estiver esperando para ser apresentado aps uma instruo start
atrasada e uma instruo abort for emitida, a instruo start removida.
H.2.1.4 Instruo pause
A instruo pause atua de forma semelhante instruo anterior.
No caso de objetos de mdia com cdigo imperativo, a instruo pause
precisa identificar um trecho de cdigo que j est sendo controlado. Como
sempre, identificar o trecho de cdigo significa identificar o objeto de mdia
sendo controlado (representationObjectId) e a interface que identifica o
trecho de cdigo. Mais uma vez, se a interface no for especificada, a ncora
de contedo total assumida. Nesse caso, a instruo pause aplicada em
todas as ncoras de contedo. Para os outros objetos de mdia comuns, a
instruo pause precisa apenas identificar um objeto de mdia que j est
sendo controlado; se um elemento <simpleAction> com o actionType igual a
pause ligado por um elo a uma interface de n, a interface ignorada
quando a instruo for executada.
Tambm semelhante aos casos anteriores, a instruo pause ignorada
pelo exibidor de objeto de mdia imperativo se o trecho de cdigo associado
com a interface especificada na instruo no estiver sendo executado (se o
evento correspondente no estiver nos estados occurring ou paused) e se o
exibidor do objeto imperativo no estiver esperando devido a uma instruo
retardada de start. Se o cdigo correspondente da interface especificada na
instruo start estiver em execuo, a execuo pausada, o evento de
apresentao correspondente transita para o estado paused e sua transio
pauses notificada ao formatador. O tempo em que o cdigo se encontra no
estado paused no considerado no clculo da durao de sua execuo. Se
um trecho de cdigo do objeto de mdia imperativo estiver esperando para ser
executado aps uma instruo start atrasada e uma instruo pause for
emitida, a execuo do cdigo espera por uma instruo de resume para
continuar esperando pelo retardo especificado na instruo start. Todo esse
procedimento, exceto para o evento associado ncora de contedo total,
538
deve ser realizado por instrues programadas pelo autor (programador) do
objeto imperativo para cada trecho de cdigo que pode ser parado.
Ainda, apenas para os objetos de mdia com cdigo imperativo, se
qualquer ncora de contedo for pausada e todos os outros eventos de
apresentao estiverem no estado sleeping ou paused, a ncora de contedo
total colocada no estado paused. Se uma ncora de contedo for pausada e
pelo menos um outro evento de apresentao do objeto estiver no estado
occurring, a ncora de contedo total mantida no estado occurring.
Novamente, todo esse procedimento deve ser realizado por instrues
programadas pelo autor (programador) do objeto imperativo para cada trecho
de cdigo que pode ser parado.
Para objetos de mdia que no tm cdigo imperativo, se o objeto no
estiver sendo apresentado (se o evento principal, passado como parmetro
quando o objeto de mdia foi iniciado, no estiver no estado occurring) e o
exibidor de mdia no estiver esperando pelo retardo de incio, a instruo
pause ignorada. Se o objeto estiver sendo apresentado, o evento principal e
todos os eventos monitorados no estado occurring transitam para o estado
paused e suas transies pauses so notificadas. A apresentao do objeto
pausada e o tempo de pausa decorrido no considerado como parte da
durao do objeto. Como exemplo, se um objeto tiver durao explcita de 30
segundos e, aps 25 segundos, for pausado, mesmo se o objeto permanecer
pausado por, digamos, cinco minutos aps o reincio o evento principal do
objeto permanecer ocorrendo por mais cinco segundos. Se o evento principal
ainda no estiver ocorrendo porque o exibidor de mdia est esperando pelo
retardo de incio, o objeto de mdia espera por uma instruo resume para
continuar aguardando o retardo de incio.
H.2.1.5 Instruo resume
A instruo resume atua de forma semelhante s instrues anteriores.
No caso de objetos de mdia com cdigo imperativo, a instruo resume
precisa identificar um trecho de cdigo que j est sendo controlado. Como
sempre, identificar o trecho de cdigo significa identificar o objeto de mdia
sendo controlado (representationObjectId) e a interface que identifica o
trecho de cdigo. Mais uma vez, se a interface no for especificada, a ncora
de contedo total assumida. Se a ncora de contedo total no estiver no
estado paused, a instruo resume ignorada. Em caso contrrio, a instruo
resume aplicada em todas as ncoras de contedo que esto no estado
paused, exceto aquelas que j estavam pausadas quando a ncora de contedo
total recebeu a instruo pause. Para os outros objetos de mdia comuns, a
instruo resume precisa apenas identificar um objeto de mdia que j est
sendo controlado; se um elemento <simpleAction> com o actionType igual a
539
resume ligado por um elo a uma interface de n, a interface ignorada
quando a instruo for executada.
A instruo resume ignorada pelo exibidor de objeto de mdia
imperativo se o trecho de cdigo associado com a interface especificada na
instruo no estiver pausado (se o evento correspondente no estiver no
estado paused) e se o exibidor do objeto imperativo no estiver esperando
devido a uma instruo retardada de start. Se o trecho de cdigo do objeto de
mdia imperativo estiver pausado na espera para ser executado aps uma
instruo start atrasada e ter sido submetido a uma instruo pause, ele
retoma a espera especificada na instruo start. Se o cdigo correspondente
da interface especificada na instruo start estiver pausado, o evento de
apresentao correspondente transita para o estado occurring, e a transio
resumes notificada ao formatador. Todo esse procedimento, exceto para o
evento associado ncora de contedo total, deve ser realizado por
instrues programadas pelo autor (programador) do objeto imperativo para
cada trecho de cdigo que pode ser parado.
Ainda apenas para os objetos de mdia com cdigo imperativo, se
qualquer ncora de contedo tiver sua execuo retomada, a ncora de
contedo total colocada no estado occurring. Se uma ncora de contedo
for pausada e pelo menos um outro evento de apresentao do objeto estiver
no estado occurring, a ncora de contedo total mantida no estado
occurring. Novamente, todo esse procedimento deve ser realizado por
instrues programadas pelo autor (programador) do objeto imperativo para
cada trecho de cdigo que pode ser parado.
Para objetos de mdia que no tm cdigo imperativo, se o objeto no
estiver pausado (se o evento principal, passado como parmetro quando o
objeto de mdia foi iniciado, no estiver no estado paused) e o exibidor de
mdia no estiver pausado (esperando pelo retardo de incio), a instruo
ignorada. Se o exibidor de mdia estiver pausado aguardando o retardo de
incio, ele retoma a espera da exibio a partir do instante em que foi
pausado. Se o evento principal estiver no estado paused, o evento principal e
todos os eventos monitorados no estado paused so colocados no estado
occurring e suas transies resumes so notificadas.
H.2.1.6 Trmino Natural de uma Apresentao
Eventos de um objeto, com durao explcita ou intrnseca, normalmente
terminam suas apresentaes naturalmente, sem precisar de instrues
externas. Nesse caso, o exibidor de mdia transita o evento para o estado
sleeping e notifica a transio stops.
540
Para objetos de mdia com cdigo imperativo, se o atributo repetitions
do evento for maior que zero, ele diminudo em um, e a apresentao do
evento associado interface reiniciada aps o tempo entre repeties (o
tempo de retardo entre repeties transmitido ao exibidor de mdia como
parmetro de retardo de incio). Todo esse procedimento, exceto para o evento
associado ncora de contedo total, deve ser realizado por instrues
programadas pelo autor (programador) do objeto imperativo para cada trecho
de cdigo que pode ser parado.
Ainda, apenas para os objetos de mdia com cdigo imperativo, se
qualquer ncora de contedo tiver um fim natural, e todos os outros eventos
de apresentao estiverem no estado sleeping, a ncora de contedo total
colocada no estado sleeping. Se uma ncora de contedo terminar e pelo
menos um outro evento de apresentao do objeto estiver no estado
occurring, a ncora de contedo total mantida no estado occurring. Em
todos os demais casos, se uma ncora de contedo terminar sua execuo, a
ncora de contedo total colocada no estado paused. Novamente, todo esse
procedimento deve ser realizado por instrues programadas pelo autor
(programador) do objeto imperativo para cada trecho de cdigo que pode ser
parado.
Para objetos de mdia que no tm cdigo imperativo, os eventos
monitorados no estado occurring com o mesmo tempo de trmino do evento
principal ou com tempo de trmino desconhecido, quando o evento principal
termina, vo para o estado sleeping e suas transies stops so notificadas.
Os eventos no estado occurring com tempo de trmino posterior ao tempo de
trmino do evento principal so colocados no estado sleeping sem gerar a
transio stops e sem incrementar o atributo occurences. importante
ressaltar que, se o evento principal corresponder a uma ncora temporal
interna ao objeto, quando a apresentao dessa ncora terminar, toda a
apresentao do objeto de mdia termina.
H.2.2 Comportamento na Execuo de Aes sobre
Eventos de Atribuio
Antes de iniciarmos a discusso de cada instruo, importante
salientar que, embora as propriedades de um n de mdia com cdigo
imperativo possa estar associado com trechos de cdigo, a execuo desses
trechos no afeta mquinas de estado de ncoras de contedo que porventura
estejam associadas aos mesmos cdigos.
541
H.2.2.1 Instruo start
A instruo start pode ser aplicada a um objeto independentemente do
fato de ele estar sendo ou no apresentado (nesse ltimo caso, embora o
objeto no esteja sendo apresentado, seu exibidor de mdia j deve estar
instanciado). No primeiro caso, a instruo start precisa identificar o objeto
de mdia sendo controlado (representatioObjectId) e um evento de atribuio
monitorado. Deve tambm especificar um valor a ser atribudo propriedade
que definiu o evento, a durao do processo de atribuio e o passo de
atribuio..
Ao imputar um valor propriedade, o exibidor de mdia transita a
mquina de estado do evento de atribuio para o estado occurring e, depois
de terminada a atribuio, novamente para o estado sleeping, gerando a
transio starts e, em seguida, a transio stops. No caso de objetos de mdia
com cdigo imperativo, todo esse procedimento deve ser realizado por
instrues programadas pelo autor (programador) do objeto imperativo para
cada elemento <property> declarado.
Para cada evento de atribuio monitorado, se o exibidor de mdia
alterar, por sua prpria conta, o valor correspondente de um atributo, ele
procede como se tivesse recebido uma instruo externa de start. Novamente,
no caso de objetos de mdia com cdigo imperativo, todo o procedimento deve
ser realizado por instrues programadas pelo autor (programador) do objeto
imperativo.
H.2.2.2 Instrues stop, abort, pause e resume
As instrues stop, abort, pause e resume precisam identificar o objeto
de media em apresentao (representation ObjectId) e um eveno de
atribuio sendo monitorado.
A instruo stop apenas cessa o procedimento de atribuio, trazendo o
evento de atribuio para o estado sleeping.
A instruo abort aborta o procedimento de atribuio, trazendo o
evento de atribuio para o estado sleeping e a propriedade para o seu valor
inicial.
A instruo pause apenas pausa o procedimento de atribuio, trazendo
o evento de atribuio para o estado paused.
Finalmente, a instruo resume retoma o procedimento de atribuio,
trazendo o evento de atribuio para o estado occurring.
542
No caso de objetos de mdia com cdigo imperativo, todos os
procedimentos citados nos pargrafos anteriores devem ser realizados por
instrues programadas pelo autor (programador) do objeto imperativo.
H.2.3 Comportamento na Execuo de Comandos de
Edio
H.2.3.1 Instruo addEvent
A instruo addEvent emitida no caso de recepo de um comando de
edio NCL addInterface (ver Captulo 16). A instruo precisa apenas
identificar um objeto de mdia que j esteja sendo controlado e um novo
evento de interface a ser includo e colocado em monitoramento.
No caso de objetos de mdia comuns, que no possuem cdigo
imperativo, todas as regras aplicadas interseo de eventos monitorados
com o evento principal so aplicadas ao novo evento. Se o tempo de incio do
novo evento for anterior ao tempo atual do objeto e o tempo de trmino do
novo evento for posterior ao tempo atual do objeto, o novo evento colocado
no mesmo estado do evento principal (occurring ou paused), sem notificar a
transio correspondente.
H.2.3.2 Instruo removeEvent
A instruo removeEvent emitida no caso de recepo de um comando
de edio NCL removeInterface. A instruo precisa identificar um objeto de
mdia que j esteja sendo controlado e um evento de interface que no se quer
mais controlar. O estado do evento da interface a ser removida colocado em
sleeping, sem gerar nenhuma transio.
H.3 Comportamento do Formatador NCL na
Exibio de Composies
Um <simpleCondition> ou <simpleAction> com valor do atributo
eventType igual a presentation pode ser associado por um elo a um n de
composio (representado por um elemento <context> ou <body>) como um
todo (isto , sem que uma de suas interfaces seja informada). Como
normalmente ocorre, a mquina de estado do evento de apresentao definido
pelo n de composio deve ser controlada pelo formatador, como discutimos
no Captulo 10. De forma anloga, um <attributeAssessment>, com valor de
543
atributo eventType igual a presentation e attributeType igual a state,
occurrences ou repetitions pode ser associado por um elo a um n de
composio (representado por um elemento <context> ou <body>) como um
todo.
A particularidade do procedimento se aplica quando uma
<simpleAction> com valor de atributo eventType igual a presentation for
associada por um elo a um n de composio (representado por um elemento
<context> ou <body>) como um todo (ou seja, sem que uma de suas
interfaces seja informada). Nesse caso, a instruo refletida nas mquinas
de estado de evento dos ns filhos da composio, como veremos a seguir.
H.3.1 Iniciando a Apresentao de um Contexto
Se um elemento <context> ou <body> participar de um papel (role) de
ao (action) cujo tipo de ao start quando essa ao for acionada, a
instruo start tambm aplicada a todos os eventos de apresentao
mapeados pelas portas do elemento <context> ou <body>, quando nenhuma
porta (elemento <port>) da composio for especificada na ao.
Se o autor quiser iniciar a apresentao a partir de uma porta especfica,
ele tambm deve indicar o id de <port> como valor do atributo interface do
elemento <bind>.
H.3.2 Parando a Apresentao de um Contexto
Se um elemento <context> ou <body> participar de um papel (role) de
ao (action) cujo tipo de ao stop quando essa ao for acionada, a
instruo stop tambm aplicada a todos os eventos de apresentao dos ns
filhos da composio, quando nenhuma porta (elemento <port>) da
composio for especificada na ao.
Se a composio contiver elos sendo avaliados (ou com sua avaliao
pausada), as avaliaes so suspensas e nenhuma ao acionada.
H.3.3 Abortando a Apresentao de um Contexto
Se um elemento <context> ou <body> participar de um papel (role) de
ao (action) cujo tipo de ao abort quando essa ao for acionada, a
instruo abort tambm aplicada a todos os eventos de apresentao dos
ns filhos da composio quando nenhuma porta (elemento <port>) da
composio for especificada na ao.
544
Se a composio contiver elos sendo avaliados (ou com sua avaliao
pausada), as avaliaes so suspensas e nenhuma ao acionada.
H.3.4 Pausando a Apresentao de um Contexto
Se um elemento <context> ou <body> participar de um papel (role) de
ao (action) cujo tipo de ao pause quando essa ao for acionada, a
instruo pause tambm aplicada a todos os eventos de apresentao dos
ns filhos da composio que estejam no estado occurring quando nenhuma
porta (elemento <port>) da composio for especificada na ao.
Se a composio contiver elos sendo avaliados, todas as avaliaes so
suspensas at que uma ao resume, stop ou abort seja emitida.
Se a composio contiver ns filhos com eventos de apresentao no
estado paused quando a ao pause na composio for emitida, esses ns
so identificados porque, se a composio receber uma instruo resume,
esses eventos no devem ser retomados.
H.3.5 Retomando a Apresentao de um Contexto
Se um elemento <context> ou <body> participar de um papel (role) de
ao (action) cujo tipo de ao resume e nenhuma porta (elemento
<port>) da composio for especificada na ao quando essa ao for
acionada, a instruo resume tambm aplicada a todos os eventos de
apresentao dos ns filhos da composio que estejam no estado paused,
exceto aqueles que j estavam pausados antes de a composio ser pausada.
Se a composio contiver elos com avaliaes pausadas, elas so
retomadas.
H.3.6 Relao entre as Mquinas de Estado de Eventos de
Apresentao de um N e a Mquina de Estado do Evento
de Apresentao de seu N de Composio Pai
Sempre que o evento de apresentao de um n (mdia ou composio)
for para o estado occurring, o evento de apresentao do n de composio
que contm o n tambm entra no estado occurring.
Quando todos os ns filhos de um n de composio tiverem seus
eventos de apresentao no estado sleeping, o evento de apresentao do n
de composio tambm vai para o estado sleeping.
545
Os ns de composio no inferem transies aborts a partir de seus ns
filhos. Essas transies nos eventos de apresentao de ns de composio
ocorrem apenas quando instrues so aplicadas diretamente ao seu evento de
apresentao.
Quando todos os ns filhos de um n de composio tm seus eventos de
apresentao em um estado diferente de occurring e ao menos um dos ns
tem seu evento principal no estado paused, o evento de apresentao do n de
composio deve tambm estar no estado paused.
Se um elemento <switch> for iniciado mas no definir um componente
default e nenhuma das regras <bindRule> referenciadas for avaliada como
verdadeira, a apresentao switch no vai para o estado occurring.
H.4 Comportamento de Exibidores de Objetos
Hipermdia com Contedo Declarativo
Um exibidor de objeto hipermdia com contedo composto por um
cdigo declarativo (mesmo tendo contedos imperativos embutidos) tem um
comportamento muito semelhante apresentao de um n de composio
realizado pelo formatador NCL. Na verdade, o formatador NCL o exibidor
de um objeto hipermdia contendo cdigo declarativo NCL. Em NCL, tais
objetos tm seu atributo type especificados como application/x-ncl-NCL.
Embora a implementao de referncia do middleware Ginga-NCL
permita que um documento NCL contenha objetos hipermdia com cdigo
SMIL [W3C REC-SMIL2-20051213, 2008] e X3D, a norma para o Sistema
Brasileiro de TV Digital s permite a documentos NCL embutirem outros
documentos NCL ou documentos X-HTML. Vamos, ento, neste apndice,
nos restringir a esses objetos. Contudo, como veremos, a discusso que aqui
faremos facilmente generalizada para objetos especificados em outras
linguagens declarativas.
H.4.1 Iniciando a Apresentao de um Objeto Hipermdia
com Contedo Declarativo
Se um elemento <media> com contedo declarativo (embutindo ou no
cdigos imperativos) participar de um papel (role) de ao (action) cujo tipo
de ao start, quando essa ao for acionada, uma instruo start tambm
aplicada a todas as cadeias temporais definidas pelo objeto (veja o Captulo
14 e o Apndice G), quando nenhuma cadeia do objeto for especificada na
ao. Por exemplo, para um objeto de mdia com tipo igual a application/x-
546
ncl-NCL, todas as portas do documento NCL especificadas em seu elemento
<body> sofrero a ao start.
Se o autor quiser iniciar a apresentao a partir de uma cadeia
especfica, ele tambm deve definir o identificador da cadeia. Por exemplo,
para um objeto de mdia com tipo igual a application/x-ncl-NCL, uma
interface do elemento <bind>, que se liga ao objeto com cdigo NCL, deve
indicar uma das ncoras do objeto, a qual referencia o id de um elemento
<port> que inicia a cadeia, conforme discutimos no Captulo 14.
H.4.2 Parando a Apresentao de um Objeto Hipermdia
com Contedo Declarativo
Se um elemento <media> com contedo declarativo (embutindo ou no
cdigos imperativos) participar de um papel (role) de ao (action) cujo tipo
de ao stop, quando essa ao for acionada, uma instruo stop tambm
aplicada a todas as cadeias definidas internamente pelo objeto quando
nenhuma cadeia especfica do objeto for especificada na ao. Por exemplo,
para um objeto de mdia com tipo igual a application/x-ncl-NCL, a ao
stop tambm aplicada a todos os eventos de apresentao dos ns filhos
do elemento <body> do objeto de mdia com cdigo NCL.
Se o autor quiser parar a apresentao de uma cadeia especfica, ele
tambm deve indicar o identificador da cadeia. Por exemplo, para um objeto
de mdia com tipo igual a application/x-ncl-NCL, uma interface do
elemento <bind>, que se liga ao objeto com cdigo NCL, deve indicar uma
das ncoras do objeto, a qual referencia o id de um elemento <port> que
inicia a cadeia, conforme discutimos no Captulo 14. Nesse caso, a instruo
stop tambm aplicada a todos os eventos de apresentao de todos os ns
filhos do elemento <body>, do objeto de mdia com cdigo NCL, que
participam da cadeia e no esto no estado sleeping.
Se o objeto de mdia com cdigo declarativo contiver alguma relao
entre seus objetos internos sendo avaliada (ou com sua avaliao pausada), a
avaliao suspensa e nenhuma ao acionada.
H.4.3 Abortando a Apresentao de um Objeto Hipermdia
com Contedo Declarativo
Se um elemento <media> com contedo declarativo (embutindo ou no
cdigos imperativos) participar de um papel (role) de ao (action) cujo tipo
de ao abort quando essa ao for acionada, uma instruo abort
tambm aplicada a todas as cadeias definidas internamente pelo objeto
547
quando nenhuma cadeia especfica do objeto for especificada na ao. Por
exemplo, para um objeto de mdia com tipo igual a application/x-ncl-NCL,
a instruo abort tambm aplicada a todos os eventos de apresentao dos
ns filhos do elemento <body> do objeto de mdia com cdigo NCL.
Se o autor quiser abortar a apresentao de uma cadeia especfica, ele
tambm deve indicar o identificador da cadeia. Por exemplo, para um objeto
de mdia com tipo igual a application/x-ncl-NCL, uma interface do
elemento <bind>, que se liga ao objeto com cdigo NCL, deve indicar uma
das ncoras do objeto, a qual referencia o id de um elemento <port> que
inicia a cadeia, conforme discutimos no Captulo 14. Nesse caso, a instruo
abort tambm aplicada a todos os eventos de apresentao de todos os ns
filhos do elemento <body>, do objeto de mdia com cdigo NCL, que
participam da cadeia e no esto no estado sleeping.
Se o objeto de mdia com cdigo declarativo contiver alguma relao
entre seus objetos internos sendo avaliada (ou com sua avaliao pausada), a
avaliao suspensa e nenhuma ao acionada.
H.4.4 Pausando a Apresentao de um Objeto Hipermdia
com Contedo Declarativo
Se um elemento <media> com contedo declarativo (embutindo ou no
cdigos imperativos) participar de um papel (role) de ao (action) cujo tipo
de ao pause quando essa ao for acionada, uma instruo pause
tambm aplicada a todas as cadeias definidas internamente pelo objeto que
estejam em apresentao quando nenhuma cadeia especfica do objeto for
especificada na ao. Por exemplo, para um objeto de mdia com tipo igual a
application/x-ncl-NCL, a instruo pause tambm aplicada a todos os
eventos de apresentao dos ns filhos do elemento <body> do objeto de
mdia com cdigo NCL que estejam no estado occurring.
Se o autor quiser pausar a apresentao de uma cadeia especfica, ele
tambm deve indicar o identificador da cadeia. Por exemplo, para um objeto
de mdia com tipo igual a application/x-ncl-NCL, uma interface do
elemento <bind>, que se liga ao objeto com cdigo NCL, deve indicar uma
das ncoras do objeto, a qual referencia o id de um elemento <port> que
inicia a cadeia, conforme discutimos no Captulo 14. Nesse caso, a instruo
pause tambm aplicada a todos os eventos de apresentao de todos os ns
filhos do elemento <body>, do objeto de mdia com cdigo NCL, que
participam da cadeia e que estejam no estado occurring.
Se o objeto de mdia com cdigo declarativo contiver alguma relao
entre seus objetos internos sendo avaliada (ou com sua avaliao pausada), a
avaliao suspensa at que uma ao resume, stop ou abort seja emitida.
548
Se o objeto de mdia com cdigo declarativo contiver cadeias temporais
no estado paused, quando a ao pause no objeto for emitida, essas cadeias
so identificadas porque, se o objeto receber uma instruo resume, essas
cadeias no devero ser retomadas.
H.4.5 Retomando a Apresentao de um Objeto Hipermdia
com Contedo Declarativo
Se um elemento <media> com contedo declarativo (embutindo ou no
cdigos imperativos) participar se um papel (role) de ao (action) cujo tipo
de ao resume e nenhuma cadeia especfica do objeto for especificada na
ao quando essa ao for acionada, uma instruo resume tambm
aplicada a todas as cadeias definidas internamente pelo objeto que estejam no
estado paused, exceto aquelas que j estavam pausadas antes de o objeto
declarativo ser pausado. Por exemplo, para um objeto de mdia com tipo igual
a application/x-ncl-NCL, a instruo resume tambm aplicada a todos os
eventos de apresentao dos ns filhos do elemento <body>, do objeto de
mdia com cdigo NCL, que estejam no estado paused, exceto aqueles que j
estavam pausados antes de o objeto de mdia declarativo ser pausado.
Se o autor quiser retomar a apresentao de uma cadeia especfica, ele
tambm deve indicar o identificador da cadeia. Por exemplo, para um objeto
de mdia com tipo igual a application/x-ncl-NCL, uma interface do
elemento <bind>, que se liga ao objeto com cdigo NCL, deve indicar uma
das ncoras do objeto, a qual referencia o id de um elemento <port> que
inicia a cadeia, conforme discutimos no Captulo 14. Nesse caso, a instruo
resume tambm aplicada a todos os eventos de apresentao de todos os ns
filhos do elemento <body> do objeto de mdia com cdigo NCL que
participam da cadeia e que estejam no estado paused, exceto aqueles que j
estavam pausados antes de o objeto de mdia declarativo ser pausado.
Se o objeto de mdia com cdigo declarativo contiver alguma relao
entre seus objetos internos pausada, ela retomada quando a cadeia da qual
esses objetos participam so retomadas.
H.4.6 Comportamento na Execuo de Aes sobre
Eventos de Atribuio de um Objeto Hiperdia com Cdigo
Declarativo
As mquinas de estado associadas a propriedades de um objeto de mdia
com cdigo declarativo tm exatamente o mesmo comportamento das
mquinas de estado associadas a um objeto de mdia no-imperativo,
conforme descrito na Seo H.2.2.
549
H.4.7 Relao entre os Estados de uma Cadeia Temporal
de um Objeto Hipermdia e suas ncoras de Contedo
Sempre que qualquer cadeia temporal de um objeto de mdia com
contedo declarativo estiver sendo apresentada, o evento de apresentao
associado ncora de contedo total estar no estado occurring.
Um evento associado a uma ncora especfica de uma cadeia est no
estado occurring quando o trecho da cadeia que ele especifica est sendo
apresentado.
Quando todas as cadeias de um objeto de mdia com contedo
declarativo ainda no foram iniciadas (ou foram paradas ou abortadas), o
evento de apresentao associado sua ncora de contedo total estar no
estado sleeping.
Um evento associado a uma ncora especfica de uma cadeia est no
estado sleeping quando o trecho da cadeia que ele especifica ainda no foi
iniciado ou foi parado ou abortado.
Quando todas as cadeias de um objeto de mdia com contedo
declarativo no estiverem sendo apresentadas e ao menos uma das cadeias
est pausada, o evento de apresentao associado sua ncora de contedo
total estar no estado paused.
Um evento associado a uma ncora especfica de uma cadeia est no
estado paused quando o trecho da cadeia que ele especifica est pausado.
Bibliografia
ABNT, NBR 15606-2 (2011). Associao Brasileira de Normas Tcnicas,
Televiso digital terrestre Codificao de dados e especificaes de
transmisso para radiodifuso digital, Parte 2: Ginga-NCL para receptores
fixos e mveis Linguagem de aplicao XML para codificao de
aplicaes, Sistema Brasileiro de TV Digital Terrestre, NBR 15606-2.
Soares, L.F.G. e Rodrigues, R.F. (2006). Nested Context Model 3.0 Part 8
NCL (Nested Context Language) Digital TV Profiles. Monografias
em Cincia da Computao do Departamento de Informtica, PUC-Rio,
N. 35/06. Rio de Janeiro, outubro de 2006. ISSN 0103-9741.
W3C, REC-SMIL2-20051213 (2008). World Wide Web Consortium,
Synchronized Multimedia Integration Language SMIL 2.1
Specification, W3C Recommendation SMIL2-20051213.