git.videolan.org
/
ffmpeg.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6a04721
)
svq1enc: switch to encode2().
author
Anton Khirnov
<anton@khirnov.net>
Mon, 13 Feb 2012 11:00:38 +0000
(12:00 +0100)
committer
Anton Khirnov
<anton@khirnov.net>
Fri, 17 Feb 2012 19:46:37 +0000
(20:46 +0100)
libavcodec/svq1enc.c
patch
|
blob
|
history
diff --git
a/libavcodec/svq1enc.c
b/libavcodec/svq1enc.c
index
5710b25
..
864c4ac
100644
(file)
--- a/
libavcodec/svq1enc.c
+++ b/
libavcodec/svq1enc.c
@@
-497,14
+497,19
@@
static av_cold int svq1_encode_init(AVCodecContext *avctx)
return 0;
}
return 0;
}
-static int svq1_encode_frame(AVCodecContext *avctx,
unsigned char *buf
,
-
int buf_size, void *data
)
+static int svq1_encode_frame(AVCodecContext *avctx,
AVPacket *pkt
,
+
const AVFrame *pict, int *got_packet
)
{
SVQ1Context * const s = avctx->priv_data;
{
SVQ1Context * const s = avctx->priv_data;
- AVFrame *pict = data;
AVFrame * const p= (AVFrame*)&s->picture;
AVFrame temp;
AVFrame * const p= (AVFrame*)&s->picture;
AVFrame temp;
- int i;
+ int i, ret;
+
+ if (!pkt->data &&
+ (ret = av_new_packet(pkt, s->y_block_width*s->y_block_height*MAX_MB_BYTES*3 + FF_MIN_BUFFER_SIZE) < 0)) {
+ av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
+ return ret;
+ }
if(avctx->pix_fmt != PIX_FMT_YUV410P){
av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n");
if(avctx->pix_fmt != PIX_FMT_YUV410P){
av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n");
@@
-521,7
+526,7
@@
static int svq1_encode_frame(AVCodecContext *avctx, unsigned char *buf,
s->current_picture= s->last_picture;
s->last_picture= temp;
s->current_picture= s->last_picture;
s->last_picture= temp;
- init_put_bits(&s->pb,
buf, buf_
size);
+ init_put_bits(&s->pb,
pkt->data, pkt->
size);
*p = *pict;
p->pict_type = avctx->gop_size && avctx->frame_number % avctx->gop_size ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
*p = *pict;
p->pict_type = avctx->gop_size && avctx->frame_number % avctx->gop_size ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
@@
-542,7
+547,12
@@
static int svq1_encode_frame(AVCodecContext *avctx, unsigned char *buf,
flush_put_bits(&s->pb);
flush_put_bits(&s->pb);
- return put_bits_count(&s->pb) / 8;
+ pkt->size = put_bits_count(&s->pb) / 8;
+ if (p->pict_type == AV_PICTURE_TYPE_I)
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ *got_packet = 1;
+
+ return 0;
}
static av_cold int svq1_encode_end(AVCodecContext *avctx)
}
static av_cold int svq1_encode_end(AVCodecContext *avctx)
@@
-574,7
+584,7
@@
AVCodec ff_svq1_encoder = {
.id = CODEC_ID_SVQ1,
.priv_data_size = sizeof(SVQ1Context),
.init = svq1_encode_init,
.id = CODEC_ID_SVQ1,
.priv_data_size = sizeof(SVQ1Context),
.init = svq1_encode_init,
- .encode
= svq1_encode_frame,
+ .encode
2
= svq1_encode_frame,
.close = svq1_encode_end,
.pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV410P, PIX_FMT_NONE},
.long_name= NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1"),
.close = svq1_encode_end,
.pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV410P, PIX_FMT_NONE},
.long_name= NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1"),