mirror of
https://github.com/mpv-player/mpv
synced 2025-01-09 08:29:36 +00:00
subs: improve scaling for avcodec subs
Try to get subtitle scaling somewhat right with libavcodec decoded bitmap subtitles. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31697 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
4a466e9573
commit
1bcb3fc805
24
av_sub.c
24
av_sub.c
@ -38,11 +38,24 @@ void reset_avsub(struct sh_sub *sh)
|
||||
int decode_avsub(struct sh_sub *sh, uint8_t **data, int *size, double *pts, double *endpts)
|
||||
{
|
||||
AVCodecContext *ctx = sh->context;
|
||||
enum CodecID cid = CODEC_ID_NONE;
|
||||
int srcw = 0, srch = 0;
|
||||
int new_type = 0;
|
||||
int res;
|
||||
int got_sub;
|
||||
AVSubtitle sub;
|
||||
AVPacket pkt;
|
||||
|
||||
switch (sh->type) {
|
||||
case 'b':
|
||||
cid = CODEC_ID_DVB_SUBTITLE; break;
|
||||
case 'p':
|
||||
srcw = 1920; srch = 1080;
|
||||
cid = CODEC_ID_HDMV_PGS_SUBTITLE; break;
|
||||
case 'x':
|
||||
cid = CODEC_ID_XSUB; break;
|
||||
}
|
||||
|
||||
av_init_packet(&pkt);
|
||||
pkt.data = *data;
|
||||
pkt.size = *size;
|
||||
@ -50,19 +63,10 @@ int decode_avsub(struct sh_sub *sh, uint8_t **data, int *size, double *pts, doub
|
||||
if (*pts != MP_NOPTS_VALUE && *endpts != MP_NOPTS_VALUE)
|
||||
pkt.convergence_duration = (*endpts - *pts) * 1000;
|
||||
if (!ctx) {
|
||||
enum CodecID cid = CODEC_ID_NONE;
|
||||
AVCodec *sub_codec;
|
||||
avcodec_init();
|
||||
avcodec_register_all();
|
||||
ctx = avcodec_alloc_context();
|
||||
switch (sh->type) {
|
||||
case 'b':
|
||||
cid = CODEC_ID_DVB_SUBTITLE; break;
|
||||
case 'p':
|
||||
cid = CODEC_ID_HDMV_PGS_SUBTITLE; break;
|
||||
case 'x':
|
||||
cid = CODEC_ID_XSUB; break;
|
||||
}
|
||||
sub_codec = avcodec_find_decoder(cid);
|
||||
if (!ctx || !sub_codec || avcodec_open(ctx, sub_codec) < 0) {
|
||||
mp_msg(MSGT_SUBREADER, MSGL_FATAL, "Could not open subtitle decoder\n");
|
||||
@ -83,7 +87,7 @@ int decode_avsub(struct sh_sub *sh, uint8_t **data, int *size, double *pts, doub
|
||||
switch (sub.rects[0]->type) {
|
||||
case SUBTITLE_BITMAP:
|
||||
if (!vo_spudec)
|
||||
vo_spudec = spudec_new(NULL);
|
||||
vo_spudec = spudec_new_scaled(NULL, srcw, srch, NULL, 0);
|
||||
spudec_set_paletted(vo_spudec,
|
||||
sub.rects[0]->pict.data[0],
|
||||
sub.rects[0]->pict.linesize[0],
|
||||
|
4
spudec.c
4
spudec.c
@ -643,11 +643,9 @@ void spudec_heartbeat(void *this, unsigned int pts100)
|
||||
spu->start_col = packet->start_col;
|
||||
spu->start_row = packet->start_row;
|
||||
|
||||
// TODO use correct values
|
||||
// reset scaled image
|
||||
spu->scaled_frame_width = 0;
|
||||
spu->scaled_frame_height = 0;
|
||||
spu->orig_frame_width = 1920;
|
||||
spu->orig_frame_height = 1080;
|
||||
} else {
|
||||
if (spu->auto_palette)
|
||||
compute_palette(spu, packet);
|
||||
|
Loading…
Reference in New Issue
Block a user