1 10 11 package org.mmbase.applications.media.filters; 12 13 import org.mmbase.applications.media.urlcomposers.URLComposer; 14 import org.mmbase.applications.media.Format; 15 import org.mmbase.util.logging.*; 16 import org.mmbase.util.xml.DocumentReader; 17 import org.w3c.dom.Element ; 18 import java.util.*; 19 20 21 35 public class RealSorter extends ChainSorter { 36 private static Logger log = Logging.getLoggerInstance(RealSorter.class); 37 38 public static final String CONFIG_TAG = "config.realAudio"; 40 41 45 46 protected class RealFormatSorter extends PreferenceSorter { 47 protected int getPreference(URLComposer ri) { 48 if (ri.getFormat() != Format.RM) return 0; 49 return 1; 50 } 51 } 52 53 56 protected class SpeedSorter extends PreferenceSorter { 57 58 private int minSpeed = -1; 59 private int maxSpeed = -1; 60 private int defaultSpeed = -1; 61 62 public void configure(DocumentReader reader, Element e) { 63 try { 64 minSpeed = Integer.parseInt(reader.getElementValue(reader.getElementByPath(e, CONFIG_TAG + ".minspeed"))); 65 maxSpeed = Integer.parseInt(reader.getElementValue(reader.getElementByPath(e, CONFIG_TAG + ".maxspeed"))); 66 defaultSpeed = Integer.parseInt(reader.getElementValue(reader.getElementByPath(e, CONFIG_TAG + ".defaultspeed"))); 67 } catch (Exception ex) { 68 log.error("Check mediasourcefilter.xml, something went wrong while reading realaudio information:" + ex); 69 log.error(Logging.stackTrace(ex)); 70 } 71 if(log.isDebugEnabled()) { 72 log.debug("Minspeed=" + minSpeed); 73 log.debug("Maxspeed=" + maxSpeed); 74 log.debug("Defaultspeed=" + defaultSpeed); 75 } 76 } 77 80 protected int getPreference(URLComposer ri) { 81 Map info = ri.getInfo(); 82 int wantedSpeed = -1; 83 84 int preference = 0; 85 if(info.containsKey("wantedSpeed")) { 86 preference = 1; wantedSpeed = ((Integer ) info.get("wantedSpeed")).intValue(); 88 } else { 89 wantedSpeed = defaultSpeed; 90 } 91 92 if (log.isDebugEnabled()) { 93 log.debug("wantedSpeed:" + wantedSpeed + " minspeed: " + minSpeed + " maxspeed: " + maxSpeed); 94 } 95 96 if( wantedSpeed < minSpeed) { 97 wantedSpeed = minSpeed; 98 } else if( wantedSpeed > maxSpeed) { 99 wantedSpeed = maxSpeed; 100 } 101 102 int speed = ri.getSource().getIntValue("bitrate"); 103 104 if (speed <= wantedSpeed) { 105 preference -= Math.abs(wantedSpeed - speed); 106 } else { 107 preference -= Math.abs(wantedSpeed - speed)*5; } 109 return preference; 110 } 111 } 112 113 116 117 protected class ChannelsSorter extends PreferenceSorter { 118 private int minChannels = -1; 119 private int maxChannels = -1; 120 private int defaultChannels = -1; 121 122 123 public void configure(DocumentReader reader, Element e) { 124 try { 125 minChannels = Integer.parseInt(reader.getElementValue(reader.getElementByPath(e, CONFIG_TAG + ".minchannels"))); 126 maxChannels = Integer.parseInt(reader.getElementValue(reader.getElementByPath(e, CONFIG_TAG + ".maxchannels"))); 127 defaultChannels = Integer.parseInt(reader.getElementValue(reader.getElementByPath(e, CONFIG_TAG + ".defaultchannels"))); 128 } catch (Exception ex) { 129 log.error("Check mediasourcefilter.xml, something went wrong while reading realaudio information:" + ex); 130 log.error(Logging.stackTrace(ex)); 131 } 132 if(log.isDebugEnabled()) { 133 log.debug("Minchannels=" + minChannels); 134 log.debug("Maxchannels=" + maxChannels); 135 log.debug("Defaultchannels=" + defaultChannels); 136 } 137 } 138 139 142 protected int getPreference(URLComposer ri) { 143 Map info = ri.getInfo(); 144 int wantedChannels = -1; 145 146 int preference = 0; 147 if(info.containsKey("wantedChannels")) { 148 preference = 1; wantedChannels = ((Integer ) info.get("wantedChannels")).intValue(); 150 } else { 151 wantedChannels = defaultChannels; 152 } 153 154 if (log.isDebugEnabled()) { 155 log.debug("wantedChannels:" + wantedChannels + " minchennels: " + minChannels + " maxchannels: " + maxChannels); 156 } 157 158 int channels = ri.getSource().getIntValue("channels"); 159 160 if (channels <= wantedChannels) { 161 preference -= Math.abs(wantedChannels - channels); 162 163 } 164 return preference; 165 } 166 } 167 168 169 public RealSorter() { 170 add(new RealFormatSorter()); add(new SpeedSorter()); 172 add(new ChannelsSorter()); 173 } 174 175 176 } 177 178 | Popular Tags |