Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-11-17 15:33:27 +0400
committerMichael Niedermayer <michaelni@gmx.at>2013-11-17 15:33:27 +0400
commita0c0629dd963b00f989172f0c599353b6b288c37 (patch)
tree9948f38dd870d440db9ac10f98bbf1275282b056 /libavcodec/flashsvenc.c
parent5b0c70c2499e20529d517b712910d6f4f72e9485 (diff)
parent97168b204a0b6b79bb6c5f0d40efdf7fc2262476 (diff)
Merge commit '97168b204a0b6b79bb6c5f0d40efdf7fc2262476'
* commit '97168b204a0b6b79bb6c5f0d40efdf7fc2262476': eatgv: use the AVFrame API properly. libxavs: use the AVFrame API properly. nuv: use the AVFrame API properly. flashsvenc: use the AVFrame API properly. Conflicts: libavcodec/eatgv.c libavcodec/nuv.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/flashsvenc.c')
-rw-r--r--libavcodec/flashsvenc.c53
1 files changed, 28 insertions, 25 deletions
diff --git a/libavcodec/flashsvenc.c b/libavcodec/flashsvenc.c
index ee67652eba..7ad15f118f 100644
--- a/libavcodec/flashsvenc.c
+++ b/libavcodec/flashsvenc.c
@@ -57,7 +57,6 @@
typedef struct FlashSVContext {
AVCodecContext *avctx;
uint8_t *previous_frame;
- AVFrame frame;
int image_width, image_height;
int block_width, block_height;
uint8_t *tmpblock;
@@ -89,6 +88,21 @@ static int copy_region_enc(uint8_t *sptr, uint8_t *dptr, int dx, int dy,
return 0;
}
+static av_cold int flashsv_encode_end(AVCodecContext *avctx)
+{
+ FlashSVContext *s = avctx->priv_data;
+
+ deflateEnd(&s->zstream);
+
+ av_free(s->encbuffer);
+ av_free(s->previous_frame);
+ av_free(s->tmpblock);
+
+ av_frame_free(&avctx->coded_frame);
+
+ return 0;
+}
+
static av_cold int flashsv_encode_init(AVCodecContext *avctx)
{
FlashSVContext *s = avctx->priv_data;
@@ -117,11 +131,17 @@ static av_cold int flashsv_encode_init(AVCodecContext *avctx)
return AVERROR(ENOMEM);
}
+ avctx->coded_frame = av_frame_alloc();
+ if (!avctx->coded_frame) {
+ flashsv_encode_end(avctx);
+ return AVERROR(ENOMEM);
+ }
+
return 0;
}
-static int encode_bitstream(FlashSVContext *s, AVFrame *p, uint8_t *buf,
+static int encode_bitstream(FlashSVContext *s, const AVFrame *p, uint8_t *buf,
int buf_size, int block_width, int block_height,
uint8_t *previous_frame, int *I_frame)
{
@@ -199,14 +219,12 @@ static int flashsv_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
const AVFrame *pict, int *got_packet)
{
FlashSVContext * const s = avctx->priv_data;
- AVFrame * const p = &s->frame;
+ const AVFrame * const p = pict;
uint8_t *pfptr;
int res;
int I_frame = 0;
int opt_w = 4, opt_h = 4;
- *p = *pict;
-
/* First frame needs to be a keyframe */
if (avctx->frame_number == 0) {
s->previous_frame = av_mallocz(FFABS(p->linesize[0]) * s->image_height);
@@ -244,37 +262,22 @@ static int flashsv_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
//mark the frame type so the muxer can mux it correctly
if (I_frame) {
- p->pict_type = AV_PICTURE_TYPE_I;
- p->key_frame = 1;
+ avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
+ avctx->coded_frame->key_frame = 1;
s->last_key_frame = avctx->frame_number;
av_dlog(avctx, "Inserting keyframe at frame %d\n", avctx->frame_number);
} else {
- p->pict_type = AV_PICTURE_TYPE_P;
- p->key_frame = 0;
+ avctx->coded_frame->pict_type = AV_PICTURE_TYPE_P;
+ avctx->coded_frame->key_frame = 0;
}
- avctx->coded_frame = p;
-
- if (p->key_frame)
+ if (avctx->coded_frame->key_frame)
pkt->flags |= AV_PKT_FLAG_KEY;
*got_packet = 1;
return 0;
}
-static av_cold int flashsv_encode_end(AVCodecContext *avctx)
-{
- FlashSVContext *s = avctx->priv_data;
-
- deflateEnd(&s->zstream);
-
- av_free(s->encbuffer);
- av_free(s->previous_frame);
- av_free(s->tmpblock);
-
- return 0;
-}
-
AVCodec ff_flashsv_encoder = {
.name = "flashsv",
.long_name = NULL_IF_CONFIG_SMALL("Flash Screen Video"),