1. 07 Aug, 2019 1 commit
    • Philippe Gorley's avatar
      recorder: add preferences · 431cee5d
      Philippe Gorley authored
      Adds whether or not the local video feed should be overlaid on the
      remote video feed. Adds a quality setting for the recorder.
      Change-Id: I60bd80c6441c7d516120680bebb1acdeb3824c49
  2. 29 Apr, 2019 1 commit
  3. 02 Apr, 2019 1 commit
    • Adrien Béraud's avatar
      sources: rename to jami · 2130f067
      Adrien Béraud authored
      * rename namespace from ring to jami
      * rename logs methods from RING_* to JAMI_*
      * rename RING_VIDEO to ENABLE_VIDEO
      Change-Id: Ic98498652d7059fafe58a96220d565bcdfa53658
  4. 26 Mar, 2019 2 commits
    • Philippe Gorley's avatar
      encoder: lazy initialize video stream · dfdee183
      Philippe Gorley authored
      Sets up video streams upon receiving the first video frame. Audio
      streams are still initialized as soon as possible.
      This allows a video encoder to use the pixel format of its received
      frames, and to set up a hardware transcoding pipeline if it receives
      a hardware frame.
      Change-Id: I622fc44b6096d63d7423837d2f2ec15680548a83
    • Adrien Béraud's avatar
      media recorder: add video rotation · 6d2de6ca
      Adrien Béraud authored
      Change-Id: I8f31ff13b68afb9383ce05c8f11b104c2bc419bd
  5. 07 Mar, 2019 1 commit
  6. 06 Mar, 2019 1 commit
    • Philippe Gorley's avatar
      accel: modernise decoding · fda668f9
      Philippe Gorley authored
      Rewrites the hardware decoding system with C++-style code instead of
      Removes support for hardware decoding h263, as we do not use the h263p
      decoder, which is the codec with hardware support.
      Change-Id: I96b796ba8847dadd388c6e29eaee1115b25c2fb3
  7. 13 Feb, 2019 1 commit
    • Philippe Gorley's avatar
      video: keep hardware frame reference · e928f99e
      Philippe Gorley authored
      Adds possibility to keep the hardware frame reference on the receiver
      side instead of immediately transferring it to main memory.
      Components that require software frames were updated to transfer the
      frame back to main memory.
      Change-Id: Idb9ecb64fdefedb9db160ec93592d7a047d356e8
  8. 12 Feb, 2019 1 commit
    • Philippe Gorley's avatar
      encoder: cleanup and simplify · e059062a
      Philippe Gorley authored
      Cleans up the encoder a bit and removes methods that weren't used or did
      nothing. In any case, it should not be the encoder's responsibility to
      mute audio/video.
      Removes direct accesses to private data. All these options are accessible
      through the av_opt_* API with the AV_OPT_SEARCH_CHILDREN flag.
      Adding streams to the encoder is now done separately than opening an RTP
      output in an effort to streamline the encoder setup (file vs RTP).
      Change-Id: I7a868d098fa942697cfbe3246f368fb9fc7bfb0f
  9. 24 Jan, 2019 1 commit
  10. 02 Jan, 2019 1 commit
  11. 06 Dec, 2018 11 commits
    • Philippe Gorley's avatar
      recorder: flush properly · e675beaa
      Philippe Gorley authored
      Adds flushing capability to filters.
      Change-Id: I015d7931318deb5d099fcaac1356f5fc17b890d6
    • Philippe Gorley's avatar
      recorder: remove dynamic casts · c455eceb
      Philippe Gorley authored
      Have an intermediate object subscribe to the media sources while also
      keeping a copy of the stream name. The recorder can then keep a
      reference to these to figure out the source of the frame, instead of
      knowing what objects it subscribes to.
      Change-Id: I4a34c8b035301eefc90645cf6cb500dbcd879f91
    • Philippe Gorley's avatar
      media: make observers/obervables use MediaFrame · fc83b1f8
      Philippe Gorley authored
      Makes it so observers don't need to implement Observer<T> twice to
      receive audio and video frames.
      Change-Id: Id73c384342bd786b4f83950937b4dbd13a31fc41
    • Philippe Gorley's avatar
      recorder: remove internal thread loop · 3fcd9b9e
      Philippe Gorley authored
      Move thread to ThreadPool, so the recorder can finish its job even after
      Change-Id: I7ff1898ce8035a00a488aad53bbb16a6b8a56bcc
      Gitlab: #40
    • Philippe Gorley's avatar
      recorder: refactor and simplify · 4a0bf2e4
      Philippe Gorley authored
      Removes need for frame queue, as there's already an internal queue in
      libavfilter. Once a frame is received, feed it directly to the filter.
      The recorder's thread now only needs to send filtered frames to the
      Change-Id: I37bfa6e61f492cec120989fe210e92752e63466f
    • Philippe Gorley's avatar
      recorder: add doc and reorganize code · 03780c7b
      Philippe Gorley authored
      Change-Id: I68c9b2b2ea3863653f86fcabd17ad4128f0ebcfd
    • Philippe Gorley's avatar
      recorder: make adding streams public · dd6199ac
      Philippe Gorley authored
      Instead of casting the observable object in the attached callback, have
      the recorder's owner add the streams manually.
      Change-Id: I5c79e32e470364b0c6a4253f50357a4bafade769
    • Philippe Gorley's avatar
      recorder: remove expected/received streams logic · a2264383
      Philippe Gorley authored
      Caller should know what streams to add to the recorder and use
      Observable::attach before calling Recordable::startRecording.
      Change-Id: I14d19406cdaf047bd3b612c69775fc4ddbc21142
    • Philippe Gorley's avatar
      recorder: remove toggle and recording path · d7e524e6
      Philippe Gorley authored
      It should not be up to the recorder to manage this state, it should be
      up to the caller.
      Removes deprecated setRecordingPath in order to only use setPath.
      Change-Id: Ib920c041d61c8fd49607ad15c69801144fc165c8
    • Philippe Gorley's avatar
      audio: add ability to get stream information · ec03a19e
      Philippe Gorley authored
      Changes name from getStream to getInfo.
      Change-Id: I17b2eedb03dd707146b30062e755c5cd80c559fb
    • Philippe Gorley's avatar
      recorder: subscribe to audio/video sources · 351856e7
      Philippe Gorley authored
      Makes the MediaRecorder an observer on AudioInput, AudioReceiveThread,
      VideoInput and VideoReceiveThread, so they no longer need a reference
      to the recorder.
      Makes sure the framerate is set for the recorder by adding a way to get
      the stream parameters from the video receiver and input, since AVFrame
      does not carry framerate and time base information.
      Adds way to detach the recorder from the media sources, so it can be
      reattached on subsequent records.
      Change-Id: I71bac0825541f6445861f4f949288e1c62416f05
  12. 05 Dec, 2018 1 commit
  13. 11 Sep, 2018 1 commit
    • Hugo Lefeuvre's avatar
      localrecorder: add public interface · 1179ad57
      Hugo Lefeuvre authored
      Initial import of the localrecorder.
      The local recorder provides a public interface for recording audio and
      video messages locally. For instance this can be used to record voice
      or video messages that could be later sent via file transfer.
      Change-Id: I0675fc0fb8588db24ae86302a76d4d68f5871b82
  14. 23 Aug, 2018 2 commits
    • Philippe Gorley's avatar
      recorder: refactor and simplify · f1088fa8
      Philippe Gorley authored
      1. Adds constness to streams in MediaRecorder; the latter shouldn't change
      stream parameters.
      2. addStream is called from recordData to simplify workflow; users need
      only check that MediaRecorder is recording.
      3. Fixes regression where multiple records couldn't happen in the same
      4. Fixes AudioSender not sending starting timestamp to help mix audio.
      5. MediaStream::name is now used as key for the streams_ map, so it must
      be constant, filter names are no longer hardcoded in the recorder.
      6. fromPeer parameter is determined by checking if MediaStream::name
      contains the string "remote".
      7. Adds copy constructor to MediaStream.
      8. Renames incrementStreams to incrementExpectedStreams to better reflect
      what it does.
      9. Removes keyframe triggers when starting a video record; we are
      recording raw frames, so it doesn't matter if they're keyframes or not.
      10. MediaRecorder supports more than 2 audio streams, but not video.
      11. Move preview to very bottom right corner.
      12. Fix potential Unchecked Return Value to NULL Pointer Dereference in
      recordData() (CWE-690).
      Gitlab: #39
      Change-Id: Id2fae4e9bb2072994c065e4843cc3ad832f89efc
    • Hugo Lefeuvre's avatar
      media_filter: remove simple filters · 9d36c29e
      Hugo Lefeuvre authored
      Change-Id: Ie45773677290111f92b81230071835ac42e7197e
      Reviewed-by: Philippe Gorley's avatarPhilippe Gorley <philippe.gorley@savoirfairelinux.com>
  15. 21 Aug, 2018 1 commit
  16. 16 Aug, 2018 1 commit
  17. 12 Jul, 2018 1 commit
    • Philippe Gorley's avatar
      recorder: refactor pipeline · 11585ed2
      Philippe Gorley authored
      Moves the recorder up one level to the VideoInput, VideoReceiveThread
      and AudioReceiveThread, instead of the MediaDecoder (there's no
      equivalent to the VideoInput in the audio layer).
      Emits the RecordPlaybackStopped when the recording is stopped, so the
      client can sync its recording state with the daemon, in case the daemon
      stops recording by itself (rather than user intervention).
      Change-Id: I743b080cb354273ec074fec51caf2a4328fc1c58
  18. 06 Jul, 2018 1 commit
  19. 05 Jul, 2018 1 commit
  20. 03 Jul, 2018 2 commits
  21. 29 Jun, 2018 1 commit
    • Philippe Gorley's avatar
      recorder: improve multithreading · c17099ae
      Philippe Gorley authored
      Better scopes mutices, adds multithreading to MediaFilter, improves
      multithreading for MediaRecorder, decreases lag between both video feeds
      while recording.
      Change-Id: I9f96c1e90d506a8dc4a261a7e07010d42e5bf3ec
  22. 28 Jun, 2018 1 commit
    • Philippe Gorley's avatar
      recorder: ensure format is supported by codecs · 563e274a
      Philippe Gorley authored
      VP8 only supports YUV420 frames, and Opus doesn't support every sample
      rate, so convert to known supported formats before saving the frames to
      Change-Id: I27665437ea95a11ad9a08df76cf666a5f08643b8
  23. 22 Jun, 2018 1 commit
    • Philippe Gorley's avatar
      recorder: save to webm · c5940d8a
      Philippe Gorley authored
      Use a stricter format to ensure better support by media players, since
      Matroska can contain anything, while WebM is restricted to a handful of
      Change-Id: I19fa2e6b0cb3d8117edcd37c790b3df458b23bcc
  24. 21 Jun, 2018 2 commits
  25. 20 Jun, 2018 2 commits
    • Hugo Lefeuvre's avatar
      media_recorder: deprecate path generation · 1c057a3a
      Hugo Lefeuvre authored
      Recorded conversations should be stored at a location specified by
      the client.
      Currently the MediaRecorder generates a filename using timestamps,
      and the directory is either specified by the user in the config.yml
      or defaulted to the user's /home. This is not a wanted behavior.
      This commit introduces the necessary logic to set recording file path
      using setPath and deprecates the old way of specifying filename and
      The changes are backward compatible for transition purposes.
      In addition to this refactoring, this commit renames the getFilename()
      method to getPath(). In fact this method returns "full paths" and not
      filenames, so it doesn't make much sense to call it getFilename().
      Change-Id: I8eb9756dd1bf2a18fb0c97eec8b9bb72c259a7e5
    • Hugo Lefeuvre's avatar
      media_recorder: allow streams without audio · ef6f8136
      Hugo Lefeuvre authored
      Streams without audio are currently detected as invalid by the check
      in initRecord(). Add missing nbReceivedAudioStreams_ == 0 check.
      Also, make sure nbReceivedVideoStreams_ is zero when audioOnly_ is
      Change-Id: I801a6c60f691a825fd27e94dda7a12df3c5efc9c