Ticket #2120: bug#2120.patch

File bug#2120.patch, 2.5 KB (added by stefan, 16 years ago)
  • src/main/java/org/sophie2/main/media/natlib/decoder/MediaNativeBridge.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.media.natlib
     
    55import org.sophie2.base.commons.util.ImmImage; 
    66import org.sophie2.base.media.AudioChunk; 
    77import org.sophie2.base.natlib.Command; 
     8import org.sophie2.base.natlib.ErrorResponse; 
    89import org.sophie2.base.natlib.NativeBridge; 
    910import org.sophie2.base.natlib.OkResponse; 
    1011import org.sophie2.base.natlib.Response; 
     
    4950        @Override 
    5051        public void start() { 
    5152                super.start(); 
    52                 sendCommand(MediaMessages.createOpen(this.fileData.getSize()), OkResponse.class); 
     53                sendCommand(MediaMessages.createOpen(this.fileData.getSize()), 
     54                                OkResponse.class); 
    5355        } 
    5456 
    5557        /** 
     
    7678        public AudioChunk getAudio(int millis) { 
    7779                assert millis % AudioChunk.MILLIS_LEN == 0; 
    7880                Command cmd = MediaMessages.createGetAudio(millis); 
    79                 AudioResponse res = sendCommand(cmd, AudioResponse.class); 
    80                 assert res.getPosMillis() == millis; 
    81                 return res.getChunk(); 
     81                try { 
     82                        AudioResponse res = sendCommand(cmd, AudioResponse.class); 
     83                        assert res.getPosMillis() == millis; 
     84                        return res.getChunk(); 
     85                } catch (RuntimeException e) { 
     86                        return AudioChunk.SILENCE; 
     87                } 
    8288        } 
    8389 
    8490        @Override 
     
    103109        } 
    104110 
    105111        @Override 
    106         public final <T extends Response> T sendCommand(Command command, Class<T> expectedClass) { 
     112        public final <T extends Response> T sendCommand(Command command, 
     113                        Class<T> expectedClass) { 
    107114                Response res = super.sendCommand(command, Response.class); 
    108115                while (res instanceof RequestBytesResponse) { 
    109116                        res = sendBytes((RequestBytesResponse) res); 
    110117                } 
    111                 assert expectedClass.isInstance(res) : res + " is not " + expectedClass.getSimpleName(); 
     118                if (ErrorResponse.class.isInstance(res)) { 
     119                        throw new RuntimeException(ErrorResponse.class.cast(res) 
     120                                        .getErrorMessage()); 
     121                } 
    112122                return expectedClass.cast(res); 
    113123        } 
    114124 
     
    116126                int size = requestBytesResponse.getBufferSize(); 
    117127                int pos = requestBytesResponse.getPosition(); 
    118128                BinData subData = this.fileData.getSub(pos, pos + size); 
    119                 Response res = super.sendCommand(MediaMessages.createSendBytes(pos, subData), 
    120                                 Response.class); 
     129                Response res = super.sendCommand(MediaMessages.createSendBytes(pos, 
     130                                subData), Response.class); 
    121131                return res; 
    122132        } 
    123133