Modérateurs: Modération Forum Home-Cinéma, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Chapelou09 et 68 invités

Tout ce qui concerne les logiciels lié au HC sur ordinateur (PC, Mac, Linux...)
Règles du forum
Avant de poster, merci de prendre connaissance des règles du forum : à lire avant de poster

cache cinemascope dynamique sans madvr ?

Message » 07 Juil 2023 20:14

J'utilise depuis de nombreuses années maintenant un cache noir (écran noir motorisé) qui descend sur l’écran blanc en fonction des informations de ratio connues de madvr et transmis par des scripts à mes applications de commande moteur via les profiles madvr.
La bande noire du bas est "remontée" par madvr et le cache descend de 2 bandes pour les cacher toutes deux.

J'aimerai savoir s'il existe des outils (players/renderer,....) permettant de faire la même chose SANS madvr ?
(Avec ffmpeg on peut connaitre le ratio mais ce n'est pas temps réel)
michelB2
 
Messages: 1728
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • offline

Message » 10 Aoû 2023 9:55

J'ai réussi à écrire un script s'appuyant sur ffmpeg pour avoir en "quasi temps reel" la valeur du ratio du film qui passe et donc je peux commander mon cache.
Par contre, pour remonter la bande noire du bas, je dois encore utiliser madvr
J'ai bien trouvé un shader dx9 (bottomiser) qui fonctionne avec le renderer EVR mais je cherche la même chose pour MPCvideo renderer qui lui s'appuie sur les shaders dx11.
Quelqu'un sait-il convertir ce shader dx9 en dx11 ou connait-il une alternative ?
michelB2
 
Messages: 1728
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • offline

Message » 11 Aoû 2023 13:50

En général, la conv est assez simple. Il suffit de s'inspirer des mêmes exemples DX9 et DX11 qui sont présents dans MPC-HC (c'est comme ça que j'ai pu transcoder mes propres shaders de DX9 à DX11). Si tu ne t'en sors pas, commence par donner ici le code DX9 ...
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10416
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 11 Aoû 2023 14:08

Merci pour la proposition,
j'ai effectivement essayé en regardant les codes dx9 dx11 mais je ne m'en sors pas.
Pour info :
ce code fonctionne en EVR.
avec madvr + lavfilter :
Si Nvidia en copyback dans lavfilter, le zoomcontrol de madvr déplace les barres noirs correctement
Si Nvidia en native dans lavfilter, il faut activer le zoomcontrol + le shader pour que cela marche
(remarque : copyback met 15ms de plus par image d'où mon intérêt)

MpcVideoRenderer ne fonctionne pas avec les shaders dx9 d'où ma demande dx11

code du shader :
// $MinimumShaderProfile: ps_3_0
/*
_______ _____ __ __ ____ __
/ ____(_)___ ___ ____ ___ ____ _ / ___// /_ ____ _____/ /__ _____ / __ \____ ______/ /__
/ / / / __ \/ _ \/ __ `__ \/ __ `/ \__ \/ __ \/ __ `/ __ / _ \/ ___/ / /_/ / __ `/ ___/ //_/
/ /___/ / / / / __/ / / / / / /_/ / ___/ / / / / /_/ / /_/ / __/ / / ____/ /_/ / /__/ ,<
\____/_/_/ /_/\___/_/ /_/ /_/\__,_/ /____/_/ /_/\__,_/\__,_/\___/_/ /_/ \__,_/\___/_/|_|
http://en.sbence.hu/ Shader: Move wide content to the bottom of the frame
*/

// ******OK en EVR custom, NOK avec madvr ou bottomiser seul (mais OK madvr+bottomiser sinon descente partielle) **********
// Configuration ------5 original------3 modifie---------------------------------------------------
const static float v = 5 / 256.0; // Target darkness (peak noise level)
// -----------------------------------------------------------------------------

sampler s0;
float4 p0 : register(c0);

#define width (p0[0])
#define height (p0[1])

float cp(float w, float h) { // Check a point if it's below target darnkess
float3 p = tex2D(s0, float2(w, h)).rgb;
return p.r < v && p.g < v && p.b < v;
}

float checkLayer(float t) {
return cp(0, t) && cp(0.2, t) && cp(0.4, t) && cp(0.6, t) && cp(0.8, t) && cp(1, t);
//ajout mb 25/07/23
return cp(0, t) && cp(0.1, t) && cp(0.2, t) && cp(0.3, t) && cp(0.4, t) && cp(0.5, t) && cp(0.6, t) && cp(0.7, t) && cp(0.8, t) && cp(0.9, t) && cp(1, t);
}

float ratioTest(float container, float ratio) {
float h = 0.05 + container / ratio;
return ratio > container ? checkLayer((1 + h) * 0.5) && checkLayer((1 - h) * 0.5) : 0;
}

float2 ratioOffset(float container, float ratio) {
return float2(0, (container / ratio + 1) * 0.5 - 1);
}

//ajout mb 25/07/23 2.4, 1.78

float4 main(float2 tex : TEXCOORD0) : COLOR {
float container = width / height;
tex +=
ratioTest(container, 2.4) ? ratioOffset(container, 2.4) :
ratioTest(container, 2.34) ? ratioOffset(container, 2.34) :
ratioTest(container, 2.2) ? ratioOffset(container, 2.2) :
ratioTest(container, 2) ? ratioOffset(container, 2) :
ratioTest(container, 1.78) ? ratioOffset(container, 1.78) :
float2(0, 0);
return tex2D(s0, tex).rgbb ;
}
michelB2
 
Messages: 1728
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • offline

Message » 11 Aoû 2023 19:19

Ok, ça reste du code basique. je regarderai ça ds les jours qui viennent ...
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10416
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 11 Aoû 2023 20:04

Merci d'avance
michelB2
 
Messages: 1728
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • offline

Message » 14 Aoû 2023 8:21

bonjour,
je pense que j'ai réussi la conversion
par contre que ce soit en dx9 ou dx11 , ce shader ne fonctionne pas bien (v=1 l'améliore ). l'image saute (décalage intempestif )
Une idée pour l'améliorer ?
// $MinimumShaderProfile: ps_4_0
/*
_______ _____ __ __ ____ __
/ ____(_)___ ___ ____ ___ ____ _ / ___// /_ ____ _____/ /__ _____ / __ \____ ______/ /__
/ / / / __ \/ _ \/ __ `__ \/ __ `/ \__ \/ __ \/ __ `/ __ / _ \/ ___/ / /_/ / __ `/ ___/ //_/
/ /___/ / / / / __/ / / / / / /_/ / ___/ / / / / /_/ / /_/ / __/ / / ____/ /_/ / /__/ ,<
\____/_/_/ /_/\___/_/ /_/ /_/\__,_/ /____/_/ /_/\__,_/\__,_/\___/_/ /_/ \__,_/\___/_/|_|
http://en.sbence.hu/ Shader: Move wide content to the bottom of the frame
*/

// ******OK en EVR custom, NOK avec madvr**********
// Configuration ------5 original------3 modifié---------------------------------------------------
const static float v = 1 / 256.0; // Target darkness (peak noise level)
// -----------------------------------------------------------------------------

Texture2D tex : register(t0);
SamplerState samp : register(s0);

cbuffer PS_CONSTANTS : register(b0)
{
float2 pxy;
float width;
float height;
uint counter;
float clock;
};

float cp(float w, float h) { // Check a point if it's below target darnkess
float3 p = tex.Sample(samp, float2(w, h)).rgb;
return p.r < v && p.g < v && p.b < v;
}

float checkLayer(float t) {
// return cp(0, t) && cp(0.2, t) && cp(0.4, t) && cp(0.6, t) && cp(0.8, t) && cp(1, t);
//ajout mb 25/07/23
return cp(0, t) && cp(0.1, t) && cp(0.2, t) && cp(0.3, t) && cp(0.4, t) && cp(0.5, t) && cp(0.6, t) && cp(0.7, t) && cp(0.8, t) && cp(0.9, t) && cp(1, t);
}

float ratioTest(float container, float ratio) {
float h = 0.05 + container / ratio;
return ratio > container ? checkLayer((1 + h) * 0.5) && checkLayer((1 - h) * 0.5) : 0;
}

float2 ratioOffset(float container, float ratio) {
return float2(0, (container / ratio + 1) * 0.5 - 1);
}

float4 main(float4 pos : SV_POSITION, float2 coord : TEXCOORD) : SV_Target {
float container = width / height;
coord +=
ratioTest(container, 2.4) ? ratioOffset(container, 2.4) :
ratioTest(container, 2.34) ? ratioOffset(container, 2.34) :
ratioTest(container, 2.2) ? ratioOffset(container, 2.2) :
ratioTest(container, 2) ? ratioOffset(container, 2) :
ratioTest(container, 1.85) ? ratioOffset(container, 1.85) :
ratioTest(container, 1.78) ? ratioOffset(container, 1.78) :
float2(0, 0);
return tex.Sample(samp, coord).rgbb;
}
michelB2
 
Messages: 1728
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • offline


Retourner vers Logiciel PC Home-cinéma

 
  • Articles en relation
    Dernier message