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 ccae6f0672
commit 9375d763f1

@ -666,6 +666,20 @@ found:
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,
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 (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)
mp->coder.handler = codec_handler_make_playback(src_pt, dst_pt, mp->sync_ts, mp->media);

@ -5,6 +5,7 @@
#include "auxlib.h"
#include "timerthread.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,
const struct rtp_payload_type *dst_pt);
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,
long long us_dur, unsigned long long pts);

Loading…
Cancel
Save