提交 de26bc95 编写于 作者: X Xinzheng Zhang

ijkplayer: add interface for setting playback volume

上级 f5aae3a7
......@@ -50,6 +50,7 @@
#define FFP_PROP_FLOAT_VIDEO_DECODE_FRAMES_PER_SECOND 10001
#define FFP_PROP_FLOAT_VIDEO_OUTPUT_FRAMES_PER_SECOND 10002
#define FFP_PROP_FLOAT_PLAYBACK_RATE 10003
#define FFP_PROP_FLOAT_PLAYBACK_VOLUME 10006
#define FFP_PROP_FLOAT_AVDELAY 10004
#define FFP_PROP_FLOAT_AVDIFF 10005
......
......@@ -2013,6 +2013,10 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
ffp->pf_playback_rate_changed = 0;
SDL_AoutSetPlaybackRate(ffp->aout, ffp->pf_playback_rate);
}
if (ffp->pf_playback_volume_changed) {
ffp->pf_playback_volume_changed = 0;
SDL_AoutSetPlaybackVolume(ffp->aout, ffp->pf_playback_volume);
}
while (len > 0) {
if (is->audio_buf_index >= is->audio_buf_size) {
......@@ -3917,6 +3921,14 @@ void ffp_set_playback_rate(FFPlayer *ffp, float rate)
ffp->pf_playback_rate_changed = 1;
}
void ffp_set_playback_volume(FFPlayer *ffp, float volume)
{
if (!ffp)
return;
ffp->pf_playback_volume = volume;
ffp->pf_playback_volume_changed = 1;
}
int ffp_get_video_rotate_degrees(FFPlayer *ffp)
{
VideoState *is = ffp->is;
......@@ -4006,6 +4018,8 @@ float ffp_get_property_float(FFPlayer *ffp, int id, float default_value)
return ffp ? ffp->stat.avdelay : default_value;
case FFP_PROP_FLOAT_AVDIFF:
return ffp ? ffp->stat.avdiff : default_value;
case FFP_PROP_FLOAT_PLAYBACK_VOLUME:
return ffp ? ffp->pf_playback_volume : default_value;
default:
return default_value;
}
......@@ -4016,6 +4030,10 @@ void ffp_set_property_float(FFPlayer *ffp, int id, float value)
switch (id) {
case FFP_PROP_FLOAT_PLAYBACK_RATE:
ffp_set_playback_rate(ffp, value);
break;
case FFP_PROP_FLOAT_PLAYBACK_VOLUME:
ffp_set_playback_volume(ffp, value);
break;
default:
return;
}
......
......@@ -102,6 +102,7 @@ void ffp_set_video_codec_info(FFPlayer *ffp, const char *module, const char
void ffp_set_audio_codec_info(FFPlayer *ffp, const char *module, const char *codec);
void ffp_set_playback_rate(FFPlayer *ffp, float rate);
void ffp_set_playback_volume(FFPlayer *ffp, float volume);
int ffp_get_video_rotate_degrees(FFPlayer *ffp);
int ffp_set_stream_selected(FFPlayer *ffp, int stream, int selected);
......
......@@ -656,6 +656,8 @@ typedef struct FFPlayer {
int af_changed;
float pf_playback_rate;
int pf_playback_rate_changed;
float pf_playback_volume;
int pf_playback_volume_changed;
void *inject_opaque;
FFStatistic stat;
......@@ -773,6 +775,8 @@ inline static void ffp_reset_internal(FFPlayer *ffp)
ffp->af_changed = 0;
ffp->pf_playback_rate = 1.0f;
ffp->pf_playback_rate_changed = 0;
ffp->pf_playback_volume = 1.0f;
ffp->pf_playback_volume_changed = 0;
av_application_closep(&ffp->app_ctx);
......
......@@ -202,6 +202,17 @@ void ijkmp_set_playback_rate(IjkMediaPlayer *mp, float rate)
MPTRACE("%s()=void\n", __func__);
}
void ijkmp_set_playback_volume(IjkMediaPlayer *mp, float volume)
{
assert(mp);
MPTRACE("%s(%f)\n", __func__, volume);
pthread_mutex_lock(&mp->mutex);
ffp_set_playback_volume(mp->ffplayer, volume);
pthread_mutex_unlock(&mp->mutex);
MPTRACE("%s()=void\n", __func__);
}
int ijkmp_set_stream_selected(IjkMediaPlayer *mp, int stream, int selected)
{
assert(mp);
......
......@@ -171,6 +171,8 @@ void ijkmp_set_option_int(IjkMediaPlayer *mp, int opt_category, const
int ijkmp_get_video_codec_info(IjkMediaPlayer *mp, char **codec_info);
int ijkmp_get_audio_codec_info(IjkMediaPlayer *mp, char **codec_info);
void ijkmp_set_playback_rate(IjkMediaPlayer *mp, float rate);
void ijkmp_set_playback_volume(IjkMediaPlayer *mp, float rate);
int ijkmp_set_stream_selected(IjkMediaPlayer *mp, int stream, int selected);
float ijkmp_get_property_float(IjkMediaPlayer *mp, int id, float default_value);
......
......@@ -105,6 +105,14 @@ void SDL_AoutSetPlaybackRate(SDL_Aout *aout, float playbackRate)
}
}
void SDL_AoutSetPlaybackVolume(SDL_Aout *aout, float volume)
{
if (aout) {
if (aout->func_set_playback_volume)
aout->func_set_playback_volume(aout, volume);
}
}
int SDL_AoutGetAudioSessionId(SDL_Aout *aout)
{
if (aout) {
......
......@@ -48,6 +48,7 @@ struct SDL_Aout {
// optional
void (*func_set_playback_rate)(SDL_Aout *aout, float playbackRate);
void (*func_set_playback_volume)(SDL_Aout *aout, float playbackVolume);
int (*func_get_audio_persecond_callbacks)(SDL_Aout *aout);
// Android only
......@@ -68,6 +69,7 @@ int SDL_AoutGetAudioPerSecondCallBacks(SDL_Aout *aout);
// optional
void SDL_AoutSetPlaybackRate(SDL_Aout *aout, float playbackRate);
void SDL_AoutSetPlaybackVolume(SDL_Aout *aout, float volume);
// android only
int SDL_AoutGetAudioSessionId(SDL_Aout *aout);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册