[FFmpeg-devel] [PATCH][libavcodec] Duckduckgo Truemotion 1 - some code cleanup and preparation for addition of sprite support

ffmpegandmahanstreamer at lolcow.email ffmpegandmahanstreamer at lolcow.email
Mon Jul 5 00:58:38 EEST 2021


These are some cosmetic changes and also priming the decoder for sprite 
support (which i plan on adding). This patch was mainly for me to get 
used to the git email patch flow, if anything. Of course the decoder 
still works as it was before (i tested it).
---
  libavcodec/truemotion1.c | 41 +++++++++++++++++-----------------------
  1 file changed, 17 insertions(+), 24 deletions(-)

diff --git a/libavcodec/truemotion1.c b/libavcodec/truemotion1.c
index 32d8fb4005..80946a405f 100644
--- a/libavcodec/truemotion1.c
+++ b/libavcodec/truemotion1.c
@@ -23,10 +23,10 @@
   * @file
   * Duck TrueMotion v1 Video Decoder by
   * Alex Beregszaszi and
- * Mike Melanson (melanson at pcisys.net)
+ * Mike Melanson (mike at multimedia.cx)
   *
   * The TrueMotion v1 decoder presently only decodes 16-bit TM1 data and
- * outputs RGB555 (or RGB565) data. 24-bit TM1 data is not supported 
yet.
+ * outputs RGB555 (or RGB565) data.
   */

  #include <stdio.h>
@@ -360,8 +360,12 @@ static int 
truemotion1_decode_header(TrueMotion1Context *s)
          s->flags = FLAG_KEYFRAME;

      if (s->flags & FLAG_SPRITE) {
+        // https://wiki.multimedia.cx/index.php/Duck_TrueMotion_1
+        header.xoffset = AV_RL16(&header_buffer[13]);
+        header.yoffset = AV_RL16(&header_buffer[15]);
+        header.width = AV_RL16(&header_buffer[17]);
+        header.height = AV_RL16(&header_buffer[19]);
          avpriv_request_sample(s->avctx, "Frame with sprite");
-        /* FIXME header.width, height, xoffset and yoffset aren't 
initialized */
          return AVERROR_PATCHWELCOME;
      } else {
          s->w = header.xsize;
@@ -660,20 +664,15 @@ static void 
truemotion1_decode_16bit(TrueMotion1Context *s)
                  case 0:
                      /* if macroblock width is 2, apply C-Y-C-Y; else
                       * apply C-Y-Y */
+                    APPLY_C_PREDICTOR();
+                    APPLY_Y_PREDICTOR();
+                    OUTPUT_PIXEL_PAIR();
                      if (s->block_width == 2) {
                          APPLY_C_PREDICTOR();
-                        APPLY_Y_PREDICTOR();
-                        OUTPUT_PIXEL_PAIR();
-                        APPLY_C_PREDICTOR();
-                        APPLY_Y_PREDICTOR();
-                        OUTPUT_PIXEL_PAIR();
-                    } else {
-                        APPLY_C_PREDICTOR();
-                        APPLY_Y_PREDICTOR();
-                        OUTPUT_PIXEL_PAIR();
-                        APPLY_Y_PREDICTOR();
                          OUTPUT_PIXEL_PAIR();
                      }
+                    APPLY_Y_PREDICTOR();
+                    OUTPUT_PIXEL_PAIR();
                      break;

                  case 1:
@@ -786,20 +785,14 @@ static void 
truemotion1_decode_24bit(TrueMotion1Context *s)
                  case 0:
                      /* if macroblock width is 2, apply C-Y-C-Y; else
                       * apply C-Y-Y */
+                    APPLY_C_PREDICTOR_24();
+                    APPLY_Y_PREDICTOR_24();
+                    OUTPUT_PIXEL_PAIR();
                      if (s->block_width == 2) {
                          APPLY_C_PREDICTOR_24();
-                        APPLY_Y_PREDICTOR_24();
-                        OUTPUT_PIXEL_PAIR();
-                        APPLY_C_PREDICTOR_24();
-                        APPLY_Y_PREDICTOR_24();
-                        OUTPUT_PIXEL_PAIR();
-                    } else {
-                        APPLY_C_PREDICTOR_24();
-                        APPLY_Y_PREDICTOR_24();
-                        OUTPUT_PIXEL_PAIR();
-                        APPLY_Y_PREDICTOR_24();
-                        OUTPUT_PIXEL_PAIR();
                      }
+                    APPLY_Y_PREDICTOR_24();
+                    OUTPUT_PIXEL_PAIR();
                      break;

                  case 1:
-- 


More information about the ffmpeg-devel mailing list