From a42ab1102243698561200eaadc981142c35b4069 Mon Sep 17 00:00:00 2001 From: Seven Du Date: Thu, 24 Mar 2016 06:53:37 +0800 Subject: [PATCH] FS-8959 #resolve refactor code --- src/mod/applications/mod_av/avcodec.c | 61 ++++++++++++++------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/src/mod/applications/mod_av/avcodec.c b/src/mod/applications/mod_av/avcodec.c index 67f860b33f..37fca084dd 100644 --- a/src/mod/applications/mod_av/avcodec.c +++ b/src/mod/applications/mod_av/avcodec.c @@ -734,28 +734,11 @@ static switch_status_t consume_h263p_bitstream(h264_codec_context_t *context, sw 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; @@ -768,15 +751,13 @@ static switch_status_t consume_nalu(h264_codec_context_t *context, switch_frame_ 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); @@ -793,10 +774,8 @@ static switch_status_t consume_nalu(h264_codec_context_t *context, switch_frame_ 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; @@ -812,6 +791,28 @@ static switch_status_t consume_nalu(h264_codec_context_t *context, switch_frame_ } } +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;