BUG en reprodución de FLC/FLI 8bits

Started by FreeYourMind, June 14, 2011, 09:33:48 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Bueno, despúes de muchas vueltas me he dado cuenta que es un BUG de Bennu, es dificil de localizar porque esta FEATURE no se suele utilizar mucho, y mucho menos en el caso que comento:

Resulta que si reproduces 2 videos seguidos y sólo estando en modo 8 bits (para respoducir videos FLC/FLI con 8bpp de produndidad), el segundo video falla si este es distinto al primero, y solo en estos casos, si es igual no ocurre.

El video se repoduce si, pero con tonos de azul.

El BUG se reproduce si haces un set_mode(320, 240, 8); antes de reproducir el primero.

Despues reproduces un video, al terminar si reproduces otro (aunque cambies la profundidad varias veces es igual) el segundo se queda azul.


He descubierto un FIX chapuzero que por lo menos resuelve el problema, he abierto el hilo para dejar constancia, no voy a poner ejemplos porque no tengo tiempo, pero es hacer lo que he dicho sin más.




FIX:


Al terminar el primer video, reproducimos el segundo video 2 veces, la primera de ellas (que es la conflictiva,
porque la segunda ya es una repetición del video)
lo reproducimos sólo en 4 FRAMES (es lo minimo que he conseguido, para
que el segundo video despúes ya salga bien, y lo he probado tambien en las portatiles,
o sea, no falla), le podemos hacer un fade_off y un fade_on en estos 4 frames.

Despues ya podemos reproducir el segundo video sin problemas (que en realidad es el tercero)

Es una solucion que funciona, no se percibe que entre los 2 videos habia un tercero,
pero ahí esta, resuelve el tema de los colores :)



Ejemplo:


PROCESS Rep_Video1()
PRIVATE
  flic_id;
  music_channel_id;

BEGIN

music_channel_id = play_wav(Mus_video1, 0);

flic_id = fli_start("Video1.flc", 0, 0);

WHILE(is_playing_wav(music_channel_id))
       IF (exit_status == 1)
          exit("bye", 0);
       END
       FRAME;
END

fli_end(flic_id);
end_fli();
stop_wav(all_sound);


// FIX: Lo ponemos al final del primer video:

set_mode(320, 240, 8);
fade_off();
flic_id = fli_start("Video2.flc", 0, 0);
FRAME; FRAME; FRAME; FRAME;
fli_end(flic_id);
end_fli();
   
ReprVideo2();

END

PROCESS Rep_Video2()
PRIVATE
  flic_id;
  music_channel_id;

BEGIN

let_me_alone();
fade_on();

music_channel_id = play_wav(Mus_video2, 0);

flic_id = fli_start("Video2.flc", 0, 0);

WHILE(is_playing_wav(music_channel_id))
       IF (exit_status == 1)
          exit("bye", 0);
       END
       FRAME;
END

fli_end(flic_id);
end_fli();
stop_wav(all_sound);

END

SplinterGU

gracias free!

a la lista de pendientes!

karma!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#2
free, este revisando tu ejemplo, te voy a decir que lo solucionaste de casualidad, porque nada tiene que ver con la solucion descripta arriba.

el problema es que la paleta en 8bits no se actualiza, en realidad si se actualiza pero el flag que indica que refresque la informacion en SDL no se activaba en la funcion de refrescar la paleta.

la solucion que realmente aplicaba a lo que hiciste fue:

- hacer un fade_off
- cargar el flc
- ejecutar un frame para que cargue la paleta y la refresque.
- fade_on, para prender la pantalla.

esas instrucciones que tenias desparramadas por ahi fueron la solucion.

como sea, ya no hara falta hacer esto, ya que corregi la grbase para que en caso de actualizar los datos de la lib del sistema la marque para que actualice realmente la SDL.

gracias free por el aviso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Pues me has venido como anillo al dedo, porque aunque ya funcionaba en la Caanoo, en PC a veces tiraba mal...

De paso te digo que en la Dingoo al reproducir el segundo video se congela la pantalla (se queda negro).
No se a que se debe, pero cuanto antes saques los binarios antes haré la prueba tambien en dingoo de nuevo.

SplinterGU

vale, si, estoy compilando, desde hace unas horas, windows tarda infierno.

de paso salen los fixes para los region, para el m7 y scroll.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2


SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Todavia no he probado, estoy liado con mi emu de SNES xD

FreeYourMind

#8
Lo acabo de probar...

Estaba super contento porque en PC ya funciona perfecto, pero tanto en Wiz como Caanoo me he llevado la sopresa, los videos se paran a los 1, 2 segundos, y despues la musica del menu siguiente se queda en empezando una y otra vez en loop....

