IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Avi obtenir la resolution (avifileinfo vfw.h )


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut [Résolu] Avi obtenir la resolution (avifileinfo vfw.h )
    Bonjour

    debutant avec borland ,moins d une semaine mais qqs connaissances annexes , je me suis decidé à creer un petit player , pour le moment tout va bien mais je voudrais affiner la lecture en ajustant la resolution

    je souhaiterais egalement recuperer la durée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    MediaPlayer1->DeviceType = dtAutoSelect;
    }
    //---------------------------------------------------------------------------
    // boite de dialogue et attribution de valeur
    //-----------------------------------------------------
    void __fastcall TForm1::BtAviSelectClick(TObject *Sender)
    {
    OpenDialog1->Execute();
    OpenDialog1->FileName;
    Memo1->Lines->Add(OpenDialog1->FileName);
    NomAvi=OpenDialog1->FileName;
    ComboBox2->Items->Add(NomAvi);
     
     
        // lancement auto du media apres selection
        TRect rec;
        rec.Left=0;
        rec.top=0;
        rec.Bottom=AviPanel->Height;
        rec.right=AviPanel->Width;
     
        MediaPlayer1->DeviceType = dtAutoSelect;
        MediaPlayer1->FileName = NomAvi;
                 // "c:\\test.avi";
        MediaPlayer1->Display = AviPanel;
        MediaPlayer1->Open();
        MediaPlayer1->DisplayRect=rec;
        MediaPlayer1->Play();
     
    }
    //---------------------------------------------------------------------------
    // lancer media player avec avi defini
    //---------------------------------------------------------
     
    void __fastcall TForm1::AviLancerClick(TObject *Sender)
     
    {
    MediaPlayer1->Pause();
     
    Form1->Left=Screen->Width/2-350;
    Form1->Top=Screen->Height/2-350;
    Form1->Width = 700;
    Form1->Height = 800;
     
    AviPanel->Left=384;
    AviPanel->Top=72;
    AviPanel->Width = 300;
    AviPanel->Height = 200;
     
    TRect rec;
    rec.Left=0;
    rec.top=0;
    rec.Bottom=AviPanel->Height;
    rec.right=AviPanel->Width;
     
    MediaPlayer1->DisplayRect=rec;
    MediaPlayer1->Play();
    }
     
    //------------------------------------------------
    // avi plein ecran
    //---------------------------------------------
    void __fastcall TForm1::AviPleinEcranClick(TObject *Sender)
    {
    MediaPlayer1->Pause();
     
    Form1->Left=0;
    Form1->Top=0;
    Form1->Width = Screen->Width;
    Form1->Height = Screen->Height;
     
    AviPanel->Left=10;
    AviPanel->Top=10;
    AviPanel->Width = Form1->Width-20;
    AviPanel->Height = Form1->Height-100;
     
    TRect rec;
    rec.Left=0;
    rec.top=0;
    rec.Bottom=AviPanel->Height;
    rec.right=AviPanel->Width;
     
    MediaPlayer1->DisplayRect=rec;
    MediaPlayer1->Play();
     
    }
     
     
    //-------------------------
    //  bouton stop
    //---------------------------
     
    void __fastcall TForm1::PauseClick(TObject *Sender)
    {
    MediaPlayer1->Pause();
    }
    //---------------------------------------------------------------------------
    //-----------------------------------------------
    //    fin mediaplayer
    //-----------------------------------------------
    //-------------------------------------------------------------

    de cette maniere, la video occupe la totalité de l espace predefini sans tenir compte du ratio interne de la video

    si vous avez une idée merci

    je pense egalement ajouter la gestion de playlist et une barre de progression pour selectionner l endroit de lecture

  2. #2
    Membre régulier Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Points : 111
    Points
    111
    Par défaut Avi file
    Bonjour,
    Regardes du coté de l'API multimedia windows :

    http://msdn.microsoft.com/library/de..._functions.asp

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    j y pige pas grand chose

    quelqun pourrait m aiguiller svp ?

  4. #4
    Membre régulier Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Points : 111
    Points
    111
    Par défaut AviFileInfo
    Bonjour,

    Inclus Vfw.h
    Utilises le fonction AVIFileInfo pour récuprer la Structure AVIFILEINFO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    STDAPI AVIFileInfo(PAVIFILE pfile, AVIFILEINFO * pfi,  LONG lSize );
    Une fois que tu as obtenu pfi (AVIFILEINFO) il suffit de lire cette structure pour avoir la résolution :

    AVIFILEINFO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct { 
        DWORD dwMaxBytesPerSec; 
        DWORD dwFlags; 
        DWORD dwCaps; 
        DWORD dwStreams; 
        DWORD dwSuggestedBufferSize; 
        DWORD dwWidth; 
        DWORD dwHeight; 
        DWORD dwScale; 
        DWORD dwRate; 
        DWORD dwLength; 
        DWORD dwEditCount; 
        char  szFileType[64]; 
    } AVIFILEINFO;
    Dans ton cas tu récupéreras dwWidth et dwHeight : résolution en pixels

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    merci sympa pourla reponse

    j avais compris ca mais je savais pas introduire correctement la fonction

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    void __fastcall TForm1::BtAviSelectClick(TObject *Sender)
    {
     
     
     
    OpenDialog1->Execute();
    OpenDialog1->FileName;
    Memo1->Lines->Add(OpenDialog1->FileName);
    NomAvi=OpenDialog1->FileName;
    ComboBox2->Items->Add(NomAvi);
     
     
     
     
     
           // recup infos
     
                //On initialise la bibliothèque
    AVIFileInit();
    PAVIFILE pFile;
     
    char * pPath = NomAvi.c_str();
    //On ouvre la vidéo dont le path est pPath et on la place dans le buffer pFile
    AVIFileOpen(&pFile,pPath,OF_SHARE_DENY_WRITE,NULL);
     
    //Déclaration d'une structure AVIFILEINFO qui contient les infos de la vidéo
    AVIFILEINFO pFileInfo;
     
    //On récupére les infos dans pFileInfo
    AVIFileInfo(pFile,&pFileInfo,sizeof(pFileInfo));
     
     
    int Duree = pFileInfo.dwLength;
    int Largeur = pFileInfo.dwWidth;
    int Hauteur = pFileInfo.dwHeight;
    int Scale = pFileInfo.dwScale;
    int Rate  = pFileInfo.dwRate;
    int Temps = Duree*(Scale/1000)/(Rate/1000);
     
     
     
     
     
    Memo3->Lines->Add(Temps);
     
       AnsiString Infos = NomAvi ;
       Infos += " ( ";
       Infos += Largeur;
       Infos += " x ";
       Infos += Hauteur;
       Infos += " )";
    Memo3->Lines->Add(Infos);
     
     
    //Permet de quitter un AVI ouvert
    AVIFileRelease(pFile);
    //On ferme la bibliothèque AVI
    AVIFileExit();
     
        // lancement auto du media apres selection
     
     
        TRect rec;
        rec.Left=0;
        rec.top=0;
        rec.Bottom=AviPanel->Height;
        rec.right=AviPanel->Width;
     
        MediaPlayer1->DeviceType = dtAutoSelect;
        MediaPlayer1->FileName =  NomAvi;
        //"c:\\test.avi";
        MediaPlayer1->Display = AviPanel;
        MediaPlayer1->Open();
        MediaPlayer1->DisplayRect=rec;
        MediaPlayer1->Play();
    je reposterai le code final bientot

    il me reste à utiliser le ratio pour l affichage dans le panel et à transformer la duree en seconde en hh:mm::ss

    pour ce dernier point, une fonction n existerait pas ?

  7. #7
    Membre régulier Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Points : 111
    Points
    111
    Par défaut Secondes en HH:MM:SS
    Bonjour,
    Je ne sais pas s'il y a des fonctions toute faite pour convertir des secondes en HH:MM:SS.
    Mais voici une astuce toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
            int temp;
            int h,m,s;
     
            h = m = s = 0;
     
            temp = /* Durée que tu récupères en secondes */
     
            if(RoundTo(temp/3600,0) > 0)
            {
                    h = RoundTo(temp/3600,0);
                    temp = temp - (h * 3600);
            }
     
            if(RoundTo(temp/60,0) > 0)
            {
                    m = RoundTo(temp/60,0);
                    temp = temp - (m * 60);
            }
     
            s = temp;
     
            // et voila h, m, s

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    ah merci c cool
    j allais ecrire une fonction en utilisant les modulo mais ca c est impec

    j avais pas pensé au round

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Comment obtenir la durée d'un AVI
    Par Safra dans le forum Excel
    Réponses: 7
    Dernier message: 14/11/2009, 12h29
  2. Création d'un AVI avec l'API VfW
    Par dvillet dans le forum MFC
    Réponses: 4
    Dernier message: 30/03/2006, 17h07
  3. obtenir la resolution de l'ecran de l'internaute
    Par pimpmyride dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/01/2006, 08h53
  4. Obtenir les taches en cours
    Par mlerat22 dans le forum MFC
    Réponses: 3
    Dernier message: 17/06/2002, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo