1212import javaforce .*;
1313import javaforce .awt .*;
1414import javaforce .media .*;
15+ import javaforce .voip .*;
1516
1617public class Session {
1718
@@ -27,7 +28,9 @@ public void run() {
2728 }
2829
2930 private Socket socket ;
30- private MediaDecoder decoder ; //ffmpeg decoder
31+ private MediaInput decoder ;
32+ private MediaAudioDecoder audio ;
33+ private MediaVideoDecoder video ;
3134 private long frameCount ;
3235 private long audioCount ;
3336 private final Object countLock = new Object ();
@@ -79,20 +82,23 @@ public void run() {
7982 resizeVideo = false ;
8083 eof = false ;
8184
85+ width = window .getWidth ();
86+ height = window .getHeight ();
87+
8288 try {
8389 is = socket .getInputStream ();
84- decoder = new MediaDecoder ();
90+ decoder = new MediaInput ();
8591 if (decoder == null ) throw new Exception ("Unable to allocate decoder" );
86- if (!decoder .start (this , -1 , -1 , chs , 44100 , false )) throw new Exception ("Unable to start decoder" );
92+ if (!decoder .open (this )) throw new Exception ("Unable to start decoder" );
93+ audio = decoder .createAudioDecoder ();
94+ video = decoder .createVideoDecoder (width , height );
95+ CodecInfo info = decoder .getCodecInfo ();
8796
88- long mediaLength = decoder . getDuration () ;
97+ long mediaLength = info . duration ;
8998 JFLog .log ("Duration=" + mediaLength );
90- fps = decoder . getFrameRate () ;
99+ fps = info . fps ;
91100 JFLog .log ("FPS=" + fps );
92- width = window .getWidth ();
93- height = window .getHeight ();
94101 JFLog .log ("size=" + width + "x" + height );
95- decoder .resize (width , height );
96102 video_buffer = new VideoBuffer (width , height , buffer_seconds * (int )fps );
97103 playThread = new PlayAudioVideoThread ();
98104 playThread .start ();
@@ -106,38 +112,38 @@ public void run() {
106112 synchronized (sizeLock ) {
107113 width = new_width ;
108114 height = new_height ;
109- decoder .resize (width , height );
115+ video = decoder .createVideoDecoder (width , height );
110116 resizeVideo = false ;
111117 }
112118 }
113- switch (decoder .read ()) {
114- case MediaCoder .AUDIO_FRAME : //audio packet read
115- short audio [] = decoder .getAudio ();
116- audio_buffer .add (audio , 0 , audio .length );
117- synchronized (lock ) {
118- lock .notify ();
119- }
120- break ;
121- case MediaCoder .VIDEO_FRAME : //video packet read
122- int video [] = decoder .getVideo ();
123- JFImage img = video_buffer .getNewFrame ();
124- if (img != null ) {
125- if ((img .getWidth () != width ) || (img .getHeight () != height )) {
126- img .setSize (width , height );
127- }
128- img .putPixels (video , 0 , 0 , width , height , 0 );
129- video_buffer .freeNewFrame ();
130- } else {
131- JFLog .log ("Warning : VideoBuffer overflow" );
132- }
133- synchronized (lock ) {
134- lock .notify ();
119+ Packet packet = decoder .readPacket ();
120+ if (packet == null ) {
121+ eof = true ;
122+ playing = false ;
123+ break ;
124+ }
125+ if (packet .stream == info .audio_stream ) {
126+ short sams [] = audio .decode (packet );
127+ audio_buffer .add (sams , 0 , sams .length );
128+ synchronized (lock ) {
129+ lock .notify ();
130+ }
131+ }
132+ else if (packet .stream == info .video_stream ) {
133+ int px [] = video .decode (packet );
134+ JFImage img = video_buffer .getNewFrame ();
135+ if (img != null ) {
136+ if ((img .getWidth () != width ) || (img .getHeight () != height )) {
137+ img .setSize (width , height );
135138 }
136- break ;
137- case MediaCoder .END_FRAME :
138- eof = true ;
139- playing = false ;
140- break ;
139+ img .putPixels (px , 0 , 0 , width , height , 0 );
140+ video_buffer .freeNewFrame ();
141+ } else {
142+ JFLog .log ("Warning : VideoBuffer overflow" );
143+ }
144+ synchronized (lock ) {
145+ lock .notify ();
146+ }
141147 }
142148 }
143149 } catch (Exception e ) {
0 commit comments