|
|
@@ -32,7 +32,7 @@ |
|
|
typedef struct LibWebPAnimContext { |
|
|
typedef struct LibWebPAnimContext { |
|
|
LibWebPContextCommon cc; |
|
|
LibWebPContextCommon cc; |
|
|
WebPAnimEncoder *enc; // the main AnimEncoder object |
|
|
WebPAnimEncoder *enc; // the main AnimEncoder object |
|
|
int64_t prev_frame_pts; // pts of the previously encoded frame. |
|
|
|
|
|
|
|
|
int64_t first_frame_pts; // pts of the first encoded frame. |
|
|
int done; // If true, we have assembled the bitstream already |
|
|
int done; // If true, we have assembled the bitstream already |
|
|
} LibWebPAnimContext; |
|
|
} LibWebPAnimContext; |
|
|
|
|
|
|
|
|
@@ -48,7 +48,7 @@ static av_cold int libwebp_anim_encode_init(AVCodecContext *avctx) |
|
|
s->enc = WebPAnimEncoderNew(avctx->width, avctx->height, &enc_options); |
|
|
s->enc = WebPAnimEncoderNew(avctx->width, avctx->height, &enc_options); |
|
|
if (!s->enc) |
|
|
if (!s->enc) |
|
|
return AVERROR(EINVAL); |
|
|
return AVERROR(EINVAL); |
|
|
s->prev_frame_pts = -1; |
|
|
|
|
|
|
|
|
s->first_frame_pts = AV_NOPTS_VALUE; |
|
|
s->done = 0; |
|
|
s->done = 0; |
|
|
} |
|
|
} |
|
|
return ret; |
|
|
return ret; |
|
|
@@ -73,7 +73,7 @@ static int libwebp_anim_encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
memcpy(pkt->data, assembled_data.bytes, assembled_data.size); |
|
|
memcpy(pkt->data, assembled_data.bytes, assembled_data.size); |
|
|
s->done = 1; |
|
|
s->done = 1; |
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
pkt->pts = pkt->dts = s->prev_frame_pts + 1; |
|
|
|
|
|
|
|
|
pkt->pts = pkt->dts = s->first_frame_pts; |
|
|
*got_packet = 1; |
|
|
*got_packet = 1; |
|
|
return 0; |
|
|
return 0; |
|
|
} else { |
|
|
} else { |
|
|
@@ -102,7 +102,8 @@ static int libwebp_anim_encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
goto end; |
|
|
goto end; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
s->prev_frame_pts = frame->pts; // Save for next frame. |
|
|
|
|
|
|
|
|
if (!avctx->frame_number) |
|
|
|
|
|
s->first_frame_pts = frame->pts; |
|
|
ret = 0; |
|
|
ret = 0; |
|
|
*got_packet = 0; |
|
|
*got_packet = 0; |
|
|
|
|
|
|
|
|
|