libclosedcaption 1.0.3
Extração de closed caption ISDB-Tb/SBTVD de arquivos MPEG-TS
Carregando...
Procurando...
Nenhuma entrada encontrado
Referência do Arquivo caption-screen.h

Converte os pacotes PES de legenda em linhas de texto. Mais...

#include "caption-common.h"
Gráfico de dependência de inclusões para caption-screen.h:
Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com esse arquivo:

Ir para o código-fonte desse arquivo.

Estruturas de Dados

struct  CaptionLine_t
 

Definições e Macros

#define CAPTION_SCREEN_MAX_LINES   16
 
#define CAPTION_SCREEN_LINE_LEN   256
 

Definições de Tipos

typedef void(* CaptionScreenLineCallback_t) (const CaptionLine_t *line, void *userdata)
 
typedef struct CaptionScreen_s CaptionScreen_t
 

Funções

CaptionScreen_t * caption_screen_new (CaptionScreenLineCallback_t callback, void *userdata)
 
void caption_screen_free (CaptionScreen_t *screen)
 
bool caption_screen_push_pes (CaptionScreen_t *screen, const uint8_t *pes, size_t len)
 
void caption_screen_flush (CaptionScreen_t *screen)
 
bool caption_screen_line_continues (const char *line, const char *prefix)
 

Descrição detalhada

Converte os pacotes PES de legenda em linhas de texto.

Autor
Jorge Pereira jpere.nosp@m.iran.nosp@m.@gmai.nosp@m.l.co.nosp@m.m

É a forma mais simples de usar a biblioteca: recebe os PES completos do PID da legenda (veja ts-demux.h), executa todo o processamento (packet_pes_load(), caption_data_load(), caption_management_load() e caption_closed_run()) e entrega cada linha de legenda pronta, em UTF-8, para uma callback.

Como as linhas são montadas

  • Os comandos APR (0x0d) e APS (0x1c) quebram a linha; os espaços de preenchimento no final de cada linha são removidos.
  • Cada PES redesenha a tela inteira. Legendas ao vivo (roll-up) reenviam a mesma linha a cada poucas letras, por isso uma linha só é entregue quando deixa a tela, ou seja, quando nenhuma linha da tela nova é uma continuação dela.
  • A comparação ignora acentos: é comum a emissora enviar a letra sem acento e corrigi-la na tela seguinte (ex: "ESPECI" → "ESPECÍFICO").
  • O tempo de cada linha é o PTS do PES em que ela apareceu, relativo ao primeiro PTS de legenda recebido.

Exemplo:

static void
on_line (const CaptionLine_t *line, void *userdata)
{
printf ("[%u ms] %s\n", line->start_ms, line->text);
}
CaptionScreen_t *screen = caption_screen_new (on_line, NULL);
// para cada PES completo do PID da legenda:
caption_screen_push_pes (screen, pes, len);
caption_screen_flush (screen); // entrega as linhas que ainda estão na tela
void caption_screen_free(CaptionScreen_t *screen)
bool caption_screen_push_pes(CaptionScreen_t *screen, const uint8_t *pes, size_t len)
CaptionScreen_t * caption_screen_new(CaptionScreenLineCallback_t callback, void *userdata)
void caption_screen_flush(CaptionScreen_t *screen)
struct CaptionScreen_s CaptionScreen_t
const char * text
uint32_t start_ms
Aviso
Os hooks de caption-hooking.h são globais: caption_screen_push_pes() registra os seus próprios hooks, substituindo os que estiverem registrados. Pelo mesmo motivo, não é seguro usar a biblioteca em mais de uma thread ao mesmo tempo.

Definição no arquivo caption-screen.h.

Definições e macros

◆ CAPTION_SCREEN_MAX_LINES

#define CAPTION_SCREEN_MAX_LINES   16

Máximo de linhas mantidas na tela.

Definição na linha 53 do arquivo caption-screen.h.

◆ CAPTION_SCREEN_LINE_LEN

#define CAPTION_SCREEN_LINE_LEN   256

Tamanho máximo de uma linha, em bytes UTF-8 (incluindo o '\0').

Definição na linha 56 do arquivo caption-screen.h.

Definições dos tipos

◆ CaptionScreenLineCallback_t

typedef void(* CaptionScreenLineCallback_t) (const CaptionLine_t *line, void *userdata)

Callback chamada para cada linha de legenda finalizada.

Parâmetros
lineA linha. Só é válida durante a chamada.
userdataPonteiro informado em caption_screen_new().

Definição na linha 72 do arquivo caption-screen.h.

◆ CaptionScreen_t

typedef struct CaptionScreen_s CaptionScreen_t

Tela de legenda. Estrutura opaca, criada por caption_screen_new().

Definição na linha 78 do arquivo caption-screen.h.

Funções

◆ caption_screen_new()

CaptionScreen_t * caption_screen_new ( CaptionScreenLineCallback_t  callback,
void *  userdata 
)

Cria uma tela de legenda.

Parâmetros
callbackChamada para cada linha finalizada.
userdataRepassado para a callback.
Retorna
A tela, ou NULL se faltar memória. Liberar com caption_screen_free().

◆ caption_screen_free()

void caption_screen_free ( CaptionScreen_t *  screen)

Libera a tela. Não chama caption_screen_flush().

Parâmetros
screenTela criada por caption_screen_new(). Aceita NULL.

◆ caption_screen_push_pes()

bool caption_screen_push_pes ( CaptionScreen_t *  screen,
const uint8_t *  pes,
size_t  len 
)

Processa um PES completo do PID da legenda.

PES inválidos, com CRC incorreto, ou que não são "caption statement data" (por exemplo, o "caption management data") são ignorados.

Parâmetros
screenTela criada por caption_screen_new().
pesPES completo, a partir do packet_start_code_prefix (00 00 01).
lenTamanho de pes em bytes.
Retorna
TRUE se o PES continha texto de legenda e foi processado.

◆ caption_screen_flush()

void caption_screen_flush ( CaptionScreen_t *  screen)

Entrega todas as linhas que ainda estão na tela e limpa a tela. Chame no final do arquivo.

Parâmetros
screenTela criada por caption_screen_new().

◆ caption_screen_line_continues()

bool caption_screen_line_continues ( const char *  line,
const char *  prefix 
)

Verifica se line começa com prefix, ignorando os acentos das letras do Latin-1 (U+00C0 a U+00FF). Por exemplo, "ESPECÍFICO" começa com "ESPECI".

Parâmetros
lineTexto em UTF-8.
prefixPrefixo em UTF-8.
Retorna
TRUE se line começa com prefix.