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 (melan...@pcisys.net)
+ * Mike Melanson (m...@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:
--
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".