summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2018-07-19 21:47:51 +0000
committeriphydf <iphydf@users.noreply.github.com>2018-07-21 14:22:41 +0000
commit9a96bb9a5bb414afb137c094f987740581ecebda (patch)
tree91755a98acd3052714122f8e7e804ec1c5468d73
parent253abe5de4cc96f767911ede291a341b55e2de0f (diff)
Reduce nesting by doing more early returns on error.
This almost entirely avoids any else-after-return in toxcore. One case is left, and that one is more readable this way. Why no else after return: https://llvm.org/docs/CodingStandards.html#don-t-use-else-after-a-return Why exemptions exist: https://blog.mozilla.org/nnethercote/2009/08/31/no-else-after-return-considered-harmful/
-rw-r--r--toxav/video.c71
-rw-r--r--toxcore/group.c12
2 files changed, 39 insertions, 44 deletions
diff --git a/toxav/video.c b/toxav/video.c
index 5145c29c..17969003 100644
--- a/toxav/video.c
+++ b/toxav/video.c
@@ -299,55 +299,52 @@ void vc_iterate(VCSession *vc)
299 return; 299 return;
300 } 300 }
301 301
302 pthread_mutex_lock(vc->queue_mutex);
303
302 struct RTPMessage *p; 304 struct RTPMessage *p;
303 305
304 vpx_codec_err_t rc; 306 if (!rb_read((RingBuffer *)vc->vbuf_raw, (void **)&p)) {
307 LOGGER_TRACE(vc->log, "no Video frame data available");
308 pthread_mutex_unlock(vc->queue_mutex);
309 return;
310 }
305 311
306 pthread_mutex_lock(vc->queue_mutex); 312 pthread_mutex_unlock(vc->queue_mutex);
313 const struct RTPHeader *const header = &p->header;
307 314
308 uint32_t full_data_len; 315 uint32_t full_data_len;
309 316
310 if (rb_read((RingBuffer *)vc->vbuf_raw, (void **)&p)) { 317 if (header->flags & RTP_LARGE_FRAME) {
311 pthread_mutex_unlock(vc->queue_mutex); 318 full_data_len = header->data_length_full;
312 const struct RTPHeader *const header = &p->header; 319 LOGGER_DEBUG(vc->log, "vc_iterate:001:full_data_len=%d", (int)full_data_len);
320 } else {
321 full_data_len = p->len;
322 LOGGER_DEBUG(vc->log, "vc_iterate:002");
323 }
313 324
314 if (header->flags & RTP_LARGE_FRAME) { 325 LOGGER_DEBUG(vc->log, "vc_iterate: rb_read p->len=%d p->header.xe=%d", (int)full_data_len, p->header.xe);
315 full_data_len = header->data_length_full; 326 LOGGER_DEBUG(vc->log, "vc_iterate: rb_read rb size=%d", (int)rb_size((RingBuffer *)vc->vbuf_raw));
316 LOGGER_DEBUG(vc->log, "vc_iterate:001:full_data_len=%d", (int)full_data_len); 327 const vpx_codec_err_t rc = vpx_codec_decode(vc->decoder, p->data, full_data_len, nullptr, MAX_DECODE_TIME_US);
317 } else { 328 free(p);
318 full_data_len = p->len;
319 LOGGER_DEBUG(vc->log, "vc_iterate:002");
320 }
321 329
322 LOGGER_DEBUG(vc->log, "vc_iterate: rb_read p->len=%d p->header.xe=%d", (int)full_data_len, p->header.xe); 330 if (rc != VPX_CODEC_OK) {
323 LOGGER_DEBUG(vc->log, "vc_iterate: rb_read rb size=%d", (int)rb_size((RingBuffer *)vc->vbuf_raw)); 331 LOGGER_ERROR(vc->log, "Error decoding video: %d %s", (int)rc, vpx_codec_err_to_string(rc));
324 rc = vpx_codec_decode(vc->decoder, p->data, full_data_len, nullptr, MAX_DECODE_TIME_US); 332 return;
325 free(p); 333 }
326 334
327 if (rc != VPX_CODEC_OK) { 335 /* Play decoded images */
328 LOGGER_ERROR(vc->log, "Error decoding video: %d %s", (int)rc, vpx_codec_err_to_string(rc)); 336 vpx_codec_iter_t iter = nullptr;
329 } else { 337 vpx_image_t *dest = nullptr;
330 /* Play decoded images */ 338
331 vpx_codec_iter_t iter = nullptr; 339 while ((dest = vpx_codec_get_frame(vc->decoder, &iter)) != nullptr) {
332 vpx_image_t *dest = nullptr; 340 if (vc->vcb.first) {
333 341 vc->vcb.first(vc->av, vc->friend_number, dest->d_w, dest->d_h,
334 while ((dest = vpx_codec_get_frame(vc->decoder, &iter)) != nullptr) { 342 (const uint8_t *)dest->planes[0], (const uint8_t *)dest->planes[1], (const uint8_t *)dest->planes[2],
335 if (vc->vcb.first) { 343 dest->stride[0], dest->stride[1], dest->stride[2], vc->vcb.second);
336 vc->vcb.first(vc->av, vc->friend_number, dest->d_w, dest->d_h,
337 (const uint8_t *)dest->planes[0], (const uint8_t *)dest->planes[1], (const uint8_t *)dest->planes[2],
338 dest->stride[0], dest->stride[1], dest->stride[2], vc->vcb.second);
339 }
340
341 vpx_img_free(dest); // is this needed? none of the VPx examples show that
342 }
343 } 344 }
344 345
345 return; 346 vpx_img_free(dest); // is this needed? none of the VPx examples show that
346 } else {
347 LOGGER_TRACE(vc->log, "no Video frame data available");
348 } 347 }
349
350 pthread_mutex_unlock(vc->queue_mutex);
351} 348}
352 349
353int vc_queue_message(void *vcp, struct RTPMessage *msg) 350int vc_queue_message(void *vcp, struct RTPMessage *msg)
diff --git a/toxcore/group.c b/toxcore/group.c
index 95de1afb..826ea239 100644
--- a/toxcore/group.c
+++ b/toxcore/group.c
@@ -2270,12 +2270,9 @@ static unsigned int lossy_packet_not_received(Group_c *g, int peer_index, uint16
2270 g->group[peer_index].top_lossy_number = message_number; 2270 g->group[peer_index].top_lossy_number = message_number;
2271 g->group[peer_index].bottom_lossy_number = (message_number - MAX_LOSSY_COUNT) + 1; 2271 g->group[peer_index].bottom_lossy_number = (message_number - MAX_LOSSY_COUNT) + 1;
2272 g->group[peer_index].recv_lossy[message_number % MAX_LOSSY_COUNT] = 1; 2272 g->group[peer_index].recv_lossy[message_number % MAX_LOSSY_COUNT] = 1;
2273
2274 return 0;
2275 } else { // top_distance < MAX_LOSSY_COUNT 2273 } else { // top_distance < MAX_LOSSY_COUNT
2276 unsigned int i; 2274 for (unsigned int i = g->group[peer_index].bottom_lossy_number;
2277 2275 i != g->group[peer_index].bottom_lossy_number + top_distance;
2278 for (i = g->group[peer_index].bottom_lossy_number; i != (g->group[peer_index].bottom_lossy_number + top_distance);
2279 ++i) { 2276 ++i) {
2280 g->group[peer_index].recv_lossy[i % MAX_LOSSY_COUNT] = 0; 2277 g->group[peer_index].recv_lossy[i % MAX_LOSSY_COUNT] = 0;
2281 } 2278 }
@@ -2283,9 +2280,10 @@ static unsigned int lossy_packet_not_received(Group_c *g, int peer_index, uint16
2283 g->group[peer_index].top_lossy_number = message_number; 2280 g->group[peer_index].top_lossy_number = message_number;
2284 g->group[peer_index].bottom_lossy_number = (message_number - MAX_LOSSY_COUNT) + 1; 2281 g->group[peer_index].bottom_lossy_number = (message_number - MAX_LOSSY_COUNT) + 1;
2285 g->group[peer_index].recv_lossy[message_number % MAX_LOSSY_COUNT] = 1; 2282 g->group[peer_index].recv_lossy[message_number % MAX_LOSSY_COUNT] = 1;
2286
2287 return 0;
2288 } 2283 }
2284
2285 return 0;
2286
2289} 2287}
2290 2288
2291static int handle_lossy(void *object, int friendcon_id, const uint8_t *data, uint16_t length, void *userdata) 2289static int handle_lossy(void *object, int friendcon_id, const uint8_t *data, uint16_t length, void *userdata)