io-media-config {
	global-options {
		mountpoint = /dev/io-media
		num-threads = 1

		audio-hi-prio = 22
		audio-mid-prio = 15
		audio-lo-prio = 12
		video-hi-prio = 21
		video-mid-prio = 14
		video-lo-prio = 11
		play-status-prio = 14
		rip-prio = 9
	}
	module-options {
		module = "cdda_trackplayer"
		# If skip on error is not "no", it defines the number of milliseconds
		# to skip on a read error, the percentage to grow it by on each subsequent error,
		# and the maximum number of skips.
		skip-on-error = 50,100,12
		queue-time = 15000
		# Prefetch options.  0 = disable, 1 = resume on high water mark, 2 = resume on low
		# water mark, 3 = resume on high water mark, pause on low water mark.
		prefetch = 2
		# dts_writer, if not "", specifies a different writer filter for DTS CDs
		dts_writer = ""
		resource {
			name = "TrickPlayVolumeFade"
			type = long
			value = 10
			optional = yes
		}
		# Max retries when reading from CDDA: default value = 0 since devb driver
		# typically does its own retries
		resource {
			filter = "reader"
			name = "MM_CDDA_READ_MAX_RETRY"
			type = long
			value = 0
		}
		# Enable DMA reads from CDDA: value = 0 DMA disabled, value = 1 DMA enabled
		resource {
			filter = "reader"
			name = "MM_CDDA_DMA_CAM_READCD"
			type = long
			value = 0
		}
		# Drive specific 'readcd.rsvd3' value to be used when doing DMA reads from CDDA
		# Note: only applies if DMA is enabled (MM_CDDA_DMA_CAM_READCD), consult CD drive
		# specs for value
		resource {
			filter = "reader"
			name = "MM_CDDA_DMA_CAM_READCD_RSVD3"
			type = long
			value = 0
		}
		# Timeout value in seconds when doing DMA reads from CDDA
		# Value corresponds to devb driver 'cdrom timeout' values, value = 0 defaults
		# to devb group 1 timeout. Note: only applies if DMA is enabled (MM_CDDA_DMA_CAM_READCD)
		resource {
			filter = "reader"
			name = "MM_CDDA_DMA_CAM_READCD_TIMEOUT"
			type = long
			value = 0
		}
	}
	module-options {
		module = "mediafs_2wire"
		# Amount of time, in milliseconds, to wait until sending a metadata event
		# to the client if we have not recieved a metadata update from the device.
		metadata-timeout = 200
		# These parameters control the sizing of the prefetching queue for the mediafs graph.
		queue-pre-hw = 50
		queue-pre-lw = 5
		queue-time = 1000
		# Prefetch options.  0 = disable, 1 = resume on high water mark, 2 = resume on low
		# water mark, 3 = resume on high water mark, pause on low water mark.
		prefetch = 3
	}
	module-options {
		module = "mediafs_2wire_spooler"
		queue-size = 20
	}
	module-options {
		module = "spooler"
		encoding-bitrate = 128000
		virtual-bitrate = 0
	}
	module-options {
		module = "streamplayer"
		queue1-size = 150
		queue1-pre-hw = 80
		queue1-pre-lw = 20
		queue1-time = 8000
		queue2-size = 50
		queue2-pre-hw = 90
		queue2-pre-lw = 10
		queue2-time = 2000
	}
	module-options {
		module = "sapi_discplayer"
		dvda-server = "/dev/discplayer"
		dvdregioncodebitmask = 0
	}
	module-options {
		module = "trackcopier"
		# MMF resources here.
		resource {
			name = "MM_RAWFILE_WRITER_BUFFER_SIZE"
			type = long
			value = 16384
			optional = yes
		}
		# Max retries when reading from CDDA: default value = 0 since devb driver
		# typically does its own retries
		resource {
			filter = "reader"
			name = "MM_CDDA_READ_MAX_RETRY"
			type = long
			value = 0
			optional = yes
		}
		# Enable DMA reads from CDDA: value = 0 DMA disabled, value = 1 DMA enabled
		resource {
			filter = "reader"
			name = "MM_CDDA_DMA_CAM_READCD"
			type = long
			value = 0
			optional = yes
		}
		# Drive specific 'readcd.rsvd3' value to be used when doing DMA reads from CDDA
		# Note: only applies if DMA is enabled (MM_CDDA_DMA_CAM_READCD), consult CD drive
		# specs for value
		resource {
			filter = "reader"
			name = "MM_CDDA_DMA_CAM_READCD_RSVD3"
			type = long
			value = 0
			optional = yes
		}
		# Timeout value in seconds when doing DMA reads from CDDA
		# Value corresponds to devb driver 'cdrom timeout' values, value = 0 defaults
		# to devb group 1 timeout. Note: only applies if DMA is enabled (MM_CDDA_DMA_CAM_READCD)
		resource {
			filter = "reader"
			name = "MM_CDDA_DMA_CAM_READCD_TIMEOUT"
			type = long
			value = 0
			optional = yes
		}
	}
	module-options {
		module = "mmf_graphbuilder"
		queue1-size = 49
		queue1-pre-hw = 80
		queue1-pre-lw = 20
		queue1-time = 12000
		queue2-size = 8
		queue2-pre-hw = 90
		queue2-pre-lw = 10
		queue2-time = 1000
		# parsed-video-queue-size is used to buffer parsed, but encoded video
		parsed-video-queue-size = 15
		# decoded-video-queue-size is used to buffer decoded video frames for writing.
		decoded-video-queue-size = 6
		# pre-buffer can be "none", "stream", "parser", "build", or "start"
		pre-buffer = none
		# What to do with the old graph before starting the new one:
		# "none", "stop", or "destroy"
		transition = none
		resource {
			filter = "audio_writer"
			# filter can be "streamer", "reader", "parser", "decoder", or "audio_writer"
			# when a specific filter is to be targeted as soon as it's added to the graph,
			# or it can be omitted to target the entire graph.
			name = "TrickPlayVolumeFade"
			type = long
			value = 10
			optional = yes
		}
		resource {
			filter = "streamer"
			name = "StreamerStickyError"
			type = long
			value = 1
			optional = yes
		}
		resource {
			filter = "reader"
			name = "MM_TMPFILE_STREAMER_SEEKABLE"
			type = long
			value = 1
			optional = yes
		}
		resource {
			# The parsers implement Audio-Video Sync. Delay.  The value is the
			# amount of time to delay the video with respect to the audio in
			# microseconds.  Negative values are allowed if the video needs to
			# preceed the audio.
			filter = "parser"
			name = "AVSyncDelay"
			type = long
			value = 0
			optional = yes
		}
		resource {
			name = "StreamerStickyError"
			type = long
			value = 0
			optional = yes
		}
		format {
			url = "cdda:*"
			parser = "cdda_parser"
			strict = yes
			resource {
				filter = "reader"
				name = "MM_CDDA_READ_MAX_RETRY"
				type = long
				value = 0
			}
		}
		format {
			url = "*.mov"
			parser = "mp4_parser"
			decoder = "qnx_raac_decoder"
		}
		format {
			url = "*.mp[a123]"
			parser = "mpega_parser"
			decoder = "xing_mpega_decoder"
			# You can set MMF graph-level parameters here:
			# graphparam {
			#	name = "foo"
			#	value = "bar"
			# }
		}
		format {
			url = "*.mp4"
			parser = "mp4_parser"
			decoder = "qnx_raac_decoder"
		}
		format {
			url = "*.m4v"
			decoder = "ipp_video_decoder"
		}
		format {
			url = "*.mp4v"
			decoder = "ipp_video_decoder"
		}
		format {
			url = "*.aac"
			parser = "aac_parser"
			decoder = "qnx_raac_decoder"
		}
		format {
			url = "*.wma"
			parser = "wma9_parser"
			decoder = "wma9_decoder"
		}
		format {
			url = "*.ogg"
			parser = "ogg_decoder"
		}
		format {
			url = "*.wav"
			parser = "wav_parser"
		}
		# This would prevent playing anything that doesn't match any of the above:
		# format {
		#	url = "*"
		#	strict = yes
		# }
	}
	module-options {
		module = "registry"
		entry {
			name = "lang:audio:default"
			# Favourite audio language for media with multiple audio tracks.
			# An ISO language code, or "" for "unspecified"
			value = ""
		}
	}
	module-options {
		module = "mmf_trackplayer"
		# If skip on error is not "no", it defines the number of milliseconds
		# to skip on a read error, the percentage to grow it by on each subsequent error,
		# and the maximum number of skips.
		skip-on-error = 200,100,10
		# Prefetch options.  0 = disable, 1 = resume on high water mark, 2 = resume on low
		# water mark, 3 = resume on high water mark, pause on low water mark.
		prefetch = 2
	}
	module-options {
		module = "mmf"
		audio_writer {
			url = "snd:*"
			filter = "audio_writer"
		}
		audio_writer {
			url = "appe_output_*"
			filter = "ade3_writer"
		}
		video_writer {
			url = "gf:*"
			filter = "gf_writer"
		}

		# These still work, if a filter isn't selected by pattern matching:
		audio_writer = "audio_writer"
		video_writer = "gf_writer"

		dlldir = "$MM_INIT"
		# keepdlls can be:
		#  "none" (unload any DLLs when they aren't in use)
		#  "used" (after a DLL is first used, keep it loaded forever)
		#  "all"  (permanently load all DLLs from the specified directory)
		keepdlls = "none"
		# If keepdlls is "none" or "used", the "keepdll" element can be used
		# to load specific DLLs at startup and keep them loaded
		keepdll {
			name = "fildes_streamer"
		}
		keepdll {
			name = "cdda_streamer"
		}
		keepdll {
			name = "stream_reader"
		}
		keepdll {
			name = "cdda_parser"
		}
		keepdll {
			name = "rtp_reader"
		}
		keepdll {
			name = "mpega_parser"
		}
		keepdll {
			name = "queue_filter"
		}
		keepdll {
			name = "audio_writer"
			# "optional" means it's not a fatal error when the DLL is not there
			optional = yes
		}
		keepdll {
			name = "ipp_video_decoder"
			optional = yes
		}
		keepdlls {
			# Keep all the DLLs that have the specified interface
			interface = "AOStreamer"
		}
		keepdlls {
			interface = "MediaMetadataParser"
		}
		# utf8hook specifies a DLL to perform customized conversions of metadata
		utf8hook = ""
	}
	module-options {
		module = "aoi"
		# For each DLL you want to load, specify a "load" element like this:
		# load {
		# 	dll = "/dll/media/somedll.so"
		# 	keep = "yes"
		# }
	}
}
