summaryrefslogtreecommitdiff
path: root/libavcodec/mimic.c
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2015-10-14 15:01:54 +0200
committerHendrik Leppkes <h.leppkes@gmail.com>2015-10-14 15:01:54 +0200
commit8ededd583622359062622cf008144a1511d50bbd (patch)
tree2d41ac6c1caa0153f9fe65fc1ae11f274ca81f02 /libavcodec/mimic.c
parent3d93ff289e0421d71cd63e246727d8ace256f27d (diff)
parent6a23a34274b747280c1e4a00ad22f97f99bbb48a (diff)
Merge commit '6a23a34274b747280c1e4a00ad22f97f99bbb48a'
* commit '6a23a34274b747280c1e4a00ad22f97f99bbb48a': mimic: drop AVPicture usage Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
Diffstat (limited to 'libavcodec/mimic.c')
-rw-r--r--libavcodec/mimic.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
index d3f9c0764a..a856b33a15 100644
--- a/libavcodec/mimic.c
+++ b/libavcodec/mimic.c
@@ -48,7 +48,6 @@ typedef struct MimicContext {
int prev_index;
ThreadFrame frames [16];
- AVPicture flipped_ptrs[16];
DECLARE_ALIGNED(16, int16_t, dct_block)[64];
@@ -179,8 +178,6 @@ static int mimic_decode_update_thread_context(AVCodecContext *avctx, const AVCod
dst->cur_index = src->next_cur_index;
dst->prev_index = src->next_prev_index;
- memcpy(dst->flipped_ptrs, src->flipped_ptrs, sizeof(src->flipped_ptrs));
-
for (i = 0; i < FF_ARRAY_ELEMS(dst->frames); i++) {
ff_thread_release_buffer(avctx, &dst->frames[i]);
if (i != src->next_cur_index && src->frames[i].f->data[0]) {
@@ -284,9 +281,9 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs,
const int is_chroma = !!plane;
const int qscale = av_clip(10000 - quality, is_chroma ? 1000 : 2000,
10000) << 2;
- const int stride = ctx->flipped_ptrs[ctx->cur_index ].linesize[plane];
- const uint8_t *src = ctx->flipped_ptrs[ctx->prev_index].data[plane];
- uint8_t *dst = ctx->flipped_ptrs[ctx->cur_index ].data[plane];
+ const int stride = ctx->frames[ctx->cur_index ].f->linesize[plane];
+ const uint8_t *src = ctx->frames[ctx->prev_index].f->data[plane];
+ uint8_t *dst = ctx->frames[ctx->cur_index ].f->data[plane];
for (y = 0; y < ctx->num_vblocks[plane]; y++) {
for (x = 0; x < ctx->num_hblocks[plane]; x++) {
@@ -309,13 +306,13 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs,
} else {
unsigned int backref = get_bits(&ctx->gb, 4);
int index = (ctx->cur_index + backref) & 15;
- uint8_t *p = ctx->flipped_ptrs[index].data[0];
+ uint8_t *p = ctx->frames[index].f->data[0];
if (index != ctx->cur_index && p) {
ff_thread_await_progress(&ctx->frames[index],
cur_row, 0);
p += src -
- ctx->flipped_ptrs[ctx->prev_index].data[plane];
+ ctx->frames[ctx->prev_index].f->data[plane];
ctx->hdsp.put_pixels_tab[1][0](dst, p, stride, 8);
} else {
av_log(ctx->avctx, AV_LOG_ERROR,
@@ -342,17 +339,18 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs,
}
/**
- * Flip the buffer upside-down and put it in the YVU order to match the
+ * Flip the buffer upside-down and put it in the YVU order to revert the
* way Mimic encodes frames.
*/
-static void prepare_avpic(MimicContext *ctx, AVPicture *dst, AVFrame *src)
+static void flip_swap_frame(AVFrame *f)
{
int i;
- dst->data[0] = src->data[0] + ( ctx->avctx->height - 1) * src->linesize[0];
- dst->data[1] = src->data[2] + ((ctx->avctx->height >> 1) - 1) * src->linesize[2];
- dst->data[2] = src->data[1] + ((ctx->avctx->height >> 1) - 1) * src->linesize[1];
+ uint8_t *data_1 = f->data[1];
+ f->data[0] = f->data[0] + ( f->height - 1) * f->linesize[0];
+ f->data[1] = f->data[2] + ((f->height >> 1) - 1) * f->linesize[2];
+ f->data[2] = data_1 + ((f->height >> 1) - 1) * f->linesize[1];
for (i = 0; i < 3; i++)
- dst->linesize[i] = -src->linesize[i];
+ f->linesize[i] *= -1;
}
static int mimic_decode_frame(AVCodecContext *avctx, void *data,
@@ -420,9 +418,6 @@ static int mimic_decode_frame(AVCodecContext *avctx, void *data,
ctx->next_prev_index = ctx->cur_index;
ctx->next_cur_index = (ctx->cur_index - 1) & 15;
- prepare_avpic(ctx, &ctx->flipped_ptrs[ctx->cur_index],
- ctx->frames[ctx->cur_index].f);
-
ff_thread_finish_setup(avctx);
av_fast_padded_malloc(&ctx->swap_buf, &ctx->swap_buf_size, swap_buf_size);
@@ -447,6 +442,8 @@ static int mimic_decode_frame(AVCodecContext *avctx, void *data,
return res;
*got_frame = 1;
+ flip_swap_frame(data);
+
ctx->prev_index = ctx->next_prev_index;
ctx->cur_index = ctx->next_cur_index;