Jitsi: the OpenSource Java VoIP and Instant Messaging client.

net.java.sip.communicator.impl.neomedia.format
Class MediaFormatImpl<T extends javax.media.Format>

java.lang.Object
  extended by net.java.sip.communicator.impl.neomedia.format.MediaFormatImpl<T>
Type Parameters:
T - the type of the wrapped Format
All Implemented Interfaces:
MediaFormat
Direct Known Subclasses:
AudioMediaFormatImpl, VideoMediaFormatImpl

public abstract class MediaFormatImpl<T extends javax.media.Format>
extends Object
implements MediaFormat

Implements MediaFormat for the JMF Format.

Author:
Lyubomir Marinov

Field Summary
static String CLOCK_RATE_PNAME
          The name of the clockRate property of MediaFormatImpl.
(package private) static Map<String,String> EMPTY_CODEC_SETTINGS
          The value of the codecSettings property of MediaFormatImpl when no codec-specific settings.
(package private) static Map<String,String> EMPTY_FORMAT_PARAMETERS
          The value of the formatParameters property of MediaFormatImpl when no codec-specific parameters have been received via SIP/SDP or XMPP/Jingle.
static String ENCODING_PNAME
          The name of the encoding property of MediaFormatImpl.
protected  T format
          The JMF Format this instance wraps and provides an implementation of MediaFormat for.
static String FORMAT_PARAMETERS_PNAME
          The name of the formatParameters property of MediaFormatImpl.
 
Fields inherited from interface net.java.sip.communicator.service.neomedia.format.MediaFormat
MAX_DYNAMIC_PAYLOAD_TYPE, MIN_DYNAMIC_PAYLOAD_TYPE, RTP_PAYLOAD_TYPE_UNKNOWN
 
Constructor Summary
protected MediaFormatImpl(T format)
          Initializes a new MediaFormatImpl instance which is to provide an implementation of MediaFormat for a specific Format.
protected MediaFormatImpl(T format, Map<String,String> formatParameters, Map<String,String> advancedParameters)
          Initializes a new MediaFormatImpl instance which is to provide an implementation of MediaFormat for a specific Format and which is to have a specific set of codec-specific parameters.
 
Method Summary
 boolean advancedAttributesAreEqual(Map<String,String> adv, Map<String,String> adv2)
          Determines whether a specific set of advanced attributes is equal to another set of advanced attributes in the sense that they define an equal number of parameters and assign them equal values.
static MediaFormat createInstance(javax.media.Format format)
          Creates a new MediaFormat instance for a specific JMF Format.
static MediaFormatImpl<? extends javax.media.Format> createInstance(javax.media.Format format, double clockRate, Map<String,String> formatParameters, Map<String,String> advancedAttrs)
          Creates a new MediaFormat instance for a specific JMF Format and assigns it specific clock rate and set of format-specific parameters.
 boolean equals(Object mediaFormat)
          Implements MediaFormat#equals(Object) and actually compares the encapsulated JMF Format instances.
protected  boolean formatParametersAreEqual(Map<String,String> fmtps1, Map<String,String> fmtps2)
          Determines whether a specific set of format parameters is equal to another set of format parameters in the sense that they define an equal number of parameters and assign them equal values.
