Modifications suite au passage au tout HD

Contributions au logiciel proposées par certains utilisateurs, et qui peuvent éventuellement intéresser les autres utilisateurs.

Modifications suite au passage au tout HD

Messagepar mekp » 09 Avr 2016, 17:09

RESOLUTION du problème en utilisant PouchinTVMod 0.6.2.288 avec XP 32 bits et avec ffdshow

- j'utilise PouchinTVMod 0.6.2.288 avec XP 32 bits et avec ffdshow
- je reçois la TNT via la tour Eiffel Paris
- ma solution : modification du fichier channels.cpp
-> appel de PostMessage(hMainWnd, WM_COMMAND, IDM_APP_RESTART, NULL);
lors du changement de chaine s'il y a changement de format vidéo
ce qui est équivalent à <Ctrl>Q
CELA permet de résoudre le problème avec PouchinTVMod 0.6.2.288 et avec ffdshow
- INCONVENIENT de cette solution :
- le tableau des ixChaine correspondant à chaque format est en dur dans le code
- on pourrait envisager de lire ce tableau depuis un fichier externe qui serait
modifiable sans recompiler le code (par exemple si Arte passe en 1920x1080)
- l'idéal serait de trouver les formats dans le fichier chaines.xml
MAIS est-ce possible ?

DETAIL de la modification :

/+++++ : ajouté juste avant la declaration du module change_chaine(...)
#define NBFORMAT 5
char tb_format_ixChaine[NBFORMAT][99] = { // l'espace en fin de chaine est necessaire
"1920x1080 0 1 2 3 6 8 9 10 11 13 14 15 16 18 19 21 22 23 25 ",
"1440x1080 4 5 7 12 17 20 30 ",
"720x576 24 26 31 32 33 ",
"pour extension future",
"pour extension future"};
int ixChaine_prev = -1;
//+++++
HRESULT change_chaine(int ixChaine, bool bForceTune)
{
..... contenu inchangé .....
//+++++ : ajouté en fin du module change_chaine(...) juste avant return S_OK;
char chixChaine[5], chixChaine_prev[5];
int iformat, iformat_prev;
iformat_prev = -1;
iformat = -1;
sprintf(chixChaine_prev, " %d ", ixChaine_prev);
sprintf(chixChaine, " %d ", ixChaine);
if ( ixChaine_prev != -1 ) {
for (int ifor = 0; ifor<NBFORMAT; ifor++) {
if ( strstr(tb_format_ixChaine[ifor], chixChaine_prev) != NULL ) {
iformat_prev = ifor;
break;
}
}
}
for (int ifor = 0; ifor<NBFORMAT; ifor++) {
if ( strstr(tb_format_ixChaine[ifor], chixChaine) != NULL ) {
iformat = ifor;
break;
}
}
/*
wchar_t buf[200] = L"";
swprintf(buf, L"ixChaine_prev : %d , ixChaine : %d ; iformat_prev : %d , iformat : %d",
ixChaine_prev, ixChaine, iformat_prev, iformat);
MessageBox(NULL, buf, L"test", MB_OK);
*/
if ( iformat != iformat_prev ) {
PostMessage(hMainWnd, WM_COMMAND, IDM_APP_RESTART, NULL);
ixChaine_prev = ixChaine;
}
//+++++
return S_OK;
}
mekp
 
Messages: 14
Enregistré le: 20 Juin 2010, 15:06

Re: Bugs en pagaille suite au passage au tout HD

Messagepar mekp » 11 Avr 2016, 16:43

Pour ceux qui utilisent PouchinTVMod 0.6.2 avec XP 32 bits et avec ffdshow
et qui veulent un <Ctrl>Q automatique lors d'un changement de résolution

Je propose la modification suivante (moins de 100 lignes de code)
si on a pas peur de sa complexité ! (nota : PouchinTVMod contient plus de 94000 lignes de codes)

- ajout d'un fichier FormatsChaines.txt dans le même répertoire que PouchinTVMod.exe , il contient :
1920x1080 1 2 3 4 8 10 11 12 13 15 16 17 18 20 21 23 24 25 30
1440x1080 5 6 9 14 19 22 57
720x576 26 41 60 61 62
pour extension future
pour extension future
- seules les 5 premières lignes sont lues
- l'espace apres le dernier n° de chaine de chaque ligne est nécessaire
- les n° de chaines ci-dessus sont nNumeroChaine de PouchinTV (1 à 63) (établis pour Paris tour-eiffel)
qui apparaissent dans le menu de sélection de chaine
et dans l'onglet Options , Configuration , Chaines
il y a 35 chaines en tout
- si ce fichier est absent, PouchinTV fonctionne comme avant

