[MPlayer-cvslog] r31697 - in trunk: av_sub.c spudec.c

reimar subversion at mplayerhq.hu
Sun Jul 11 11:40:47 CEST 2010


Author: reimar
Date: Sun Jul 11 11:40:46 2010
New Revision: 31697

Log:
Try to get subtitle scaling somewhat right with libavcodec decoded
bitmap subtitles.

Modified:
   trunk/av_sub.c
   trunk/spudec.c

Modified: trunk/av_sub.c
==============================================================================
--- trunk/av_sub.c	Sun Jul 11 11:39:06 2010	(r31696)
+++ trunk/av_sub.c	Sun Jul 11 11:40:46 2010	(r31697)
@@ -37,11 +37,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;
@@ -49,19 +62,10 @@ int decode_avsub(struct sh_sub *sh, uint
     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");
@@ -82,7 +86,7 @@ int decode_avsub(struct sh_sub *sh, uint
         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],

Modified: trunk/spudec.c
==============================================================================
--- trunk/spudec.c	Sun Jul 11 11:39:06 2010	(r31696)
+++ trunk/spudec.c	Sun Jul 11 11:40:46 2010	(r31697)
@@ -643,11 +643,9 @@ void spudec_heartbeat(void *this, unsign
       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);


More information about the MPlayer-cvslog mailing list