'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 26 February 2006 at 1:16:15 pm'!
Object subclass: #MPEGFile
	instanceVariableNames: 'pathToFile fileBits fileIndex endianness buffer '
	classVariableNames: 'Registry '
	poolDictionaries: ''
	category: 'Movies-Kernel'!
Object subclass: #MPEGPlayer
	instanceVariableNames: 'external form startTime clockBias frameRate lastDelay noSound sampleRate audioPlayerProcess videoPlayerProcess playerProcessPriority soundQueue timeCheck semaphoreForSound errorForSoundStart morph volume buffer isBuffer '
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Movies-Kernel'!

!MPEGFile methodsFor: 'access' stamp: 'JMM 1/20/2006 18:12'!
buffer
	^buffer! !

!MPEGFile methodsFor: 'access' stamp: 'JMM 1/20/2006 23:15'!
isBufferBased
	^(buffer == nil) not ! !

!MPEGFile methodsFor: 'initialize-release' stamp: 'JMM 1/20/2006 18:11'!
openBuffer: aByteArray
	pathToFile := nil.
	buffer _ aByteArray.
	fileBits := self primFileOpenABuffer: aByteArray size: aByteArray size.
	fileBits notNil ifTrue: 
		[fileIndex := Smalltalk registerExternalObject: fileBits.
		self register.]
	! !

!MPEGFile methodsFor: 'primitives' stamp: 'JMM 1/20/2006 17:52'!
primFileOpenABuffer: buffer size: aSize
	"Open the file"
	<primitive: 'primitiveMPEG3OpenABuffer' module: 'Mpeg3Plugin'>
	self primitiveFailed! !


!MPEGFile class methodsFor: 'instance creation' stamp: 'JMM 1/20/2006 18:18'!
openBuffer: aBuffer 
	^self new openBuffer: aBuffer! !

!MPEGFile class methodsFor: 'instance creation' stamp: 'JMM 1/20/2006 23:05'!
openFileUseBuffer: aPath 
	| bar bytes |
	bar _ StandardFileStream oldFileNamed: aPath.
	bar binary.
	bytes _ bar contents.
	^self new openBuffer: bytes! !


!MPEGPlayer methodsFor: 'access' stamp: 'JMM 1/20/2006 18:10'!
external
	[external hasVideo] on: Error do: 
		[self isBuffer
			ifTrue:
			[external := MPEGFile openBuffer: external buffer]
			ifFalse: 
				[(MPEGFile isFileValidMPEG: external fileName) 
					ifFalse: [^self error: 'Mpeg File is invalid'].
				external := MPEGFile openFile: external fileName]].
	^external! !

!MPEGPlayer methodsFor: 'access' stamp: 'JMM 1/20/2006 18:05'!
isBuffer
	^isBuffer == true! !

!MPEGPlayer methodsFor: 'initialize-release' stamp: 'JMM 1/20/2006 18:17'!
initializeWithBuffer: aBuffer form: aForm
	isBuffer := true.
	buffer := aBuffer.
	self initialize: aBuffer.
	self form: aForm.
	^self! !

!MPEGPlayer methodsFor: 'initialize-release' stamp: 'JMM 1/20/2006 18:07'!
initializeWithBuffer: aBuffer morph: aMorphic
	isBuffer _ true.
	buffer _ aBuffer.
	self initialize: aBuffer.
	self morph: aMorphic.
	^self! !

!MPEGPlayer methodsFor: 'initialize-release' stamp: 'JMM 1/20/2006 18:54'!
initialize: aPath

	self halt.
	self isBuffer ifTrue: 
		[external := MPEGFile openBuffer: buffer]
	 ifFalse: 
		[(MPEGFile isFileValidMPEG: aPath) ifFalse: [^nil].
		external := MPEGFile openFile: aPath.].
	self playerProcessPriority: Processor userSchedulingPriority.
	self lastDelay: 10.
	volume := 1.0.
	errorForSoundStart := 500.
	semaphoreForSound := Semaphore new.
	self startTime: (Array new: self totalVideoStreams).
	self clockBias: (Array new: self totalVideoStreams withAll: 0).! !


!MPEGPlayer class methodsFor: 'instance creation' stamp: 'JMM 1/20/2006 18:16'!
playBuffer: aBuffer onForm: aForm
	^self new initializeWithBuffer: aBuffer morph: aForm! !

!MPEGPlayer class methodsFor: 'instance creation' stamp: 'JMM 1/20/2006 18:06'!
playBuffer: aBuffer onMorph: aMorph
	^self new initializeWithBuffer: aBuffer morph: aMorph! !

Object subclass: #MPEGPlayer
	instanceVariableNames: 'external form startTime clockBias frameRate lastDelay noSound sampleRate audioPlayerProcess videoPlayerProcess playerProcessPriority soundQueue timeCheck semaphoreForSound errorForSoundStart morph volume buffer isBuffer'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Movies-Kernel'!
Object subclass: #MPEGFile
	instanceVariableNames: 'pathToFile fileBits fileIndex endianness buffer'
	classVariableNames: 'Registry'
	poolDictionaries: ''
	category: 'Movies-Kernel'!