- modification du fichier channels.cpp : ajout avant la déclaration du module change_chaine() :
//+++++ début0 : ajouté juste avant la déclaration du module change_chaine(...)
#define NBFORMAT 5
char tb_FormatsChaines[NBFORMAT][99] = {"", "", "", "", ""};
int nNumCh_prev = -1;
bool is_file_FormatsChaines = false;
bool test_file_FormatsChaines_done = false;
//+++++ fin0

- première modification du module change_chaine() du fichier channels.cpp
//+++++ début1 : ajouté au tout début du module change_chaine(...)
// lecture du fichier 'FormatsChaines.txt' si présent pour renseigner tb_FormatsChaines
if ( test_file_FormatsChaines_done == false ) {
FILE *fd;
wchar_t wcmdline[300];
char cmdline[300];
char lignelue[300];
char FileParam[300]; // nom du fichier FormatsChaines.txt
char *ptch;
int itmp, i_last_slash;
LPTSTR lpszCommandLine = ::GetCommandLine();
wcscpy(wcmdline, lpszCommandLine);
wcstombs(&cmdline[0], wcmdline, sizeof(wcmdline));
// élimine le premier '"' dans cmdline le cas echéant
if ( cmdline[0] == '"' ) {
memmove(&cmdline[0] , &cmdline[1], strlen(cmdline)); // élimine 1ere double quote
}
// recherche '.exe' pour éliminer ce qui est derrière '.exe' le cas echéant
ptch = strstr(cmdline, ".exe"); // forcément différent de NULL
if ( *(ptch+4) != 0 ) *(ptch+4) = 0;
// recherche le dernier anti-slash
i_last_slash = -1;
for (itmp = 0; itmp < (int)strlen(cmdline); itmp++) {
if ( cmdline[itmp] == 92 ) i_last_slash = itmp; // 92 : anti-slash
}
if ( i_last_slash == -1 ) {
// cas ou il n'y a pas de répertoire devant le nom de l'exécutable
strcpy(FileParam, "FormatsChaines.txt");
} else {
cmdline[i_last_slash+1] = 0; // élimine ce qui est après le dernier anti-slash
sprintf(FileParam, "%sFormatsChaines.txt", cmdline);
}
// lecture du fichier 'FormatsChaines.txt' si présent
fd = fopen(FileParam, "r");
if ( fd != NULL ) {
for (itmp = 0; itmp < NBFORMAT; itmp++) {
fgets(lignelue, sizeof(lignelue), fd);
if ( lignelue[strlen(lignelue)-1] == 10 ) lignelue[strlen(lignelue)-1] = 0;
strcpy(tb_FormatsChaines[itmp], lignelue);
}
fclose(fd);
is_file_FormatsChaines = true;
}
test_file_FormatsChaines_done = true;
}
//+++++ fin1

- deuxième modification du module change_chaine() du fichier channels.cpp
//+++++ début2 : ajouté en fin du module change_chaine(...) juste avant return S_OK;
if ( is_file_FormatsChaines == false ) return S_OK;
char chNumCh[5], chNumCh_prev[5];
int nNumCh;
int iformat, iformat_prev;
nNumCh = Canaux[ixChaine].nNumeroChaine;
iformat_prev = -1;
iformat = -1;
sprintf(chNumCh_prev, " %d ", nNumCh_prev);
sprintf(chNumCh, " %d ", nNumCh);
if ( nNumCh_prev != -1 ) {
for (int ifor = 0; ifor<NBFORMAT; ifor++) {
if ( strstr(tb_FormatsChaines[ifor], chNumCh_prev) != NULL ) {
iformat_prev = ifor;
break;
}
}
}
for (int ifor = 0; ifor<NBFORMAT; ifor++) {
if ( strstr(tb_FormatsChaines[ifor], chNumCh) != NULL ) {
iformat = ifor;
break;
}
}
if ( iformat != iformat_prev && nNumCh != nNumCh_prev ) {
PostMessage(hMainWnd, WM_COMMAND, IDM_APP_RESTART, NULL);
}
nNumCh_prev = nNumCh;
//+++++ fin2
mekp
 
Messages: 14
Enregistré le: 20 Juin 2010, 15:06

Re: Bugs en pagaille suite au passage au tout HD

Messagepar mekp » 13 Avr 2016, 16:36

