diff --git a/README.md b/README.md index 1f13e73..fe3633c 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ bitrate = 1440 ## function - support YUY2 or MJPEG format usb camera. - support hardware h264 encode. -- wupport NV12 NV16 NV21 NV61 format mipi csi camera. (test max support 2560x1440) +- wupport NV12 NV16 NV21 NV61 format mipi csi camera. (test max support 4224x3136) ## Benefits of improvement - RkCamRtspServer cpu usage diff --git a/src/RkEncoder.cc b/src/RkEncoder.cc index 2c8ce70..63a78d4 100644 --- a/src/RkEncoder.cc +++ b/src/RkEncoder.cc @@ -98,7 +98,7 @@ int RkEncoder::init() * 40 / 41 / 42 - 1080p@30fps / 1080p@30fps / 1080p@60fps * 50 / 51 / 52 - 4K@30fps */ - mpp_enc_cfg_set_s32(cfg, "h264:level", 40); + mpp_enc_cfg_set_s32(cfg, "h264:level", 52); mpp_enc_cfg_set_s32(cfg, "h264:cabac_en", 1); mpp_enc_cfg_set_s32(cfg, "h264:cabac_idc", 0); mpp_enc_cfg_set_s32(cfg, "h264:trans8x8", 1); diff --git a/src/transcoder.cc b/src/transcoder.cc index b42d3cc..118b4dd 100644 --- a/src/transcoder.cc +++ b/src/transcoder.cc @@ -96,15 +96,17 @@ void TransCoder::init() void TransCoder::run() { + uint8_t *buffer; + timeval tv; for (;;) { tv.tv_sec = 1; tv.tv_usec = 0; int startCode = 0; int ret = capture->isReadable(&tv); + buffer =(uint8_t*) malloc(capture->getBufferSize()); if (ret == 1) { - uint8_t buffer[capture->getBufferSize()]; - int resize = capture->read((char *)buffer, sizeof(buffer)); + int resize = capture->read((char *)buffer, capture->getBufferSize()); frameSize = 0; if (config.format == "MJPEG") { ret = decompress->tjpeg2yuv(buffer, resize, &yuv_buf, &yuv_size); @@ -126,6 +128,7 @@ void TransCoder::run() if (onEncodedDataCallback && frameSize > 0) { onEncodedDataCallback(std::vector(encodeData + startCode, encodeData + frameSize)); + free(buffer); } } else if (ret == -1) { LOG(ERROR, "stop %s", strerror(errno));