]> git.sesse.net Git - vlc/commitdiff
bluray: cosmetics
authorRafaël Carré <funman@videolan.org>
Mon, 12 Aug 2013 07:25:13 +0000 (09:25 +0200)
committerRafaël Carré <funman@videolan.org>
Fri, 16 Aug 2013 10:43:13 +0000 (12:43 +0200)
modules/access/bluray.c

index 0cb2e6f88886b3026c8f75e19e0fadc5659a6f02..93019dd590a99eca97fd31aa8f9e5343e1216f5a 100644 (file)
@@ -235,9 +235,9 @@ static int blurayOpen( vlc_object_t *object )
 
     /* */
     p_demux->p_sys = p_sys = calloc(1, sizeof(*p_sys));
-    if (unlikely(!p_sys)) {
+    if (unlikely(!p_sys))
         return VLC_ENOMEM;
-    }
+
     p_sys->current_overlay = -1;
     p_sys->i_audio_stream = -1;
     p_sys->i_video_stream = -1;
@@ -363,9 +363,8 @@ static int blurayOpen( vlc_object_t *object )
 
     vlc_array_init(&p_sys->es);
     p_sys->p_out = esOutNew( p_demux );
-    if (unlikely(p_sys->p_out == NULL)) {
+    if (unlikely(p_sys->p_out == NULL))
         goto error;
-    }
 
     blurayResetParser( p_demux );
     if (!p_sys->p_parser) {
@@ -404,8 +403,8 @@ static void blurayClose( vlc_object_t *object )
     bd_close(p_sys->bluray);
 
     if (p_sys->p_vout != NULL) {
-        var_DelCallback(p_sys->p_vout, "mouse-moved", &onMouseEvent, p_demux);
-        var_DelCallback(p_sys->p_vout, "mouse-clicked", &onMouseEvent, p_demux);
+        var_DelCallback(p_sys->p_vout, "mouse-moved", onMouseEvent, p_demux);
+        var_DelCallback(p_sys->p_vout, "mouse-clicked", onMouseEvent, p_demux);
         vlc_object_release(p_sys->p_vout);
     }
     if (p_sys->p_input != NULL)
@@ -532,11 +531,11 @@ static es_out_t *esOutNew( demux_t *p_demux )
     if ( unlikely(p_out == NULL) )
         return NULL;
 
-    p_out->pf_add       = &esOutAdd;
-    p_out->pf_control   = &esOutControl;
-    p_out->pf_del       = &esOutDel;
-    p_out->pf_destroy   = &esOutDestroy;
-    p_out->pf_send      = &esOutSend;
+    p_out->pf_add       = esOutAdd;
+    p_out->pf_control   = esOutControl;
+    p_out->pf_del       = esOutDel;
+    p_out->pf_destroy   = esOutDestroy;
+    p_out->pf_send      = esOutSend;
 
     p_out->p_sys = malloc( sizeof(*p_out->p_sys) );
     if ( unlikely( p_out->p_sys == NULL ) ) {
@@ -624,12 +623,12 @@ static void subpictureUpdaterUpdate(subpicture_t *p_subpic,
         return;
     }
 
-    subpicture_region_t **p_dst = &(p_subpic->p_region);
+    subpicture_region_t **p_dst = &p_subpic->p_region;
     while (p_src != NULL) {
         *p_dst = subpicture_region_Clone(p_src);
         if (*p_dst == NULL)
             break;
-        p_dst = &((*p_dst)->p_next);
+        p_dst = &(*p_dst)->p_next;
         p_src = p_src->p_next;
     }
     if (*p_dst != NULL)
@@ -847,7 +846,7 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const ov)
 
     /* Now we can update the region, regardless it's an update or an insert */
     const BD_PG_RLE_ELEM *img = ov->img;
-    for (int y = 0; y < ov->h; y++) {
+    for (int y = 0; y < ov->h; y++)
         for (int x = 0; x < ov->w;) {
             memset(p_reg->p_picture->p[0].p_pixels +
                    y * p_reg->p_picture->p[0].i_pitch + x,
@@ -855,7 +854,7 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const ov)
             x += img->len;
             img++;
         }
-    }
+
     if (ov->palette) {
         p_reg->fmt.p_palette->i_entries = 256;
         for (int i = 0; i < 256; ++i) {
@@ -865,6 +864,7 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const ov)
             p_reg->fmt.p_palette->palette[i][3] = ov->palette[i].T;
         }
     }
