예제 #1
0
        private void ExecuteMuxResult()
        {
            switch (_currentJob.EncodingProfile.OutFormat)
            {
            case OutputType.OutputMatroska:
            case OutputType.OutputWebM:
                _currentEncoder = _mkvMerge;
                break;

            case OutputType.OutputMp4:
                _currentEncoder = _mp4Box;
                break;

            case OutputType.OutputTs:
            case OutputType.OutputM2Ts:
            case OutputType.OutputBluRay:
            case OutputType.OutputAvchd:
                _currentEncoder = _tsMuxeR;
                break;

            case OutputType.OutputDvd:
                _currentEncoder = _dvdAuthor;
                break;
            }

            ExecuteGenericEncoder();
        }
예제 #2
0
        private void ExecuteEncodeAudio()
        {
            switch (_currentJob.AudioProfile.Type)
            {
            case ProfileType.Ac3:
                _currentEncoder = _ffmpegAc3;
                break;

            case ProfileType.Ogg:
                _currentEncoder = _oggEnc;
                break;

            case ProfileType.Aac:
                _currentEncoder = _neroAac;
                break;

            case ProfileType.Mp3:
                _currentEncoder = _lame;
                break;

            case ProfileType.Copy:
                if (_currentJob.EncodingProfile.OutFormat == OutputType.OutputDvd &&
                    !_processingService.CheckAudioDvdCompatible(_currentJob.AudioStreams[_currentJob.StreamId]))
                {
                    _currentEncoder = _ffmpegAc3;
                }
                break;
            }

            ExecuteGenericEncoder();
        }
예제 #3
0
        private void ExecuteDemux()
        {
            switch (_currentJob.Input)
            {
            case InputType.InputBluRay:
                _currentEncoder = _demuxerTsMuxeR;
                break;

            case InputType.InputAvchd:
            case InputType.InputHddvd:
                _currentEncoder = _eac3To;
                break;

            case InputType.InputDvd:
            case InputType.InputAvi:
            case InputType.InputFlash:
            case InputType.InputMp4:
            case InputType.InputWm:
            case InputType.InputMatroska:
            case InputType.InputMpegps:
            case InputType.InputTs:
            case InputType.InputOgg:
            case InputType.InputWebM:
                _currentEncoder = _ffmpegDemuxer;
                break;
            }

            ExecuteGenericEncoder();
        }
예제 #4
0
        private void EncodeCompleted(object sender, EncodeCompletedEventArgs args)
        {
            _finishedSteps++;

            _currentEncoder.EncodeCompleted     -= EncodeCompleted;
            _currentEncoder.EncodeStarted       -= EncodeStarted;
            _currentEncoder.EncodeStatusChanged -= EncoderProgressStatus;
            _currentEncoder = null;

            DeleteTempFiles();
            if (_currentJob != null && _currentJob.ExitCode == 0)
            {
                InvokeQueueStatusChanged(new QueueProgressEventArgs
                {
                    JobName              = string.Empty,
                    AverageFrameRate     = 0f,
                    CurrentFrameRate     = 0f,
                    CurrentFrame         = 0,
                    TotalFrames          = 0,
                    ElapsedTime          = new TimeSpan(),
                    EstimatedTimeLeft    = new TimeSpan(),
                    PercentComplete      = 0,
                    TotalPercentComplete = (_finishedSteps * _fullTaskPercent),
                    Pass = 0,
                });

                GetNextStep();

                if (_currentJob.NextStep == EncodingStep.Done &&
                    _queueList.IndexOf(_currentJob) < _queueList.Count - 1)
                {
                    _currentJob = GetNextJob();
                    GetNextStep();
                }
                else if (_currentJob.NextStep == EncodingStep.Done &&
                         _queueList.IndexOf(_currentJob) == _queueList.Count - 1)
                {
                    InvokeQueueCompleted(new QueueCompletedEventArgs(true, null, string.Empty));
                    return;
                }

                ExecuteNextStep();
            }
            else
            {
                var currentJob = _currentJob;
                var exitCode   = -1;
                if (currentJob != null)
                {
                    exitCode = currentJob.ExitCode;
                }
                InvokeQueueCompleted(new QueueCompletedEventArgs(false,
                                                                 new ApplicationException("Encoder exited with code " + exitCode),
                                                                 "Encoder exited with code " + exitCode));
            }
        }
예제 #5
0
        private void ExecuteProcessSubtitle()
        {
            switch (_currentJob.EncodingProfile.OutFormat)
            {
            case OutputType.OutputMp4:
                // TODO: Text Subtitle converter
                break;

            default:
                _currentEncoder = _bdSup2Sub;
                break;
            }

            ExecuteGenericEncoder();
        }
예제 #6
0
        private void ExecuteEncodeVideo()
        {
            switch (_currentJob.VideoProfile.Type)
            {
            case ProfileType.X264:
                // TODO: Switch encoder based on settings
                //this._currentEncoder = this._x264;
                _currentEncoder = _ffmpegX264;
                break;

            case ProfileType.Mpeg2Video:
                _currentEncoder = _ffmpegDvd;
                break;

            case ProfileType.Vp8:
                // TODO: VPXEnc
                break;
            }

            ExecuteGenericEncoder();
        }
예제 #7
0
        private void ExecutePremuxSubtitle()
        {
            _currentEncoder = _spuMux;

            ExecuteGenericEncoder();
        }
예제 #8
0
        private void ExecutePremuxResult()
        {
            _currentEncoder = _mplex;

            ExecuteGenericEncoder();
        }
예제 #9
0
        private void ExecuteGetCropRect()
        {
            _currentEncoder = _ffmpegGetCrop;

            ExecuteGenericEncoder();
        }
예제 #10
0
        private void ExecuteIndexVideo()
        {
            _currentEncoder = _ffmsIndex;

            ExecuteGenericEncoder();
        }
예제 #11
0
        private void ExecuteDemuxSubtitle()
        {
            _currentEncoder = _mkvExtractSubtitle;

            ExecuteGenericEncoder();
        }
예제 #12
0
        private void ExecuteDump()
        {
            _currentEncoder = _mplayerDemuxer;

            ExecuteGenericEncoder();
        }
예제 #13
0
        private void ExecuteCopyTempFile()
        {
            _currentEncoder = _fileWorker;

            ExecuteGenericEncoder();
        }
예제 #14
0
        private void ExecuteMoveOutFile()
        {
            _currentEncoder = _fileWorker;

            ExecuteGenericEncoder();
        }