return frame->m ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_MORE_DATA;
}
-static switch_status_t consume_nalu(h264_codec_context_t *context, switch_frame_t *frame)
+static switch_status_t consume_h264_bitstream(h264_codec_context_t *context, switch_frame_t *frame)
{
AVPacket *pkt = &context->encoder_avpacket;
our_h264_nalu_t *nalu = &context->nalus[context->nalu_current_index];
- if (!nalu->len) {
- frame->datalen = 0;
- frame->m = 0;
- if (pkt->size > 0) av_free_packet(pkt);
- // if (context->encoder_avframe->data[0]) av_freep(&context->encoder_avframe->data[0]);
- context->nalu_current_index = 0;
- return SWITCH_STATUS_NOTFOUND;
- }
-
- if (context->av_codec_id == AV_CODEC_ID_H263) {
- return consume_h263_bitstream(context, frame);
- } else if (context->av_codec_id == AV_CODEC_ID_H263P) {
- return consume_h263p_bitstream(context, frame);
- }
-
- assert(nalu->len);
-
if (nalu->len <= SLICE_SIZE) {
uint8_t nalu_hdr = *(uint8_t *)(nalu->start);
uint8_t nalu_type = nalu_hdr & 0x1f;
return SWITCH_STATUS_MORE_DATA;
}
- frame->m = context->nalus[context->nalu_current_index].len ? 0 : 1;
- if (frame->m)
- {
- if (pkt->size > 0) {
- av_packet_unref(pkt);
- }
- return SWITCH_STATUS_SUCCESS;
- } else {
+ if (context->nalus[context->nalu_current_index].len) {
+ frame->m = 0;
return SWITCH_STATUS_MORE_DATA;
+ } else {
+ if (pkt->size > 0) av_packet_unref(pkt);
+
+ return SWITCH_STATUS_SUCCESS;
}
} else {
uint8_t nalu_hdr = *(uint8_t *)(nalu->start);
frame->datalen = left + 2;
frame->m = 1;
context->nalu_current_index++;
- if (pkt->size > 0) {
- av_packet_unref(pkt);
- }
-
+ if (pkt->size > 0) av_packet_unref(pkt);
+
return SWITCH_STATUS_SUCCESS;
} else {
uint8_t start = nalu->start == nalu->eat ? 0x80 : 0;
}
}
+static switch_status_t consume_nalu(h264_codec_context_t *context, switch_frame_t *frame)
+{
+ AVPacket *pkt = &context->encoder_avpacket;
+ our_h264_nalu_t *nalu = &context->nalus[context->nalu_current_index];
+
+ if (!nalu->len) {
+ frame->datalen = 0;
+ frame->m = 0;
+ if (pkt->size > 0) av_free_packet(pkt);
+ context->nalu_current_index = 0;
+ return SWITCH_STATUS_NOTFOUND;
+ }
+
+ if (context->av_codec_id == AV_CODEC_ID_H263) {
+ return consume_h263_bitstream(context, frame);
+ } else if (context->av_codec_id == AV_CODEC_ID_H263P) {
+ return consume_h263p_bitstream(context, frame);
+ } else {
+ return consume_h264_bitstream(context, frame);
+ }
+}
+
static switch_status_t open_encoder(h264_codec_context_t *context, uint32_t width, uint32_t height)
{
int sane = 0;