mirror of
https://github.com/dslm4515/BMLFS.git
synced 2025-08-20 14:31:47 +00:00
353 lines
12 KiB
Diff
353 lines
12 KiB
Diff
diff -ur -x .deps DirectFB-1.7.6.orig/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c DirectFB-1.7.6/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c
|
|
--- DirectFB-1.7.6.orig/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c 2014-03-23 05:05:18.000000000 +0900
|
|
+++ DirectFB-1.7.6/interfaces/IDirectFBImageProvider/idirectfbimageprovider_ffmpeg.c 2016-04-02 01:07:55.515031522 +0900
|
|
@@ -259,7 +259,7 @@
|
|
|
|
av_codec_ctx = data->av_fmt_ctx->streams[0]->codec;
|
|
|
|
- av_picture = avcodec_alloc_frame();
|
|
+ av_picture = av_frame_alloc();
|
|
|
|
if (av_picture == NULL)
|
|
{
|
|
@@ -270,7 +270,7 @@
|
|
|
|
/*No scaling just colourspace conversion*/
|
|
sw_sca_ctx = sws_getCachedContext(sw_sca_ctx, av_codec_ctx->width, av_codec_ctx->height, av_codec_ctx->pix_fmt,
|
|
- av_codec_ctx->width, av_codec_ctx->height, PIX_FMT_BGRA,
|
|
+ av_codec_ctx->width, av_codec_ctx->height, AV_PIX_FMT_BGRA,
|
|
SWS_FAST_BILINEAR, NULL,
|
|
NULL, NULL);
|
|
if (sw_sca_ctx == NULL)
|
|
diff -ur -x .deps DirectFB-1.7.6.orig/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c DirectFB-1.7.6/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c
|
|
--- DirectFB-1.7.6.orig/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c 2016-04-02 00:59:25.978409428 +0900
|
|
+++ DirectFB-1.7.6/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_ffmpeg.c 2016-04-04 19:51:41.558286928 +0900
|
|
@@ -601,42 +601,42 @@
|
|
ff2dvc_pixelformat( int pix_fmt )
|
|
{
|
|
switch (pix_fmt) {
|
|
- case PIX_FMT_YUV420P:
|
|
- case PIX_FMT_YUVJ420P:
|
|
+ case AV_PIX_FMT_YUV420P:
|
|
+ case AV_PIX_FMT_YUVJ420P:
|
|
return DVCPF_YUV420;
|
|
- case PIX_FMT_YUV422P:
|
|
- case PIX_FMT_YUVJ422P:
|
|
+ case AV_PIX_FMT_YUV422P:
|
|
+ case AV_PIX_FMT_YUVJ422P:
|
|
return DVCPF_YUV422;
|
|
- case PIX_FMT_YUV444P:
|
|
- case PIX_FMT_YUVJ444P:
|
|
+ case AV_PIX_FMT_YUV444P:
|
|
+ case AV_PIX_FMT_YUVJ444P:
|
|
return DVCPF_YUV444;
|
|
- case PIX_FMT_YUV411P:
|
|
+ case AV_PIX_FMT_YUV411P:
|
|
return DVCPF_YUV411;
|
|
- case PIX_FMT_YUV410P:
|
|
+ case AV_PIX_FMT_YUV410P:
|
|
return DVCPF_YUV410;
|
|
- case PIX_FMT_YUYV422:
|
|
+ case AV_PIX_FMT_YUYV422:
|
|
return DVCPF_YUYV_LE;
|
|
- case PIX_FMT_UYVY422:
|
|
+ case AV_PIX_FMT_UYVY422:
|
|
return DVCPF_YUYV_BE;
|
|
- case PIX_FMT_NV12:
|
|
+ case AV_PIX_FMT_NV12:
|
|
return DVCPF_NV12_LE;
|
|
- case PIX_FMT_NV21:
|
|
+ case AV_PIX_FMT_NV21:
|
|
return DVCPF_NV12_BE;
|
|
- case PIX_FMT_GRAY8:
|
|
+ case AV_PIX_FMT_GRAY8:
|
|
return DVCPF_Y8;
|
|
- case PIX_FMT_RGB8:
|
|
+ case AV_PIX_FMT_RGB8:
|
|
return DVCPF_RGB8;
|
|
- case PIX_FMT_RGB555:
|
|
+ case AV_PIX_FMT_RGB555:
|
|
return DVCPF_RGB15;
|
|
- case PIX_FMT_RGB565:
|
|
+ case AV_PIX_FMT_RGB565:
|
|
return DVCPF_RGB16;
|
|
- case PIX_FMT_RGB24:
|
|
+ case AV_PIX_FMT_RGB24:
|
|
return DVCPF_RGB24;
|
|
- case PIX_FMT_BGR24:
|
|
+ case AV_PIX_FMT_BGR24:
|
|
return DVCPF_BGR24;
|
|
- case PIX_FMT_RGB32:
|
|
+ case AV_PIX_FMT_RGB32:
|
|
return DVCPF_RGB32;
|
|
- case PIX_FMT_BGR32:
|
|
+ case AV_PIX_FMT_BGR32:
|
|
return DVCPF_BGR32;
|
|
default:
|
|
D_ONCE("unsupported picture format");
|
|
@@ -798,15 +798,17 @@
|
|
IDirectFBVideoProvider_FFmpeg_data *data = arg;
|
|
|
|
AVStream *st = data->audio.st;
|
|
- u8 buf[192000 /* AVCODEC_MAX_AUDIO_FRAME_SIZE */];
|
|
+ AVFrame *decoded_frame = NULL;
|
|
+
|
|
+ decoded_frame = av_frame_alloc();
|
|
|
|
while (data->status != DVSTATE_STOP) {
|
|
AVPacket pkt;
|
|
u8 *pkt_data;
|
|
int pkt_size;
|
|
int decoded = 0;
|
|
- int len = 192000 /* AVCODEC_MAX_AUDIO_FRAME_SIZE */;
|
|
int size = 0;
|
|
+ int got_frame = 0;
|
|
|
|
direct_thread_testcancel( self );
|
|
|
|
@@ -830,23 +832,15 @@
|
|
avcodec_flush_buffers( data->audio.ctx );
|
|
data->audio.seeked = false;
|
|
}
|
|
-
|
|
+
|
|
for (pkt_data = pkt.data, pkt_size = pkt.size; pkt_size > 0;) {
|
|
-#if (LIBAVFORMAT_VERSION_MAJOR >= 53)
|
|
- decoded = avcodec_decode_audio3( data->audio.ctx,
|
|
- (s16*)&buf[size], &len, &pkt );
|
|
-#else
|
|
- decoded = avcodec_decode_audio2( data->audio.ctx,
|
|
- (s16*)&buf[size], &len,
|
|
- pkt_data, pkt_size );
|
|
-#endif
|
|
- if (decoded < 0)
|
|
- break;
|
|
-
|
|
- pkt_data += decoded;
|
|
- pkt_size -= decoded;
|
|
- if (len > 0)
|
|
- size += len;
|
|
+ decoded = avcodec_decode_audio4( data->audio.ctx, decoded_frame, &got_frame, &pkt);
|
|
+ if ((decoded >= 0) && got_frame) {
|
|
+ pkt_data += decoded;
|
|
+ pkt_size -= decoded;
|
|
+ size += decoded;
|
|
+ } else
|
|
+ break;
|
|
}
|
|
|
|
size /= data->audio.sample_size;
|
|
@@ -863,12 +857,17 @@
|
|
|
|
pthread_mutex_unlock( &data->audio.lock );
|
|
|
|
- if (size)
|
|
- data->audio.stream->Write( data->audio.stream, buf, size );
|
|
- else
|
|
+ if (size) {
|
|
+ int data_size = av_samples_get_buffer_size(NULL, data->audio.ctx->channels,
|
|
+ decoded_frame->nb_samples,
|
|
+ data->audio.ctx->sample_fmt, 1);
|
|
+ data->audio.stream->Write( data->audio.stream, decoded_frame->data[0], data_size );
|
|
+ } else
|
|
usleep( 1000 );
|
|
}
|
|
|
|
+ av_free(decoded_frame);
|
|
+
|
|
return (void*)0;
|
|
}
|
|
#endif
|
|
@@ -1052,37 +1051,37 @@
|
|
}
|
|
|
|
switch (data->video.ctx->pix_fmt) {
|
|
- case PIX_FMT_RGB8:
|
|
+ case AV_PIX_FMT_RGB8:
|
|
desc->pixelformat = DSPF_RGB332;
|
|
break;
|
|
- case PIX_FMT_RGB555:
|
|
+ case AV_PIX_FMT_RGB555:
|
|
desc->pixelformat = DSPF_ARGB1555;
|
|
break;
|
|
- case PIX_FMT_RGB565:
|
|
+ case AV_PIX_FMT_RGB565:
|
|
desc->pixelformat = DSPF_RGB16;
|
|
break;
|
|
- case PIX_FMT_RGB24:
|
|
- case PIX_FMT_BGR24:
|
|
+ case AV_PIX_FMT_RGB24:
|
|
+ case AV_PIX_FMT_BGR24:
|
|
desc->pixelformat = DSPF_RGB24;
|
|
break;
|
|
- case PIX_FMT_RGB32:
|
|
- case PIX_FMT_BGR32:
|
|
+ case AV_PIX_FMT_RGB32:
|
|
+ case AV_PIX_FMT_BGR32:
|
|
desc->pixelformat = DSPF_RGB32;
|
|
break;
|
|
- case PIX_FMT_YUYV422:
|
|
+ case AV_PIX_FMT_YUYV422:
|
|
desc->pixelformat = DSPF_YUY2;
|
|
break;
|
|
- case PIX_FMT_UYVY422:
|
|
+ case AV_PIX_FMT_UYVY422:
|
|
desc->pixelformat = DSPF_UYVY;
|
|
break;
|
|
- case PIX_FMT_YUV444P:
|
|
- case PIX_FMT_YUV422P:
|
|
- case PIX_FMT_YUV420P:
|
|
- case PIX_FMT_YUV411P:
|
|
- case PIX_FMT_YUV410P:
|
|
- case PIX_FMT_YUVJ420P:
|
|
- case PIX_FMT_YUVJ422P:
|
|
- case PIX_FMT_YUVJ444P:
|
|
+ case AV_PIX_FMT_YUV444P:
|
|
+ case AV_PIX_FMT_YUV422P:
|
|
+ case AV_PIX_FMT_YUV420P:
|
|
+ case AV_PIX_FMT_YUV411P:
|
|
+ case AV_PIX_FMT_YUV410P:
|
|
+ case AV_PIX_FMT_YUVJ420P:
|
|
+ case AV_PIX_FMT_YUVJ422P:
|
|
+ case AV_PIX_FMT_YUVJ444P:
|
|
desc->pixelformat = DSPF_I420;
|
|
break;
|
|
default:
|
|
diff -ur -x .deps DirectFB-1.7.6.orig/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c DirectFB-1.7.6/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c
|
|
--- DirectFB-1.7.6.orig/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c 2016-04-02 00:59:26.075077423 +0900
|
|
+++ DirectFB-1.7.6/interfaces/IFusionSoundMusicProvider/ifusionsoundmusicprovider_ffmpeg.c 2016-04-04 20:16:31.250776250 +0900
|
|
@@ -604,9 +604,13 @@
|
|
u8 *pkt_data = NULL;
|
|
int pkt_size = 0;
|
|
s64 pkt_pts = AV_NOPTS_VALUE;
|
|
+ AVFrame *decoded_frame = NULL;
|
|
+
|
|
+ decoded_frame = av_frame_alloc();
|
|
|
|
while (data->status == FMSTATE_PLAY) {
|
|
int len, decoded, size = 0;
|
|
+ int got_frame = 0;
|
|
|
|
pthread_mutex_lock( &data->lock );
|
|
|
|
@@ -655,31 +659,22 @@
|
|
}
|
|
}
|
|
|
|
- len = AVCODEC_MAX_AUDIO_FRAME_SIZE;
|
|
-
|
|
-#if (LIBAVFORMAT_VERSION_MAJOR >= 52)
|
|
- decoded = avcodec_decode_audio3( data->codec,
|
|
- (s16*)data->buf, &len, &pkt);
|
|
-
|
|
-#else
|
|
- decoded = avcodec_decode_audio2( data->codec,
|
|
- (s16*)data->buf, &len, pkt_data, pkt_size );
|
|
-
|
|
-#endif
|
|
- if (decoded < 0) {
|
|
- av_free_packet( &pkt );
|
|
- pkt_size = 0;
|
|
- }
|
|
- else {
|
|
+ decoded = avcodec_decode_audio4( data->codec, decoded_frame, &got_frame, &pkt);
|
|
+ if ((decoded >= 0) && got_frame) {
|
|
pkt_data += decoded;
|
|
pkt_size -= decoded;
|
|
if (pkt_size <= 0)
|
|
av_free_packet( &pkt );
|
|
|
|
- if (len > 0) {
|
|
- size = len / (data->codec->channels * 2);
|
|
- data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
|
|
- }
|
|
+ size = decoded / (data->codec->channels * 2);
|
|
+ data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
|
|
+ int data_size = av_samples_get_buffer_size(NULL, data->codec->channels,
|
|
+ decoded_frame->nb_samples,
|
|
+ data->codec->sample_fmt, 1);
|
|
+ memcpy(data->buf, decoded_frame->data[0], data_size);
|
|
+ } else {
|
|
+ av_free_packet( &pkt );
|
|
+ pkt_size = 0;
|
|
}
|
|
|
|
pthread_mutex_unlock( &data->lock );
|
|
@@ -710,6 +705,8 @@
|
|
if (pkt_size > 0)
|
|
av_free_packet( &pkt );
|
|
|
|
+ av_free(decoded_frame);
|
|
+
|
|
return (void*)0;
|
|
}
|
|
|
|
@@ -814,10 +811,14 @@
|
|
int pkt_size = 0;
|
|
s64 pkt_pts = AV_NOPTS_VALUE;
|
|
int pos = 0;
|
|
+ AVFrame *decoded_frame = NULL;
|
|
+
|
|
+ decoded_frame = av_frame_alloc();
|
|
|
|
while (data->status == FMSTATE_PLAY) {
|
|
s16 *buf;
|
|
int len, decoded, size = 0;
|
|
+ int got_frame = 0;
|
|
|
|
pthread_mutex_lock( &data->lock );
|
|
|
|
@@ -870,32 +871,22 @@
|
|
}
|
|
}
|
|
|
|
- len = AVCODEC_MAX_AUDIO_FRAME_SIZE;
|
|
-
|
|
-#if (LIBAVFORMAT_VERSION_MAJOR >= 53)
|
|
- decoded = avcodec_decode_audio3( data->codec,
|
|
- (s16*)data->buf, &len, &pkt);
|
|
-
|
|
-#else
|
|
- decoded = avcodec_decode_audio2( data->codec,
|
|
- (s16*)data->buf, &len, pkt_data, pkt_size );
|
|
-
|
|
-#endif
|
|
-
|
|
- if (decoded < 0) {
|
|
- av_free_packet( &pkt );
|
|
- pkt_size = 0;
|
|
- }
|
|
- else {
|
|
+ decoded = avcodec_decode_audio4( data->codec, decoded_frame, &got_frame, &pkt);
|
|
+ if ((decoded >= 0) && got_frame) {
|
|
pkt_data += decoded;
|
|
pkt_size -= decoded;
|
|
if (pkt_size <= 0)
|
|
av_free_packet( &pkt );
|
|
|
|
- if (len > 0) {
|
|
- size = len / (data->codec->channels * 2);
|
|
- data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
|
|
- }
|
|
+ size = decoded / (data->codec->channels * 2);
|
|
+ data->pts += (s64)size * AV_TIME_BASE / data->codec->sample_rate;
|
|
+ int data_size = av_samples_get_buffer_size(NULL, data->codec->channels,
|
|
+ decoded_frame->nb_samples,
|
|
+ data->codec->sample_fmt, 1);
|
|
+ memcpy(data->buf, decoded_frame->data[0], data_size);
|
|
+ } else {
|
|
+ av_free_packet( &pkt );
|
|
+ pkt_size = 0;
|
|
}
|
|
|
|
buf = (s16*)data->buf;
|
|
@@ -937,6 +928,8 @@
|
|
if (pkt_size > 0)
|
|
av_free_packet( &pkt );
|
|
|
|
+ av_free(decoded_frame);
|
|
+
|
|
return (void*)0;
|
|
}
|
|
|