static boolean formatParametersAreEqual(String encoding, Map<String,String> fmtps1, Map<String,String> fmtps2)
          Determines whether a specific set of format parameters is equal to another set of format parameters in the sense that they define an equal number of parameters and assign them equal values.
 boolean formatParametersMatch(Map<String,String> fmtps)
          Determines whether the format parameters of this MediaFormat match a specific set of format parameters.
 Map<String,String> getAdditionalCodecSettings()
          Returns additional codec settings.
 Map<String,String> getAdvancedAttributes()
          Implements MediaFormat#getAdvancedParameters().
 String getClockRateString()
          Returns a String representation of the clock rate associated with this MediaFormat making sure that the value appears as an integer (i.e.
 String getEncoding()
          Implements MediaFormat#getEncoding() and returns the encoding of the JMF Format that we are encapsulating here but it is the RFC-known encoding and not the internal JMF encoding.
 T getFormat()
          Returns the JMF Format instance that we are wrapping here.
 Map<String,String> getFormatParameters()
          Implements MediaFormat#getFormatParameters().
 String getJMFEncoding()
          Gets the encoding of the JMF Format represented by this instance as it is known to JMF (in contrast to its RFC name).
 String getRealUsedClockRateString()
          Returns a String representation of the real used clock rate associated with this MediaFormat making sure that the value appears as an integer (i.e.
 byte getRTPPayloadType()
          Gets the RTP payload type (number) of this MediaFormat as it is known in RFC 3551 "RTP Profile for Audio and Video Conferences with Minimal Control".
 int hashCode()
          Overrides Object#hashCode() because Object#equals(Object) is overridden.
 void setAdditionalCodecSettings(Map<String,String> settings)
          Sets additional codec settings.
 String toString()
          Returns a String representation of this MediaFormat containing, among other things, its encoding and clockrate values.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface net.java.sip.communicator.service.neomedia.format.MediaFormat
getClockRate, getMediaType
 

Field Detail

CLOCK_RATE_PNAME

public static final String CLOCK_RATE_PNAME
The name of the clockRate property of MediaFormatImpl.

See Also:
Constant Field Values

EMPTY_FORMAT_PARAMETERS

static final Map<String,String> EMPTY_FORMAT_PARAMETERS
The value of the formatParameters property of MediaFormatImpl when no codec-specific parameters have been received via SIP/SDP or XMPP/Jingle. Explicitly defined in order to reduce unnecessary allocations.


EMPTY_CODEC_SETTINGS

static final Map<String,String> EMPTY_CODEC_SETTINGS
The value of the codecSettings property of MediaFormatImpl when no codec-specific settings. Explicitly defined in order to reduce unnecessary allocations.


ENCODING_PNAME

public static final String ENCODING_PNAME
The name of the encoding property of MediaFormatImpl.

See Also:
Constant Field Values

FORMAT_PARAMETERS_PNAME

public static final String FORMAT_PARAMETERS_PNAME
The name of the formatParameters property of MediaFormatImpl.

See Also:
Constant Field Values

format

protected final T extends javax.media.Format format
The JMF Format this instance wraps and provides an implementation of MediaFormat for.

Constructor Detail

MediaFormatImpl

protected MediaFormatImpl(T format)
Initializes a new MediaFormatImpl instance which is to provide an implementation of MediaFormat for a specific Format.

Parameters:
format - the JMF Format the new instance is to provide an implementation of MediaFormat for

MediaFormatImpl

protected MediaFormatImpl(T format,
                          Map<String,String> formatParameters,
                          Map<String,String> advancedParameters)
Initializes a new MediaFormatImpl instance which is to provide an implementation of MediaFormat for a specific Format and which is to have a specific set of codec-specific parameters.

Parameters:
format - the JMF Format the new instance is to provide an implementation of MediaFormat for
formatParameters - any codec-specific parameters that have been received via SIP/SDP or XMPP/Jingle
advancedParameters - any parameters that have been received via SIP/SDP or XMPP/Jingle
Method Detail

createInstance

public static MediaFormat createInstance(javax.media.Format format)
Creates a new MediaFormat instance for a specific JMF Format.

Parameters:
format - the JMF Format the new instance is to provide an implementation of MediaFormat for
Returns:
a new MediaFormat instance for the specified JMF Format

createInstance

public static MediaFormatImpl<? extends javax.media.Format> createInstance(javax.media.Format format,
                                                                           double clockRate,
                                                                           Map<String,String> formatParameters,
                                                                           Map<String,String> advancedAttrs)
Creates a new MediaFormat instance for a specific JMF Format and assigns it specific clock rate and set of format-specific parameters.

Parameters:
format - the JMF Format the new instance is to provide an implementation of MediaFormat for
clockRate - the clock rate of the new instance
formatParameters - the set of format-specific parameters of the new instance
advancedAttrs - advanced attributes of the new instance
Returns:
a new MediaFormat instance for the specified JMF Format and with the specified clock rate and set of format-specific parameters

advancedAttributesAreEqual

public boolean advancedAttributesAreEqual(Map<String,String> adv,
                                          Map<String,String> adv2)
Determines whether a specific set of advanced attributes is equal to another set of advanced attributes in the sense that they define an equal number of parameters and assign them equal values. Since the values are Strings, presumes that a value of null is equal to the empty String.

Parameters:
adv - the first set of advanced attributes to be tested for equality
adv2 - the second set of advanced attributes to be tested for equality
Returns:
true if the specified sets of advanced attributes equal; false, otherwise

formatParametersAreEqual

protected boolean formatParametersAreEqual(Map<String,String> fmtps1,
                                           Map<String,String> fmtps2)
Determines whether a specific set of format parameters is equal to another set of format parameters in the sense that they define an equal number of parameters and assign them equal values. Since the values are Strings, presumes that a value of null is equal to the empty String.

The two Map instances of format parameters to be checked for equality are presumed to be modifiable in the sense that if the lack of a format parameter in a given Map is equivalent to it having a specific value, an association of the format parameter to the value in question may be added to or removed from the respective Map instance for the purposes of determining equality.

Parameters:
fmtps1 - the first set of format parameters to be tested for equality
fmtps2 - the second set of format parameters to be tested for equality
Returns:
true if the specified sets of format parameters are equal; false, otherwise

formatParametersAreEqual

public static boolean formatParametersAreEqual(String encoding,
                                               Map<String,String> fmtps1,
                                               Map<String,String> fmtps2)
Determines whether a specific set of format parameters is equal to another set of format parameters in the sense that they define an equal number of parameters and assign them equal values. Since the values are Strings, presumes that a value of null is equal to the empty String.

The two Map instances of format parameters to be checked for equality are presumed to be modifiable in the sense that if the lack of a format parameter in a given Map is equivalent to it having a specific value, an association of the format parameter to the value in question may be added to or removed from the respective Map instance for the purposes of determining equality.

Parameters:
encoding - the encoding (name) related to the two sets of format parameters to be tested for equality
fmtps1 - the first set of format parameters to be tested for equality
fmtps2 - the second set of format parameters to be tested for equality
Returns:
true if the specified sets of format parameters are equal; false, otherwise

formatParametersMatch

public boolean formatParametersMatch(Map<String,String> fmtps)
Determines whether the format parameters of this MediaFormat match a specific set of format parameters.

The default implementation of MediaFormatImpl always returns true because format parameters in general do not cause the distinction of payload types.

Specified by:
formatParametersMatch in interface MediaFormat
Parameters:
fmtps - the set of format parameters to match to the format parameters of this MediaFormat
Returns:
true if this MediaFormat considers fmtps matching its format parameters; otherwise, false

equals

public boolean equals(Object mediaFormat)
Implements MediaFormat#equals(Object) and actually compares the encapsulated JMF Format instances.

Specified by:
equals in interface MediaFormat
Overrides:
equals in class Object
Parameters:
mediaFormat - the object that we'd like to compare this one to. 8*
Returns:
true if the JMF Format instances encapsulated by this class are equal and false otherwise.

getEncoding

public String getEncoding()
Implements MediaFormat#getEncoding() and returns the encoding of the JMF Format that we are encapsulating here but it is the RFC-known encoding and not the internal JMF encoding.

Specified by:
getEncoding in interface MediaFormat
Returns:
the RFC-known encoding of the JMF Format that we are encapsulating

getFormat

public T getFormat()
Returns the JMF Format instance that we are wrapping here.

Returns:
a reference to that JMF Format instance that this class is wrapping.

getFormatParameters

public Map<String,String> getFormatParameters()
Implements MediaFormat#getFormatParameters(). Returns a copy of the format properties of this instance. Modifications to the returned Map do no affect the format properties of this instance.

Specified by:
getFormatParameters in interface MediaFormat
Returns:
a copy of the format properties of this instance. Modifications to the returned Map do no affect the format properties of this instance.

getAdvancedAttributes

public Map<String,String> getAdvancedAttributes()
Implements MediaFormat#getAdvancedParameters(). Returns a copy of the attribute properties of this instance. Modifications to the returned Map do no affect the format properties of this instance.

Specified by:
getAdvancedAttributes in interface MediaFormat
Returns:
a copy of the attribute properties of this instance. Modifications to the returned Map do no affect the format properties of this instance.

getJMFEncoding

public String getJMFEncoding()
Gets the encoding of the JMF Format represented by this instance as it is known to JMF (in contrast to its RFC name).

Returns:
the encoding of the JMF Format represented by this instance as it is known to JMF (in contrast to its RFC name)

getRTPPayloadType

public byte getRTPPayloadType()
Gets the RTP payload type (number) of this MediaFormat as it is known in RFC 3551 "RTP Profile for Audio and Video Conferences with Minimal Control".

Specified by:
getRTPPayloadType in interface MediaFormat
Returns:
the RTP payload type of this MediaFormat if it is known in RFC 3551 "RTP Profile for Audio and Video Conferences with Minimal Control"; otherwise, MediaFormat.RTP_PAYLOAD_TYPE_UNKNOWN
See Also:
MediaFormat.getRTPPayloadType()

hashCode

public int hashCode()
Overrides Object#hashCode() because Object#equals(Object) is overridden.

Overrides:
hashCode in class Object
Returns:
a hash code value for this MediaFormat.

getClockRateString

public String getClockRateString()
Returns a String representation of the clock rate associated with this MediaFormat making sure that the value appears as an integer (i.e. its long-casted value is equal to its original one) unless it is actually a non integer.

Specified by:
getClockRateString in interface MediaFormat
Returns:
a String representation of the clock rate associated with this MediaFormat.

getRealUsedClockRateString

public String getRealUsedClockRateString()
Returns a String representation of the real used clock rate associated with this MediaFormat making sure that the value appears as an integer (i.e. contains no decimal point) unless it is actually a non integer. This function corrects the problem of the G.722 codec which advertises its clock rate to be 8 kHz while 16 kHz is really used to encode the stream (that's an error noted in the respective RFC and kept for the sake of compatibility.).

Specified by:
getRealUsedClockRateString in interface MediaFormat
Returns:
a String representation of the real used clock rate associated with this MediaFormat.

setAdditionalCodecSettings

public void setAdditionalCodecSettings(Map<String,String> settings)
Sets additional codec settings.

Specified by:
setAdditionalCodecSettings in interface MediaFormat
Parameters:
settings - additional settings represented by a map.

getAdditionalCodecSettings

public Map<String,String> getAdditionalCodecSettings()
Returns additional codec settings.

Specified by:
getAdditionalCodecSettings in interface MediaFormat
Returns:
additional settings represented by a map.

toString

public String toString()
Returns a String representation of this MediaFormat containing, among other things, its encoding and clockrate values.

Specified by:
toString in interface MediaFormat
Overrides:
toString in class Object
Returns:
a String representation of this MediaFormat.

Jitsi: the OpenSource Java VoIP and Instant Messaging client.

Jitsi, the OpenSource Java VoIP and Instant Messaging client.
Distributable under LGPL license.