#ifdef HAVE_LIBSNDFILE
#include <sndfile.h>
#endif
+#include <vconf.h>
int _edje_multisense_default_log_dom = -1;
# undef ERR
#endif
#define ERR(...) EINA_LOG_DOM_ERR(_edje_multisense_default_log_dom, __VA_ARGS__)
+#ifdef WRN
+# undef WRN
+#endif
+#define WRN(...) EINA_LOG_DOM_WARN(_edje_multisense_default_log_dom, __VA_ARGS__)
-#define STREAM_PLAYER_BUFFERLEN 4096
+#define STREAM_PLAYER_BUFFERLEN 2048
#define DEFAULT_FORMAT MMSOUND_PCM_S16_LE
typedef struct _RemixPlayerData RemixPlayerData;
PLAYER_PCM *playbuffer;
MMSoundPcmHandle_t handle;
MMSoundPcmChannel_t channel;
+ RemixPCM max_value;
+ RemixEnv *env;
+ RemixBase *base;
+ int snd_on;
unsigned int buffer_size;
int stereo;
int frequency;
};
/* Optimisation dependencies: none */
-static RemixBase * remix_player_optimise (RemixEnv * env, RemixBase * base);
+static RemixBase *remix_player_optimise (RemixEnv *env, RemixBase *base);
static RemixBase *
remix_player_reset_device (RemixEnv *env, RemixBase *base)
{
int old_buffer_size;
- RemixPlayerData * player_data = remix_base_get_instance_data(env, base);
+ RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
if (player_data->handle)
{
return base;
}
+static void
+_vconf_noti_key_changed_cb(keynode_t *node, void *data)
+{
+ RemixPlayerData *player = (RemixPlayerData *)data;
+ char *keyname = vconf_keynode_get_name(node);
+
+ if (strcmp(keyname, VCONFKEY_SETAPPL_SOUND_STATUS_BOOL) == 0)
+ player->snd_on = vconf_keynode_get_bool(node);
+
+ else if (strcmp(keyname, VCONFKEY_SYSMAN_EARJACK) == 0)
+ {
+ int ear_jack = vconf_keynode_get_int(node);
+ if (ear_jack == VCONFKEY_SYSMAN_EARJACK_REMOVED)
+ remix_player_reset_device (player->env, player->base);
+ }
+}
+
static RemixBase *
-remix_player_init (RemixEnv * env, RemixBase * base, CDSet * parameters)
+remix_player_init (RemixEnv *env, RemixBase *base, CDSet *parameters)
{
RemixCount nr_channels;
- CDSet * channels;
+ CDSet *channels;
RemixPlayerData *player_data = calloc(1, sizeof (RemixPlayerData));
if (!player_data)
}
remix_base_set_instance_data(env, base, player_data);
- remix_set_channels(env, REMIX_STEREO);
channels = remix_get_channels (env);
nr_channels = cd_set_size (env, channels);
player_data->frequency = remix_get_samplerate(env);
player_data->buffer_size = 0;
+ player_data->max_value = (RemixPCM) SHRT_MAX / 2;
remix_player_reset_device (env, (RemixBase *)base);
base = remix_player_optimise (env, base);
+ player_data->env = env;
+ player_data->base = base;
+ if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &player_data->snd_on) < 0)
+ WRN("\nFail to get VCONFKEY_SETAPPL_SOUND_STATUS_BOOL boolean value");
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,_vconf_noti_key_changed_cb, player_data) < 0)
+ WRN("\nFail to register VCONFKEY_SETAPPL_SOUND_STATUS_BOOL key callback");
+ if (vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACK, _vconf_noti_key_changed_cb, player_data) < 0)
+ WRN("\nFail to register VCONFKEY_SYSMAN_EARJACK key callback");
return base;
}
static RemixBase *
-remix_player_clone (RemixEnv * env, RemixBase * base)
+remix_player_clone (RemixEnv *env, RemixBase *base)
{
- RemixBase * new_player = remix_base_new (env);
+ RemixBase *new_player = remix_base_new (env);
remix_player_init( env, new_player, NULL);
return new_player;
}
static int
-remix_player_destroy (RemixEnv * env, RemixBase * base)
+remix_player_destroy (RemixEnv *env, RemixBase *base)
{
- RemixPlayerData * player_data = remix_base_get_instance_data(env, base);
+ RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,_vconf_noti_key_changed_cb) < 0)
+ WRN("\nFail to unregister VCONFKEY_SETAPPL_SOUND_STATUS_BOOL key callback");
+ if (vconf_ignore_key_changed(VCONFKEY_SYSMAN_EARJACK, _vconf_noti_key_changed_cb) < 0)
+ WRN("\nFail to unregister VCONFKEY_SYSMAN_EARJACK key callback");
if(player_data->handle)
mm_sound_pcm_play_close(player_data->handle);
}
static int
-remix_player_ready (RemixEnv * env, RemixBase * base)
+remix_player_ready (RemixEnv *env, RemixBase *base)
{
- RemixPlayerData * player_data = remix_base_get_instance_data(env, base);
+ RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
RemixCount nr_channels;
- CDSet * channels;
+ CDSet *channels;
int samplerate;
channels = remix_get_channels (env);
}
static RemixBase *
-remix_player_prepare (RemixEnv * env, RemixBase * base)
+remix_player_prepare (RemixEnv *env, RemixBase *base)
{
remix_player_reset_device (env, base);
return base;
}
static RemixCount
-remix_player_playbuffer (RemixEnv * env, RemixPlayerData * player, RemixPCM * data,
+remix_player_playbuffer (RemixEnv *env, RemixPlayerData *player, RemixPCM *data,
RemixCount count)
{
RemixCount i;
RemixPCM value;
int ret = count;
- const RemixPCM max_value = (RemixPCM) (SHRT_MAX);
+ size_t length;
+
+ length = count * sizeof(RemixCount);
for (i = 0; i < count; i++)
{
- value = *data++ * max_value;
+ value = *data++ * (player->max_value);
*(player->playbuffer + i) = (PLAYER_PCM) value;
}
ret = mm_sound_pcm_play_write(player->handle,
player->playbuffer,
- 2 * count);
+ length);
if(ret < 0)
ERR("Write Fail\n");
- return ret;
+ return length;
}
/* An RemixChunkFunc for making noise */
static RemixCount
-remix_player_chunk (RemixEnv * env, RemixChunk * chunk, RemixCount offset,
- RemixCount count, int channelname, void * data)
+remix_player_chunk (RemixEnv *env, RemixChunk *chunk, RemixCount offset,
+ RemixCount count, int channelname, void *data)
{
- RemixPlayerData * player = (RemixPlayerData *)data;
+ RemixPlayerData *player = (RemixPlayerData *)data;
RemixCount remaining = count, written = 0, n, playcount;
- RemixPCM * d;
+ RemixPCM *d;
while (remaining > 0)
{
}
static RemixCount
-remix_player_process (RemixEnv * env, RemixBase * base, RemixCount count,
- RemixStream * input, RemixStream * output)
+remix_player_process (RemixEnv *env, RemixBase *base, RemixCount count,
+ RemixStream *input, RemixStream *output)
{
- RemixPlayerData * player_data = remix_base_get_instance_data(env, base);
- RemixCount nr_channels = remix_stream_nr_channels (env, input);
- RemixCount remaining = count, processed = 0, n, nn;
+ RemixCount remaining = count, processed = 0, n, nn, nr_channels;
+ RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
+
+ if (!player_data->snd_on) return count;
+ nr_channels = remix_stream_nr_channels (env, input);
if (nr_channels == 1 && player_data->stereo == 0)
{ /* MONO */
{ /* STEREO */
while (remaining > 0)
{
- n = MIN (remaining, (player_data->buffer_size/2) );
+ n = MIN (remaining, (player_data->buffer_size / 2) );
n = remix_stream_interleave_2 (env, input,
REMIX_CHANNEL_LEFT, REMIX_CHANNEL_RIGHT,
player_data->databuffer, n);
}
static RemixCount
-remix_player_length (RemixEnv * env, RemixBase * base)
+remix_player_length (RemixEnv *env, RemixBase *base)
{
return REMIX_COUNT_INFINITE;
}
static RemixCount
-remix_player_seek (RemixEnv * env, RemixBase * base, RemixCount count)
+remix_player_seek (RemixEnv *env, RemixBase *base, RemixCount count)
{
return count;
}
static int
-remix_player_flush (RemixEnv * env, RemixBase * base)
+remix_player_flush (RemixEnv *env, RemixBase *base)
{
- RemixPlayerData * player_data = remix_base_get_instance_data(env, base);
+ RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
remix_player_reset_device (env, base);
return 0;
}
};
static RemixBase *
-remix_player_optimise (RemixEnv * env, RemixBase * base)
+remix_player_optimise (RemixEnv *env, RemixBase *base)
{
remix_base_set_methods (env, base, &_remix_player_methods);
return base;
};
EAPI CDList *
-remix_load (RemixEnv * env)
+remix_load (RemixEnv *env)
{
- CDList * plugins = cd_list_new (env);
+ CDList *plugins = cd_list_new (env);
plugins = cd_list_prepend (env, plugins,
CD_POINTER(&tizen_player_plugin));
return plugins;