MT#61630 play media NG: move essential body to a function

Move part of the `call_play_media_ng` function body
to a separate function, to let it be available
for external function calls not particularly related
to play media NG function call.

Change-Id: Iaf4e8f72f1492446508fd6b49ba36434cae5f5f0
pull/1897/head
Donat Zenichev 12 months ago
parent a73402b8c9
commit 1a8132691a

@ -3590,15 +3590,6 @@ const char *call_play_media_ng(ng_command_ctx_t *ctx) {
for (__auto_type l = monologues.head; l; l = l->next) {
struct call_monologue *monologue = l->data;
// if mixing is enabled, codec handlers of all sources must be updated
codec_update_all_source_handlers(monologue, &flags);
// this starts the audio player if needed
update_init_subscribers(monologue, OP_PLAY_MEDIA);
// media_player_new() now knows that audio player is in use
// TODO: player options can have changed if already exists
media_player_new(&monologue->player, monologue);
media_player_opts_t opts = MPO(
.repeat = flags.repeat_times,
.start_pos = flags.start_pos,
@ -3606,20 +3597,9 @@ const char *call_play_media_ng(ng_command_ctx_t *ctx) {
.codec_set = flags.codec_set,
);
if (flags.file.len) {
if (!media_player_play_file(monologue->player, &flags.file, opts))
return "Failed to start media playback from file";
}
else if (flags.blob.len) {
if (!media_player_play_blob(monologue->player, &flags.blob, opts))
return "Failed to start media playback from blob";
}
else if (flags.db_id > 0) {
if (!media_player_play_db(monologue->player, flags.db_id, opts))
return "Failed to start media playback from database";
}
else
return "No media file specified";
err = call_play_media_for_ml(monologue, opts, &flags.file, &flags.blob, flags.db_id, &flags);
if (err)
return err;
if (l == monologues.head && monologue->player->coder.duration)
parser->dict_add_int(ctx->resp, "duration", monologue->player->coder.duration);

@ -1166,6 +1166,42 @@ bool media_player_init_file(struct media_player *mp, const str *file, media_play
return ret == 0;
}
const char * call_play_media_for_ml(struct call_monologue *ml,
media_player_opts_t opts,
const str * file,
const str * blob,
long long db_id,
sdp_ng_flags *flags)
{
#ifdef WITH_TRANSCODING
/* if mixing is enabled, codec handlers of all sources must be updated */
codec_update_all_source_handlers(ml, flags);
/* this starts the audio player if needed */
update_init_subscribers(ml, OP_PLAY_MEDIA);
/* media_player_new() now knows that audio player is in use
* TODO: player options can have changed if already exists */
media_player_new(&ml->player, ml);
if (file->len) {
if (!media_player_play_file(ml->player, file, opts))
return "Failed to start media playback from file";
}
else if (blob->len) {
if (!media_player_play_blob(ml->player, blob, opts))
return "Failed to start media playback from blob";
}
else if (db_id > 0) {
if (!media_player_play_db(ml->player, db_id, opts))
return "Failed to start media playback from database";
}
else
return "No media file specified";
return NULL;
#else
return "Not implemented";
#endif
}
#ifdef WITH_TRANSCODING
static int __mp_avio_read_wrap(void *opaque, uint8_t *buf, int buf_size) {

@ -135,6 +135,13 @@ bool media_player_pt_match(const struct media_player *mp, const rtp_payload_type
void media_player_add_packet(struct media_player *mp, char *buf, size_t len,
long long us_dur, unsigned long long pts);
const char * call_play_media_for_ml(struct call_monologue *ml,
media_player_opts_t opts,
const str * file,
const str * blob,
long long db_id,
sdp_ng_flags *flags);
void media_player_init(void);
void media_player_free(void);
void media_player_launch(void);

Loading…
Cancel
Save