Autor Tópico: Como remover as tags de itálico - Firmware jmaraujo v1.3  (Lida 30194 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Itálico em SRT no Firmware jmaraujo v1.3
« Responder #20 Online: Outubro 01, 2009, 08:25:04 pm »
Agora sim, perfeito! Muito obrigado pela ajuda, rictad! ;D

Antes:


Agora:
« Última modificação: Outubro 01, 2009, 08:31:02 pm por jmaraujo »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Itálico em SRT no Firmware jmaraujo v1.3
« Responder #21 Online: Outubro 01, 2009, 08:44:32 pm »
Faça clique com a tecla direita do mouse sobre o texto SubtitleTextLenght e esolha a opção #16. Ou faça clique no texto e presione a tecla "Q".

Ah... isso facilita as coisas!

Mesmo assim, identificar corretamente o ponteiro do buffer de legenda fica difícil, pois temos que rastrear o Stack Pointer. O endereço é carregado assim em R6, então:

Código: [Selecionar]
ROM:0000E66A 08 9E                       LDR     R6, [SP,#0x20]
Porém, no início da rotina temos um PUSH que, como se sabe, incrementa a pilha (SP):

Código: [Selecionar]
ROM:0000E64C F1 B5                       PUSH    {R0,R4-R7,LR}
Pelo que eu acho, isso deve incrementar o SP em uma palavra (4 bytes) para cada registrador guardado. Ainda não tenho certeza, mas acho que são 6 registradores (R0, de R4 a R7 e o LR). Então SP é incrementado com um offset de 24. Mas, em seguida, temos a instrução:

Código: [Selecionar]
ROM:0000E64E 88 B0                       SUB     SP, SP, #0x20
Isso retira 32 (em decimal) do SP.

Então, se todos os cálculos estiverem certos, o LDR     R6, [SP,#0x20] carrega em R6 o valor guardado na posição apontada por SP logo após o PUSH (já que o offset de 32 anula o -32 no SUB). Ainda teríamos que percorrer as rotinas prévias (das chamadas originárias) para ver o que foi carregado em SP nessa posição, descontados PUSHs, POPs, incrementos e decrementos de SP.

Agora sim, perfeito! Muito obrigado pela ajuda, rictad! ;D

De nada, jmaraujo. Era só para inibir as tags, mas veja que o Ryan nos botou agora no caminho do itálico. :laugh: Depois desse trabalho, será bem mais fácil implementar o itálico.

FORUM.RYAN.COM.BR

Re: Itálico em SRT no Firmware jmaraujo v1.3
« Responder #21 Online: Outubro 01, 2009, 08:44:32 pm »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Itálico em SRT no Firmware jmaraujo v1.3
« Responder #22 Online: Outubro 01, 2009, 08:53:49 pm »
De nada, jmaraujo. Era só para inibir as tags, mas veja que o Ryan nos botou agora no caminho do itálico. :laugh: Depois desse trabalho, será bem mais fácil implementar o itálico.
É, mas eu não quero abusar da sua ajuda... :oops:

Muitas coisas se passaram desde este post até hoje... Até onde eu sei, o seu player é o único no mundo a implementar o itálico! ;D  :clapping:

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Itálico em SRT no Firmware jmaraujo v1.3
« Responder #23 Online: Outubro 01, 2009, 09:04:53 pm »

De nada, jmaraujo. Era só para inibir as tags, mas veja que o Ryan nos botou agora no caminho do itálico. :laugh:

Ooops!  ;D

Corrigi o título do tópico!
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Itálico em SRT no Firmware jmaraujo v1.3
« Responder #24 Online: Outubro 02, 2009, 05:12:40 am »
É, mas eu não quero abusar da sua ajuda... :oops:

Muitas coisas se passaram desde este post até hoje... Até onde eu sei, o seu player é o único no mundo a implementar o itálico! ;D  :clapping:
Que abusar, que nada. Quando tiver dúvida, é só perguntar. Podemos implementar aos poucos.

Seria interessante, agora, descobrir em qual posição de memória fica guardada a opção de alinhamento vertical ou, caso esta não exista, a opção de alinhamento horizontal. Talvez você já as tenha identificado. Estão nos offsets da rotina SUB_FillMpeg4SubtitleParamsRecord:

Código: [Selecionar]
ROM:0000E350             sub_E350                                ; CODE XREF: sub_AA2A+47_p
ROM:0000E350 02 78                       LDRB    R2, [R0]
ROM:0000E352 52 49                       LDR     R1, =unk_7A380
ROM:0000E354 0A 72                       STRB    R2, [R1,#8]
ROM:0000E356 83 78                       LDRB    R3, [R0,#2]
ROM:0000E358 42 78                       LDRB    R2, [R0,#1]
ROM:0000E35A 1B 02                       LSLS    R3, R3, #8
ROM:0000E35C 1A 43                       ORRS    R2, R3
ROM:0000E35E 0A 80                       STRH    R2, [R1]
ROM:0000E360 03 79                       LDRB    R3, [R0,#4]
ROM:0000E362 C2 78                       LDRB    R2, [R0,#3]
ROM:0000E364 1B 02                       LSLS    R3, R3, #8
ROM:0000E366 1A 43                       ORRS    R2, R3
ROM:0000E368 4A 80                       STRH    R2, [R1,#2]
ROM:0000E36A 83 79                       LDRB    R3, [R0,#6]
ROM:0000E36C 42 79                       LDRB    R2, [R0,#5]
ROM:0000E36E 1B 02                       LSLS    R3, R3, #8
ROM:0000E370 1A 43                       ORRS    R2, R3
ROM:0000E372 8A 80                       STRH    R2, [R1,#4]
ROM:0000E374 03 7A                       LDRB    R3, [R0,#8]
ROM:0000E376 C2 79                       LDRB    R2, [R0,#7]
ROM:0000E378 1B 02                       LSLS    R3, R3, #8
ROM:0000E37A 1A 43                       ORRS    R2, R3
ROM:0000E37C CA 80                       STRH    R2, [R1,#6]
ROM:0000E37E 42 7A                       LDRB    R2, [R0,#9]
ROM:0000E380 4A 72                       STRB    R2, [R1,#9]
ROM:0000E382 82 7A                       LDRB    R2, [R0,#0xA]
ROM:0000E384 8A 72                       STRB    R2, [R1,#0xA]
ROM:0000E386 C0 7A                       LDRB    R0, [R0,#0xB]
ROM:0000E388 C8 72                       STRB    R0, [R1,#0xB]
ROM:0000E38A 70 47                       BX      LR

Com uma dessas posições, de preferência a que guarda o alinhamento vertical, fica mais fácil ter um local para guardar a flag indicativa do itálico e até mesmo a opção de ligar/desligar itálicos.

Ooops!  ;D

Corrigi o título do tópico!
Talvez você tenha que corrigir de novo em breve. ;D

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Como remover as tags de itálico - Firmware jmaraujo v1.3
« Responder #25 Online: Outubro 03, 2009, 12:55:36 am »
Jmaraujo,

Tem como você disponibilizar os ARM codes do firmware após ter colocado o filtro? Queria dar uma olhada depois para estudar a implementação do itálico. Se você não estiver fazendo o mesmo, claro.  ;)
« Última modificação: Outubro 03, 2009, 12:57:13 am por rictad »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Como remover as tags de itálico - Firmware jmaraujo v1.3
« Responder #26 Online: Outubro 03, 2009, 03:04:13 am »
Tem como você disponibilizar os ARM codes do firmware após ter colocado o filtro? Queria dar uma olhada depois para estudar a implementação do itálico.
Mas é claro! ;) Por email hoje eu mando somente os ArmCodes, e no sábado ou domingo eu posto o firmware completo aqui no fórum. ;D

Se você não estiver fazendo o mesmo, claro.  ;)
Vai ser difícil.  :laugh: Sem a sua ajuda não teria feito nem o filtrado dos tags, muito menos a implementação do itálico!!!   :P  O meu conhecimento do Arm é muito limitado. Me sinto mais a vontade com o 8032.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Como remover as tags de itálico - Firmware jmaraujo v1.3
« Responder #27 Online: Outubro 03, 2009, 03:30:59 am »
Rictad, como ficaria o menu dos tags do italico? É uma tarefa que eu posso ir adiantando aqui.

São tres opções, certo? Ficaria assim?: 1) Mostrar o itálico, 2) Filtrar os tags e 3) Não fazer nada.

Qual o valor para cada opção, 0, 1 e 2?

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Como remover as tags de itálico - Firmware jmaraujo v1.3
« Responder #28 Online: Outubro 03, 2009, 04:47:41 am »
Mas é claro! ;) Por email hoje eu mando somente os ArmCodes, e no sábado ou domingo eu posto o firmware completo aqui no fórum. ;D
Recebi o e-mail!

Rictad, como ficaria o menu dos tags do italico? É uma tarefa que eu posso ir adiantando aqui.

São tres opções, certo? Ficaria assim?: 1) Mostrar o itálico, 2) Filtrar os tags e 3) Não fazer nada.

Qual o valor para cada opção, 0, 1 e 2?
Sim, 3 opções são suficientes. O valor vai depender. Para repassar o valor ao ARM, é mais fácil utilizar os bits de uma outra opção que não faça uso de todos os seus bits. Fazemos um OR e fundimos as duas opções no mesmo byte.

Por exemplo, no meu caso, usei a opção de alinhamento vertical da legenda. Percebi que o alinhamento vertical só depende de 1 bit. Se a opção for 0, o alinhamento é inferior, se for 1, superior. Se for 2, novamente inferior, 3, superior. Só há duas opções de fato, que são rotativas. Então, o alinhamento é definido apenas pelo bit 0 do byte da opção. Se for XXXXXXX0, o alinhamento é inferior. Se for XXXXXXX1, o alinhamento é superior.

Assim, foi possível utilizar os demais bits para passar outras opções do 8032 ao ARM. Deixei o bit 7 para ser usado como flag indicativa de itálico ativado/desativado (tag <i> encontrada ou tag </i> encontrada) na rotina de itálico no próprio ARM. Já os bits 6, 5 e 4 foram usados para as opções. Precisei de 3 bits devido à quantidade de opções que criei.

Como você utilizará apenas 3 opções, bastariam apenas 2 bits: o 6 e o 5. Então daria para utilizar o valor 00000000 = #00 para "Não fazer nada", o valor 00100000 = #20 para "Filtrar as tags" e valor 01000000 = #40 para "Habilitar itálico". Na hora de repassar ao ARM, basta ler a EEPROM com essa opção, fazer um OR com o valor de EEPROM da opção de alinhamento vertical e repassar o resultado junto com o alinhamento. Então teremos combinações, como:

01000000 + 00000001 = 01000001  --> Alinhamento superior e itálico ligado;
00100000 + 00000000 = 00100000  --> Alinhamento inferior e filtrar tags.
e todas as demais combinações.

O mais importante agora é saber como são os ciclos das opções de alinhamento de legenda (pode ser das cores de legenda também) do seu firmware. Você deve seguir os seguintes passos:

O seu firmware tem opção de alinhamento vertical? Se sim, você deve testar os valores 0, 1, 2, 3 e os valores #20, #21, #22, #23, #40, #41, #42 e #43 para ver se o padrão de alinhamento se repete: o alinhamento deve ser o mesmo para 0, #20 e #40, o mesmo para 1, #21 e #41, o mesmo para 2, #22 e #42 e o mesmo para 3, #23 e #43. Se isso se confirmar, você deve criar as opções do itálico com valores 0, #20 e #40 e fazer um OR com a opção de alinhamento vertical antes de enviá-la ao ARM.

Se o seu firmware não tem opção de alinhamento vertical, tente o mesmo com o horizontal. Se não tiver também, então é porque você deixou os alinhamentos padrões do firmware. Ainda assim, pode testar mudar um dos dois diretamente no firmware para ver se segue os ciclos acima. Se seguir, então basta criar as opções de itálico e fazer o OR com o valor padrão do alinhamento antes de enviá-lo. Também é possível tentar testar a opção de cor da legenda para ver se há ciclos. Mas como há mais cores que alinhamentos, a opção de cor deve utilizar mais bits.

Em todo caso, deverá descobrir em qual posição na rotina SUB_FillMpeg4SubtitleParamsRecord (sub_E350) a opção de alinhamento (ou outra escolhida) fica carregada no ARM, para utilizarmos na rotina do itálico. Isso é fácil.

Talvez tenha ficado meio confuso. ;D Qualquer dúvida, é só perguntar. O padrão de ciclos das opções também pode ser outro, especialmente se os bits que importam forem mais significativos. Neste caso, as opções terão que ter outro valor. Mas eu acho que será igual aos LGs.

Enfim, tente descobrir alguma opção da legenda, preferencialmente um dos alinhamentos, que seja cíclica e dependa de poucos bits para a gente começar as modificações.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Como remover as tags de itálico - Firmware jmaraujo v1.3
« Responder #29 Online: Outubro 03, 2009, 04:57:32 am »
Sim, o meu firmware tem alinhamento vertical.

Poxa, pensei que fosse mais fácil :( Algo do tipo: no inicio do patch ler o endereço da EEPROM, se for 0, sair/retornar; se for 1, pular para o filtrado do itálico; se for 2, pular para a rotina do itálico.

Não me sinto capacitado para tal tarefa. :( :( :(

FORUM.RYAN.COM.BR

Re: Como remover as tags de itálico - Firmware jmaraujo v1.3
« Responder #29 Online: Outubro 03, 2009, 04:57:32 am »