File: 0204_fix-ftbfs-jack-ffmpeg7.patch

package info (click to toggle)
mplayer 2%3A1.5%2Bsvn38674-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 32,232 kB
  • sloc: ansic: 332,435; xml: 116,512; sh: 9,876; perl: 1,154; objc: 1,073; makefile: 1,030; cpp: 875; asm: 346; awk: 223; python: 98; cs: 10
file content (129 lines) | stat: -rw-r--r-- 3,309 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
From 98f80775dff2b9f83ba9b2e247ef7b2174a107bf Mon Sep 17 00:00:00 2001
From: Alexander Strasser <eclipse7@gmx.net>
Date: Wed, 3 Apr 2024 22:57:40 +0200
Subject: [PATCH] ao jack: Switch from AVFifoBuffer to AVFifo

Removed from lavu on major bump to 59

TODO: Check for potential concurrency problems
---
 libao2/ao_jack.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

--- a/libao2/ao_jack.c
+++ b/libao2/ao_jack.c
@@ -71,7 +71,7 @@
 #define BUFFSIZE (NUM_CHUNKS * CHUNK_SIZE)
 
 //! buffer for audio data
-static AVFifoBuffer *buffer;
+static AVFifo *buffer;
 
 /**
  * \brief insert len bytes into buffer
@@ -82,9 +82,10 @@
  * If there is not enough room, the buffer is filled up
  */
 static int write_buffer(unsigned char* data, int len) {
-  int free = av_fifo_space(buffer);
+  int free = av_fifo_can_write(buffer);
   if (len > free) len = free;
-  return av_fifo_generic_write(buffer, data, len, NULL);
+  av_fifo_write(buffer, data, len);
+  return len;
 }
 
 static void silence(float **bufs, int cnt, int num_bufs);
@@ -96,10 +97,11 @@
   int pos;
 };
 
-static void deinterleave(void *info, void *src, int len) {
+static int deinterleave(void *info, void *src, size_t *lenp) {
   struct deinterleave *di = info;
   float *s = src;
   int i;
+  int len = *lenp;
   len /= sizeof(float);
   for (i = 0; i < len; i++) {
     di->bufs[di->cur_buf++][di->pos] = s[i];
@@ -108,6 +110,7 @@
       di->pos++;
     }
   }
+  return 0;
 }
 
 /**
@@ -125,12 +128,13 @@
  */
 static int read_buffer(float **bufs, int cnt, int num_bufs) {
   struct deinterleave di = {bufs, num_bufs, 0, 0};
-  int buffered = av_fifo_size(buffer);
+  size_t len = cnt * num_bufs * sizeof(float);
+  int buffered = av_fifo_can_read(buffer);
   if (cnt * sizeof(float) * num_bufs > buffered) {
     silence(bufs, cnt, num_bufs);
     cnt = buffered / sizeof(float) / num_bufs;
   }
-  av_fifo_generic_read(buffer, &di, cnt * num_bufs * sizeof(float), deinterleave);
+  av_fifo_read_to_cb(buffer, deinterleave, &di, &len);
   return cnt;
 }
 
@@ -242,7 +246,7 @@
     mp_msg(MSGT_AO, MSGL_FATAL, "[JACK] cannot open server\n");
     goto err_out;
   }
-  buffer = av_fifo_alloc(BUFFSIZE);
+  buffer = av_fifo_alloc2(BUFFSIZE, 1, 0);
   jack_set_process_callback(client, outputaudio, 0);
 
   // list matching ports if connections should be made
@@ -302,8 +306,7 @@
   free(client_name);
   if (client)
     jack_client_close(client);
-  av_fifo_free(buffer);
-  buffer = NULL;
+  av_fifo_freep2(&buffer);
   return 0;
 }
 
@@ -315,8 +318,7 @@
   reset();
   usec_sleep(100 * 1000);
   jack_client_close(client);
-  av_fifo_free(buffer);
-  buffer = NULL;
+  av_fifo_freep2(&buffer);
 }
 
 /**
@@ -324,7 +326,7 @@
  */
 static void reset(void) {
   paused = 1;
-  av_fifo_reset(buffer);
+  av_fifo_reset2(buffer);
   paused = 0;
 }
 
@@ -343,7 +345,7 @@
 }
 
 static int get_space(void) {
-  return av_fifo_space(buffer);
+  return av_fifo_can_write(buffer);
 }
 
 /**
@@ -357,7 +359,7 @@
 }
 
 static float get_delay(void) {
-  int buffered = av_fifo_size(buffer); // could be less
+  int buffered = av_fifo_can_read(buffer); // could be less
   float in_jack = jack_latency;
   if (estimate && callback_interval > 0) {
     float elapsed = (float)GetTimer() / 1000000.0 - callback_time;