- s->mode = get_wb_bitrate_mode(avctx->bit_rate, avctx);
- size = E_IF_encode(s->state, s->mode, data, frame, s->allow_dtx);
- return size;
+ if ((ret = ff_alloc_packet(avpkt, MAX_PACKET_SIZE))) {
+ av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
+ return ret;
+ }
+
+ if (s->last_bitrate != avctx->bit_rate) {
+ s->mode = get_wb_bitrate_mode(avctx->bit_rate, avctx);
+ s->last_bitrate = avctx->bit_rate;
+ }
+ size = E_IF_encode(s->state, s->mode, samples, avpkt->data, s->allow_dtx);
+ if (size <= 0 || size > MAX_PACKET_SIZE) {
+ av_log(avctx, AV_LOG_ERROR, "Error encoding frame\n");
+ return AVERROR(EINVAL);
+ }
+
+ if (frame->pts != AV_NOPTS_VALUE)
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
+
+ avpkt->size = size;
+ *got_packet_ptr = 1;
+ return 0;