From pouchintv-svn at baysse.fr Mon Oct 20 22:04:22 2008 From: pouchintv-svn at baysse.fr (pouchintv-svn at baysse.fr) Date: Mon, 20 Oct 2008 22:04:22 +0200 (CEST) Subject: [Pouchintv-dev] [PouchinTVMod] lolo_32 | r130 - trunk Message-ID: <20081020200422.34A795F330@mail.baysse.fr> Author: lolo_32 Date: 2008-10-20 22:04:21 +0200 (lun, 20 oct 2008) New Revision: 130 Modified: trunk/LCD.cpp trunk/LCD.h trunk/Pouchin TV.vcproj trunk/main.cpp Log: * LCD.cpp, LCD.h, main.cpp: correction d'un boggue empêchant de compiler si on active la gestion du LCD logitech * Pouchin TV.vcproj: reclassement des icônes dans le projet Modifié: trunk/LCD.cpp =================================================================== --- trunk/LCD.cpp 2008-06-01 10:07:19 UTC (rev 129) +++ trunk/LCD.cpp 2008-10-20 20:04:21 UTC (rev 130) @@ -256,13 +256,13 @@ strcpy_s(this->m_chaine, 256, nomChaine); } -void CLcd::SetProgrammeActuel(const char *heure, const char *programme){ - strcpy_s(this->m_heure_actuel, 32, heure); +void CLcd::SetProgrammeActuel(const SYSTEMTIME &heure, const char *programme){ + sprintf_s(this->m_heure_actuel, 32, "%d:%d:%d", heure.wHour, heure.wMinute, heure.wSecond); strcpy_s(this->m_prog_actuel, 256, programme); } -void CLcd::SetProgrammeSuivant(const char *heure, const char *programme){ - strcpy_s(this->m_heure_suivant, 32, heure); +void CLcd::SetProgrammeSuivant(const SYSTEMTIME &heure, const char *programme){ + sprintf_s(this->m_heure_suivant, 32, "%d:%d:%d", heure.wHour, heure.wMinute, heure.wSecond); strcpy_s(this->m_prog_suivant, 256, programme); } Modifié: trunk/LCD.h =================================================================== --- trunk/LCD.h 2008-06-01 10:07:19 UTC (rev 129) +++ trunk/LCD.h 2008-10-20 20:04:21 UTC (rev 130) @@ -82,9 +82,9 @@ void SetChaine(const char *nomChaine); // Définit le programme actuel - void SetProgrammeActuel(const char *heure, const char *programme); + void SetProgrammeActuel(const SYSTEMTIME &heure, const char *programme); // Définit le programme suivant - void SetProgrammeSuivant(const char *heure, const char *programme); + void SetProgrammeSuivant(const SYSTEMTIME &heure, const char *programme); // Fait passer le programme suivant en programme actuel void SetSuivant(); Modifié: trunk/Pouchin TV.vcproj =================================================================== --- trunk/Pouchin TV.vcproj 2008-06-01 10:07:19 UTC (rev 129) +++ trunk/Pouchin TV.vcproj 2008-10-20 20:04:21 UTC (rev 130) @@ -1090,74 +1090,81 @@ + + Author: lolo_32 Date: 2008-10-26 12:19:26 +0100 (dim, 26 oct 2008) New Revision: 131 Modified: trunk/LCD.cpp trunk/LCD.h trunk/Programme_Install.nsi trunk/main.cpp Log: LCD.* * affichage des heures sur 2 chiffres en permanence. Programme_Install.nsi * ajout des fichiers manquants à l'installation 64 bits. main.cpp * correction d'un boggue empêchant la mise à jour de la liste des chaînes dans le menu; * rectification d'un retours de valeur oublié dans le traitement de la fenêtre principale. Modifié: trunk/LCD.cpp =================================================================== --- trunk/LCD.cpp 2008-10-20 20:04:21 UTC (rev 130) +++ trunk/LCD.cpp 2008-10-26 11:19:26 UTC (rev 131) @@ -257,12 +257,12 @@ } void CLcd::SetProgrammeActuel(const SYSTEMTIME &heure, const char *programme){ - sprintf_s(this->m_heure_actuel, 32, "%d:%d:%d", heure.wHour, heure.wMinute, heure.wSecond); + sprintf_s(this->m_heure_actuel, 32, "%02d:%02d:%02d", heure.wHour, heure.wMinute, heure.wSecond); strcpy_s(this->m_prog_actuel, 256, programme); } void CLcd::SetProgrammeSuivant(const SYSTEMTIME &heure, const char *programme){ - sprintf_s(this->m_heure_suivant, 32, "%d:%d:%d", heure.wHour, heure.wMinute, heure.wSecond); + sprintf_s(this->m_heure_suivant, 32, "%02d:%02d:%02d", heure.wHour, heure.wMinute, heure.wSecond); strcpy_s(this->m_prog_suivant, 256, programme); } Modifié: trunk/LCD.h =================================================================== --- trunk/LCD.h 2008-10-20 20:04:21 UTC (rev 130) +++ trunk/LCD.h 2008-10-26 11:19:26 UTC (rev 131) @@ -95,4 +95,4 @@ // Indique si le LCD est initialisé bool IsInitialise() { return this->m_initialise; } -}; \ Pas de fin de ligne à la fin du fichier +}; Modifié: trunk/Programme_Install.nsi =================================================================== --- trunk/Programme_Install.nsi 2008-10-20 20:04:21 UTC (rev 130) +++ trunk/Programme_Install.nsi 2008-10-26 11:19:26 UTC (rev 131) @@ -169,6 +169,10 @@ SetShellVarContext all File "x64\Release\PouchinTVMod_x64.exe" + File "AUTHORS" + File "gpl.txt" + File "canaux.ini" + File "REFERENCES" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application @@ -236,11 +240,17 @@ SectionEnd Section "Françaises locales" IconesFRLocales - SetOutPath "$INSTDIR\Icones" + SetOutPath "$INSTDIR\Icones\Locales" ;Ajout des icones des chaines locales File "Icones\Locales\*.bmp" SectionEnd + Section "Allemandes" IconesAllemendes + SetOutPath "$INSTDIR\Icones\Allemandes" + ;Ajout des icones des chaines locales + File "Icones\Allemandes\*.bmp" + SectionEnd + SectionGroupEnd Function .onInit Modifié: trunk/main.cpp =================================================================== --- trunk/main.cpp 2008-10-20 20:04:21 UTC (rev 130) +++ trunk/main.cpp 2008-10-26 11:19:26 UTC (rev 131) @@ -131,7 +131,7 @@ wchar_t pouchindir_conf[MAX_PATH]; #ifdef USE_LOGITECH_LCD -// LCD pour ceux quie en possède un +// LCD pour ceux qui en possède un CLcd lcd; #endif // #ifdef USE_LOGITECH_LCD @@ -1409,6 +1409,10 @@ rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, wPosFlags); } + // Met à jour le menu, car "Chaînes" et "Pistes" ne sont pas mis à jours sans les bordures + if (nouvel_etat == etf_normal || nouvel_etat == etf_maximized) + update_all_menus(hMainWnd); + change_etat_curseur(nouveau_curseur); } @@ -2489,7 +2493,7 @@ break; } - return lRet; + return lRet; } static void verifie_repertoire_captures(LPWSTR dir, size_t dir_size, int csidl_default, LPCSTR dirUsage) From pouchintv-svn at baysse.fr Sun Oct 26 14:36:37 2008 From: pouchintv-svn at baysse.fr (pouchintv-svn at baysse.fr) Date: Sun, 26 Oct 2008 14:36:37 +0100 (CET) Subject: [Pouchintv-dev] [PouchinTVMod] gingko | r132 - trunk/Icones/Locales Message-ID: <20081026133637.4BC545F32F@mail.baysse.fr> Author: gingko Date: 2008-10-26 14:36:37 +0100 (dim, 26 oct 2008) New Revision: 132 Added: trunk/Icones/Locales/TV RENNES 35.bmp Log: Ajout d'une icône TV Rennes 35 (chaîne locale). Ajouté: trunk/Icones/Locales/TV RENNES 35.bmp =================================================================== (les fichiers binaires diffèrent) Property changes on: trunk/Icones/Locales/TV RENNES 35.bmp ___________________________________________________________________ Nom : svn:mime-type + application/octet-stream From pouchintv-dev at baysse.fr Sun Oct 26 20:43:31 2008 From: pouchintv-dev at baysse.fr (=?iso-8859-1?q?Liste_utilis=E9e_par_les_d=E9veloppeurs?=) Date: Sun, 26 Oct 2008 20:43:31 +0100 (CET) Subject: [Pouchintv-dev] [PouchinTVMod] lolo_32 | r133 - in trunk: . docs Message-ID: <20081026194331.82B3D5F376@mail.baysse.fr> Author: lolo_32 Date: 2008-10-26 20:43:31 +0100 (dim, 26 oct 2008) New Revision: 133 Added: trunk/docs/Error and Success Codes.odt Modified: trunk/LCD.cpp trunk/base.h trunk/channels.cpp trunk/graph.cpp trunk/ini.cpp trunk/internet.cpp trunk/main.cpp trunk/main.h trunk/network.cpp trunk/recprog.cpp trunk/recprog.h trunk/res.rc trunk/resource.h trunk/search.cpp trunk/settings.cpp trunk/xml.cpp Log: channels.cpp, main.cpp, search.cpp, settings.cpp * Ajout de commentaires en sortie dans la fenêtre de la console pour le debogguage : liste les codecs, cartes tuners, paramètres passés, etc. ini.cpp, search.cpp * Changement des types des variables pour refléter leur véritables valeurs. LCD.cpp * Suppression des tailles en dur, elles sont maintenant calculées à l'aide de "sizeof" ou de "_countof". main.cpp * Refonte de la gestion des paramètres en ligne de commande, et ajout de nouvelles fonctions (qui ont priorité sur les valeurs enregistrées) : * "-fs" pour démarrer en plein écran, * "-maxi" pour démarrer en mode maximisé, * "-noborders" affiche une fenêtre sans menus ni barres d'état, * "-normal" démarre en mode fenêtré normal, * "-recps" lance l'enregistrement de la chaîne de démarrage en mode PS, * "-rects" identique ci dessus, mais en mode TS, * "-chXX" change de chaîne au démarrage (attention, on passe le numéro de la chaîne, tel que 10 pour TMC par défaut pour la France). res.rc, main.cpp * ajout des raccourcis pour le support des télécommandes Pinnacle. settings.cpp * la fonction extrait_combo() posait des problèmes dans certains cas, quand elle utilisait une liste déroulante vide; * ajout d'une fonction permettant de sélectionner l'élément dans une liste déroulante ne contenant qu'un choix. xml.cpp * Efface le buffer spécifié avant usage. Divers fichiers * Ajout de commentaires, reformatage. Ajout de la liste des codes d'erreurs DirectMedia Modifié: trunk/LCD.cpp =================================================================== --- trunk/LCD.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/LCD.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -51,18 +51,18 @@ return; } - ZeroMemory(m_chaine, 256); - ZeroMemory(m_heure_actuel, 32); - ZeroMemory(m_prog_actuel, 256); - ZeroMemory(m_heure_suivant, 32); - ZeroMemory(m_prog_suivant, 256); + ZeroMemory(this->m_chaine, sizeof(this->m_chaine)); + ZeroMemory(this->m_heure_actuel, sizeof(this->m_heure_actuel)); + ZeroMemory(this->m_prog_actuel, sizeof(this->m_prog_actuel)); + ZeroMemory(this->m_heure_suivant, sizeof(this->m_heure_suivant)); + ZeroMemory(this->m_prog_suivant, sizeof(this->m_prog_suivant)); // Définit la police par défaut à utiliser ainsi que ses attributs // Taille de la police LOGFONT lf; ZeroMemory(&lf, sizeof(lf)); GetObject(m_police, sizeof(lf), &lf); - lf.lfHeight = 12;//-MulDiv(DEFAULT_POINTSIZE, DEFAULT_DPI, 72); + lf.lfHeight = 12; wcscpy(lf.lfFaceName, L"Arial"); this->m_police = CreateFontIndirect(&lf); lf.lfHeight = 11; @@ -153,7 +153,7 @@ // Associe l'ouverture à la connexion this->m_openContext.connection = this->m_connectContext.connection; // Choisie le LCD à utiliser - this->m_openContext.index = 0; // permier LCD + this->m_openContext.index = 0; // premier LCD // Handle de l'ouverture this->m_openContext.device = LGLCD_INVALID_DEVICE; // Pas de configuration à l'aide des boutons @@ -209,7 +209,7 @@ // actualise l'affichage ret = lgLcdUpdateBitmap(this->m_openContext.device, &(bitmap.hdr), LGLCD_ASYNC_UPDATE(LGLCD_PRIORITY_NORMAL)); - ZeroMemory(&winbitmap, 860); + ZeroMemory(&winbitmap, sizeof(winbitmap)); SetBitmapBits(this->m_bitmap, 860, &winbitmap); return ERROR_SUCCESS; @@ -253,23 +253,23 @@ } void CLcd::SetChaine(const char *nomChaine){ - strcpy_s(this->m_chaine, 256, nomChaine); + strncpy_s(this->m_chaine, _countof(this->m_chaine), nomChaine, _countof(this->m_chaine)-1); } void CLcd::SetProgrammeActuel(const SYSTEMTIME &heure, const char *programme){ - sprintf_s(this->m_heure_actuel, 32, "%02d:%02d:%02d", heure.wHour, heure.wMinute, heure.wSecond); - strcpy_s(this->m_prog_actuel, 256, programme); + TimeToStr(heure, this->m_heure_actuel, _countof(this->m_heure_actuel)); + strncpy_s(this->m_prog_actuel, _countof(this->m_prog_actuel), programme, _countof(this->m_prog_actuel)); } void CLcd::SetProgrammeSuivant(const SYSTEMTIME &heure, const char *programme){ - sprintf_s(this->m_heure_suivant, 32, "%02d:%02d:%02d", heure.wHour, heure.wMinute, heure.wSecond); - strcpy_s(this->m_prog_suivant, 256, programme); + TimeToStr(heure, this->m_heure_suivant, _countof(this->m_heure_suivant)); + strncpy_s(this->m_prog_suivant, _countof(this->m_prog_suivant), programme, _countof(this->m_prog_suivant)-1); } void CLcd::SetSuivant(){ - strcpy_s(this->m_heure_actuel, 32, this->m_heure_suivant); - ZeroMemory(this->m_heure_suivant, 32); + strcpy_s(this->m_heure_actuel, _countof(this->m_heure_actuel), this->m_heure_suivant); + ZeroMemory(this->m_heure_suivant, sizeof(this->m_heure_suivant)); - strcpy_s(this->m_prog_actuel, 256, this->m_prog_suivant); - ZeroMemory(this->m_prog_suivant,256); + strcpy_s(this->m_prog_actuel, _countof(this->m_prog_actuel), this->m_prog_suivant); + ZeroMemory(this->m_prog_suivant, sizeof(this->m_prog_suivant)); } Modifié: trunk/base.h =================================================================== --- trunk/base.h 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/base.h 2008-10-26 19:43:31 UTC (rev 133) @@ -79,21 +79,21 @@ #include "console.h" #ifdef _DEBUG -# define EXPORT_GRAPH 1 -# define LOG_DSHOW 1 // Enregistrer DShow +# define EXPORT_GRAPH 1 +# define LOG_DSHOW 1 // Enregistrer DShow #else -# define EXPORT_GRAPH 0 -# define LOG_DSHOW 0 +# define EXPORT_GRAPH 0 +# define LOG_DSHOW 0 #endif // Activer le LCD Logitech //#define USE_LOGITECH_LCD // Nombre max de chaînes -#define NB_MAX_CHAINES 500 +#define NB_MAX_CHAINES 500 // Nombre max d'enregistrements simultanés sur un même multiplex -#define NB_MAX_ENREG 3 +#define NB_MAX_ENREG 3 /////////////////////////////////////////////////////////////////// // Modifié: trunk/channels.cpp =================================================================== --- trunk/channels.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/channels.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -235,20 +235,19 @@ void change_frequence(ULONG freq) { HRESULT hr = pBDAControl->StartChanges(); + myprintf(L"%?change_frequence pBDAControl->StartChanges(), hr=0x%08x\n", FAILED(hr), hr); - myprintf(L"%?1, hr=0x%08x\n", FAILED(hr), hr); - hr = pBDAFreq->put_Bandwidth(8); - myprintf(L"%?2, hr=0x%08x\n", FAILED(hr), hr); + myprintf(L"%?change_frequence pBDAFreq->put_Bandwidth(8), hr=0x%08x\n", FAILED(hr), hr); hr = pBDAFreq->put_Frequency(freq); - myprintf(L"%?3, hr=0x%08x\n", FAILED(hr), hr); + myprintf(L"%?change_frequence pBDAFreq->put_Frequency(%ul), hr=0x%08x\n", FAILED(hr), freq, hr); hr = pBDAControl->CheckChanges(); - myprintf(L"%?4, hr=0x%08xn", FAILED(hr), hr); + myprintf(L"%?change_frequence pBDAControl->CheckChanges(), hr=0x%08xn", FAILED(hr), hr); hr = pBDAControl->CommitChanges(); - myprintf(L"%?5, hr=0x%08x\n", FAILED(hr), hr); + myprintf(L"%?change_frequence pBDAControl->CommitChanges(), hr=0x%08x\n", FAILED(hr), hr); } // S'assurer que le VMR a été initialisé : Ajouté: trunk/docs/Error and Success Codes.odt =================================================================== (les fichiers binaires diffèrent) Property changes on: trunk/docs/Error and Success Codes.odt ___________________________________________________________________ Nom : svn:mime-type + application/vnd.oasis.opendocument.text Modifié: trunk/graph.cpp =================================================================== --- trunk/graph.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/graph.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -25,25 +25,18 @@ * See http://pouchintv.baysse.fr/ for updates. */ #include "network.h" - #include "epgfilter.h" - #include "pmtfilter.h" - #include "base.h" - #include "graph.h" - #include "main.h" - #include "search.h" - #include "ini.h" - #include "record.h" - #include "mpeg2defs.h" +#include + IFilterGraph2 * pGraph = NULL; IMediaControl * pControl = NULL; @@ -82,13 +75,15 @@ static HRESULT AddToRot() { - IMoniker * pMoniker; - IRunningObjectTable *pROT; + IMoniker * pMoniker = NULL; + IRunningObjectTable *pROT = NULL; + if (FAILED(GetRunningObjectTable(0, &pROT))) { return E_FAIL; } WCHAR wsz[256]; - wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pGraph, GetCurrentProcessId()); + StringCchPrintfW(wsz, _countof(wsz), L"FilterGraph %08x pid %08x", (DWORD_PTR)pGraph, GetCurrentProcessId()); + HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker); if (SUCCEEDED(hr)) { hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pGraph, @@ -1059,7 +1054,6 @@ } // connect Tuner - hr = connect_filters(pNetworkProvider, pNetworkTuner); if (FAILED(hr)) { erreur(L"Tuner TNT non compatible, veuillez effacer config.ini et redémarrer", hr); @@ -1067,7 +1061,6 @@ } // connect Receiver - hr = connect_filters(pNetworkTuner, pReceiverComponent); if (FAILED(hr)) { erreur(L"Récepteur TNT non compatible, veuillez effacer config.ini et redémarrer", hr); @@ -1082,7 +1075,6 @@ // USB // connect USB - hr = pGraph->AddFilter(pNetworkTuner, L"Tuner USB"); if (FAILED(hr)) { erreur(L"Tuner USB pas inséré", hr); @@ -1103,7 +1095,6 @@ return E_FAIL; } - hr = getFrequencyFilter(pNetworkTuner); if (FAILED(hr) || pBDAFreq == NULL) { erreur(L"Pas trouvé l'interface pour changer de fréquence", hr); @@ -1116,8 +1107,7 @@ return hr; } - - // ajoute pGrabber filter + // ajoute pGrabber filter { // connect 3 @@ -1171,7 +1161,6 @@ // fin des recherches, ajoute tout dans le graph - // connections hr = cree_and_render_pins(); Modifié: trunk/ini.cpp =================================================================== --- trunk/ini.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/ini.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -52,35 +52,36 @@ #define freq_canal(x) (x * 8000 + freq_offset) -static wchar_t config_file[] = L"\\config.ini"; -static wchar_t ini_config[] = L"Config"; +static wchar_t config_file[] = L"config.ini"; +static wchar_t ini_config[] = L"Config"; #if _DEBUG -static wchar_t ini_filtre_MPEG2[] = L"Filtre MPEG2 (debug)"; -static wchar_t ini_filtre_audio[] = L"Filtre audio (debug)"; -static wchar_t ini_filtre_ac3[] = L"Filtre AC3 (debug)"; +static wchar_t ini_filtre_MPEG2[] = L"Filtre MPEG2 (debug)"; +static wchar_t ini_filtre_audio[] = L"Filtre audio (debug)"; +static wchar_t ini_filtre_ac3[] = L"Filtre AC3 (debug)"; #else // #if _DEBUG -static wchar_t ini_filtre_MPEG2[] = L"Filtre MPEG2"; -static wchar_t ini_filtre_audio[] = L"Filtre audio"; -static wchar_t ini_filtre_ac3[] = L"Filtre AC3"; +static wchar_t ini_filtre_MPEG2[] = L"Filtre MPEG2"; +static wchar_t ini_filtre_audio[] = L"Filtre audio"; +static wchar_t ini_filtre_ac3[] = L"Filtre AC3"; #endif // #if _DEBUG -static wchar_t ini_nom_ville[] = L"Ville"; -static wchar_t ini_strict[] = L"Recherche stricte"; -static wchar_t ini_chaine_courante[] = L"Identifiant chaîne courante"; -static wchar_t ini_rep_video[] = L"Répertoire vidéo"; -static wchar_t ini_rep_screen[] = L"Répertoire screenshots"; -static wchar_t ini_priorite[] = L"Priorité"; -static wchar_t ini_tuner[] = L"Tuner TNT"; -static wchar_t ini_receiver[] = L"Récepteur TNT"; -static wchar_t ini_offset_tuner[] = L"Offset tuner"; -static wchar_t ini_msn[] = L"Envoie programme regardé à MSN"; -static wchar_t ini_always_on_top[] = L"Fenêtre toujours devant"; -static wchar_t ini_ac3_defaut[] = L"Utilise AC3 quand dispo"; +static wchar_t ini_nom_ville[] = L"Ville"; +static wchar_t ini_strict[] = L"Recherche stricte"; +static wchar_t ini_chaine_courante[]= L"Identifiant chaîne courante"; +static wchar_t ini_rep_video[] = L"Répertoire vidéo"; +static wchar_t ini_rep_screen[] = L"Répertoire screenshots"; +static wchar_t ini_priorite[] = L"Priorité"; +static wchar_t ini_tuner[] = L"Tuner TNT"; +static wchar_t ini_receiver[] = L"Récepteur TNT"; +static wchar_t ini_offset_tuner[] = L"Offset tuner"; +static wchar_t ini_msn[] = L"Envoie programme regardé à MSN"; +static wchar_t ini_always_on_top[] = L"Fenêtre toujours devant"; +static wchar_t ini_ac3_defaut[] = L"Utilise AC3 quand dispo"; static wchar_t ini_suspend_minimized[] = L"Suspendre si minimisé"; static wchar_t ini_minimize_system_tray[] = L"Minimiser dans le system tray"; static wchar_t ini_allow_stream_record[] = L"Enregistrement multiplex autorisé"; -static wchar_t ini_use_all_width[] = L"Utilise toute la largeur"; -static wchar_t ini_etirer_video[] = L"Étirer la vidéo"; -static wchar_t ini_zoom_ratio[] = L"Facteur de zoom"; +static wchar_t ini_use_all_width[] = L"Utilise toute la largeur"; +static wchar_t ini_etirer_video[] = L"Étirer la vidéo"; +static wchar_t ini_zoom_ratio[] = L"Facteur de zoom"; +static wchar_t ini_volume[] = L"Volume"; static wchar_t ini_position_fenetre[]=L"Position fenêtre"; @@ -88,10 +89,8 @@ static wchar_t ini_position_console[]=L"Position console"; #endif // #if USE_CONSOLE==1 -static wchar_t ini_volume[] = L"Volume"; - static wchar_t ini_use_vmr_deinterlace[]=L"Utilise le désentrelacement du VMR"; -static wchar_t ini_etat_fenetre[]=L"État fenêtre"; +static wchar_t ini_etat_fenetre[] =L"État fenêtre"; NomProtege::NomProtege(LPCSTR src, char remplacement) { @@ -473,7 +472,7 @@ CXMLNode * pNode = children[i]; Chaine canal; - memset(&canal, 0, sizeof(Chaine)); + ZeroMemory(&canal, sizeof(Chaine)); pNode->getStr(L"Nom", canal.nom, _countof(canal.nom)); canal.canal_no = (WORD)pNode->getInt(L"Canal"); @@ -527,7 +526,6 @@ delete pNode; } - return 0; } @@ -695,7 +693,7 @@ save_config_int(ini_volume, (volumeCourant + 10000) / 100); } -DWORD load_config_str(LPCWSTR lpKeyName, LPWSTR lpValue, size_t bufSize, LPCWSTR lpDefault=L"") +DWORD load_config_str(LPCWSTR lpKeyName, LPWSTR lpValue, DWORD bufSize, LPCWSTR lpDefault=L"") { return GetPrivateProfileString(ini_config, lpKeyName, lpDefault, lpValue, bufSize, confPathName); } @@ -733,7 +731,7 @@ } } -DWORD load_config_path(LPCWSTR lpKeyName, LPWSTR lpValue, size_t bufSize, int nDefaultFolder) +DWORD load_config_path(LPCWSTR lpKeyName, LPWSTR lpValue, DWORD bufSize, int nDefaultFolder) { wchar_t default_dir[MAX_PATH]; @@ -764,7 +762,7 @@ load_config_str(ini_tuner, nom_tuner, _countof(nom_tuner)); // Vérifie si on a une réponse if(wcscmp(nom_tuner, L"") == 0) - // Comme fichier config.ini n'existe pas non plus, restauration du chemin vers config.ini + // Comme fichier config.ini n'existe pas non plus, restauration du chemin vers %AppData% wcscpy_s(confPathName, _countof(confPathName), chemin_config); else // la config du tuner a été trouvée dans le répertoire de PTVM Modifié: trunk/internet.cpp =================================================================== --- trunk/internet.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/internet.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -206,4 +206,4 @@ free(_contenu); return lu; -} \ Pas de fin de ligne à la fin du fichier +} Modifié: trunk/main.cpp =================================================================== --- trunk/main.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/main.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -43,6 +43,7 @@ #include "xml.h" #include "internet.h" + #ifdef USE_LOGITECH_LCD #include "LCD.h" #endif // #ifdef USE_LOGITECH_LCD @@ -111,7 +112,6 @@ bool use_msn = false; bool on_top = false; bool use_ac3 = false; -bool cmd_minimize = false; // TRUE si "-minimize" en option ligne de commande bool suspend_minimized = false; bool minimize_system_tray = false; bool allow_stream_record = false; @@ -131,8 +131,8 @@ wchar_t pouchindir_conf[MAX_PATH]; #ifdef USE_LOGITECH_LCD -// LCD pour ceux qui en possède un -CLcd lcd; + // LCD pour ceux qui en possède un + CLcd lcd; #endif // #ifdef USE_LOGITECH_LCD // Flag mis à TRUE si on est en mode plein écran, @@ -510,9 +510,9 @@ static const Langue Tab_Lang[] = { {"fra", "Français"}, - {"fre", "Français"}, + {"fre", "Français"}, {"eng", "Anglais"}, - {"ang", "Anglais"}, + {"ang", "Anglais"}, {"deu", "Allemand"}, {"spa", "Espagnol"}, {"ita", "Italien"}, @@ -820,10 +820,8 @@ ex_style |= WS_EX_APPWINDOW; if (ex_style != ex_style_save) { - //ShowWindow(hMainWnd, SW_HIDE); // sert plus a rien ? SetWindowLongPtr(hMainWnd, GWL_EXSTYLE, ex_style); niData.update_state(); - //ShowWindow(hMainWnd, SW_SHOW); } } @@ -2310,10 +2308,12 @@ switch (wParam) { case VK_UP: + case VK_NEXT: chaine_avance(-1); break; case VK_DOWN: + case VK_PRIOR: chaine_avance(1); break; @@ -2493,7 +2493,7 @@ break; } - return lRet; + return lRet; } static void verifie_repertoire_captures(LPWSTR dir, size_t dir_size, int csidl_default, LPCSTR dirUsage) @@ -2583,11 +2583,91 @@ WNDCLASS wndclass; HWND hWnd; - cmd_minimize = strcmp(lpCmdLine, "-minimize")==0; + struct sCmdOption { + char * nom; + bool actif; + int longueur; + sCmdOption(void) : nom(0), actif(false), longueur(0) {} + sCmdOption(char * a) : nom(a), actif(false), longueur(strlen(a)) {} + }; + + enum eCmdOptionNombre { + cmd_minimize = 0, + cmd_fs, + cmd_max, + cmd_noborder, + cmd_normal, + cmd_recps, + cmd_rects + }; + + sCmdOption cmdOptions[7]; + cmdOptions[cmd_minimize] = sCmdOption("-minimize"); + cmdOptions[cmd_fs] = sCmdOption("-fs"); + cmdOptions[cmd_max] = sCmdOption("-maxi"); + cmdOptions[cmd_noborder] = sCmdOption("-noborders"); + cmdOptions[cmd_normal] = sCmdOption("-normal"); + cmdOptions[cmd_recps] = sCmdOption("-recps"); + cmdOptions[cmd_rects] = sCmdOption("-rects"); + + // N° de la chaine à regarder en option ligne de commande "-chXX" + int cmd_channel = -1; + + //Lecture de la ligne de commandes + { + int nLongCmd = strlen(lpCmdLine); + for(int iCmd=0;iCmd Création - - RcdataResource canaux; - if (ExtraitRcdataResource(MAKEINTRESOURCE(IDR_CANAUX), &canaux)) { - // Tout s'est bien passé: on peut utiliser les canaux.ini - if (_wfopen_s(&fop, fileName, L"w")) { - myprintf(L"Erreur écriture\n"); - } else { - fprintf_s(fop, (LPCSTR)canaux.contenu); - fclose(fop); - } - delete [] canaux.contenu; - } - } else - fclose(fop); - } - // on lit la config maintenant, besoin des coords de la fenetre load_config(); @@ -2654,13 +2709,82 @@ startConsoleWin(true); #endif // #if USE_CONSOLE==1 #if USE_CONSOLE + // Affiche divers renseignements pour le debogguage myprintf(L"Compile le : %S %S\n", __DATE__, __TIME__); myprintf(L"\tVista build: %d\n", VISTA + 0); + + myprintf(L"Tuner : %s\nRécepteur : %s\nMPEG2 : %s\nAudio : %s\nAC3 : %s\nVille : %s\n", + nom_tuner, + nom_receiver, + filtreMPEG2, + filtreAudio, + filtreAc3, + nomVille); + { + wchar_t *options = NULL; + int options_longueur = MultiByteToWideChar(CP_ACP, 0, lpCmdLine, -1, NULL, 0); + options = new wchar_t[options_longueur]; + MultiByteToWideChar(CP_ACP, 0, lpCmdLine, -1, options, options_longueur); + myprintf(L"Ligne de commande : \"%s\"\n", options); + delete options; + } #endif // #if USE_CONSOLE - CoInitialize(NULL); - //CoInitializeEx(NULL,COINIT_MULTITHREADED); + { + // Extrait le fichier canaux.ini des resources + wchar_t fileName[MAX_PATH]; + wcscpy_s(fileName, _countof(fileName), pouchindir_prog); + wcscat_s(fileName, _countof(fileName), scan_ini); + FILE * fop; + if (_wfopen_s(&fop, fileName, L"r") ) { + // fichier canaux.ini inexistant -> Création + + RcdataResource canaux; + if (ExtraitRcdataResource(MAKEINTRESOURCE(IDR_CANAUX), &canaux)) { + // Tout s'est bien passé: on peut utiliser les canaux.ini + if (_wfopen_s(&fop, fileName, L"w")) { + myprintf(L"Fichier canaux.ini => Erreur écriture\n"); + } else { + myprintf(L"Fichier canaux.ini => Création\n"); + fprintf_s(fop, (LPCSTR)canaux.contenu); + fclose(fop); + } + delete [] canaux.contenu; + } + } else + fclose(fop); + } + + // Récupère la version de windows + // et initialise la variable indiquant si on tourne sous Vista + ZeroMemory(&windows_version, sizeof(OSVERSIONINFOEX)); + windows_version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); + if (GetVersionEx((OSVERSIONINFO *)&windows_version)) { + if (windows_version.dwMajorVersion >= 6) { + is_vista = true; + myprintf(L"Fonctionne sous Vista ou 2008 Serveur ou plus récent\t"); + } else { + myprintf(L"Fonctionne sous 2000 ou XP\t"); + } + } else { + myprintf(L"Erreur lors de la récupération de la version de Windows\t"); + } + myprintf( +#ifdef _WIN64 + L"x64" +#else + L"Win32" +#endif + L"\n##########\n\n" + ); + + HRESULT hr = CoInitializeEx(NULL,COINIT_MULTITHREADED); + if (FAILED(hr)) { + erreur(L"Impossible d'initialiser la librairie COM."); + return hr; + } + hWnd = CreateWindowEx(0, szAppName, L"Pouchin TV Mod", @@ -2703,27 +2827,6 @@ // éventuellement débutant immédiatement si intervalle en cours : set_timer_record(); - // Récupère la version de windows - // et initialise la variable indiquant si on tourne sous Vista - ZeroMemory(&windows_version, sizeof(OSVERSIONINFOEX)); - windows_version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); - if (GetVersionEx((OSVERSIONINFO *)&windows_version)) { - if (windows_version.dwMajorVersion >= 6) { - is_vista = true; - myprintf(L"Fonctionne sous Vista ou 2008 Serveur ou plus récent"); - } else { - myprintf(L"Fonctionne sous 2000 ou XP"); - } - } else { - myprintf(L"Erreur lors de la récupération de la version de Windows\n"); - } -#if VISTA - is_vista = true; - myprintf(L"\tVista forcé\n"); -#else // #if VISTA - myprintf(L"\n"); -#endif // #if VISTA - // Rétablissement de la priorité de traitement sauvée dans la configuration : set_priority(configPriority); @@ -2731,17 +2834,25 @@ if (Canaux.size()==0) { // Pas question d'utiliser un état de fenêtre sauvegardé dans la config // ou de tourner en mode minimisé si aucune chaîne n'a encore été détectée - cmd_minimize = false; + cmdOptions[cmd_minimize].actif = false; configState = etf_normal; - } else if (cmd_minimize) { + } else if (cmdOptions[cmd_minimize].actif) { configState = etf_minimized; + }else if (cmdOptions[cmd_fs].actif){ + configState = etf_fullscreen; + }else if (cmdOptions[cmd_max].actif){ + configState = etf_maximized; + }else if (cmdOptions[cmd_noborder].actif){ + configState = etf_noborders; + }else if (cmdOptions[cmd_normal].actif) { + configState = etf_normal; } else if (configState == etf_minimized) { // Ignorer la sauvegarde de l'état minimisé (vérifier si c'est adéquat) configState = etf_normal; } // show and update main window - if (cmd_minimize) { + if (cmdOptions[cmd_minimize].actif) { ShowWindow(hWnd, SW_MINIMIZE); UpdateWindow(hWnd); if (minimize_system_tray) @@ -2775,7 +2886,7 @@ } while (!config_ok); // On a lancé avec le paramètre demandant de masquer la fenêtre - if (cmd_minimize) { + if (cmdOptions[cmd_minimize].actif) { myprintf(L"minimize\n"); if(suspend_minimized) { debranche(); @@ -2802,7 +2913,25 @@ change_frequence(freq_courante); } } + if ((cmd_channel > 0) && (cmd_channel <= (int)Canaux.size())){ + // Vérifie que la chaine passée en paramètre est connue + int temp = trouve_chaine_par_no((WORD)cmd_channel); + if (temp != -1) + zappe_index(temp); + } + if (cmdOptions[cmd_recps].actif) { + if (start_record_ts(ixChaineCourante)>=0){ + update_record_menus(hMainWnd); + } + } + + if (cmdOptions[cmd_rects].actif) { + if (start_record_ps(ixChaineCourante,ixSonCourant)>=0){ + update_record_menus(hMainWnd); + } + } + hMainMenu = GetMenu(hWnd); /** Modifié: trunk/main.h =================================================================== --- trunk/main.h 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/main.h 2008-10-26 19:43:31 UTC (rev 133) @@ -77,16 +77,16 @@ #endif // #if LOG_DSHOW // Liste des codes de timers définis : -#define TIMER_VIDEO_MOVE 120 -#define TIMER_QUIT 121 -#define TIMER_SHUTDOWN 122 -#define TIMER_NUMBER 123 -#define TIMER_BORDER 124 -#define TIMER_OSD 125 -#define TIMER_CURSOR 126 +#define TIMER_VIDEO_MOVE 120 +#define TIMER_QUIT 121 +#define TIMER_SHUTDOWN 122 +#define TIMER_NUMBER 123 +#define TIMER_BORDER 124 +#define TIMER_OSD 125 +#define TIMER_CURSOR 126 #define TIMER_DELAYED_RECORD 127 -#define TIMER_DELAYED_STOP 128 -#define TIMER_UPDATE 129 +#define TIMER_DELAYED_STOP 128 +#define TIMER_UPDATE 129 // Liste des messages locaux à l'application : #define WM_APP_TRAYICON_MSG (WM_APP+0) Modifié: trunk/network.cpp =================================================================== --- trunk/network.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/network.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -24,7 +24,7 @@ #include "base.h" CPinBidon::CPinBidon(HRESULT *phr, CSource *pFilter) : - CSourceStream(L"pin bidon", phr, pFilter, L"Pipin") + CSourceStream(L"Pin de sortie d'antenne", phr, pFilter, L"Antenna out") { myprintf(L"pin construit\n"); } Modifié: trunk/recprog.cpp =================================================================== --- trunk/recprog.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/recprog.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -998,7 +998,7 @@ static void update_edit_state(HWND hDlg, int selection) { - NomProg nom; + NomProg nom; bool edit = selection>=0 && Programmes[selection].etat!=epr_encours; EnableWindow(GetDlgItem(hDlg, IDC_MODIFY), edit); @@ -1717,7 +1717,7 @@ frequence_courante = Canaux[ixChaine].frequence; } - int nbProgrammes = (int)Programmes.size(); + int nbProgrammes = (int)Programmes.size(); // Passer en revue les programmations définies afin de démarrer TOUS les enregistrements qui // devraient être en cours et qui peuvent être démarrés. Modifié: trunk/recprog.h =================================================================== --- trunk/recprog.h 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/recprog.h 2008-10-26 19:43:31 UTC (rev 133) @@ -37,11 +37,11 @@ }; enum ApresEnregistrement { - apr_rien, // 0 + apr_null = -1, // utilisé dans les enregistrements en cours, pour indiquer + // qu'aucun horaire de fin n'est associé à un enregistrement + apr_rien = 0, // 0 apr_quitter, // 1 apr_eteindrePC, // 2 - apr_null = -1 // utilisé dans les enregistrements en cours, pour indiquer - // qu'aucun horaire de fin n'est associé à un enregistrement }; enum AudioMode { @@ -217,4 +217,4 @@ /** * Remplissage d'une combo-box d'items audio **/ -void remplit_liste_audio(HWND hCtl); \ Pas de fin de ligne à la fin du fichier +void remplit_liste_audio(HWND hCtl); Modifié: trunk/res.rc =================================================================== --- trunk/res.rc 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/res.rc 2008-10-26 19:43:31 UTC (rev 133) @@ -171,13 +171,17 @@ CONTROL "Suspendre si minimisé",IDC_SUSPEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,20,262,10 CONTROL "Minimiser dans la zone de notification",IDC_SYSTEM_TRAY, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,37,262,10 - GROUPBOX "Audio",IDC_STATIC,7,69,276,30 - CONTROL "Utiliser l'AC3 par défaut",IDC_AC3_DEF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,81,262,10 - GROUPBOX "Avancé",IDC_STATIC,7,111,276,30 + GROUPBOX "Audio",IDC_STATIC,7,57,276,27 + CONTROL "Utiliser l'AC3 par défaut",IDC_AC3_DEF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,69,262,10 + GROUPBOX "Avancé",IDC_STATIC,7,85,276,24 CONTROL "Permettre l'enregistrement intégral du multiplex courant",IDC_ALLOW_STREAM_RECORD, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,125,262,10 - GROUPBOX "Divers",IDC_STATIC,7,153,276,30 - CONTROL "Afficher le nom de l'émission sous MSN",IDC_MSN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,166,262,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,262,10 + GROUPBOX "Divers",IDC_STATIC,7,178,276,29 + CONTROL "Afficher le nom de l'émission sous MSN",IDC_MSN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,190,262,10 + GROUPBOX "Nom des enregistrements",IDC_STATIC,7,110,276,67 + EDITTEXT IDC_NOM_REC,14,121,261,12,ES_AUTOHSCROLL + LTEXT "%c = chaine\n%e = nom de l'enregistrement",IDC_STATIC,14,135,262,18 + LTEXT "%a = année\t\t%m = mois\t\t%j = jour\n%h = heure\t\t%M = minute\t\t%s = secondes",IDC_STATIC,14,158,262,17 END IDD_FOLDERS DIALOGEX 0, 0, 290, 214 @@ -503,8 +507,6 @@ "S", IDM_DELAYED_STOP, VIRTKEY, NOINVERT "X", IDM_SCREENSHOT, VIRTKEY, CONTROL, NOINVERT VK_RETURN, IDM_STOP_RECORD, VIRTKEY, CONTROL, NOINVERT -// VK_ADD, IDM_VOL_AUG, VIRTKEY, NOINVERT -// VK_SUBTRACT, IDM_VOL_DIM, VIRTKEY, NOINVERT "+", IDM_VOL_AUG, ASCII, NOINVERT "-", IDM_VOL_DIM, ASCII, NOINVERT "Z", IDM_ZOOM, VIRTKEY, SHIFT, NOINVERT @@ -514,6 +516,13 @@ "D", IDM_DEFAULT_ZOOM, VIRTKEY, NOINVERT VK_F1, IDM_ABOUT, VIRTKEY, CONTROL, NOINVERT "I", IDM_SHOW_PROGRAMME, VIRTKEY, NOINVERT + // pour le support des télcos pinnacle + VK_OEM_COMMA, IDM_MUTE, VIRTKEY, NOINVERT + VK_ESCAPE, IDM_EPG, VIRTKEY, NOINVERT + VK_PRIOR, IDM_VOL_AUG, VIRTKEY, CONTROL, NOINVERT + VK_NEXT, IDM_VOL_DIM, VIRTKEY, CONTROL, NOINVERT + "F", IDM_FULLSCREEN, VIRTKEY, ALT, NOINVERT + "C", IDM_DELAYED_RECORD, VIRTKEY, NOINVERT END Modifié: trunk/resource.h =================================================================== --- trunk/resource.h 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/resource.h 2008-10-26 19:43:31 UTC (rev 133) @@ -42,6 +42,7 @@ #define IDC_SIGNAL_LOCK 1016 #define IDC_SIGNAL_QUALITY 1017 #define IDC_SIGNAL_STRENGTH 1018 +#define IDC_NOM_REC 1019 #define IDC_MESSAGE 1020 #define IDC_VERSION 1021 #define IDC_ABOUT_ICON 1022 @@ -161,12 +162,17 @@ #define IDM_UPDATE 40067 #define IDM_SHOW_PROGRAMME 40068 +#define IDM_CHAN_NUMERO 40069 +#define IDM_CHAN_NOM 40070 +#define IDM_CHAN_RESTORNUM 40071 +#define IDM_CHAN_RESTORNOM 40072 + // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 133 -#define _APS_NEXT_COMMAND_VALUE 40069 +#define _APS_NEXT_COMMAND_VALUE 40073 #define _APS_NEXT_CONTROL_VALUE 1117 #define _APS_NEXT_SYMED_VALUE 121 #endif Modifié: trunk/search.cpp =================================================================== --- trunk/search.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/search.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -47,7 +47,7 @@ wcscpy_s(str, _countof(str), var.bstrVal); str[_countof(str)-1] = 0; // précaution - int len = wcslen(str); + size_t len = wcslen(str); while (len>0 && str[--len]<=' ') str[len] = 0; @@ -55,14 +55,19 @@ str[0] = 0; } +/** + * Recherche les filtres valides : + * - MPEG2 + * - AC3 + **/ void search_filters(GUID type, GUID subtype, HWND hItm) { IFilterMapper2 * pMapper; HRESULT hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC, IID_IFilterMapper2, (void **)&pMapper); - if (FAILED(hr)) - { + if (FAILED(hr)) { + myprintf(L"search_filters, 1, hr=0x%08x\n", hr); return; } @@ -90,8 +95,8 @@ NULL); // Output pin category. - if (FAILED(hr)) - { + if (FAILED(hr)) { + myprintf(L"search_filters, 2, hr=0x%08x\n", hr); pMapper->Release(); return; } @@ -99,13 +104,11 @@ // Enumerate the monikers. IMoniker *pMoniker; ULONG cFetched; - while (pEnum->Next(1, &pMoniker, &cFetched) == S_OK) - { + while (pEnum->Next(1, &pMoniker, &cFetched) == S_OK) { IPropertyBag * pPropBag; hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag); - if (SUCCEEDED(hr)) - { + if (SUCCEEDED(hr)) { // To retrieve the friendly name of the filter, do the following: VARIANT varName; VariantInit(&varName); @@ -131,12 +134,16 @@ IBaseFilter * get_filter(GUID type, GUID subtype, wchar_t * nom) { + myprintf(L"get_filter: type={%08x-%04x-%04x-%012x}\n", type.Data1, type.Data2, type.Data3, type.Data4); + myprintf(L"\tsubtype={%08x-%04x-%04x-%012x}\n", subtype.Data1, subtype.Data2, subtype.Data3, subtype.Data4); + myprintf(L"\tnom=%s\n", nom); + IFilterMapper2 * pMapper; HRESULT hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC, IID_IFilterMapper2, (void **)&pMapper); - if (FAILED(hr)) - { + if (FAILED(hr)) { + myprintf(L"get_filter, 1, hr=0x%08x\n", hr); return NULL; } @@ -163,8 +170,8 @@ NULL, // Output medium. NULL); // Output pin category. - if (FAILED(hr)) - { + if (FAILED(hr)) { + myprintf(L"get_filter, 2, hr=0x%08x\n", hr); pMapper->Release(); return NULL; } @@ -174,13 +181,11 @@ ULONG cFetched; IBaseFilter *pFilter = NULL; - while (pFilter == NULL && pEnum->Next(1, &pMoniker, &cFetched) == S_OK) - { + while (pFilter == NULL && pEnum->Next(1, &pMoniker, &cFetched) == S_OK) { IPropertyBag * pPropBag; hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag); - if (SUCCEEDED(hr)) - { + if (SUCCEEDED(hr)) { // To retrieve the friendly name of the filter, do the following: VARIANT varName; VariantInit(&varName); @@ -190,9 +195,7 @@ VarStr_helper vstr(varName); if (wcscmp(vstr(), nom)==0) { - hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter); - } } @@ -216,8 +219,10 @@ IPin * curpin = NULL; hr = pFilter->EnumPins(&pEnumPins); - if (FAILED(hr)) + if (FAILED(hr)) { + myprintf(L"cherche_pin, 1, hr=0x%08x\n", hr); return hr; + } while (pEnumPins->Next(1, &curpin, NULL)==S_OK ) { @@ -254,8 +259,7 @@ { int res = 0; - if (pFilter == NULL) - { + if (pFilter == NULL) { return res; } @@ -275,10 +279,8 @@ AM_MEDIA_TYPE * am; - while(pEnumMedia->Next(1, &am, NULL) == S_OK && res == 0) - { - if (am->majortype == MEDIATYPE_Stream) - { + while(pEnumMedia->Next(1, &am, NULL) == S_OK && res == 0) { + if (am->majortype == MEDIATYPE_Stream) { if (am->subtype == KSDATAFORMAT_TYPE_MPEG2_TRANSPORT) { res = 1; @@ -305,7 +307,7 @@ HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pDevEnum); if (FAILED(hr)) { - myprintf(L"ICreateDevEnum\n"); + myprintf(L"remplit_tuners, ICreateDevEnum : hr=0x%08x\n", hr); return hr; } @@ -313,17 +315,17 @@ hr = pDevEnum->CreateClassEnumerator(guid, &pEnumMoniker, 0); if (FAILED(hr) || pEnumMoniker == NULL) { - myprintf(L"erreur création Enum Moniker\n"); + myprintf(L"remplit_tuners, erreur création Enum Moniker : hr=0x%08x\n", hr); pDevEnum->Release(); return hr; } IMoniker *pMoniker; - while (pEnumMoniker->Next(1, &pMoniker, NULL) == S_OK) - { + while (pEnumMoniker->Next(1, &pMoniker, NULL) == S_OK) { IBaseFilter *pFilter; - if (SUCCEEDED(pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pFilter))) { + HRESULT hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pFilter); + if (SUCCEEDED(hr)) { if (filtre_compat(pFilter)) { IPropertyBag * pPropBag; @@ -332,6 +334,7 @@ VARIANT varName; VariantInit(&varName); if (SUCCEEDED(pPropBag->Read(L"FriendlyName", &varName, 0))) { + myprintf(L"remplit_tuner, Tuner : %s\n", varName.bstrVal); SendMessage(hItm, CB_ADDSTRING, 0, (LPARAM)varName.bstrVal); } VariantClear(&varName); @@ -354,12 +357,13 @@ // renvoie le filtre à partir du nom IBaseFilter * get_tuner(GUID guid, wchar_t * nom) { + myprintf(L"get_tuner: guid={%08x-%04x-%04x-%012x}, nom=%s\n", guid.Data1, guid.Data2, guid.Data3, guid.Data4, nom); // Create the System Device Enumerator. ICreateDevEnum * pDevEnum; HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pDevEnum); if (FAILED(hr)) { - myprintf(L"ICreateDevEnum\n"); + myprintf(L"get_tuner, ICreateDevEnum : hr=0x%08x\n", hr); return NULL; } @@ -367,7 +371,7 @@ hr = pDevEnum->CreateClassEnumerator(guid, &pEnumMoniker, 0); if (FAILED(hr) || pEnumMoniker == NULL) { - myprintf(L"erreur création Enum Moniker\n"); + myprintf(L"get_tuner, erreur création Enum Moniker : hr=0x%08x\n", hr); pDevEnum->Release(); return NULL; } @@ -375,22 +379,19 @@ IMoniker *pMoniker; IBaseFilter * pFilter = NULL; - while (pEnumMoniker->Next(1, &pMoniker, NULL) == S_OK && pFilter == NULL) - { + while (pEnumMoniker->Next(1, &pMoniker, NULL) == S_OK && pFilter == NULL) { IPropertyBag * pPropBag; - if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag))) - { + if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag))) { // To retrieve the friendly name of the filter, do the following: VARIANT varName; VariantInit(&varName); if (SUCCEEDED(pPropBag->Read(L"FriendlyName", &varName, 0))) { VarStr_helper vstr(varName); - + myprintf(L"get_tuner, Tuner : %s\n", varName.bstrVal); if (wcscmp(vstr(), nom)==0) { hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter); - } } Modifié: trunk/settings.cpp =================================================================== --- trunk/settings.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/settings.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -56,7 +56,7 @@ // Assistance au retour de valeur après notification dans une feuille de propriétés : BOOL psn_result(HWND hDlg, LONG res) { - SetWindowLongPtr(hDlg, DWL_MSGRESULT, res); + SetWindowLongPtr(hDlg, DWLP_MSGRESULT, res); return TRUE; } @@ -82,10 +82,17 @@ { wchar_t temp[256]; - SendMessage(hItm, CB_GETLBTEXT, + // Récupère l'index de l'élément sélectionné + LRESULT lRet; + + lRet = SendMessage(hItm, CB_GETLBTEXT, SendMessage(hItm, CB_GETCURSEL, 0, 0), (LPARAM)temp); + if(lRet == CB_ERR) + // La liste est vide :( + return false; + if (wcscmp(nom, temp)==0) return false; // false = Aucun changement wcscpy_s(nom, size, temp); @@ -97,6 +104,7 @@ bool changed = false; BOOL valid = false; + // Vérifié si des paramètres ont été changés changed |= extrait_combo(GetDlgItem(hDlg, IDC_COMBO_TUNER), nom_tuner, _countof(nom_tuner)); changed |= extrait_combo(GetDlgItem(hDlg, IDC_COMBO_RECEIVER), nom_receiver, _countof(nom_receiver)); changed |= extrait_combo(GetDlgItem(hDlg, IDC_COMBO_MPEG2), filtreMPEG2, _countof(filtreMPEG2)); @@ -108,10 +116,22 @@ if (valid) offset_tuner = res; - myprintf(L"Video : %s\nAudio : %s\nAc3 : %s\n", filtreMPEG2, filtreAudio, filtreAc3); + myprintf(L"Tuner: %s\nReceiver: %s\nVideo: %s\nAudio: %s\nAc3: %s\nOffset: %i\n", + nom_tuner, nom_receiver, filtreMPEG2, filtreAudio, filtreAc3, offset_tuner); return changed; } +// Vérifie si le combo n'a qu'un seul élément. Le sélectionne si oui +static void selectionne_si_solo(HWND hItem) +{ + // Récupère le nombre d'éléments dans le combo + if (SendMessage(hItem, CB_GETCOUNT, 0, 0) == 1) { + // Un seul élément dans le combo. Le sélectionne + LRESULT lResult = SendMessage(hItem, CB_SETCURSEL, 0, 0); + myprintf(L"selectionne_si_solo: lResult = 0x%08x\n", lResult); + } +} + static INT_PTR CALLBACK DriversDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { @@ -122,19 +142,30 @@ ShowWindow(GetDlgItem(hDlg, IDCANCEL), SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDOK), SW_HIDE); } - remplit_combo_tuner(GetDlgItem(hDlg, IDC_COMBO_TUNER), - KSCATEGORY_BDA_NETWORK_TUNER, nom_tuner); - remplit_combo_tuner(GetDlgItem(hDlg, IDC_COMBO_RECEIVER), - KSCATEGORY_BDA_RECEIVER_COMPONENT, nom_receiver); - remplit_combo_filtre(GetDlgItem(hDlg, IDC_COMBO_MPEG2), - MEDIATYPE_Video, MEDIASUBTYPE_MPEG2_VIDEO, filtreMPEG2); - remplit_combo_filtre(GetDlgItem(hDlg, IDC_COMBO_AUDIO), - MEDIATYPE_Audio, MEDIASUBTYPE_MPEG2_AUDIO, filtreAudio); - remplit_combo_filtre(GetDlgItem(hDlg, IDC_COMBO_AC3), - MEDIATYPE_Audio, MEDIASUBTYPE_DOLBY_AC3, filtreAc3); - SetDlgItemInt(hDlg, IDC_TUNER_OFFSET, (UINT)offset_tuner, TRUE); - SendDlgItemMessage(hDlg, IDC_TUNER_OFFSET_UPDOWN, UDM_SETRANGE, 0, - MAKELPARAM((short)999, (short)-999)); + { + HWND hTuner = GetDlgItem(hDlg, IDC_COMBO_TUNER); + HWND hReceiver = GetDlgItem(hDlg, IDC_COMBO_RECEIVER); + HWND hMpeg2 = GetDlgItem(hDlg, IDC_COMBO_MPEG2); + HWND hAudio = GetDlgItem(hDlg, IDC_COMBO_AUDIO); + HWND hAc3 = GetDlgItem(hDlg, IDC_COMBO_AC3); + + remplit_combo_tuner(hTuner, KSCATEGORY_BDA_NETWORK_TUNER, nom_tuner); + remplit_combo_tuner(hReceiver, KSCATEGORY_BDA_RECEIVER_COMPONENT, nom_receiver); + remplit_combo_filtre(hMpeg2, MEDIATYPE_Video, MEDIASUBTYPE_MPEG2_VIDEO, filtreMPEG2); + remplit_combo_filtre(hAudio, MEDIATYPE_Audio, MEDIASUBTYPE_MPEG2_AUDIO, filtreAudio); + remplit_combo_filtre(hAc3, MEDIATYPE_Audio, MEDIASUBTYPE_DOLBY_AC3, filtreAc3); + SetDlgItemInt(hDlg, IDC_TUNER_OFFSET, (UINT)offset_tuner, TRUE); + SendDlgItemMessage(hDlg, IDC_TUNER_OFFSET_UPDOWN, UDM_SETRANGE, 0, + MAKELPARAM((short)999, (short)-999)); + + // Cherche s'il n'y a qu'un élément dans la liste + // Le sélectionne si oui + selectionne_si_solo(hTuner); + selectionne_si_solo(hReceiver); + selectionne_si_solo(hMpeg2); + selectionne_si_solo(hAudio); + selectionne_si_solo(hAc3); + } return TRUE; case WM_COMMAND: @@ -1008,6 +1039,7 @@ switch(wParam) { case _cmd_(IDC_SCAN, BN_CLICKED): { + // Lance la rechercher des Chaines static bool rechercheEncours = false; if (!rechercheEncours) { @@ -1024,6 +1056,7 @@ break; } case _cmd_(IDC_RENUMBER, BN_CLICKED): { + // Boite de dialogue permettant de renuméroter les chaines int res = renumber_dialog(); if (res==IDC_RENUM_SEQ || res==IDC_RENUM_REST) { int nbItems = ListView_GetItemCount(hListItem); @@ -1220,27 +1253,28 @@ ScreenToClient(hListItem, &lvhti.pt); if (ListView_SubItemHitTest(hListItem, &lvhti)>=0 && lvhti.iSubItem==CHAN_COL_STATE) { - static const struct Tab_states { - LPCWSTR nom; - UINT uID; - } t_states[] = { - {L"&Inactive", IDM_CHAN_INACTIVE}, - {L"&Active", IDM_CHAN_ACTIVE}, - {L"&Préférée", IDM_CHAN_PREFERRED} - }; - EtatChaine etat = ItemToEtat(hListItem, lvhti.iItem); - HMENU pop = CreatePopupMenu(); - for (i=0; i<_countof(t_states); i++) { - const Tab_states e_stat = t_states[i]; + // Change l'état de la chaine : Active / Inactive / Préférée + static const struct Tab_states { + LPCWSTR nom; + UINT uID; + } t_states[] = { + {L"&Inactive", IDM_CHAN_INACTIVE}, + {L"&Active", IDM_CHAN_ACTIVE}, + {L"&Préférée", IDM_CHAN_PREFERRED} + }; + EtatChaine etat = ItemToEtat(hListItem, lvhti.iItem); + HMENU pop = CreatePopupMenu(); + for (i=0; i<_countof(t_states); i++) { + const Tab_states e_stat = t_states[i]; - AppendMenu(pop, i==etat ? MF_STRING|MF_CHECKED : MF_STRING, - e_stat.uID, e_stat.nom); + AppendMenu(pop, i==etat ? MF_STRING|MF_CHECKED : MF_STRING, + e_stat.uID, e_stat.nom); + } + iItemEdit = lvhti.iItem; // se souvenir quel item on traite + TrackPopupMenuEx(pop, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, hDlg, NULL); + + DestroyMenu(pop); } - iItemEdit = lvhti.iItem; // se souvenir quel item on traite - TrackPopupMenuEx(pop, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, hDlg, NULL); - - DestroyMenu(pop); - } break; } } return FALSE; Modifié: trunk/xml.cpp =================================================================== --- trunk/xml.cpp 2008-10-26 13:36:37 UTC (rev 132) +++ trunk/xml.cpp 2008-10-26 19:43:31 UTC (rev 133) @@ -155,6 +155,7 @@ void CXMLNode::getStr(const wchar_t * nom, char * str, size_t size) { wchar_t buffer[64]; + ZeroMemory(buffer, sizeof(buffer)); getStr(nom, buffer, _countof(buffer)); WideCharToMultiByte(CP_ACP, 0, buffer, -1, str, size, NULL, NULL);