1. 06 Dec, 2018 9 commits
    • 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
      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
  2. 05 Dec, 2018 1 commit
  3. 18 Sep, 2018 1 commit
    • Philippe Gorley's avatar
      recorder: remove warnings · 90eae94d
      Philippe Gorley authored
      Replace deprecation attributes with a commented note to remove 30 or so
      compilation warnings.
      Deprecation should be used to tell clients what they should and
      shouldn't use, and since these fields are private, only the
      MediaRecorder can use them.
      Change-Id: I227d3508f982b174ca71efca49d5fedad47b1888
  4. 23 Aug, 2018 1 commit
    • 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
  5. 16 Aug, 2018 1 commit
  6. 05 Jul, 2018 1 commit
  7. 03 Jul, 2018 1 commit
  8. 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
  9. 21 Jun, 2018 1 commit
  10. 20 Jun, 2018 1 commit
    • 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
  11. 14 Jun, 2018 1 commit
  12. 06 Jun, 2018 1 commit
    • Philippe Gorley's avatar
      media: add video recording support · c21c5b77
      Philippe Gorley authored
      If there are 2 video streams, overlays local video over peer video. Peer
      video will be upscaled if it is too small, while local video will be
      scaled to 1/16th the size of the peer video.
      If there is only 1 video stream, uses peer video settings if they are
      valid, or fall back on local video settings.
      Adds title and description metadata to recorded file.
      Change-Id: I182de013e3ac2d18161eadf406fc6494e5f59a4e
  13. 29 May, 2018 1 commit