From: Mike Brady <4265913+mikebrady@users.noreply.github.com> Date: Fri, 23 Sep 2022 16:05:26 +0000 (+0100) Subject: Clang format X-Git-Tag: 4.1-rc1~20^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7dc077e2603563f5eae12ec1f7bcdfa0f698b779;p=thirdparty%2Fshairport-sync.git Clang format --- diff --git a/rtp.c b/rtp.c index e01c8730..7b53df74 100644 --- a/rtp.c +++ b/rtp.c @@ -2588,48 +2588,66 @@ void *rtp_buffered_audio_processor(void *arg) { not_first_time_out = 1; } */ - // clang-format on + // clang-format on + + // debug(1,"block timestamp: %u, packet timestamp: %u.", timestamp, + // pcm_buffer_read_point_rtptime); + + int32_t timestamp_difference = + pcm_buffer_read_point_rtptime - expected_pcm_buffer_read_point_rtptime; + ; + if (packets_played_in_this_sequence != 0) { + if (timestamp_difference != 0) + debug( + 2, + "Unexpected time difference between packets -- actual: %u, expected: %u, " + "difference: %d. Packets played: %d. Blocks played since flush: %d. ", + pcm_buffer_read_point_rtptime, expected_pcm_buffer_read_point_rtptime, + timestamp_difference, packets_played_in_this_sequence, + blocks_read_in_sequence); + } - // debug(1,"block timestamp: %u, packet timestamp: %u.", timestamp, pcm_buffer_read_point_rtptime); + // Very specific code to get around an apparent bug in AirPlay 2 from iOS 16 / + // Ventura 13.0 It seems that the timestamp goes backwards by 2112 frames not + // later than the 65th packet of 352 frames (64 * 352 = 22528 frames which is + // exactly 22 blocks) So, if that happens, we'll add 2112 to the timstamp passed + // to the player + + if ((timestamp_difference == -2112) && (packets_played_in_this_sequence <= 64)) { + debug(1, + "iOS 16.0 discontinuity detected with %d packets played in this " + "sequence. Nothing done.", + packets_played_in_this_sequence); + // pcm_buffer_read_point_rtptime_offset = 2112; // this pretends the timestamps + // after the discontinuity are 2112 frames later, but this just delays + // everything by 2112 frames, pushing stuff out of sync, and i think you can + // hear it. + } - int32_t timestamp_difference = pcm_buffer_read_point_rtptime - expected_pcm_buffer_read_point_rtptime;; - if (packets_played_in_this_sequence != 0) { - if (timestamp_difference != 0) - debug(2,"Unexpected time difference between packets -- actual: %u, expected: %u, difference: %d. Packets played: %d. Blocks played since flush: %d. ", - pcm_buffer_read_point_rtptime, expected_pcm_buffer_read_point_rtptime, timestamp_difference, packets_played_in_this_sequence, blocks_read_in_sequence); - } - - - // Very specific code to get around an apparent bug in AirPlay 2 from iOS 16 / Ventura 13.0 - // It seems that the timestamp goes backwards by 2112 frames not later than the 65th packet of 352 frames (64 * 352 = 22528 frames which is exactly 22 blocks) - // So, if that happens, we'll add 2112 to the timstamp passed to the player - - if ((timestamp_difference == -2112) && (packets_played_in_this_sequence <= 64)) { - debug(1,"iOS 16.0 discontinuity detected with %d packets played in this sequence. Nothing done.", packets_played_in_this_sequence); - // pcm_buffer_read_point_rtptime_offset = 2112; // this pretends the timestamps after the discontinuity are 2112 frames later, but this just delays everything by 2112 frames, pushing stuff out of sync, and i think you can hear it. - } - - - // if it's not the very first block of AAC, but is from the first few blocks of a new AAC sequence, - // it will contain noisy transients, so replace it with silence. - if ((blocks_read_in_sequence <= 2) && (blocks_read_in_sequence != blocks_read)) { - // debug(1,"Muting packet %u from block %u to avoid AAC transients because it's not from a true starting block. Blocks_read is %" PRIu64 ". blocks_read_in_sequence is %" PRIu64 ".", pcm_buffer_read_point_rtptime, timestamp, blocks_read, blocks_read_in_sequence); - conn->previous_random_number = - generate_zero_frames((char *)(pcm_buffer + pcm_buffer_read_point), 352, config.output_format, conn->enable_dither, - conn->previous_random_number); - } - - player_put_packet(0, 0, pcm_buffer_read_point_rtptime + pcm_buffer_read_point_rtptime_offset, - pcm_buffer + pcm_buffer_read_point, 352, conn); - packets_played_in_this_sequence++; - expected_pcm_buffer_read_point_rtptime = pcm_buffer_read_point_rtptime + 352; + // if it's not the very first block of AAC, but is from the first few blocks of a + // new AAC sequence, it will contain noisy transients, so replace it with silence. + if ((blocks_read_in_sequence <= 2) && (blocks_read_in_sequence != blocks_read)) { + // debug(1,"Muting packet %u from block %u to avoid AAC transients because it's + // not from a true starting block. Blocks_read is %" PRIu64 ". + // blocks_read_in_sequence is %" PRIu64 ".", pcm_buffer_read_point_rtptime, + // timestamp, blocks_read, blocks_read_in_sequence); + conn->previous_random_number = generate_zero_frames( + (char *)(pcm_buffer + pcm_buffer_read_point), 352, config.output_format, + conn->enable_dither, conn->previous_random_number); } + + player_put_packet( + 0, 0, pcm_buffer_read_point_rtptime + pcm_buffer_read_point_rtptime_offset, + pcm_buffer + pcm_buffer_read_point, 352, conn); + packets_played_in_this_sequence++; + expected_pcm_buffer_read_point_rtptime = pcm_buffer_read_point_rtptime + 352; + } // } } else { debug(3, "Dropping packet %u from block %u with out-of-range lead_time: %.3f seconds.", pcm_buffer_read_point_rtptime, seq_no, 0.000000001 * lead_time); - expected_pcm_buffer_read_point_rtptime = pcm_buffer_read_point_rtptime + 352; + expected_pcm_buffer_read_point_rtptime = pcm_buffer_read_point_rtptime + 352; } pcm_buffer_read_point_rtptime += 352; @@ -2642,13 +2660,16 @@ void *rtp_buffered_audio_processor(void *arg) { usleep(20000); // wait before asking if play is enabled again } } else { - // debug(1,"new buffer needed for buffer starting at %u because pcm_buffer_read_point (frames) is %u and pcm_buffer_occupancy (frames) is %u.", pcm_buffer_read_point_rtptime, pcm_buffer_read_point/conn->input_bytes_per_frame, + // debug(1,"new buffer needed for buffer starting at %u because pcm_buffer_read_point + // (frames) is %u and pcm_buffer_occupancy (frames) is %u.", + // pcm_buffer_read_point_rtptime, pcm_buffer_read_point/conn->input_bytes_per_frame, // pcm_buffer_occupancy/conn->input_bytes_per_frame); new_buffer_needed = 1; if (pcm_buffer_read_point != 0) { // debug(1,"pcm_buffer_read_point (frames): %u, pcm_buffer_occupancy (frames): %u", - //pcm_buffer_read_point/conn->input_bytes_per_frame, - //pcm_buffer_occupancy/conn->input_bytes_per_frame); // if there is anything to move down + // pcm_buffer_read_point/conn->input_bytes_per_frame, + // pcm_buffer_occupancy/conn->input_bytes_per_frame); // if there is anything to move + // down // to the front of the buffer, do it now; if ((pcm_buffer_occupancy - pcm_buffer_read_point) > 0) { // move the remaining frames down to the start of the buffer @@ -2668,9 +2689,9 @@ void *rtp_buffered_audio_processor(void *arg) { if ((flush_requested) || (new_buffer_needed)) { // debug(1,"pcm_buffer_read_point (frames): %u, pcm_buffer_occupancy (frames): %u", - // pcm_buffer_read_point/conn->input_bytes_per_frame, pcm_buffer_occupancy/conn->input_bytes_per_frame); - // ok, so here we know we need material from the sender - // do we will get in a packet of audio + // pcm_buffer_read_point/conn->input_bytes_per_frame, + // pcm_buffer_occupancy/conn->input_bytes_per_frame); ok, so here we know we need material + // from the sender do we will get in a packet of audio uint16_t data_len; // here we read from the buffer that our thread has been reading size_t bytes_remaining_in_buffer; @@ -2714,13 +2735,17 @@ void *rtp_buffered_audio_processor(void *arg) { previous_seq_no++; seq_no = packet[1] * (1 << 16) + packet[2] * (1 << 8) + packet[3]; if (previous_seq_no != seq_no) { - debug(2,"block sequence number changed from expected %u to actual %u.", previous_seq_no, seq_no); + debug(2, "block sequence number changed from expected %u to actual %u.", previous_seq_no, + seq_no); } timestamp = nctohl(&packet[4]); // debug(1,"New block timestamp: %u.", timestamp); int32_t timestamp_difference = timestamp - expected_timestamp; - if ((timestamp_difference != 0) && (expected_timesamp_is_reasonable != 0)) - debug(2, "Block with unexpected timestamp. Expected: %u, got: %u, difference: %d, blocks_read_in_sequence: %" PRIu64 ".", expected_timestamp, timestamp, timestamp_difference, blocks_read_in_sequence); + if ((timestamp_difference != 0) && (expected_timesamp_is_reasonable != 0)) + debug(2, + "Block with unexpected timestamp. Expected: %u, got: %u, difference: %d, " + "blocks_read_in_sequence: %" PRIu64 ".", + expected_timestamp, timestamp, timestamp_difference, blocks_read_in_sequence); expected_timestamp = timestamp; expected_timesamp_is_reasonable = 0; // must be validated each time by decoding the frame @@ -2922,12 +2947,14 @@ void *rtp_buffered_audio_processor(void *arg) { pcm_buffer_size); } else { memcpy(pcm_buffer + pcm_buffer_occupancy, pcm_audio, dst_bufsize); - expected_timestamp += (dst_bufsize/conn->input_bytes_per_frame); + expected_timestamp += (dst_bufsize / conn->input_bytes_per_frame); expected_timesamp_is_reasonable = 1; pcm_buffer_occupancy += dst_bufsize; - // debug(1,"frames added: pcm_buffer_read_point (frames): %u, pcm_buffer_occupancy (frames): %u", - // pcm_buffer_read_point/conn->input_bytes_per_frame, pcm_buffer_occupancy/conn->input_bytes_per_frame); - } + // debug(1,"frames added: pcm_buffer_read_point (frames): %u, + // pcm_buffer_occupancy (frames): %u", + // pcm_buffer_read_point/conn->input_bytes_per_frame, + // pcm_buffer_occupancy/conn->input_bytes_per_frame); + } // debug(1,"decoded %d samples", decoded_frame->nb_samples); // memcpy(sampleBuffer,outputBuffer16,dst_bufsize); av_freep(&pcm_audio);