]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8959 #resolve refactor code
authorSeven Du <dujinfang@gmail.com>
Wed, 23 Mar 2016 22:53:37 +0000 (06:53 +0800)
committerSeven Du <dujinfang@gmail.com>
Wed, 23 Mar 2016 22:53:37 +0000 (06:53 +0800)
src/mod/applications/mod_av/avcodec.c

index 67f860b33fc8fcb46320c161864760cc138fc008..37fca084dd7d88bd852e78fec9aeb5ac82e8d285 100644 (file)
@@ -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;