mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 08:12:17 +00:00
2684280643
This unifies the subtitle rendering path. Now all subtitle rendering goes through sd_ass.c/sd_lavc.c/sd_spu.c. Before that commit, the spudec.h functions were used directly in mplayer.c, which introduced many special cases. Add sd_spu.c, which is just a small wrapper connecting the new subtitle render API with the dusty old vobsub decoder in spudec.c. One detail that changes is that we always pass the palette as extra data, instead of passing the libdvdread palette as pointer to spudec directly. This is a bit roundabout, but actually makes the code simpler and more elegant: the difference between DVD and non-DVD dvdsubs is reduced. Ideally, we would just delete spudec.c and use libavcodec's DVD sub decoder. However, DVD playback with demux_mpg produces packets incompatible to lavc. There are incompatibilities the other way around as well: packets from libavformat's vobsub demuxer are incompatible to spudec.c. So we define a new subtitle codec name for demux_mpg subs, "dvd_subtitle_mpg", which only sd_spu can decode. There is actually code in spudec.c to "assemble" fragments into complete packets, but using the whole spudec.c is easier than trying to move this code into demux_mpg to fix subtitle packets. As additional complication, Libav 9.x can't decode DVD subs correctly, so use sd_spu in that case as well.
39 lines
1.5 KiB
C
39 lines
1.5 KiB
C
/*
|
|
* This file is part of MPlayer.
|
|
*
|
|
* MPlayer is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* MPlayer is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#ifndef MPLAYER_SPUDEC_H
|
|
#define MPLAYER_SPUDEC_H
|
|
|
|
#include <stdint.h>
|
|
|
|
struct sub_bitmaps;
|
|
struct mp_osd_res;
|
|
|
|
void spudec_heartbeat(void *this, unsigned int pts100);
|
|
void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pts100);
|
|
void spudec_get_indexed(void *this, struct mp_osd_res *dim, struct sub_bitmaps *res);
|
|
void *spudec_new_scaled(unsigned int frame_width, unsigned int frame_height, uint8_t *extradata, int extradata_len);
|
|
void spudec_free(void *this);
|
|
void spudec_reset(void *this); // called after seek
|
|
int spudec_visible(void *this); // check if spu is visible
|
|
int spudec_changed(void *this);
|
|
void spudec_set_changed(void *this);
|
|
void spudec_set_forced_subs_only(void * const this, const unsigned int flag);
|
|
|
|
#endif /* MPLAYER_SPUDEC_H */
|