summaryrefslogtreecommitdiff
path: root/src/combined/ffmpeg
diff options
context:
space:
mode:
Diffstat (limited to 'src/combined/ffmpeg')
-rw-r--r--src/combined/ffmpeg/ff_audio_decoder.c18
-rw-r--r--src/combined/ffmpeg/ff_mpeg_parser.c2
-rw-r--r--src/combined/ffmpeg/ff_video_decoder.c35
3 files changed, 34 insertions, 21 deletions
diff --git a/src/combined/ffmpeg/ff_audio_decoder.c b/src/combined/ffmpeg/ff_audio_decoder.c
index 27fe18d9c..4074ff776 100644
--- a/src/combined/ffmpeg/ff_audio_decoder.c
+++ b/src/combined/ffmpeg/ff_audio_decoder.c
@@ -177,7 +177,7 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf)
this->context->bit_rate = audio_header->nAvgBytesPerSec * 8;
if(audio_header->cbSize > 0) {
- this->context->extradata = xine_xmalloc(audio_header->cbSize);
+ this->context->extradata = malloc(audio_header->cbSize);
this->context->extradata_size = audio_header->cbSize;
memcpy( this->context->extradata,
(uint8_t *)audio_header + sizeof(xine_waveformatex),
@@ -202,7 +202,7 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf)
this->context->block_align = _X_BE_32(&this->buf[0x18]);
this->context->extradata_size = 5*sizeof(short);
- this->context->extradata = xine_xmalloc(this->context->extradata_size);
+ this->context->extradata = malloc(this->context->extradata_size);
ptr = (short *) this->context->extradata;
@@ -248,8 +248,8 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf)
break; /* abort early - extradata length is bad */
this->context->extradata_size = data_len;
- this->context->extradata = xine_xmalloc(this->context->extradata_size +
- FF_INPUT_BUFFER_PADDING_SIZE);
+ this->context->extradata = malloc(this->context->extradata_size +
+ FF_INPUT_BUFFER_PADDING_SIZE);
xine_fast_memcpy (this->context->extradata, this->buf + extradata,
this->context->extradata_size);
break;
@@ -275,7 +275,7 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf)
this->size = 0;
- this->decode_buffer = xine_xmalloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
+ this->decode_buffer = calloc(1, AVCODEC_MAX_AUDIO_FRAME_SIZE);
return;
}
@@ -283,8 +283,8 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf)
(buf->decoder_info[1] == BUF_SPECIAL_STSD_ATOM)) {
this->context->extradata_size = buf->decoder_info[2];
- this->context->extradata = xine_xmalloc(buf->decoder_info[2] +
- FF_INPUT_BUFFER_PADDING_SIZE);
+ this->context->extradata = malloc(buf->decoder_info[2] +
+ FF_INPUT_BUFFER_PADDING_SIZE);
memcpy(this->context->extradata, buf->decoder_info_ptr[2],
buf->decoder_info[2]);
@@ -449,7 +449,7 @@ static audio_decoder_t *ff_audio_open_plugin (audio_decoder_class_t *class_gen,
ff_audio_decoder_t *this ;
- this = (ff_audio_decoder_t *) xine_xmalloc (sizeof (ff_audio_decoder_t));
+ this = calloc(1, sizeof (ff_audio_decoder_t));
this->audio_decoder.decode_data = ff_audio_decode_data;
this->audio_decoder.reset = ff_audio_reset;
@@ -473,7 +473,7 @@ void *init_audio_plugin (xine_t *xine, void *data) {
ff_audio_class_t *this ;
- this = (ff_audio_class_t *) xine_xmalloc (sizeof (ff_audio_class_t));
+ this = calloc(1, sizeof (ff_audio_class_t));
this->decoder_class.open_plugin = ff_audio_open_plugin;
this->decoder_class.identifier = "ffmpeg audio";
diff --git a/src/combined/ffmpeg/ff_mpeg_parser.c b/src/combined/ffmpeg/ff_mpeg_parser.c
index 70901d93b..3c2c2cf48 100644
--- a/src/combined/ffmpeg/ff_mpeg_parser.c
+++ b/src/combined/ffmpeg/ff_mpeg_parser.c
@@ -50,7 +50,7 @@ static const int frame_rate_tab[][2] = {
void mpeg_parser_init (mpeg_parser_t *parser)
{
- parser->chunk_buffer = xine_xmalloc(BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
+ parser->chunk_buffer = malloc(BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
mpeg_parser_reset(parser);
}
diff --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c
index 951e12deb..c80ee5928 100644
--- a/src/combined/ffmpeg/ff_video_decoder.c
+++ b/src/combined/ffmpeg/ff_video_decoder.c
@@ -116,6 +116,10 @@ struct ff_video_decoder_s {
yuv_planes_t yuv;
AVPaletteControl palette_control;
+
+#ifdef LOG
+ enum PixelFormat debug_fmt;
+#endif
};
@@ -147,7 +151,7 @@ static int get_buffer(AVCodecContext *context, AVFrame *av_frame){
avcodec_align_dimensions(context, &width, &height);
- if( this->context->pix_fmt != PIX_FMT_YUV420P ) {
+ if( this->context->pix_fmt != PIX_FMT_YUV420P && this->context->pix_fmt != PIX_FMT_YUVJ420P ) {
if (!this->is_direct_rendering_disabled) {
xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
_("ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n"));
@@ -372,7 +376,7 @@ static void init_video_codec (ff_video_decoder_t *this, unsigned int codec_type)
/* Some codecs (eg rv10) copy flags in init so it's necessary to set
* this flag here in case we are going to use direct rendering */
- if(this->codec->capabilities & CODEC_CAP_DR1) {
+ if(this->codec->capabilities & CODEC_CAP_DR1 && this->codec->id != CODEC_ID_H264) {
this->context->flags |= CODEC_FLAG_EMU_EDGE;
}
@@ -584,6 +588,11 @@ static void ff_convert_frame(ff_video_decoder_t *this, vo_frame_t *img) {
int y;
uint8_t *dy, *du, *dv, *sy, *su, *sv;
+#ifdef LOG
+ if (this->debug_fmt != this->context->pix_fmt)
+ printf ("frame format == %08x\n", this->debug_fmt = this->context->pix_fmt);
+#endif
+
dy = img->base[0];
du = img->base[1];
dv = img->base[2];
@@ -881,7 +890,7 @@ static void ff_handle_preview_buffer (ff_video_decoder_t *this, buf_element_t *b
if (codec_type == BUF_VIDEO_MPEG) {
this->is_mpeg12 = 1;
if ( this->mpeg_parser == NULL ) {
- this->mpeg_parser = xine_xmalloc(sizeof(mpeg_parser_t));
+ this->mpeg_parser = calloc(1, sizeof(mpeg_parser_t));
mpeg_parser_init(this->mpeg_parser);
this->decoder_init_mode = 0;
}
@@ -936,7 +945,7 @@ static void ff_handle_header_buffer (ff_video_decoder_t *this, buf_element_t *bu
this->context->sub_id = _X_BE_32(&this->buf[30]);
- this->context->slice_offset = xine_xmalloc(sizeof(int)*SLICE_OFFSET_SIZE);
+ this->context->slice_offset = calloc(SLICE_OFFSET_SIZE, sizeof(int));
this->slice_offset_size = SLICE_OFFSET_SIZE;
this->context->extradata_size = this->size - 26;
@@ -984,8 +993,8 @@ static void ff_handle_special_buffer (ff_video_decoder_t *this, buf_element_t *b
lprintf("BUF_SPECIAL_STSD_ATOM\n");
this->context->extradata_size = buf->decoder_info[2];
- this->context->extradata = xine_xmalloc(buf->decoder_info[2] +
- FF_INPUT_BUFFER_PADDING_SIZE);
+ this->context->extradata = malloc(buf->decoder_info[2] +
+ FF_INPUT_BUFFER_PADDING_SIZE);
memcpy(this->context->extradata, buf->decoder_info_ptr[2],
buf->decoder_info[2]);
@@ -994,8 +1003,8 @@ static void ff_handle_special_buffer (ff_video_decoder_t *this, buf_element_t *b
lprintf("BUF_SPECIAL_DECODER_CONFIG\n");
this->context->extradata_size = buf->decoder_info[2];
- this->context->extradata = xine_xmalloc(buf->decoder_info[2] +
- FF_INPUT_BUFFER_PADDING_SIZE);
+ this->context->extradata = malloc(buf->decoder_info[2] +
+ FF_INPUT_BUFFER_PADDING_SIZE);
memcpy(this->context->extradata, buf->decoder_info_ptr[2],
buf->decoder_info[2]);
@@ -1543,7 +1552,7 @@ static video_decoder_t *ff_video_open_plugin (video_decoder_class_t *class_gen,
lprintf ("open_plugin\n");
- this = (ff_video_decoder_t *) xine_xmalloc (sizeof (ff_video_decoder_t));
+ this = calloc(1, sizeof (ff_video_decoder_t));
this->video_decoder.decode_data = ff_decode_data;
this->video_decoder.flush = ff_flush;
@@ -1562,7 +1571,7 @@ static video_decoder_t *ff_video_open_plugin (video_decoder_class_t *class_gen,
this->decoder_ok = 0;
this->decoder_init_mode = 1;
- this->buf = xine_xmalloc(VIDEOBUFSIZE + FF_INPUT_BUFFER_PADDING_SIZE);
+ this->buf = calloc(1, VIDEOBUFSIZE + FF_INPUT_BUFFER_PADDING_SIZE);
this->bufsize = VIDEOBUFSIZE;
this->is_mpeg12 = 0;
@@ -1576,6 +1585,10 @@ static video_decoder_t *ff_video_open_plugin (video_decoder_class_t *class_gen,
this->dr1_frames = xine_list_new();
+#ifdef LOG
+ this->debug_fmt = -1;
+#endif
+
return &this->video_decoder;
}
@@ -1584,7 +1597,7 @@ void *init_video_plugin (xine_t *xine, void *data) {
ff_video_class_t *this;
config_values_t *config;
- this = (ff_video_class_t *) xine_xmalloc (sizeof (ff_video_class_t));
+ this = calloc(1, sizeof (ff_video_class_t));
this->decoder_class.open_plugin = ff_video_open_plugin;
this->decoder_class.identifier = "ffmpeg video";