From 4172027f214d50348e3fc029e068e8bb4a140deb Mon Sep 17 00:00:00 2001 From: "Alfred E. Heggestad" Date: Sat, 27 Jun 2015 10:13:09 +0200 Subject: vidcodec: move packet-handler to encode_update --- modules/avcodec/avcodec.h | 9 ++++----- modules/avcodec/encode.c | 27 ++++++++++++++++----------- 2 files changed, 20 insertions(+), 16 deletions(-) (limited to 'modules/avcodec') diff --git a/modules/avcodec/avcodec.h b/modules/avcodec/avcodec.h index 0b275f3..890df5f 100644 --- a/modules/avcodec/avcodec.h +++ b/modules/avcodec/avcodec.h @@ -26,13 +26,12 @@ extern const uint8_t h264_level_idc; struct videnc_state; int encode_update(struct videnc_state **vesp, const struct vidcodec *vc, - struct videnc_param *prm, const char *fmtp); -int encode(struct videnc_state *st, bool update, const struct vidframe *frame, - videnc_packet_h *pkth, void *arg); + struct videnc_param *prm, const char *fmtp, + videnc_packet_h *pkth, void *arg); +int encode(struct videnc_state *st, bool update, const struct vidframe *frame); #ifdef USE_X264 int encode_x264(struct videnc_state *st, bool update, - const struct vidframe *frame, - videnc_packet_h *pkth, void *arg); + const struct vidframe *frame); #endif diff --git a/modules/avcodec/encode.c b/modules/avcodec/encode.c index f68b31f..9d1f3a2 100644 --- a/modules/avcodec/encode.c +++ b/modules/avcodec/encode.c @@ -37,6 +37,8 @@ struct videnc_state { struct videnc_param encprm; struct vidsz encsize; enum AVCodecID codec_id; + videnc_packet_h *pkth; + void *arg; union { struct { @@ -408,12 +410,13 @@ static int open_encoder_x264(struct videnc_state *st, struct videnc_param *prm, int encode_update(struct videnc_state **vesp, const struct vidcodec *vc, - struct videnc_param *prm, const char *fmtp) + struct videnc_param *prm, const char *fmtp, + videnc_packet_h *pkth, void *arg) { struct videnc_state *st; int err = 0; - if (!vesp || !vc || !prm) + if (!vesp || !vc || !prm || !pkth) return EINVAL; if (*vesp) @@ -424,6 +427,8 @@ int encode_update(struct videnc_state **vesp, const struct vidcodec *vc, return ENOMEM; st->encprm = *prm; + st->pkth = pkth; + st->arg = arg; st->codec_id = avcodec_resolve_codecid(vc->name); if (st->codec_id == AV_CODEC_ID_NONE) { @@ -475,8 +480,7 @@ int encode_update(struct videnc_state **vesp, const struct vidcodec *vc, #ifdef USE_X264 int encode_x264(struct videnc_state *st, bool update, - const struct vidframe *frame, - videnc_packet_h *pkth, void *arg) + const struct vidframe *frame) { x264_picture_t pic_in, pic_out; x264_nal_t *nal; @@ -541,7 +545,7 @@ int encode_x264(struct videnc_state *st, bool update, err = h264_nal_send(true, true, (i+1)==i_nal, hdr, nal[i].p_payload + offset, nal[i].i_payload - offset, - st->encprm.pktsize, pkth, arg); + st->encprm.pktsize, st->pkth, st->arg); } return err; @@ -549,12 +553,11 @@ int encode_x264(struct videnc_state *st, bool update, #endif -int encode(struct videnc_state *st, bool update, const struct vidframe *frame, - videnc_packet_h *pkth, void *arg) +int encode(struct videnc_state *st, bool update, const struct vidframe *frame) { int i, err, ret; - if (!st || !frame || !pkth || frame->fmt != VID_FMT_YUV420P) + if (!st || !frame || frame->fmt != VID_FMT_YUV420P) return EINVAL; if (!st->ctx || !vidsz_cmp(&st->encsize, &frame->size)) { @@ -626,15 +629,17 @@ int encode(struct videnc_state *st, bool update, const struct vidframe *frame, switch (st->codec_id) { case AV_CODEC_ID_H263: - err = h263_packetize(st, st->mb, pkth, arg); + err = h263_packetize(st, st->mb, st->pkth, st->arg); break; case AV_CODEC_ID_H264: - err = h264_packetize(st->mb, st->encprm.pktsize, pkth, arg); + err = h264_packetize(st->mb, st->encprm.pktsize, + st->pkth, st->arg); break; case AV_CODEC_ID_MPEG4: - err = general_packetize(st->mb, st->encprm.pktsize, pkth, arg); + err = general_packetize(st->mb, st->encprm.pktsize, + st->pkth, st->arg); break; default: -- cgit v1.2.3