|
From: <dep...@us...> - 2003-03-17 10:25:16
|
Update of /cvsroot/madsserv/madsserv/src/server/transition In directory sc8-pr-cvs1:/tmp/cvs-serv25729 Modified Files: Transition.java Log Message: Trnasition adaptee aux autres modules Index: Transition.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/server/transition/Transition.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Transition.java 15 Mar 2003 22:40:54 -0000 1.6 --- Transition.java 17 Mar 2003 10:25:11 -0000 1.7 *************** *** 1,201 **** ! import java.awt.*; ! import java.io.*; ! import java.lang.Object.*; ! import javax.media.Time.*; ! import javax.media.*; ! import javax.media.format.*; ! import javax.media.format.AudioFormat.*; ! import javax.media.format.VideoFormat.*; ! ! /** ! * La classe Transition assure la transition la plus rapide lors d'un changement de niveau de qualite. Des que le gestionnaire des Connexions lui transmet un changement de niveau de qualite, il collecte les informations sur les diffusions en cours, fixe les parametres de l'encodage a effectuer et les transmet au module de traitement de la conversion. ! * @author Xavier Deplancq ! */ ! ! public class Transition { ! ! /*On declare ici le numero du client, le numero de frame courant et le niveau de qualite*/ ! ! private int numClient; ! private int qualityLevel; ! Reencode reencodeRef; ! GestionAdapta gestionAdaptaRef; ! Streaming streamingRef; ! ! /** ! * Constructeur vide, il initialise le numero du client a 0, il met le niveau de qualite a 1 par defaut et le numero de Frame a 0. Il ne peut etre utiliser que la premiere fois, sinon il y a des risques de colision. ! */ ! ! public Transition() ! ! { ! numClient = 0; ! qualityLevel = 1; ! } ! ! /** ! * Constructeur de la classe Transition qui initialise le numero du client, le niveau de qualite a 1 par defaut et le numero de frame a 0. ! *@param _nmclient le numero du client ! */ ! ! public Transition(int _numClient) ! ! { ! numClient = _numClient; ! qualityLevel = 1; ! } ! ! /** ! * Constructeur de la classe Transition qui initialise le numero de client et le niveau de qualite et met le numero de Frame a 0 par defaut. ! *@param _nmclient le numero du client ! *@param _qualitylevel le niveau de qualite demande ! */ ! ! public Transition(int _numClient, int _qualityLevel) ! ! { ! numClient = _numClient; ! qualityLevel = _qualityLevel; ! } ! ! /** ! * Constructeur de la classe Transition qui initialise le numero de client et le niveau de qualite et met le numero de Frame. ! *@param _nmclient le numero du client ! *@param _qualitylevel le niveau de qualite demande ! *@param _numFrame le numero de frame ! public Transition(int _numClient, int _qualityLevel, float _numFrame) ! { ! numClient = _numClient; ! qualityLevel = _qualityLevel; ! numFrame = _numFrame; ! */ ! ! /** ! *findNewNumberFrame : Cette methode calcule le nouveau numero de Frame a partir duquel il faut reencoder le fichier multimedia diffuse. ! *@param oldNumFrame le numero de frame qui vient d'etre envoye au client ! *@param reencodingVideoFor le nouveau format video de reencodage. ! *@param reencodingAudioFor le nouveau format audio de reencodage. ! */ ! ! public Time findNewMediaTime(double oldMediaTime, ! VideoFormat reencodingVideoFor, ! AudioFormat reencodingAudioFor, ! double VideoMediaLength, double AudioMediaLength) { ! double newAuxMediaTime = 0; ! Time newMediaTime; ! ! if (reencodeRef.multiMedia) { ! if (reencodingVideoFor.getEncoding() == "JPEG") { ! newAuxMediaTime = oldMediaTime + 3; ! } ! if (reencodingVideoFor.getEncoding() == "JPEG") { ! newAuxMediaTime = oldMediaTime + 3; ! } ! if (reencodingVideoFor.getEncoding() == "MPEG") { ! newAuxMediaTime = oldMediaTime + 3; ! } ! if (reencodingVideoFor.getEncoding() == "JPEG") { ! newAuxMediaTime = oldMediaTime + 3; ! } ! if (reencodingVideoFor.getEncoding() == "JPEG") { ! newAuxMediaTime = oldMediaTime + 3; ! } ! ! } ! ! else { ! if (reencodingAudioFor.getEncoding() == "WAV") { ! newAuxMediaTime = oldMediaTime + 2; ! } ! if (reencodingAudioFor.getEncoding() == "MP3") { ! newAuxMediaTime = oldMediaTime + 2; ! } ! ! } ! newMediaTime = new Time(newAuxMediaTime); ! //on retourne le numero de Frame a partir duquel il faut reencoder. ! return (newMediaTime); ! ! } ! ! /** ! *setQualityLevel Cette methode lance tout le processus de transition entre deux niveau de qualites. ! *@param _qualityLevel le niveau de qualite demande par le simulateur ! **/ ! ! public void setQualityLevel(int _qualityLevel) ! ! { ! int i = 2; ! double currentMediaTime = 0; ! double videoMediaLength = 0; ! double audioMediaLength = 0; ! Time startTime; ! Time auxMediaTime; ! ! //variables qui vont stockees le format original Video et Audio ! VideoFormat[] origVideoFor; ! AudioFormat[] origAudioFor; ! ! //variables qui vont stockees le format de reencodage Video et Audio ! VideoFormat reencodingVideoFor = null; ! AudioFormat reencodingAudioFor = null; ! ! qualityLevel = _qualityLevel; ! ! //On obtient ici les formats Video et Audio Originaux. ! if (reencodeRef.multiMedia) ! origVideoFor = reencodeRef.getOriginalVideoFormat(); ! origAudioFor = reencodeRef.getOriginalAudioFormat(); ! ! //On obtient ici les formats Video et Audio de reencodage. ! if (reencodeRef.multiMedia) ! reencodingVideoFor = gestionAdaptaRef.getVideoStreamingFormat(qualityLevel, ! origVideoFor); ! reencodingAudioFor = gestionAdaptaRef.getAudioStreamingFormat(qualityLevel, ! origAudioFor); ! ! ! //auxMediaTime = streamingRef.getCurrentFrame(); ! //videoMediaLength = streamingRef.getVideoMediaLength(); ! //audioMediaLength = strealingRef.gatAudioMediaLength(); ! ! startTime = findNewMediaTime(currentMediaTime, reencodingVideoFor, ! reencodingAudioFor, videoMediaLength, ! audioMediaLength); ! ! //on Transmet ici les formats Audio et Video de reencodage ! if (reencodeRef.multiMedia) ! reencodeRef.setReencodingVideoFormat(reencodingVideoFor); ! reencodeRef.setReencodingAudioFormat(reencodingAudioFor); ! ! //On Transmet ici le numero de Frame a partir de laquelle il faut reencoder le fichier. ! reencodeRef.setReencodingTime(startTime); ! ! } ! ! /** ! * setStreaming donne une referrence sur un objet Streaming ! * @param streamingRef un objet de type Streaming ! */ ! public void setStreaming(Streaming streamingRef) { ! this.streamingRef = streamingRef; ! } ! ! /** ! * setStreaming donne une referrence sur un objet gestionAdapta ! * @param gestionAdptaRef un objet de type Streaming ! */ ! public void setGestionAdapta(GestionAdapta gestionAdaptaRef) { ! this.gestionAdaptaRef = gestionAdaptaRef; ! } ! ! /** ! * setStreaming donne une referrence sur un objet Reencode ! * @param reencodeRef un objet de type Reencode ! */ ! public void setReencode(Reencode reencodeRef) { ! this.reencodeRef = reencodeRef; ! } ! ! } --- 1,240 ---- ! import java.awt.*; ! import java.io.*; ! import java.lang.Object.*; ! import javax.media.Time.*; ! import javax.media.*; ! import javax.media.format.*; ! import javax.media.format.AudioFormat.*; ! import javax.media.format.VideoFormat.*; ! ! /** ! * La classe Transition assure la transition la plus rapide lors d'un changement de niveau de qualite. Des que le gestionnaire des Connexions lui transmet un changement de niveau de qualite, il collecte les informations sur les diffusions en cours, fixe les parametres de l'encodage a effectuer et les transmet au module de traitement de la conversion. ! * @author Xavier Deplancq ! */ ! ! public class Transition { ! ! /*On declare ici le numero du client, le numero de frame courant et le niveau de qualite*/ ! ! private int numClient; ! private int qualityLevel; ! protected ServerInit serverInit; ! protected boolean mediaTimeReceived; ! protected double currentMediaTime = 0; ! protected Reencode reencodeRef; ! protected GestionAdapta gestionAdaptaRef; ! protected Streaming streamingRef; ! ! //rustine pour la premiere diffusion juste apres la demande du client ! protected boolean rustine=false; ! ! ! /** ! * Constructeur de la classe Transition qui initialise le numero de client et le niveau de qualite et met le numero de Frame a 0 par defaut. ! *@param _nmclient le numero du client ! *@param _serverInit une reference sur l'objet serVerInit ! */ ! ! public Transition(int _numClient, ServerInit _serverInit) ! ! { ! numClient = _numClient; ! serverInit = _serverInit; ! } ! ! /** ! * Constructeur de la classe Transition qui initialise le numero de client et le niveau de qualite et met le numero de Frame. ! *@param _nmclient le numero du client ! *@param _qualitylevel le niveau de qualite demande ! *@param _numFrame le numero de frame ! public Transition(int _numClient, int _qualityLevel, float _numFrame) ! { ! numClient = _numClient; ! qualityLevel = _qualityLevel; ! numFrame = _numFrame; ! */ ! ! /** ! *findNewNumberFrame : Cette methode calcule le nouveau numero de Frame a partir duquel il faut reencoder le fichier multimedia diffuse. ! *@param oldNumFrame le numero de frame qui vient d'etre envoye au client ! *@param reencodingVideoFor le nouveau format video de reencodage. ! *@param reencodingAudioFor le nouveau format audio de reencodage. ! */ ! ! public Time findNewMediaTime(double oldMediaTime, ! VideoFormat _reencodingVideoFor, ! AudioFormat _reencodingAudioFor, ! double _mediaLength) { ! ! double newAuxVMediaTime = 0; ! double newAuxAMediaTime = 0; ! Time newMediaTime; ! ! if (reencodeRef.multiMedia) { ! if (_reencodingVideoFor.getEncoding() == "celB") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! if (_reencodingVideoFor.getEncoding() == "JPEG") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! if (_reencodingVideoFor.getEncoding() == "nv") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! if (_reencodingVideoFor.getEncoding() == "H261") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! if (_reencodingVideoFor.getEncoding() == "MPV") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! if (_reencodingVideoFor.getEncoding() == "MP2T") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! if (_reencodingVideoFor.getEncoding() == "H263") { ! newAuxVMediaTime = oldMediaTime + 1; ! } ! } ! ! if (_reencodingAudioFor.getEncoding() == "PCMU") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "1016") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "G726-32") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "G723") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "DVI4") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "LPG") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "PCMA") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "G722") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "L16") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "QCELP") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "CN") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "MPA") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "G728") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! if (_reencodingAudioFor.getEncoding() == "G729") { ! newAuxAMediaTime = oldMediaTime + 1; ! } ! ! if (newAuxAMediaTime > newAuxVMediaTime) { ! newMediaTime = new Time(newAuxAMediaTime); ! } ! else { ! newMediaTime = new Time(newAuxVMediaTime); ! } ! ! //on retourne le numero de Frame a partir duquel il faut reencoder. ! return (newMediaTime); ! ! } ! ! /** ! *setQualityLevel Cette methode lance tout le processus de transition entre deux niveau de qualites. ! *@param _qualityLevel le niveau de qualite demande par le simulateur ! **/ ! ! public void setQualityLevel(int _qualityLevel) ! ! { ! double mediaLength = 0; ! Time startTime = new Time(0); ! Time auxMediaTime; ! VideoFormat reencodingVideoFor=null; ! AudioFormat reencodingAudioFor=null; ! ! //variables qui vont stockees le format original Video et Audio ! Format[][] lesFormats; ! /* Format[][] origVideoFor; ! Format[][] origAudioFor;*/ ! ! qualityLevel = _qualityLevel; ! ! //On obtient ici les formats Video et Audio Supportes. ! lesFormats = reencodeRef.getSupportedFormats(); ! ! //On obtient ici les formats Video et Audio de reencodage. ! if (reencodeRef.multiMedia) { ! reencodingVideoFor = gestionAdaptaRef.getVideoStreamingFormat( ! lesFormats, qualityLevel); ! } ! ! reencodingAudioFor = gestionAdaptaRef.getAudioStreamingFormat(lesFormats, qualityLevel); ! ! if (rustine) { ! mediaTimeReceived = false; ! mediaLength = reencodeRef.getMediaLength(); ! serverInit.requestCurrentMediaTime(numClient); ! while (!mediaTimeReceived) {} ! ! startTime = findNewMediaTime(currentMediaTime, reencodingVideoFor, ! reencodingAudioFor, mediaLength); ! } ! else { ! rustine = true; ! } ! //on Transmet ici les formats Audio et Video de reencodage ! if (reencodeRef.multiMedia) { ! reencodeRef.setReencodingVideoFormat(reencodingVideoFor); ! } ! reencodeRef.setReencodingAudioFormat(reencodingAudioFor); ! ! ! //On Transmet ici le numero de Frame a partir de laquelle il faut reencoder le fichier. ! reencodeRef.setReencodingTime(startTime); ! ! reencodeRef.start(); ! ! } ! public void setCurrentMediaTime(double _currentMediaTime) ! { ! currentMediaTime = _currentMediaTime; ! mediaTimeReceived = true; ! ! } ! ! /** ! * setStreaming donne une referrence sur un objet Streaming ! * @param streamingRef un objet de type Streaming ! */ ! public void setStreaming(Streaming streamingRef) { ! this.streamingRef = streamingRef; ! } ! ! /** ! * setStreaming donne une referrence sur un objet gestionAdapta ! * @param gestionAdptaRef un objet de type Streaming ! */ ! public void setGestionAdapta(GestionAdapta gestionAdaptaRef) { ! this.gestionAdaptaRef = gestionAdaptaRef; ! } ! ! /** ! * setStreaming donne une referrence sur un objet Reencode ! * @param reencodeRef un objet de type Reencode ! */ ! public void setReencode(Reencode reencodeRef) { ! this.reencodeRef = reencodeRef; ! } ! ! } |