private final void progressCheck(boolean useTime, double progressFactor, double progressOffset) {
			Matcher m = ProgressCallbackThread.progressPattern.matcher(this.progressScanner);
			Matcher m2;
			int start = 0, pos;
			long time;
			int flags;
			int frame;
			while (m.find(start)) {
				// Parse
				time = 0L;
				frame = 0;
				flags = 0;
				m2 = ProgressCallbackThread.progressLine.matcher(m.group(0));
				pos = start;
				while (m2.find(pos)) {
					if (m2.group(1).equals("out_time_ms")) {
						time = Long.parseLong(m2.group(2));
					}
					else if (m2.group(1).equals("frame")) {
						frame = Integer.parseInt(m2.group(2));
					}
					else if (m2.group(1).equals("progress")) {
						if (m2.group(2).equals("end")) flags |= GeneratorProgressCallback.COMPLETE;
					}
					pos = m2.end();
				}
				// Event
				this.triggerCallback(
					useTime ? ((time / (this.targetLength * 1000000.0)) * progressFactor + progressOffset) : ((frame / ((double) maxFrames)) * progressFactor + progressOffset),
					flags
				);

				// Next
				start = m.end();
			}
			// Remove
			this.progressScanner.delete(0, start);
		}