예제 #1
0
        private void DisposeAudioDecoder(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                _initialized = false;
                if (_mediaCodec != null)
                {
                    _mediaCodec.Stop();
                    _mediaCodec.Release();
                    _mediaCodec.Dispose();
                }

                if (_audioTrack != null)
                {
                    _audioTrack.Stop();
                    _audioTrack.Release();
                }
            }

            _initialized = false;
            _disposed    = true;

            _encoderThread.Interrupt();
            _decoderThread.Interrupt();
        }
        protected override void Dispose(bool disposing)
        {
            if (Control != null && videoView != null)
            {
                //videoView.Prepared -= OnVideoViewPrepared;
            }

            if (Element != null)
            {
                Element.UpdateStatus -= OnUpdateStatus;
            }

            rtspCancel.Cancel();
            Thread.Sleep(100);
            try
            {
                codec.Stop();
            }
            catch
            {
            }

            try
            {
                codec.Dispose();
            }
            catch
            {
            }

            rtspCancel = null;
            codec      = null;

            base.Dispose(disposing);
        }
예제 #3
0
 public void Close()
 {
     Console.WriteLine("called Close at PlatformVideoDecoderAndroid Class.");
     try
     {
         if (callbackThread != null)
         {
             myCallback.isClosed = true;
             callbackThread.Looper.Quit();
             callbackThread.Looper.Dispose();
             callbackThread.Interrupt();
             callbackThread.Dispose();
             callbackThread = null;
         }
         if (handler != null)
         {
             handler.Dispose();
             handler = null;
         }
         if (mDecoder != null)
         {
             mDecoder.Stop();
             mDecoder.Release();
             mDecoder.Dispose();
             eosReceived = true;
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.ToString());
     }
 }
예제 #4
0
파일: HwDecoder.cs 프로젝트: tomaszlt/Spixi
        public void stop()
        {
            if (!running)
            {
                return;
            }
            running = false;

            lock (pendingFrames)
            {
                pendingFrames.Clear();
                availableBuffers.Clear();
            }

            if (audioDecoder != null)
            {
                try
                {
                    audioDecoder.Stop();
                    audioDecoder.Release();
                }
                catch (Exception)
                {
                }
                audioDecoder.Dispose();
                audioDecoder = null;
            }
        }
예제 #5
0
        public static void ReturnDecoder(string mime, MediaCodec decoder)
        {
            lock (_decoders)
            {
                if (!_decoders.TryGetValue(mime, out List <Entry> codecs))
                {
                    codecs = new List <Entry>();
                    _decoders.Add(mime, codecs);
                }

                if (codecs.Count > _maxDecodersInPool)
                {
                    decoder.Dispose();
                }
                else
                {
                    codecs.Add(new Entry(decoder));

                    if (_allocationManager == null || _allocationManager.IsCompleted)
                    {
                        _allocationManager = Task.Factory.StartNew(
                            RemoveUnusedCodecs, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
                    }
                }
            }
        }
예제 #6
0
파일: HwEncoder.cs 프로젝트: tomaszlt/Spixi
 public void stop()
 {
     if (!running)
     {
         return;
     }
     running = false;
     if (audioEncoder != null)
     {
         try
         {
             audioEncoder.Stop();
             audioEncoder.Release();
         }
         catch (Exception)
         {
         }
         audioEncoder.Dispose();
         audioEncoder = null;
     }
     lock (availableBuffers)
     {
         availableBuffers.Clear();
     }
 }
예제 #7
0
 public void Dispose()
 {
     if (_videoCodec != null)
     {
         _videoCodec.Stop();
         _videoCodec.Release();
         _videoCodec.Dispose();
     }
     _videoFrameQueue.Clear();
 }
예제 #8
0
 public void Dispose()
 {
     if (_audioCodec != null)
     {
         _audioCodec.Stop();
         _audioCodec.Release();
         _audioCodec.Dispose();
     }
     _audioFrameQueue.Clear();
 }
예제 #9
0
    private void cleanUp()
    {
        running = false;

        if (audioRecorder != null)
        {
            try
            {
                audioRecorder.Stop();
                audioRecorder.Release();
            }catch (Exception)
            {
            }
            audioRecorder.Dispose();
            audioRecorder = null;
        }

        if (audioEncoder != null)
        {
            try
            {
                audioEncoder.Stop();
                audioEncoder.Release();
            }
            catch (Exception)
            {
            }
            audioEncoder.Dispose();
            audioEncoder = null;
        }

        buffer     = null;
        bufferSize = 0;
        lock (outputBuffers)
        {
            outputBuffers.Clear();
        }
        lock (availableBuffers)
        {
            availableBuffers.Clear();
        }
    }
예제 #10
0
        private void DisposeVideoDecoder(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                if (_mediaCodec != null)
                {
                    _mediaCodec.Stop();
                    _mediaCodec.Release();
                    _mediaCodec.Dispose();
                }
            }

            Initialized = false;
            _disposed   = true;
        }