Une modification simple pour connaitre la résolution des chaines lors de chaque changement de chaine
nota : j'ai mis les informations dans le titre de la fenêtre (par manque de place dans la barre d'état)

- ajout avant la déclaration du module change_chaine() dans le fichier channels.cpp (voir ma modification précédente)
int nNumCh_new = -1;

- complément de modification du module change_chaine() du fichier channels.cpp (voir ma modification précédente)
//+++++ début2 : ajouté en fin du module change_chaine(...) juste avant return S_OK;
nNumCh_new = Canaux[ixChaine].nNumeroChaine; // !!!!! le complément de modification
if ( is_file_FormatsChaines == false ) return S_OK;

- ajout avant la déclaration du module CVideoRenderer::GetVideoInfo(...) dans le fichier rendering.cpp
TCHAR WindowTextOrig[256] = L"";
extern int nNumCh_new;

- modification du module CVideoRenderer::GetVideoInfo(...) dans le fichier rendering.cpp
ajout juste après : sVInf.sNativeSize.cy = vih->rcSource.bottom;
//+++++ : ajouter la résolution et le n° et le nom de chaine dans le titre de la fenêtre
if ( wcscmp(L"", WindowTextOrig) == NULL ) {
GetWindowText(hMainWnd, WindowTextOrig, _countof(WindowTextOrig));
}
wchar_t WindowTextNew[200] = L"";
wchar_t str_ChanName[200];
SendMessage(hMainStatus, SB_GETTEXT, 0, (LPARAM)&str_ChanName[0]); // 0 pour sbf_ChanName
swprintf(WindowTextNew, L"%s -> %dx%d : %d %s",
WindowTextOrig, sVInf.sNativeSize.cx, sVInf.sNativeSize.cy,
nNumCh_new, str_ChanName);
SetWindowText(hMainWnd, WindowTextNew);
//+++++
mekp
 
Messages: 14
Enregistré le: 20 Juin 2010, 15:06

Re: Bugs en pagaille suite au passage au tout HD

Messagepar jeanaimarre » 13 Avr 2016, 19:05

Quels sont les outils de développement que vous utilisez pour modifier et recompiler ?
jeanaimarre
 
Messages: 6
Enregistré le: 07 Avr 2016, 00:47

Re: Bugs en pagaille suite au passage au tout HD

Messagepar mekp » 14 Avr 2016, 00:35

Une petite correction pour corriger un BUG potentiel dans la modification que j'ai proposé le 11 Avr 2016 à 15:43

remplacer :

// recherche '.exe' pour éliminer ce qui est derrière '.exe' le cas echéant
ptch = strstr(cmdline, ".exe"); // forcément différent de NULL

par :

// recherche '.exe' pour éliminer ce qui est derrière '.exe' le cas echéant
strlwr(cmdline); // CAR peut être en majuscule , par exemple : POUCHI~1.EXE
ptch = strstr(cmdline, ".exe"); // forcément différent de NULL

par ailleurs, pour compiler sous 'XP 32 bits' et 'W7 32 bits' j'utilise :
- VisualStudio 2005
- Microsoft SDK 6.1
- Microsoft DXSDK Feb2007
mekp
 
Messages: 14
Enregistré le: 20 Juin 2010, 15:06

Re: Modifications suite au passage au tout HD

Messagepar Gingko » 14 Avr 2016, 08:32

Bonjour.

Pour information, je vous informe que j'ai déplacé un certain nombre de messages dans la présente section des « Contributions » du forum.

Les messages ci-dessus se trouvaient précédemment dans la section Fonctionnement.

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54
Avatar de l’utilisateur
Gingko
Administrateur du site et développeur
 
Messages: 1957
Enregistré le: 05 Aoû 2007, 12:57
Localisation: Pantin (IDF, 93)

Re: Modifications suite au passage au tout HD

Messagepar mekp » 14 Avr 2016, 14:28

ZUT encore un BUG dans la modification que j'ai proposé le 11 Avr 2016 à 15:43

pour éviter le plantage lors de la recherche de chaines
remplacer :

//+++++ début2 : ajouté en fin du module change_chaine(...) juste avant return S_OK;
nNumCh_new = Canaux[ixChaine].nNumeroChaine;

par :

//+++++ début2 : ajouté en fin du module change_chaine(...) juste avant return S_OK;
if ( ixChaine == -1 ) return S_OK; // ajouté SINON plantage de la recherche de chaines
nNumCh_new = Canaux[ixChaine].nNumeroChaine;
mekp
 
Messages: 14
Enregistré le: 20 Juin 2010, 15:06


Retourner vers Contributions

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron