mirror of
https://github.com/jellyfin/jellyfin-ffmpeg.git
synced 2026-09-03 05:09:58 +03:00
Imported Upstream version 2.3
This commit is contained in:
+13
-12
@@ -27,13 +27,14 @@
|
||||
*/
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "get_bits.h"
|
||||
#include "bytestream.h"
|
||||
#include "internal.h"
|
||||
#include "golomb.h"
|
||||
#include "dirac_arith.h"
|
||||
#include "mpeg12data.h"
|
||||
#include "libavcodec/mpegvideo.h"
|
||||
#include "mpegvideoencdsp.h"
|
||||
#include "dirac_dwt.h"
|
||||
#include "dirac.h"
|
||||
#include "diracdsp.h"
|
||||
@@ -136,7 +137,7 @@ typedef struct Plane {
|
||||
|
||||
typedef struct DiracContext {
|
||||
AVCodecContext *avctx;
|
||||
DSPContext dsp;
|
||||
MpegvideoEncDSPContext mpvencdsp;
|
||||
DiracDSPContext diracdsp;
|
||||
GetBitContext gb;
|
||||
dirac_source_params source;
|
||||
@@ -199,7 +200,7 @@ typedef struct DiracContext {
|
||||
uint8_t *edge_emu_buffer[4];
|
||||
uint8_t *edge_emu_buffer_base;
|
||||
|
||||
uint16_t *mctmp; /* buffer holding the MC data multipled by OBMC weights */
|
||||
uint16_t *mctmp; /* buffer holding the MC data multiplied by OBMC weights */
|
||||
uint8_t *mcscratch;
|
||||
int buffer_stride;
|
||||
|
||||
@@ -337,8 +338,8 @@ static int alloc_sequence_buffers(DiracContext *s)
|
||||
w = FFALIGN(CALC_PADDING(w, MAX_DWT_LEVELS), 8); /* FIXME: Should this be 16 for SSE??? */
|
||||
h = top_padding + CALC_PADDING(h, MAX_DWT_LEVELS) + max_yblen/2;
|
||||
|
||||
s->plane[i].idwt_buf_base = av_mallocz((w+max_xblen)*h * sizeof(IDWTELEM));
|
||||
s->plane[i].idwt_tmp = av_malloc((w+16) * sizeof(IDWTELEM));
|
||||
s->plane[i].idwt_buf_base = av_mallocz_array((w+max_xblen), h * sizeof(IDWTELEM));
|
||||
s->plane[i].idwt_tmp = av_malloc_array((w+16), sizeof(IDWTELEM));
|
||||
s->plane[i].idwt_buf = s->plane[i].idwt_buf_base + top_padding*w;
|
||||
if (!s->plane[i].idwt_buf_base || !s->plane[i].idwt_tmp)
|
||||
return AVERROR(ENOMEM);
|
||||
@@ -422,8 +423,8 @@ static av_cold int dirac_decode_init(AVCodecContext *avctx)
|
||||
s->avctx = avctx;
|
||||
s->frame_number = -1;
|
||||
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_diracdsp_init(&s->diracdsp);
|
||||
ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx);
|
||||
|
||||
for (i = 0; i < MAX_FRAMES; i++) {
|
||||
s->all_frames[i].avframe = av_frame_alloc();
|
||||
@@ -694,7 +695,7 @@ static void lowdelay_subband(DiracContext *s, GetBitContext *gb, int quant,
|
||||
IDWTELEM *buf1 = b1->ibuf + top * b1->stride;
|
||||
IDWTELEM *buf2 = b2 ? b2->ibuf + top * b2->stride : NULL;
|
||||
int x, y;
|
||||
/* we have to constantly check for overread since the spec explictly
|
||||
/* we have to constantly check for overread since the spec explicitly
|
||||
requires this, with the meaning that all remaining coeffs are set to 0 */
|
||||
if (get_bits_count(gb) >= bits_end)
|
||||
return;
|
||||
@@ -778,7 +779,7 @@ static void decode_lowdelay(DiracContext *s)
|
||||
struct lowdelay_slice *slices;
|
||||
int slice_num = 0;
|
||||
|
||||
slices = av_mallocz(s->lowdelay.num_x * s->lowdelay.num_y * sizeof(struct lowdelay_slice));
|
||||
slices = av_mallocz_array(s->lowdelay.num_x, s->lowdelay.num_y * sizeof(struct lowdelay_slice));
|
||||
|
||||
align_get_bits(&s->gb);
|
||||
/*[DIRAC_STD] 13.5.2 Slices. slice(sx,sy) */
|
||||
@@ -1556,7 +1557,7 @@ static void interpolate_refplane(DiracContext *s, DiracFrame *ref, int plane, in
|
||||
int i, edge = EDGE_WIDTH/2;
|
||||
|
||||
ref->hpel[plane][0] = ref->avframe->data[plane];
|
||||
s->dsp.draw_edges(ref->hpel[plane][0], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM); /* EDGE_TOP | EDGE_BOTTOM values just copied to make it build, this needs to be ensured */
|
||||
s->mpvencdsp.draw_edges(ref->hpel[plane][0], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM); /* EDGE_TOP | EDGE_BOTTOM values just copied to make it build, this needs to be ensured */
|
||||
|
||||
/* no need for hpel if we only have fpel vectors */
|
||||
if (!s->mv_precision)
|
||||
@@ -1573,9 +1574,9 @@ static void interpolate_refplane(DiracContext *s, DiracFrame *ref, int plane, in
|
||||
s->diracdsp.dirac_hpel_filter(ref->hpel[plane][1], ref->hpel[plane][2],
|
||||
ref->hpel[plane][3], ref->hpel[plane][0],
|
||||
ref->avframe->linesize[plane], width, height);
|
||||
s->dsp.draw_edges(ref->hpel[plane][1], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM);
|
||||
s->dsp.draw_edges(ref->hpel[plane][2], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM);
|
||||
s->dsp.draw_edges(ref->hpel[plane][3], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM);
|
||||
s->mpvencdsp.draw_edges(ref->hpel[plane][1], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM);
|
||||
s->mpvencdsp.draw_edges(ref->hpel[plane][2], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM);
|
||||
s->mpvencdsp.draw_edges(ref->hpel[plane][3], ref->avframe->linesize[plane], width, height, edge, edge, EDGE_TOP | EDGE_BOTTOM);
|
||||
}
|
||||
ref->interpolated[plane] = 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user