+
     vlc_mutex_unlock(&p_sys->p_overlays[ov->plane]->lock);
     /*
      * /!\ The region is now stored in our internal list, but not in the subpicture /!\
@@ -880,23 +880,24 @@ static void blurayOverlayProc(void *ptr, const BD_OVERLAY *const overlay)
         blurayCloseAllOverlays(p_demux);
         return;
     }
+
     switch (overlay->cmd) {
-        case BD_OVERLAY_INIT:
-            msg_Info(p_demux, "Initializing overlay");
-            blurayInitOverlay(p_demux, overlay->plane, overlay->w, overlay->h);
-            break;
-        case BD_OVERLAY_CLEAR:
-            blurayClearOverlay(p_demux, overlay->plane);
-            break;
-        case BD_OVERLAY_FLUSH:
-            blurayActivateOverlay(p_demux, overlay->plane);
-            break;
-        case BD_OVERLAY_DRAW:
-            blurayDrawOverlay(p_demux, overlay);
-            break;
-        default:
-            msg_Warn(p_demux, "Unknown BD overlay command: %u", overlay->cmd);
-            break;
+    case BD_OVERLAY_INIT:
+        msg_Info(p_demux, "Initializing overlay");
+        blurayInitOverlay(p_demux, overlay->plane, overlay->w, overlay->h);
+        break;
+    case BD_OVERLAY_CLEAR:
+        blurayClearOverlay(p_demux, overlay->plane);
+        break;
+    case BD_OVERLAY_FLUSH:
+        blurayActivateOverlay(p_demux, overlay->plane);
+        break;
+    case BD_OVERLAY_DRAW:
+        blurayDrawOverlay(p_demux, overlay);
+        break;
+    default:
+        msg_Warn(p_demux, "Unknown BD overlay command: %u", overlay->cmd);
+        break;
     }
 }
 
@@ -968,22 +969,22 @@ static void blurayArgbOverlayProc(void *ptr, const BD_ARGB_OVERLAY *const overla
     demux_t *p_demux = (demux_t*)ptr;
 
     switch (overlay->cmd) {
-        case BD_ARGB_OVERLAY_INIT:
-            blurayInitArgbOverlay(p_demux, overlay->plane, overlay->w, overlay->h);
-            break;
-        case BD_ARGB_OVERLAY_CLOSE:
-            blurayClearOverlay(p_demux, overlay->plane);
-            // TODO: blurayCloseOverlay(p_demux, overlay->plane);
-            break;
-        case BD_ARGB_OVERLAY_FLUSH:
-            blurayActivateOverlay(p_demux, overlay->plane);
-            break;
-        case BD_ARGB_OVERLAY_DRAW:
-            blurayDrawArgbOverlay(p_demux, overlay);
-            break;
-        default:
-            msg_Warn(p_demux, "Unknown BD ARGB overlay command: %u", overlay->cmd);
-            break;
+    case BD_ARGB_OVERLAY_INIT:
+        blurayInitArgbOverlay(p_demux, overlay->plane, overlay->w, overlay->h);
+        break;
+    case BD_ARGB_OVERLAY_CLOSE:
+        blurayClearOverlay(p_demux, overlay->plane);
+        // TODO: blurayCloseOverlay(p_demux, overlay->plane);
+        break;
+    case BD_ARGB_OVERLAY_FLUSH:
+        blurayActivateOverlay(p_demux, overlay->plane);
+        break;
+    case BD_ARGB_OVERLAY_DRAW:
+        blurayDrawArgbOverlay(p_demux, overlay);
+        break;
+    default:
+        msg_Warn(p_demux, "Unknown BD ARGB overlay command: %u", overlay->cmd);
+        break;
     }
 }
 
@@ -1059,10 +1060,11 @@ static void blurayResetParser( demux_t *p_demux )
     demux_sys_t *p_sys = p_demux->p_sys;
     if (p_sys->p_parser)
         stream_Delete(p_sys->p_parser);
+
     p_sys->p_parser = stream_DemuxNew(p_demux, "ts", p_sys->p_out);
-    if (!p_sys->p_parser) {
+
+    if (!p_sys->p_parser)
         msg_Err(p_demux, "Failed to create TS demuxer");
-    }
 }
 
 static void blurayUpdateTitle(demux_t *p_demux, unsigned i_title)
@@ -1092,7 +1094,6 @@ static int bluraySetTitle(demux_t *p_demux, int i_title)
 
     msg_Dbg( p_demux, "Selecting Title %i", i_title);
 
-    /* Select Blu-Ray title */
     if (bd_select_title(p_demux->p_sys->bluray, i_title) == 0 ) {
         msg_Err(p_demux, "cannot select bd title '%d'", p_demux->info.i_title);
         return VLC_EGENERIC;
@@ -1102,7 +1103,6 @@ static int bluraySetTitle(demux_t *p_demux, int i_title)
     return VLC_SUCCESS;
 }
 
