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
6 av_codec_ctx = data->av_fmt_ctx->streams[0]->codec;
8 - av_picture = avcodec_alloc_frame();
9 + av_picture = av_frame_alloc();
11 if (av_picture == NULL)
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,
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
26 ff2dvc_pixelformat( int pix_fmt )
29 - case PIX_FMT_YUV420P:
30 - case PIX_FMT_YUVJ420P:
31 + case AV_PIX_FMT_YUV420P:
32 + case AV_PIX_FMT_YUVJ420P:
34 - case PIX_FMT_YUV422P:
35 - case PIX_FMT_YUVJ422P:
36 + case AV_PIX_FMT_YUV422P:
37 + case AV_PIX_FMT_YUVJ422P:
39 - case PIX_FMT_YUV444P:
40 - case PIX_FMT_YUVJ444P:
41 + case AV_PIX_FMT_YUV444P:
42 + case AV_PIX_FMT_YUVJ444P:
44 - case PIX_FMT_YUV411P:
45 + case AV_PIX_FMT_YUV411P:
47 - case PIX_FMT_YUV410P:
48 + case AV_PIX_FMT_YUV410P:
50 - case PIX_FMT_YUYV422:
51 + case AV_PIX_FMT_YUYV422:
53 - case PIX_FMT_UYVY422:
54 + case AV_PIX_FMT_UYVY422:
57 + case AV_PIX_FMT_NV12:
60 + case AV_PIX_FMT_NV21:
63 + case AV_PIX_FMT_GRAY8:
66 + case AV_PIX_FMT_RGB8:
68 - case PIX_FMT_RGB555:
69 + case AV_PIX_FMT_RGB555:
71 - case PIX_FMT_RGB565:
72 + case AV_PIX_FMT_RGB565:
75 + case AV_PIX_FMT_RGB24:
78 + case AV_PIX_FMT_BGR24:
81 + case AV_PIX_FMT_RGB32:
84 + case AV_PIX_FMT_BGR32:
87 D_ONCE("unsupported picture format");
89 IDirectFBVideoProvider_FFmpeg_data *data = arg;
91 AVStream *st = data->audio.st;
92 - u8 buf[192000 /* AVCODEC_MAX_AUDIO_FRAME_SIZE */];
93 + AVFrame *decoded_frame = NULL;
95 + decoded_frame = av_frame_alloc();
97 while (data->status != DVSTATE_STOP) {
102 - int len = 192000 /* AVCODEC_MAX_AUDIO_FRAME_SIZE */;
106 direct_thread_testcancel( self );
108 @@ -830,23 +832,15 @@
109 avcodec_flush_buffers( data->audio.ctx );
110 data->audio.seeked = false;
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 );
119 - decoded = avcodec_decode_audio2( data->audio.ctx,
120 - (s16*)&buf[size], &len,
121 - pkt_data, pkt_size );
126 - pkt_data += decoded;
127 - pkt_size -= decoded;
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;
139 size /= data->audio.sample_size;
140 @@ -863,12 +857,17 @@
142 pthread_mutex_unlock( &data->audio.lock );
145 - data->audio.stream->Write( data->audio.stream, buf, 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 );
156 + av_free(decoded_frame);
161 @@ -1052,37 +1051,37 @@
164 switch (data->video.ctx->pix_fmt) {
166 + case AV_PIX_FMT_RGB8:
167 desc->pixelformat = DSPF_RGB332;
169 - case PIX_FMT_RGB555:
170 + case AV_PIX_FMT_RGB555:
171 desc->pixelformat = DSPF_ARGB1555;
173 - case PIX_FMT_RGB565:
174 + case AV_PIX_FMT_RGB565:
175 desc->pixelformat = DSPF_RGB16;
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;
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;
189 - case PIX_FMT_YUYV422:
190 + case AV_PIX_FMT_YUYV422:
191 desc->pixelformat = DSPF_YUY2;
193 - case PIX_FMT_UYVY422:
194 + case AV_PIX_FMT_UYVY422:
195 desc->pixelformat = DSPF_UYVY;
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;
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
222 s64 pkt_pts = AV_NOPTS_VALUE;
223 + AVFrame *decoded_frame = NULL;
225 + decoded_frame = av_frame_alloc();
227 while (data->status == FMSTATE_PLAY) {
228 int len, decoded, size = 0;
231 pthread_mutex_lock( &data->lock );
233 @@ -655,31 +659,22 @@
237 - len = AVCODEC_MAX_AUDIO_FRAME_SIZE;
239 -#if (LIBAVFORMAT_VERSION_MAJOR >= 52)
240 - decoded = avcodec_decode_audio3( data->codec,
241 - (s16*)data->buf, &len, &pkt);
244 - decoded = avcodec_decode_audio2( data->codec,
245 - (s16*)data->buf, &len, pkt_data, pkt_size );
249 - av_free_packet( &pkt );
253 + decoded = avcodec_decode_audio4( data->codec, decoded_frame, &got_frame, &pkt);
254 + if ((decoded >= 0) && got_frame) {
258 av_free_packet( &pkt );
261 - size = len / (data->codec->channels * 2);
262 - data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
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);
271 + av_free_packet( &pkt );
275 pthread_mutex_unlock( &data->lock );
278 av_free_packet( &pkt );
280 + av_free(decoded_frame);
285 @@ -814,10 +811,14 @@
287 s64 pkt_pts = AV_NOPTS_VALUE;
289 + AVFrame *decoded_frame = NULL;
291 + decoded_frame = av_frame_alloc();
293 while (data->status == FMSTATE_PLAY) {
295 int len, decoded, size = 0;
298 pthread_mutex_lock( &data->lock );
300 @@ -870,32 +871,22 @@
304 - len = AVCODEC_MAX_AUDIO_FRAME_SIZE;
306 -#if (LIBAVFORMAT_VERSION_MAJOR >= 53)
307 - decoded = avcodec_decode_audio3( data->codec,
308 - (s16*)data->buf, &len, &pkt);
311 - decoded = avcodec_decode_audio2( data->codec,
312 - (s16*)data->buf, &len, pkt_data, pkt_size );
317 - av_free_packet( &pkt );
321 + decoded = avcodec_decode_audio4( data->codec, decoded_frame, &got_frame, &pkt);
322 + if ((decoded >= 0) && got_frame) {
326 av_free_packet( &pkt );
329 - size = len / (data->codec->channels * 2);
330 - data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
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);
339 + av_free_packet( &pkt );
343 buf = (s16*)data->buf;
346 av_free_packet( &pkt );
348 + av_free(decoded_frame);