summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRafael Antognolli <antognolli@gmail.com>2011-10-03 18:19:48 +0000
committerRafael Antognolli <antognolli@gmail.com>2011-10-03 18:19:48 +0000
commit0fc229c216fce8d74e9c5824d1691f2d7a55ba85 (patch)
tree694bc128880c2210ad655cb14e077d45a26b8160 /src
parenta4b677a224db2340bd92c328af139e647dc793a2 (diff)
downloademotion_generic_players-0fc229c216fce8d74e9c5824d1691f2d7a55ba85.tar.gz
emotion/generic/vlc: VLC needs to write data somewhere.
It seems that depending on the system, vlc can't use a NULL pointer to the pixels where it should write its data. So a small amount of memory should be allocated and passed to its rendering callbacks (specifically, the lock callback) when the file is being opened and decoded for the first time. Then this memory can be freed, since the real rendering will happen on the shared memory area. SVN revision: 63777
Diffstat (limited to 'src')
-rw-r--r--src/vlc/emotion_generic_vlc.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/vlc/emotion_generic_vlc.c b/src/vlc/emotion_generic_vlc.c
index 4fb8ba0..848cabb 100644
--- a/src/vlc/emotion_generic_vlc.c
+++ b/src/vlc/emotion_generic_vlc.c
@@ -35,6 +35,7 @@ struct _App {
libvlc_event_manager_t *mevent_mgr;
char *filename;
char *shmname;
+ void *tmpbuffer;
int w, h;
int fd_read; // read commands from theads here
int fd_write; // write commands from threads here
@@ -276,7 +277,8 @@ _display(void *data, void *id)
static void *
_tmp_lock(void *data, void **pixels)
{
- *pixels = NULL;
+ struct _App *app = data;
+ *pixels = app->tmpbuffer;
return NULL;
}
@@ -398,7 +400,7 @@ _file_set(struct _App *app)
app->opening = 1;
libvlc_video_set_format(app->mp, "RV32", DEFAULTWIDTH, DEFAULTHEIGHT, DEFAULTWIDTH * 4);
- libvlc_video_set_callbacks(app->mp, _tmp_lock, _tmp_unlock, _tmp_display, NULL);
+ libvlc_video_set_callbacks(app->mp, _tmp_lock, _tmp_unlock, _tmp_display, app);
app->event_mgr = libvlc_media_player_event_manager(app->mp);
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerPositionChanged,
_event_cb, app);
@@ -407,6 +409,7 @@ _file_set(struct _App *app)
app->mevent_mgr = libvlc_media_event_manager(app->m);
+ app->tmpbuffer = malloc(sizeof(char) * DEFAULTWIDTH * DEFAULTHEIGHT * 4);
libvlc_audio_set_mute(app->mp, 1);
libvlc_media_player_play(app->mp);
}
@@ -560,6 +563,7 @@ release_resources:
{
libvlc_media_release(app->m);
libvlc_media_player_release(app->mp);
+ free(app->tmpbuffer);
}
}