#include "avcodec.h"
#include "internal.h"
#include "bytestream.h"
-#include "huffyuvencdsp.h"
+#include "lossless_videoencdsp.h"
#include "png.h"
#include "apng.h"
typedef struct PNGEncContext {
AVClass *class;
- HuffYUVEncDSPContext hdsp;
+ LLVidEncDSPContext llvidencdsp;
uint8_t *bytestream;
uint8_t *bytestream_start;
// APNG
uint32_t palette_checksum; // Used to ensure a single unique palette
uint32_t sequence_number;
+ int extra_data_updated;
+ uint8_t *extra_data;
+ int extra_data_size;
AVFrame *prev_frame;
AVFrame *last_frame;
for (x = 0; x < unaligned_w; x++)
*dst++ = *src1++ - *src2++;
size -= unaligned_w;
- c->hdsp.diff_bytes(dst, src1, src2, size);
+ c->llvidencdsp.diff_bytes(dst, src1, src2, size);
}
static void png_filter_row(PNGEncContext *c, uint8_t *dst, int filter_type,
sub_left_prediction(c, dst, src, bpp, size);
break;
case PNG_FILTER_VALUE_UP:
- c->hdsp.diff_bytes(dst, src, top, size);
+ c->llvidencdsp.diff_bytes(dst, src, top, size);
break;
case PNG_FILTER_VALUE_AVG:
for (i = 0; i < bpp; i++)
if (!pict)
return AVERROR(EINVAL);
- s->bytestream = avctx->extradata = av_malloc(FF_MIN_BUFFER_SIZE);
- if (!avctx->extradata)
+ s->bytestream = s->extra_data = av_malloc(FF_MIN_BUFFER_SIZE);
+ if (!s->extra_data)
return AVERROR(ENOMEM);
ret = encode_headers(avctx, pict);
if (ret < 0)
return ret;
- avctx->extradata_size = s->bytestream - avctx->extradata;
+ s->extra_data_size = s->bytestream - s->extra_data;
s->last_frame_packet = av_malloc(max_packet_size);
if (!s->last_frame_packet)
if (s->last_frame) {
uint8_t* last_fctl_chunk_start = pkt->data;
uint8_t buf[26];
+ if (!s->extra_data_updated) {
+ uint8_t *side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, s->extra_data_size);
+ if (!side_data)
+ return AVERROR(ENOMEM);
+ memcpy(side_data, s->extra_data, s->extra_data_size);
+ s->extra_data_updated = 1;
+ }
AV_WB32(buf + 0, s->last_frame_fctl.sequence_number);
AV_WB32(buf + 4, s->last_frame_fctl.width);
FF_ENABLE_DEPRECATION_WARNINGS
#endif
- ff_huffyuvencdsp_init(&s->hdsp);
+ ff_llvidencdsp_init(&s->llvidencdsp);
#if FF_API_PRIVATE_OPT
FF_DISABLE_DEPRECATION_WARNINGS
av_frame_free(&s->last_frame);
av_frame_free(&s->prev_frame);
av_freep(&s->last_frame_packet);
+ av_freep(&s->extra_data);
+ s->extra_data_size = 0;
return 0;
}