-
 /*****************************************************************************
  * blurayControl: handle the controls
  *****************************************************************************/
@@ -1113,158 +1113,157 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
     int64_t  *pi_64;
 
     switch (query) {
-        case DEMUX_CAN_SEEK:
-        case DEMUX_CAN_PAUSE:
-        case DEMUX_CAN_CONTROL_PACE:
-             pb_bool = (bool*)va_arg( args, bool * );
-             *pb_bool = true;
-             break;
-
-        case DEMUX_GET_PTS_DELAY:
-            pi_64 = (int64_t*)va_arg( args, int64_t * );
-            *pi_64 =
-                INT64_C(1000) * var_InheritInteger( p_demux, "disc-caching" );
-            break;
-
-        case DEMUX_SET_PAUSE_STATE:
-            /* Nothing to do */
-            break;
-
-        case DEMUX_SET_TITLE:
-        {
-            int i_title = (int)va_arg( args, int );
-            if (bluraySetTitle(p_demux, i_title) != VLC_SUCCESS)
-                return VLC_EGENERIC;
-            break;
-        }
-        case DEMUX_SET_SEEKPOINT:
-        {
-            int i_chapter = (int)va_arg( args, int );
-            bd_seek_chapter( p_sys->bluray, i_chapter );
-            p_demux->info.i_update = INPUT_UPDATE_SEEKPOINT;
-            break;
-        }
+    case DEMUX_CAN_SEEK:
+    case DEMUX_CAN_PAUSE:
+    case DEMUX_CAN_CONTROL_PACE:
+         pb_bool = (bool*)va_arg( args, bool * );
+         *pb_bool = true;
+         break;
+
+    case DEMUX_GET_PTS_DELAY:
+        pi_64 = (int64_t*)va_arg( args, int64_t * );
+        *pi_64 = INT64_C(1000) * var_InheritInteger(p_demux, "disc-caching");
+        break;
+
+    case DEMUX_SET_PAUSE_STATE:
+        /* Nothing to do */
+        break;
+
+    case DEMUX_SET_TITLE:
+    {
+        int i_title = (int)va_arg( args, int );
+        if (bluraySetTitle(p_demux, i_title) != VLC_SUCCESS)
+            return VLC_EGENERIC;
+        break;
+    }
+    case DEMUX_SET_SEEKPOINT:
+    {
+        int i_chapter = (int)va_arg( args, int );
+        bd_seek_chapter( p_sys->bluray, i_chapter );
+        p_demux->info.i_update = INPUT_UPDATE_SEEKPOINT;
+        break;
+    }
 
-        case DEMUX_GET_TITLE_INFO:
-        {
-            input_title_t ***ppp_title = (input_title_t***)va_arg( args, input_title_t*** );
-            int *pi_int             = (int*)va_arg( args, int* );
-            int *pi_title_offset    = (int*)va_arg( args, int* );
-            int *pi_chapter_offset  = (int*)va_arg( args, int* );
-
-            /* */
-            *pi_title_offset   = 0;
-            *pi_chapter_offset = 0;
-
-            /* Duplicate local title infos */
-            *pi_int = p_sys->i_title;
-            *ppp_title = calloc( p_sys->i_title, sizeof(input_title_t **) );
-            for( unsigned int i = 0; i < p_sys->i_title; i++ )
-                (*ppp_title)[i] = vlc_input_title_Duplicate( p_sys->pp_title[i]);
-
-            return VLC_SUCCESS;
-        }
+    case DEMUX_GET_TITLE_INFO:
+    {
+        input_title_t ***ppp_title = (input_title_t***)va_arg( args, input_title_t*** );
+        int *pi_int             = (int*)va_arg( args, int* );
+        int *pi_title_offset    = (int*)va_arg( args, int* );
+        int *pi_chapter_offset  = (int*)va_arg( args, int* );
+
+        /* */
+        *pi_title_offset   = 0;
+        *pi_chapter_offset = 0;
+
+        /* Duplicate local title infos */
+        *pi_int = p_sys->i_title;
+        *ppp_title = malloc(p_sys->i_title * sizeof(input_title_t **));
+        for (unsigned int i = 0; i < p_sys->i_title; i++)
+            (*ppp_title)[i] = vlc_input_title_Duplicate(p_sys->pp_title[i]);
+
+        return VLC_SUCCESS;
+    }
 
-        case DEMUX_GET_LENGTH:
-        {
-            int64_t *pi_length = (int64_t*)va_arg(args, int64_t *);
-            *pi_length = p_demux->info.i_title < (int)p_sys->i_title ? CUR_LENGTH : 0;
-            return VLC_SUCCESS;
-        }
-        case DEMUX_SET_TIME:
-        {
-            int64_t i_time = (int64_t)va_arg(args, int64_t);
-            bd_seek_time(p_sys->bluray, TO_TICKS(i_time));
-            return VLC_SUCCESS;
-        }
-        case DEMUX_GET_TIME:
-        {
-            int64_t *pi_time = (int64_t*)va_arg(args, int64_t *);
-            *pi_time = (int64_t)FROM_TICKS(bd_tell_time(p_sys->bluray));
-            return VLC_SUCCESS;
-        }
+    case DEMUX_GET_LENGTH:
+    {
+        int64_t *pi_length = (int64_t*)va_arg(args, int64_t *);
+        *pi_length = p_demux->info.i_title < (int)p_sys->i_title ? CUR_LENGTH : 0;
+        return VLC_SUCCESS;
+    }
+    case DEMUX_SET_TIME:
+    {
+        int64_t i_time = (int64_t)va_arg(args, int64_t);
+        bd_seek_time(p_sys->bluray, TO_TICKS(i_time));
+        return VLC_SUCCESS;
+    }
+    case DEMUX_GET_TIME:
+    {
+        int64_t *pi_time = (int64_t*)va_arg(args, int64_t *);
+        *pi_time = (int64_t)FROM_TICKS(bd_tell_time(p_sys->bluray));
+        return VLC_SUCCESS;
+    }
 
-        case DEMUX_GET_POSITION:
-        {
-            double *pf_position = (double*)va_arg( args, double * );
-            *pf_position = p_demux->info.i_title < (int)p_sys->i_title ?
-                        (double)FROM_TICKS(bd_tell_time(p_sys->bluray))/CUR_LENGTH : 0.0;
-            return VLC_SUCCESS;
-        }
-        case DEMUX_SET_POSITION:
-        {
-            double f_position = (double)va_arg(args, double);
-            bd_seek_time(p_sys->bluray, TO_TICKS(f_position*CUR_LENGTH));
-            return VLC_SUCCESS;
-        }
+    case DEMUX_GET_POSITION:
+    {
+        double *pf_position = (double*)va_arg( args, double * );
+        *pf_position = p_demux->info.i_title < (int)p_sys->i_title ?
+                    (double)FROM_TICKS(bd_tell_time(p_sys->bluray))/CUR_LENGTH : 0.0;
+        return VLC_SUCCESS;
+    }
+    case DEMUX_SET_POSITION:
+    {
+        double f_position = (double)va_arg(args, double);
+        bd_seek_time(p_sys->bluray, TO_TICKS(f_position*CUR_LENGTH));
+        return VLC_SUCCESS;
+    }
 
-        case DEMUX_GET_META:
-        {
-            vlc_meta_t *p_meta = (vlc_meta_t *) va_arg (args, vlc_meta_t*);
-            const META_DL *meta = p_sys->p_meta;
-            if (meta == NULL)
-                return VLC_EGENERIC;
+    case DEMUX_GET_META:
+    {
+        vlc_meta_t *p_meta = (vlc_meta_t *) va_arg (args, vlc_meta_t*);
+        const META_DL *meta = p_sys->p_meta;
+        if (meta == NULL)
+            return VLC_EGENERIC;
 
-            if (!EMPTY_STR(meta->di_name)) vlc_meta_SetTitle(p_meta, meta->di_name);
+        if (!EMPTY_STR(meta->di_name)) vlc_meta_SetTitle(p_meta, meta->di_name);
 
-            if (!EMPTY_STR(meta->language_code)) vlc_meta_AddExtra(p_meta, "Language", meta->language_code);
-            if (!EMPTY_STR(meta->filename)) vlc_meta_AddExtra(p_meta, "Filename", meta->filename);
-            if (!EMPTY_STR(meta->di_alternative)) vlc_meta_AddExtra(p_meta, "Alternative", meta->di_alternative);
+        if (!EMPTY_STR(meta->language_code)) vlc_meta_AddExtra(p_meta, "Language", meta->language_code);
+        if (!EMPTY_STR(meta->filename)) vlc_meta_AddExtra(p_meta, "Filename", meta->filename);
+        if (!EMPTY_STR(meta->di_alternative)) vlc_meta_AddExtra(p_meta, "Alternative", meta->di_alternative);
 
-            // if (meta->di_set_number > 0) vlc_meta_SetTrackNum(p_meta, meta->di_set_number);
-            // if (meta->di_num_sets > 0) vlc_meta_AddExtra(p_meta, "Discs numbers in Set", meta->di_num_sets);
+        // if (meta->di_set_number > 0) vlc_meta_SetTrackNum(p_meta, meta->di_set_number);
+        // if (meta->di_num_sets > 0) vlc_meta_AddExtra(p_meta, "Discs numbers in Set", meta->di_num_sets);
 
-            if (meta->thumb_count > 0 && meta->thumbnails)
+        if (meta->thumb_count > 0 && meta->thumbnails)
+        {
+            char *psz_thumbpath;
+            if( asprintf( &psz_thumbpath, "%s" DIR_SEP "BDMV" DIR_SEP "META" DIR_SEP "DL" DIR_SEP "%s",
+                          p_sys->psz_bd_path, meta->thumbnails[0].path ) > 0 )
             {
-                char *psz_thumbpath;
-                if( asprintf( &psz_thumbpath, "%s" DIR_SEP "BDMV" DIR_SEP "META" DIR_SEP "DL" DIR_SEP "%s",
-                              p_sys->psz_bd_path, meta->thumbnails[0].path ) > 0 )
-                {
-                    char *psz_thumburl = vlc_path2uri( psz_thumbpath, "file" );
-                    if( unlikely(psz_thumburl == NULL) )
-                        return VLC_ENOMEM;
-
-                    vlc_meta_SetArtURL( p_meta, psz_thumburl );
-                    free( psz_thumburl );
-                }
-                free( psz_thumbpath );
-            }
+                char *psz_thumburl = vlc_path2uri( psz_thumbpath, "file" );
+                if( unlikely(psz_thumburl == NULL) )
+                    return VLC_ENOMEM;
 
-            return VLC_SUCCESS;
+                vlc_meta_SetArtURL( p_meta, psz_thumburl );
+                free( psz_thumburl );
+            }
+            free( psz_thumbpath );
         }
 
-        case DEMUX_NAV_ACTIVATE:
-            return sendKeyEvent(p_sys, BD_VK_ENTER);
-        case DEMUX_NAV_UP:
-            return sendKeyEvent(p_sys, BD_VK_UP);
-        case DEMUX_NAV_DOWN:
-            return sendKeyEvent(p_sys, BD_VK_DOWN);
-        case DEMUX_NAV_LEFT:
-            return sendKeyEvent(p_sys, BD_VK_LEFT);
-        case DEMUX_NAV_RIGHT:
-            return sendKeyEvent(p_sys, BD_VK_RIGHT);
-
-        case DEMUX_CAN_RECORD:
-        case DEMUX_GET_FPS:
-        case DEMUX_SET_GROUP:
-        case DEMUX_HAS_UNSUPPORTED_META:
-        case DEMUX_GET_ATTACHMENTS:
-            return VLC_EGENERIC;
-        default:
-            msg_Warn( p_demux, "unimplemented query (%d) in control", query );
-            return VLC_EGENERIC;
+        return VLC_SUCCESS;
+    }
+
+    case DEMUX_NAV_ACTIVATE:
+        return sendKeyEvent(p_sys, BD_VK_ENTER);
+    case DEMUX_NAV_UP:
+        return sendKeyEvent(p_sys, BD_VK_UP);
+    case DEMUX_NAV_DOWN:
+        return sendKeyEvent(p_sys, BD_VK_DOWN);
+    case DEMUX_NAV_LEFT:
+        return sendKeyEvent(p_sys, BD_VK_LEFT);
+    case DEMUX_NAV_RIGHT:
+        return sendKeyEvent(p_sys, BD_VK_RIGHT);
+
+    case DEMUX_CAN_RECORD:
+    case DEMUX_GET_FPS:
+    case DEMUX_SET_GROUP:
+    case DEMUX_HAS_UNSUPPORTED_META:
+    case DEMUX_GET_ATTACHMENTS:
+        return VLC_EGENERIC;
+    default:
+        msg_Warn( p_demux, "unimplemented query (%d) in control", query );
+        return VLC_EGENERIC;
     }
     return VLC_SUCCESS;
 }
 
