| | |
| | | frm.height = frame->height; |
| | | frm.format = frame->format; |
| | | frm.id = id; |
| | | uint8_t *tmp = cvbridge::extractFrame(frame, &frm.length); |
| | | uint8_t *data = NULL; |
| | | if (frame->format == AV_PIX_FMT_YUV420P){ |
| | | data = tmp; |
| | | }else if (frame->format == AV_PIX_FMT_NV12){ |
| | | data = (uint8_t*)malloc(frm.length); |
| | | |
| | | int i, j; |
| | | int y_size = frame->width * frame->height; |
| | | |
| | | unsigned char* y = tmp; |
| | | unsigned char* uv = tmp + y_size; |
| | | |
| | | unsigned char* y_tmp = data; |
| | | unsigned char* u_tmp = data + y_size; |
| | | unsigned char* v_tmp = data + y_size * 5 / 4; |
| | | |
| | | // y |
| | | memcpy(y_tmp, y, y_size); |
| | | |
| | | // uv |
| | | for (j = 0, i = 0; j < y_size/2; j+=2, i++) |
| | | { |
| | | u_tmp[i] = uv[j]; |
| | | v_tmp[i] = uv[j+1]; |
| | | } |
| | | free(tmp); |
| | | }else{ |
| | | return 0; |
| | | } |
| | | frm.data = data; |
| | | frm.data = cvbridge::extractFrame(frame, &frm.length); |
| | | |
| | | std::lock_guard<std::mutex> l(mutex_frm_); |
| | | while(list_frm_.size() > 50){ |
| | | for(int i = 0; i < 12; i++){ |