]> git.pld-linux.org Git - packages/DirectFB.git/blame - ffmpeg3.patch
rediff patches
[packages/DirectFB.git] / ffmpeg3.patch
CommitLineData
d70ede3b
JR
1diff -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)
22diff -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:
216diff -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.130004 seconds and 4 git commands to generate.