1111import javaforce .voip .*;
1212import javaforce .media .*;
1313
14- public class Transcoder implements MediaIO {
14+ public class Transcoder {
1515 MediaOutput encoder = new MediaOutput ();
1616 MediaAudioEncoder audio_encoder ;
1717 MediaInput decoder = new MediaInput ();
@@ -23,12 +23,73 @@ public boolean transcode(String in, String out, String outCodec, int bit_rate) {
2323 fin = new RandomAccessFile (in , "r" );
2424 fout = new RandomAccessFile (out , "rw" );
2525 fout .setLength (0 );
26- if (!decoder .open (this )) throw new Exception ("Decoder Failed to start" );
26+ if (!decoder .open (
27+ new MediaIO () {
28+ public int read (byte [] bytes ) {
29+ try {
30+ return fin .read (bytes , 0 , bytes .length );
31+ } catch (Exception e ) {
32+ JFLog .log (e );
33+ return 0 ;
34+ }
35+ }
36+
37+ public int write (byte [] bytes ) {
38+ return 0 ;
39+ }
40+
41+ public long seek (long pos , int how ) {
42+ try {
43+ switch (how ) {
44+ case MediaCoder .SEEK_SET : break ;
45+ case MediaCoder .SEEK_CUR : pos += fin .getFilePointer (); break ;
46+ case MediaCoder .SEEK_END : pos += fin .length (); break ;
47+ }
48+ fin .seek (pos );
49+ return pos ;
50+ } catch (Exception e ) {
51+ JFLog .log (e );
52+ }
53+ return 0 ;
54+ }
55+ }
56+ )) throw new Exception ("Decoder Failed to start" );
2757 audio_decoder = decoder .createAudioDecoder ();
2858 chs = audio_decoder .getChannels ();
2959 freq = audio_decoder .getSampleRate ();
3060 JFLog .log ("decoder:chs=" + chs + ",freq=" + freq );
31- if (!encoder .create (this , outCodec )) throw new Exception ("Encoder Failed to start" );
61+ if (!encoder .create (
62+ new MediaIO () {
63+ public int read (byte [] bytes ) {
64+ return 0 ;
65+ }
66+
67+ public int write (byte [] bytes ) {
68+ try {
69+ fout .write (bytes );
70+ return bytes .length ;
71+ } catch (Exception e ) {
72+ JFLog .log (e );
73+ return 0 ;
74+ }
75+ }
76+
77+ public long seek (long pos , int how ) {
78+ try {
79+ switch (how ) {
80+ case MediaCoder .SEEK_SET : break ;
81+ case MediaCoder .SEEK_CUR : pos += fout .getFilePointer (); break ;
82+ case MediaCoder .SEEK_END : pos += fout .length (); break ;
83+ }
84+ fout .seek (pos );
85+ return pos ;
86+ } catch (Exception e ) {
87+ JFLog .log (e );
88+ }
89+ return 0 ;
90+ }
91+ }
92+ , outCodec )) throw new Exception ("Encoder Failed to start" );
3293 CodecInfo info = new CodecInfo ();
3394 info .audio_bit_rate = bit_rate ;
3495 info .audio_codec = MediaCoder .AV_CODEC_ID_DEFAULT ; //BUG ??? Need value from outCodec
@@ -57,60 +118,4 @@ public boolean transcode(String in, String out, String outCodec, int bit_rate) {
57118 }
58119 return true ;
59120 }
60-
61- public int read (MediaCoder coder , byte [] bytes ) {
62- if (coder == decoder ) {
63- try {
64- return fin .read (bytes , 0 , bytes .length );
65- } catch (Exception e ) {
66- JFLog .log (e );
67- return 0 ;
68- }
69- }
70- return 0 ;
71- }
72-
73- public int write (MediaCoder coder , byte [] bytes ) {
74- if (coder == encoder ) {
75- try {
76- fout .write (bytes );
77- return bytes .length ;
78- } catch (Exception e ) {
79- JFLog .log (e );
80- return 0 ;
81- }
82- }
83- return 0 ;
84- }
85-
86- public long seek (MediaCoder coder , long pos , int how ) {
87- if (coder == decoder ) {
88- try {
89- switch (how ) {
90- case MediaCoder .SEEK_SET : break ;
91- case MediaCoder .SEEK_CUR : pos += fin .getFilePointer (); break ;
92- case MediaCoder .SEEK_END : pos += fin .length (); break ;
93- }
94- fin .seek (pos );
95- return pos ;
96- } catch (Exception e ) {
97- JFLog .log (e );
98- }
99- return 0 ;
100- } else if (coder == encoder ) {
101- try {
102- switch (how ) {
103- case MediaCoder .SEEK_SET : break ;
104- case MediaCoder .SEEK_CUR : pos += fout .getFilePointer (); break ;
105- case MediaCoder .SEEK_END : pos += fout .length (); break ;
106- }
107- fout .seek (pos );
108- return pos ;
109- } catch (Exception e ) {
110- JFLog .log (e );
111- }
112- return 0 ;
113- }
114- return 0 ;
115- }
116121}
0 commit comments