]> git.pld-linux.org Git - packages/DirectFB.git/blob - ffmpeg3.patch
Release 6 (by relup.sh)
[packages/DirectFB.git] / ffmpeg3.patch
1 diff -ur -x .deps DirectFB-1.7.6.orig/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c DirectFB-1.7.6/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c
2 --- DirectFB-1.7.6.orig/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c       2014-03-23 05:05:18.000000000 +0900
3 +++ DirectFB-1.7.6/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c    2016-04-02 01:07:55.515031522 +0900
4 @@ -259,7 +259,7 @@
5  
6       av_codec_ctx = data->av_fmt_ctx->streams[0]->codec;
7  
8 -     av_picture = avcodec_alloc_frame();
9 +     av_picture = av_frame_alloc();
10  
11       if (av_picture == NULL)
12       {
13 @@ -270,7 +270,7 @@
14  
15       /*No scaling just colourspace conversion*/
16       sw_sca_ctx = sws_getCachedContext(sw_sca_ctx, av_codec_ctx->width, av_codec_ctx->height, av_codec_ctx->pix_fmt,
17 -                                  av_codec_ctx->width, av_codec_ctx->height, PIX_FMT_BGRA,
18 +                                  av_codec_ctx->width, av_codec_ctx->height, AV_PIX_FMT_BGRA,
19                                    SWS_FAST_BILINEAR, NULL,
20                                    NULL, NULL);
21       if (sw_sca_ctx == NULL)
22 diff -ur -x .deps DirectFB-1.7.6.orig/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c DirectFB-1.7.6/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c
23 --- DirectFB-1.7.6.orig/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c       2016-04-02 00:59:25.978409428 +0900
24 +++ DirectFB-1.7.6/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c    2016-04-04 19:51:41.558286928 +0900
25 @@ -601,42 +601,42 @@
26  ff2dvc_pixelformat( int pix_fmt )
27  {
28       switch (pix_fmt) {
29 -          case PIX_FMT_YUV420P:
30 -          case PIX_FMT_YUVJ420P:
31 +          case AV_PIX_FMT_YUV420P:
32 +          case AV_PIX_FMT_YUVJ420P:
33                 return DVCPF_YUV420;
34 -          case PIX_FMT_YUV422P:
35 -          case PIX_FMT_YUVJ422P:
36 +          case AV_PIX_FMT_YUV422P:
37 +          case AV_PIX_FMT_YUVJ422P:
38                 return DVCPF_YUV422;
39 -          case PIX_FMT_YUV444P:
40 -          case PIX_FMT_YUVJ444P:
41 +          case AV_PIX_FMT_YUV444P:
42 +          case AV_PIX_FMT_YUVJ444P:
43                 return DVCPF_YUV444;
44 -          case PIX_FMT_YUV411P:
45 +          case AV_PIX_FMT_YUV411P:
46                 return DVCPF_YUV411;
47 -          case PIX_FMT_YUV410P:
48 +          case AV_PIX_FMT_YUV410P:
49                 return DVCPF_YUV410;
50 -          case PIX_FMT_YUYV422:
51 +          case AV_PIX_FMT_YUYV422:
52                 return DVCPF_YUYV_LE;
53 -          case PIX_FMT_UYVY422:
54 +          case AV_PIX_FMT_UYVY422:
55                 return DVCPF_YUYV_BE;
56 -          case PIX_FMT_NV12:
57 +          case AV_PIX_FMT_NV12:
58                 return DVCPF_NV12_LE;
59 -          case PIX_FMT_NV21:
60 +          case AV_PIX_FMT_NV21:
61                 return DVCPF_NV12_BE;
62 -          case PIX_FMT_GRAY8:
63 +          case AV_PIX_FMT_GRAY8:
64                 return DVCPF_Y8;
65 -          case PIX_FMT_RGB8:
66 +          case AV_PIX_FMT_RGB8:
67                 return DVCPF_RGB8;
68 -          case PIX_FMT_RGB555:
69 +          case AV_PIX_FMT_RGB555:
70                 return DVCPF_RGB15;
71 -          case PIX_FMT_RGB565:
72 +          case AV_PIX_FMT_RGB565:
73                 return DVCPF_RGB16;
74 -          case PIX_FMT_RGB24:
75 +          case AV_PIX_FMT_RGB24:
76                 return DVCPF_RGB24;
77 -          case PIX_FMT_BGR24:
78 +          case AV_PIX_FMT_BGR24:
79                 return DVCPF_BGR24;
80 -          case PIX_FMT_RGB32:
81 +          case AV_PIX_FMT_RGB32:
82                 return DVCPF_RGB32;
83 -          case PIX_FMT_BGR32:
84 +          case AV_PIX_FMT_BGR32:
85                 return DVCPF_BGR32;
86           default:
87                 D_ONCE("unsupported picture format");
88 @@ -798,15 +798,17 @@
89       IDirectFBVideoProvider_FFmpeg_data *data = arg;
90  
91       AVStream *st = data->audio.st;   
92 -     u8        buf[192000 /* AVCODEC_MAX_AUDIO_FRAME_SIZE */]; 
93 +     AVFrame *decoded_frame = NULL;
94 +
95 +     decoded_frame = av_frame_alloc();
96  
97       while (data->status != DVSTATE_STOP) {
98            AVPacket  pkt;
99            u8       *pkt_data;
100            int       pkt_size;
101            int       decoded = 0;
102 -          int       len     = 192000 /* AVCODEC_MAX_AUDIO_FRAME_SIZE */;
103            int       size    = 0;
104 +         int got_frame = 0;
105            
106            direct_thread_testcancel( self );
107           
108 @@ -830,23 +832,15 @@
109                 avcodec_flush_buffers( data->audio.ctx );
110                 data->audio.seeked = false;
111            }
112 -          
113 +
114            for (pkt_data = pkt.data, pkt_size = pkt.size; pkt_size > 0;) {
115 -#if (LIBAVFORMAT_VERSION_MAJOR >= 53)
116 -               decoded = avcodec_decode_audio3( data->audio.ctx,
117 -                                                (s16*)&buf[size], &len, &pkt );
118 -#else
119 -               decoded = avcodec_decode_audio2( data->audio.ctx,
120 -                                                (s16*)&buf[size], &len,
121 -                                                pkt_data, pkt_size );
122 -#endif
123 -               if (decoded < 0)
124 -                    break;
125 -                       
126 -               pkt_data += decoded;
127 -               pkt_size -= decoded;
128 -               if (len > 0)
129 -                    size += len;
130 +               decoded = avcodec_decode_audio4( data->audio.ctx, decoded_frame, &got_frame, &pkt);
131 +               if ((decoded >= 0) && got_frame) {
132 +                   pkt_data += decoded;
133 +                   pkt_size -= decoded;
134 +                   size += decoded;
135 +              } else
136 +                      break;
137            }
138            
139            size /= data->audio.sample_size;
140 @@ -863,12 +857,17 @@
141   
142            pthread_mutex_unlock( &data->audio.lock );
143            
144 -          if (size)
145 -               data->audio.stream->Write( data->audio.stream, buf, size ); 
146 -          else
147 +          if (size) {
148 +               int data_size = av_samples_get_buffer_size(NULL, data->audio.ctx->channels,
149 +                                                         decoded_frame->nb_samples,
150 +                                                         data->audio.ctx->sample_fmt, 1);
151 +               data->audio.stream->Write( data->audio.stream, decoded_frame->data[0], data_size ); 
152 +         } else
153                 usleep( 1000 );
154       }
155  
156 +     av_free(decoded_frame);
157 +
158       return (void*)0;
159  }
160  #endif
161 @@ -1052,37 +1051,37 @@
162       }
163  
164       switch (data->video.ctx->pix_fmt) {
165 -          case PIX_FMT_RGB8:
166 +          case AV_PIX_FMT_RGB8:
167                 desc->pixelformat = DSPF_RGB332;
168                 break;
169 -          case PIX_FMT_RGB555:
170 +          case AV_PIX_FMT_RGB555:
171                 desc->pixelformat = DSPF_ARGB1555;
172                 break;
173 -          case PIX_FMT_RGB565:
174 +          case AV_PIX_FMT_RGB565:
175                 desc->pixelformat = DSPF_RGB16;
176                 break;
177 -          case PIX_FMT_RGB24:
178 -          case PIX_FMT_BGR24:
179 +          case AV_PIX_FMT_RGB24:
180 +          case AV_PIX_FMT_BGR24:
181                 desc->pixelformat = DSPF_RGB24;
182                 break;
183 -          case PIX_FMT_RGB32:
184 -          case PIX_FMT_BGR32:
185 +          case AV_PIX_FMT_RGB32:
186 +          case AV_PIX_FMT_BGR32:
187                 desc->pixelformat = DSPF_RGB32;
188                 break;
189 -          case PIX_FMT_YUYV422:
190 +          case AV_PIX_FMT_YUYV422:
191                 desc->pixelformat = DSPF_YUY2;
192                 break;
193 -          case PIX_FMT_UYVY422:
194 +          case AV_PIX_FMT_UYVY422:
195                 desc->pixelformat = DSPF_UYVY;
196                 break;
197 -          case PIX_FMT_YUV444P:
198 -          case PIX_FMT_YUV422P:
199 -          case PIX_FMT_YUV420P:
200 -          case PIX_FMT_YUV411P:
201 -          case PIX_FMT_YUV410P:
202 -          case PIX_FMT_YUVJ420P:
203 -          case PIX_FMT_YUVJ422P:
204 -          case PIX_FMT_YUVJ444P:
205 +          case AV_PIX_FMT_YUV444P:
206 +          case AV_PIX_FMT_YUV422P:
207 +          case AV_PIX_FMT_YUV420P:
208 +          case AV_PIX_FMT_YUV411P:
209 +          case AV_PIX_FMT_YUV410P:
210 +          case AV_PIX_FMT_YUVJ420P:
211 +          case AV_PIX_FMT_YUVJ422P:
212 +          case AV_PIX_FMT_YUVJ444P:
213                 desc->pixelformat = DSPF_I420;
214                 break;
215            default:
216 diff -ur -x .deps DirectFB-1.7.6.orig/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c DirectFB-1.7.6/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c
217 --- DirectFB-1.7.6.orig/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c 2016-04-02 00:59:26.075077423 +0900
218 +++ DirectFB-1.7.6/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c      2016-04-04 20:16:31.250776250 +0900
219 @@ -604,9 +604,13 @@
220       u8       *pkt_data = NULL;
221       int       pkt_size = 0;
222       s64       pkt_pts  = AV_NOPTS_VALUE;
223 +     AVFrame *decoded_frame = NULL;
224 +
225 +     decoded_frame = av_frame_alloc();
226  
227       while (data->status == FMSTATE_PLAY) {
228            int len, decoded, size = 0;
229 +         int got_frame = 0;
230  
231            pthread_mutex_lock( &data->lock );
232  
233 @@ -655,31 +659,22 @@
234                 }
235            }
236  
237 -          len = AVCODEC_MAX_AUDIO_FRAME_SIZE;
238 -
239 -#if (LIBAVFORMAT_VERSION_MAJOR >= 52)
240 -          decoded = avcodec_decode_audio3( data->codec,
241 -                                          (s16*)data->buf, &len, &pkt);
242 -
243 -#else
244 -          decoded = avcodec_decode_audio2( data->codec,
245 -                                          (s16*)data->buf, &len, pkt_data, pkt_size );
246 -
247 -#endif
248 -          if (decoded < 0) {
249 -               av_free_packet( &pkt );
250 -               pkt_size = 0;
251 -          }
252 -          else {
253 +          decoded = avcodec_decode_audio4( data->codec, decoded_frame, &got_frame, &pkt);
254 +          if ((decoded >= 0) && got_frame) {
255                 pkt_data += decoded;
256                 pkt_size -= decoded;
257                 if (pkt_size <= 0)
258                      av_free_packet( &pkt );
259  
260 -               if (len > 0) {
261 -                    size = len / (data->codec->channels * 2);
262 -                    data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
263 -               }
264 +               size = decoded / (data->codec->channels * 2);
265 +               data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
266 +              int data_size = av_samples_get_buffer_size(NULL, data->codec->channels,
267 +                                                         decoded_frame->nb_samples,
268 +                                                         data->codec->sample_fmt, 1);
269 +              memcpy(data->buf, decoded_frame->data[0], data_size);
270 +          } else {
271 +               av_free_packet( &pkt );
272 +               pkt_size = 0;
273            }
274  
275            pthread_mutex_unlock( &data->lock );
276 @@ -710,6 +705,8 @@
277       if (pkt_size > 0)
278            av_free_packet( &pkt );
279  
280 +     av_free(decoded_frame);
281 +
282       return (void*)0;
283  }
284  
285 @@ -814,10 +811,14 @@
286       int       pkt_size = 0;
287       s64       pkt_pts  = AV_NOPTS_VALUE;
288       int       pos      = 0;
289 +     AVFrame *decoded_frame = NULL;
290 +
291 +     decoded_frame = av_frame_alloc();
292  
293       while (data->status == FMSTATE_PLAY) {
294            s16 *buf;
295            int  len, decoded, size = 0;
296 +         int got_frame = 0;
297  
298            pthread_mutex_lock( &data->lock );
299  
300 @@ -870,32 +871,22 @@
301                 }
302            }
303  
304 -          len = AVCODEC_MAX_AUDIO_FRAME_SIZE;
305 -
306 -#if (LIBAVFORMAT_VERSION_MAJOR >= 53)
307 -          decoded = avcodec_decode_audio3( data->codec,
308 -                                          (s16*)data->buf, &len, &pkt);
309 -
310 -#else
311 -          decoded = avcodec_decode_audio2( data->codec,
312 -                                          (s16*)data->buf, &len, pkt_data, pkt_size );
313 -
314 -#endif
315 -
316 -          if (decoded < 0) {
317 -               av_free_packet( &pkt );
318 -               pkt_size = 0;
319 -          }
320 -          else {
321 +          decoded = avcodec_decode_audio4( data->codec, decoded_frame, &got_frame, &pkt);
322 +          if ((decoded >= 0) && got_frame) {
323                 pkt_data += decoded;
324                 pkt_size -= decoded;
325                 if (pkt_size <= 0)
326                      av_free_packet( &pkt );
327  
328 -               if (len > 0) {
329 -                    size = len / (data->codec->channels * 2);
330 -                    data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
331 -               }
332 +               size = decoded / (data->codec->channels * 2);
333 +               data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
334 +              int data_size = av_samples_get_buffer_size(NULL, data->codec->channels,
335 +                                                         decoded_frame->nb_samples,
336 +                                                         data->codec->sample_fmt, 1);
337 +              memcpy(data->buf, decoded_frame->data[0], data_size);
338 +          } else {
339 +               av_free_packet( &pkt );
340 +               pkt_size = 0;
341            }
342  
343            buf = (s16*)data->buf;
344 @@ -937,6 +928,8 @@
345       if (pkt_size > 0)
346            av_free_packet( &pkt );
347  
348 +     av_free(decoded_frame);
349 +
350       return (void*)0;
351  }
352  
This page took 0.096549 seconds and 3 git commands to generate.