Commit 3cc77ded authored by Anton Khirnov's avatar Anton Khirnov

svq1enc: switch to encode2().

parent 6a047213
...@@ -497,14 +497,19 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx) ...@@ -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, static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
int buf_size, void *data) 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 * const p= (AVFrame*)&s->picture;
AVFrame temp; 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){ if(avctx->pix_fmt != PIX_FMT_YUV410P){
av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n"); av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n");
...@@ -521,7 +526,7 @@ static int svq1_encode_frame(AVCodecContext *avctx, unsigned char *buf, ...@@ -521,7 +526,7 @@ static int svq1_encode_frame(AVCodecContext *avctx, unsigned char *buf,
s->current_picture= s->last_picture; s->current_picture= s->last_picture;
s->last_picture= temp; 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;
p->pict_type = avctx->gop_size && avctx->frame_number % avctx->gop_size ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I; 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, ...@@ -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 = { ...@@ -574,7 +584,7 @@ AVCodec ff_svq1_encoder = {
.id = CODEC_ID_SVQ1, .id = CODEC_ID_SVQ1,
.priv_data_size = sizeof(SVQ1Context), .priv_data_size = sizeof(SVQ1Context),
.init = svq1_encode_init, .init = svq1_encode_init,
.encode = svq1_encode_frame, .encode2 = svq1_encode_frame,
.close = svq1_encode_end, .close = svq1_encode_end,
.pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV410P, PIX_FMT_NONE}, .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"), .long_name= NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment