vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Mon Jul 28 23:00:47 2014 +0300| [ac075dbf6cc25f1c750b499ccaa8ac041477ffa8] | committer: Rémi Denis-Courmont
spu: use filter_chain_ForEach() and simplify > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ac075dbf6cc25f1c750b499ccaa8ac041477ffa8 --- src/video_output/vout_subpictures.c | 50 ++++++++++++----------------------- 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c index 0d788a0..11ed17d 100644 --- a/src/video_output/vout_subpictures.c +++ b/src/video_output/vout_subpictures.c @@ -156,11 +156,6 @@ static void SpuHeapClean(spu_heap_t *heap) } } -struct filter_owner_sys_t { - spu_t *spu; - int channel; -}; - static void FilterRelease(filter_t *filter) { if (filter->p_module) @@ -1159,11 +1154,11 @@ static int CropCallback(vlc_object_t *object, char const *var, static subpicture_t *sub_new_buffer(filter_t *filter) { - filter_owner_sys_t *sys = filter->owner.sys; + int channel = (intptr_t)filter->owner.sys; subpicture_t *subpicture = subpicture_New(NULL); if (subpicture) - subpicture->i_channel = sys->channel; + subpicture->i_channel = channel; return subpicture; } @@ -1173,30 +1168,24 @@ static void sub_del_buffer(filter_t *filter, subpicture_t *subpic) subpicture_Delete(subpic); } -static int SubSourceAllocationInit(filter_t *filter, void *data) +static int SubSourceInit(filter_t *filter, void *data) { spu_t *spu = data; + int channel = spu_RegisterChannel(spu); - filter_owner_sys_t *sys = malloc(sizeof(*sys)); - if (!sys) - return VLC_EGENERIC; - + filter->owner.sys = (void *)(intptr_t)channel; filter->owner.sub.buffer_new = sub_new_buffer; filter->owner.sub.buffer_del = sub_del_buffer; - - filter->owner.sys = sys; - sys->channel = spu_RegisterChannel(spu); - sys->spu = spu; - return VLC_SUCCESS; } -static void SubSourceAllocationClean(filter_t *filter) +static int SubSourceClean(filter_t *filter, void *data) { - filter_owner_sys_t *sys = filter->owner.sys; + spu_t *spu = data; + int channel = (intptr_t)filter->owner.sys; - spu_ClearChannel(sys->spu, sys->channel); - free(sys); + spu_ClearChannel(spu, channel); + return VLC_SUCCESS; } /***************************************************************************** @@ -1239,13 +1228,9 @@ spu_t *spu_Create(vlc_object_t *object) vlc_mutex_init(&sys->source_chain_lock); vlc_mutex_init(&sys->filter_chain_lock); sys->source_chain = filter_chain_New(spu, "sub source", false, - SubSourceAllocationInit, - SubSourceAllocationClean, - spu); + NULL, NULL, NULL); sys->filter_chain = filter_chain_New(spu, "sub filter", false, - NULL, - NULL, - spu); + NULL, NULL, NULL); /* Load text and scale module */ sys->text = SpuRenderCreateAndLoadText(spu); @@ -1284,6 +1269,7 @@ void spu_Destroy(spu_t *spu) if (sys->scale) FilterRelease(sys->scale); + filter_chain_ForEach(sys->source_chain, SubSourceClean, spu); filter_chain_Delete(sys->source_chain); filter_chain_Delete(sys->filter_chain); vlc_mutex_destroy(&sys->source_chain_lock); @@ -1446,13 +1432,11 @@ subpicture_t *spu_Render(spu_t *spu, vlc_mutex_lock(&sys->source_chain_lock); if (chain_update) { - if (*chain_update) { - filter_chain_Reset(sys->source_chain, NULL, NULL); + filter_chain_ForEach(sys->source_chain, SubSourceClean, spu); + filter_chain_Reset(sys->source_chain, NULL, NULL); - filter_chain_AppendFromString(spu->p->source_chain, chain_update); - } - else if (filter_chain_GetLength(spu->p->source_chain) > 0) - filter_chain_Reset(sys->source_chain, NULL, NULL); + filter_chain_AppendFromString(spu->p->source_chain, chain_update); + filter_chain_ForEach(sys->source_chain, SubSourceInit, spu); free(chain_update); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
