[Ffmpeg-devel] [PATCH] Fix for dvdsubdec.c

Ian Caulfield ian.caulfield
Sun Jan 21 11:05:06 CET 2007


On 1/19/07, Michael Niedermayer <michaelni at gmx.at> wrote:
>
> something is wrong with the indention here, besides that the patch looks
> ok

Possibly got mangled by the mail client - I've tried attaching it this
time. I've attached a further patch that removes the getbe16 functions
and uses the AV_RB16 macro instead.

Ian
-------------- next part --------------
Index: libavcodec/dvdsubdec.c
===================================================================
--- libavcodec/dvdsubdec.c	(revision 7580)
+++ libavcodec/dvdsubdec.c	(working copy)
@@ -249,7 +244,7 @@
                 sub_header->rects = av_mallocz(sizeof(AVSubtitleRect));
                 sub_header->num_rects = 1;
                 sub_header->rects[0].rgba_palette = av_malloc(4 * 4);
-                decode_rle(bitmap, w * 2, w, h / 2,
+                decode_rle(bitmap, w * 2, w, (h + 1) / 2,
                            buf, offset1 * 2, buf_size);
                 decode_rle(bitmap + w, w * 2, w, h / 2,
                            buf, offset2 * 2, buf_size);
-------------- next part --------------
Index: libavcodec/dvdsubdec.c
===================================================================
--- libavcodec/dvdsubdec.c	(revision 7580)
+++ libavcodec/dvdsubdec.c	(working copy)
@@ -27,11 +27,6 @@
     return 0;
 }
 
-static uint16_t getbe16(const uint8_t *p)
-{
-    return (p[0] << 8) | p[1];
-}
-
 static int get_nibble(const uint8_t *buf, int nibble_offset)
 {
     return (buf[nibble_offset >> 1] >> ((1 - (nibble_offset & 1)) << 2)) & 0xf;
@@ -142,10 +137,10 @@
     sub_header->start_display_time = 0;
     sub_header->end_display_time = 0;
 
-    cmd_pos = getbe16(buf + 2);
+    cmd_pos = AV_RB16(buf + 2);
     while ((cmd_pos + 4) < buf_size) {
-        date = getbe16(buf + cmd_pos);
-        next_cmd_pos = getbe16(buf + cmd_pos + 2);
+        date = AV_RB16(buf + cmd_pos);
+        next_cmd_pos = AV_RB16(buf + cmd_pos + 2);
 #ifdef DEBUG
         av_log(NULL, AV_LOG_INFO, "cmd_pos=0x%04x next=0x%04x date=%d\n",
                cmd_pos, next_cmd_pos, date);
@@ -211,8 +206,8 @@
             case 0x06:
                 if ((buf_size - pos) < 4)
                     goto fail;
-                offset1 = getbe16(buf + pos);
-                offset2 = getbe16(buf + pos + 2);
+                offset1 = AV_RB16(buf + pos);
+                offset2 = AV_RB16(buf + pos + 2);
 #ifdef DEBUG
                 av_log(NULL, AV_LOG_INFO, "offset1=0x%04x offset2=0x%04x\n", offset1, offset2);
 #endif
@@ -438,7 +433,7 @@
     if (pc->packet_index == 0) {
         if (buf_size < 2)
             return 0;
-        pc->packet_len = (buf[0] << 8) | buf[1];
+        pc->packet_len = AV_RB16(buf);
         av_freep(&pc->packet);
         pc->packet = av_malloc(pc->packet_len);
     }



More information about the ffmpeg-devel mailing list