Revisalo porfa, ha quedao peor de lo que estaba  :(

EDIT: En Dingux funciona tal cual la anterior release, o sea, el primer video sale completo pero al empezar el segundo se queda la pantalla en negro congelada.

SplinterGU

pruebalo sin sonido y sin los fade... yo lo he probado y funciona...

demas esta decir que tienes doble cierre de los videos en tu ejemplo, y eso esta mal.

puede que en dingux deberias sacarle todo el codigo del sonido, porque el is_playing esta dando -1, y en tu ejemplo, no estas considerando ninguna situacion de error... algo similar puede pasar con caanoo y wiz.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Lo de dingux lo entiendo, pero aún así nose porque el primero si funciona teniendo tambien el check de sonido, deberian fallar los 2, al no tener sonido, de todas formas deberia saltar al menu despues y no lo hace, ya que es lo que ocurre cuando falla el sonido, que se haga un skip del video...

Sobre lo del video, en wiz/caanoo/pc, lo del cierre te refieres a esto:

fli_end(flic_id);
end_fli();

Esto lo tuve que poner sino no cerraba solo con uno, y recuerda que en pc funciona bien, esto nunca lo he tocado desde que los puse al inicio ...

Confirmame si te refieres a esto.

SplinterGU

no, hombre... la is_playing retorna -1, y el while va a dar siempre true.
confirmado en dingux, funciona bien, salvo que la paleta no se actualiza, eso debe ser cosa de la implementacion SDL, ya que no hay codigo dependiente de dingux en esto.

vas a tener que generar los videos con la misma paleta.

ahora pruebo las versiones caanoo y te comento, de paso te pongo el codigo que probe.


import "mod_flic";
import "mod_map";
import "mod_screen";
import "mod_key";
import "mod_wm";
import "mod_proc";
import "mod_video";

function Rep_Video1()
PRIVATE
    flic_id;
    music_channel_id;

BEGIN

    flic_id = fli_start("Video1.flc", 0, 0);

    WHILE(!key(_ESC))
        IF (exit_status == 1)
            exit("bye", 0);
        END
        FRAME;
    END

    fli_end(flic_id);

    WHILE(key(_ESC)) frame; end;

END

function Rep_Video2()
PRIVATE
    flic_id;
    music_channel_id;

BEGIN

    flic_id = fli_start("Video2.flc", 0, 0);

    WHILE(!key(_ESC))
        IF (exit_status == 1)
            exit("bye", 0);
        END
        FRAME;
    END

    fli_end(flic_id);

    WHILE(key(_ESC)) frame; end;

END

begin
    set_mode(320,240,8);
    Rep_Video1();
    Rep_Video2();
end
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

si, me referia a eso... y si funciona con 1 solo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Mira, no puedo usar una sola paleta porque los videos tienen distinta paleta, de todas formas la solución es hacer lo que tenia, pero logicamente seria mas elegante que ahora con el fix de bennu funcione.

Te voy a pasar el codigo real que tengo actualmente, para que no pierdas tiempo con pruebas similares y puedas usar el que yo uso 100% de forma a que no nos equivoquemos.



PROCESS Video1()
PRIVATE
  flic_id;
  music_channel_id;

BEGIN


        let_me_alone();
Mus_Intro = load_wav("Vid/Intro.ogg");
Mus_Logo = load_wav("Vid/Logo.ogg");
        controls(); // Exclusivo Bennu 'Gp2x Wiz'

IF (Music == 1)
            volume(); // Exclusivo Bennu 'Gp2x Wiz'
END


        music_channel_id = play_wav(Mus_Logo, 0);

IF (Music == 0)
    vol = 0;
    set_channel_volume(-1, vol);
END

flic_id = fli_start("Vid/Logo.flc", 0, 0);

    WHILE(is_playing_wav(music_channel_id))
       IF (exit_status == 1 OR Wiz_Botao_Menu OR key(_control))
       exit("", 0);
       END
   FRAME;
    END

    fli_end(flic_id);
    end_fli();
    stop_wav(all_sound);

IF (Mus_Logo != null)
    unload_wav(Mus_Logo);
            Mus_Logo = 0;
END

    Video2();

END

PROCESS Video2()
PRIVATE
  flic_id;
  music_channel_id;

BEGIN

    let_me_alone();
    controls(); // Exclusivo 'Gp2x Wiz'


    set_mode(320, 240, 8);

    music_channel_id = play_wav(Mus_Intro, 0);

IF (Music == 0)
    vol = 0;
set_channel_volume(-1, vol);
ELSE
    volume(); // Exclusivo Bennu 'Gp2x Wiz'
END

    flic_id = fli_start("Vid/Intro.flc", 0, 0);

    WHILE((!key(_esc) AND !key(_space) AND !key(_alt) AND !Wiz_Botao_Select) AND is_playing_wav(music_channel_id))
       IF (exit_status == 1 OR Wiz_Botao_Menu OR key(_control))
       exit("", 0);
       END
   FRAME;
    END

        fli_end(flic_id);
        end_fli();
        stop_wav(all_sound);

IF (Mus_Intro != null)
    unload_wav(Mus_Intro); Mus_Intro = 0;
END

        Mus_Menu = load_wav("Snd/Menu/Menu.ogg");

IF (Music == 1)
        Mus_Menu_Channel_Id = play_wav(Mus_Menu, -1);
END

        set_mode(320, 240, 16);
FPG_Menu = load_fpg("Fpg/PPMenu.fpg");

IF (Music == 0)
    vol = vol_actual;
set_channel_volume(-1, vol);
END

        Menu();

END





SplinterGU

perdon, dejame volver a probar porque me olvide actualizar el runtime... :P
Download Lastest BennuGD Release: http://www.bennugd.org/node/2