-static void     blurayUpdateCurrentClip( demux_t *p_demux, uint32_t clip )
+static void blurayUpdateCurrentClip( demux_t *p_demux, uint32_t clip )
 {
     if (clip == 0xFF)
         return ;
     demux_sys_t *p_sys = p_demux->p_sys;
 
     p_sys->i_current_clip = clip;
-    BLURAY_TITLE_INFO   *info = bd_get_title_info(p_sys->bluray,
+    BLURAY_TITLE_INFO *info = bd_get_title_info(p_sys->bluray,
                                         bd_get_current_title(p_sys->bluray), 0);
     if ( info == NULL )
         return ;
@@ -1278,44 +1277,42 @@ static void     blurayUpdateCurrentClip( demux_t *p_demux, uint32_t clip )
 
 static void blurayHandleEvent( demux_t *p_demux, const BD_EVENT *e )
 {
-    demux_sys_t     *p_sys = p_demux->p_sys;
+    demux_sys_t *p_sys = p_demux->p_sys;
 
     switch (e->event)
     {
-        case BD_EVENT_TITLE:
-            blurayUpdateTitle(p_demux, e->param);
-            break;
-        case BD_EVENT_PLAYITEM:
-            blurayUpdateCurrentClip(p_demux, e->param);
-            break;
-        case BD_EVENT_AUDIO_STREAM:
-        {
-            if ( e->param == 0xFF )
-                break ;
-            BLURAY_TITLE_INFO   *info = bd_get_title_info(p_sys->bluray,
-                                       bd_get_current_title(p_sys->bluray), 0);
-            if ( info == NULL )
-                break ;
-            /* The param we get is the real stream id, not an index, ie. it starts from 1 */
-            int pid = info->clips[p_sys->i_current_clip].audio_streams[e->param - 1].pid;
-            int idx = findEsPairIndex( p_sys, pid );
-            if ( idx >= 0 ) {
-                es_out_id_t *p_es = vlc_array_item_at_index(&p_sys->es, idx);
-                es_out_Control( p_demux->out, ES_OUT_SET_ES, p_es );
-            }
-            bd_free_title_info( info );
-            p_sys->i_audio_stream = pid;
+    case BD_EVENT_TITLE:
+        blurayUpdateTitle(p_demux, e->param);
+        break;
+    case BD_EVENT_PLAYITEM:
+        blurayUpdateCurrentClip(p_demux, e->param);
+        break;
+    case BD_EVENT_AUDIO_STREAM:
+        if ( e->param == 0xFF )
             break ;
+        BLURAY_TITLE_INFO *info = bd_get_title_info(p_sys->bluray,
+                                   bd_get_current_title(p_sys->bluray), 0);
+        if (info == NULL)
+            break ;
+        /* The param we get is the real stream id, not an index, ie. it starts from 1 */
+        int pid = info->clips[p_sys->i_current_clip].audio_streams[e->param - 1].pid;
+        int idx = findEsPairIndex(p_sys, pid);
+        if (idx >= 0) {
+            es_out_id_t *p_es = vlc_array_item_at_index(&p_sys->es, idx);
+            es_out_Control( p_demux->out, ES_OUT_SET_ES, p_es );
         }
-        case BD_EVENT_CHAPTER:
-            p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT;
-            p_demux->info.i_seekpoint = e->param;
-            break;
-        case BD_EVENT_ANGLE:
-        case BD_EVENT_IG_STREAM:
-        default:
-            msg_Warn( p_demux, "event: %d param: %d", e->event, e->param );
-            break;
+        bd_free_title_info( info );
+        p_sys->i_audio_stream = pid;
+        break ;
+    case BD_EVENT_CHAPTER:
+        p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT;
+        p_demux->info.i_seekpoint = e->param;
+        break;
+    case BD_EVENT_ANGLE:
+    case BD_EVENT_IG_STREAM:
+    default:
+        msg_Warn(p_demux, "event: %d param: %d", e->event, e->param);
+        break;
     }
 }
 
@@ -1367,6 +1364,7 @@ static int blurayDemux(demux_t *p_demux)
             block_Release(p_block);
             return 1;
         }
+
         if (p_sys->current_overlay != -1) {
             vlc_mutex_lock(&p_sys->p_overlays[p_sys->current_overlay]->lock);
             if (p_sys->p_overlays[p_sys->current_overlay]->status == ToDisplay) {
@@ -1374,8 +1372,8 @@ static int blurayDemux(demux_t *p_demux)
                 if (p_sys->p_vout == NULL)
                     p_sys->p_vout = input_GetVout(p_sys->p_input);
                 if (p_sys->p_vout != NULL) {
-                    var_AddCallback(p_sys->p_vout, "mouse-moved", &onMouseEvent, p_demux);
-                    var_AddCallback(p_sys->p_vout, "mouse-clicked", &onMouseEvent, p_demux);
+                    var_AddCallback(p_sys->p_vout, "mouse-moved", onMouseEvent, p_demux);
+                    var_AddCallback(p_sys->p_vout, "mouse-clicked", onMouseEvent, p_demux);
                     bluraySendOverlayToVout(p_demux);
                 }
             } else