[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
Wed Jul 14 15:04:09 EEST 2021
On 2021-07-04 17:58, ffmpegandmahanstreamer at lolcow.email wrote:
> 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:
ping
More information about the ffmpeg-devel
mailing list