Browse Source

MT#56471 add media_player_pt_match()

Convenience function to check whether any formats have changed, which
would indicate that a restart of the media player is needed.

Functional no-op.

Change-Id: I2bc9b57b95bb229bc4f8cfc49ca662fa724d3642
pull/1623/head
Richard Fuchs 3 years ago
parent
commit
9375d763f1
2 changed files with 21 additions and 7 deletions
  1. +17
    -7
      daemon/media_player.c
  2. +4
    -0
      include/media_player.h

+ 17
- 7
daemon/media_player.c View File

@ -666,6 +666,20 @@ found:
return dst_pt; return dst_pt;
} }
bool media_player_pt_match(const struct media_player *mp, const struct rtp_payload_type *src_pt,
const struct rtp_payload_type *dst_pt)
{
if (!mp->coder.handler)
return true; // not initialised yet -> doesn't need a reset
if (!rtp_payload_type_eq_exact(&mp->coder.handler->dest_pt, dst_pt))
return false;
if (!rtp_payload_type_eq_exact(&mp->coder.handler->source_pt, src_pt))
return false;
return true;
}
int media_player_setup(struct media_player *mp, const struct rtp_payload_type *src_pt, int media_player_setup(struct media_player *mp, const struct rtp_payload_type *src_pt,
const struct rtp_payload_type *dst_pt) const struct rtp_payload_type *dst_pt)
{ {
@ -682,13 +696,9 @@ int media_player_setup(struct media_player *mp, const struct rtp_payload_type *s
} }
// if we already have a handler, see if anything needs changing // if we already have a handler, see if anything needs changing
if (mp->coder.handler) {
if (!rtp_payload_type_eq_exact(&mp->coder.handler->dest_pt, dst_pt)
|| !rtp_payload_type_eq_exact(&mp->coder.handler->source_pt, src_pt))
{
ilog(LOG_DEBUG, "Resetting codec handler for media player");
codec_handler_free(&mp->coder.handler);
}
if (!media_player_pt_match(mp, src_pt, dst_pt)) {
ilog(LOG_DEBUG, "Resetting codec handler for media player");
codec_handler_free(&mp->coder.handler);
} }
if (!mp->coder.handler) if (!mp->coder.handler)
mp->coder.handler = codec_handler_make_playback(src_pt, dst_pt, mp->sync_ts, mp->media); mp->coder.handler = codec_handler_make_playback(src_pt, dst_pt, mp->sync_ts, mp->media);


+ 4
- 0
include/media_player.h View File

@ -5,6 +5,7 @@
#include "auxlib.h" #include "auxlib.h"
#include "timerthread.h" #include "timerthread.h"
#include "str.h" #include "str.h"
#include <stdbool.h>
@ -113,6 +114,9 @@ long long media_player_stop(struct media_player *);
int media_player_setup(struct media_player *mp, const struct rtp_payload_type *src_pt, int media_player_setup(struct media_player *mp, const struct rtp_payload_type *src_pt,
const struct rtp_payload_type *dst_pt); const struct rtp_payload_type *dst_pt);
void media_player_set_media(struct media_player *mp, struct call_media *media); void media_player_set_media(struct media_player *mp, struct call_media *media);
bool media_player_pt_match(const struct media_player *mp, const struct rtp_payload_type *src_pt,
const struct rtp_payload_type *dst_pt);
void media_player_add_packet(struct media_player *mp, char *buf, size_t len, void media_player_add_packet(struct media_player *mp, char *buf, size_t len,
long long us_dur, unsigned long long pts); long long us_dur, unsigned long long pts);


Loading…
Cancel
Save