From fc4f11cf8ecb48f2ae2f37cf78a248b790742d96 Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Fri, 27 Jun 2008 01:46:09 +0100 Subject: Add basic aspect ratio detection for WMV streams. --- src/demuxers/asfheader.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++- src/demuxers/asfheader.h | 1 + src/demuxers/demux_asf.c | 8 +++++++ 3 files changed, 67 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/demuxers/asfheader.c b/src/demuxers/asfheader.c index 5db25d07f..1b71a0b19 100644 --- a/src/demuxers/asfheader.c +++ b/src/demuxers/asfheader.c @@ -511,6 +511,61 @@ static int asf_header_parse_stream_bitrate_properties(asf_header_t *header_pub, return 1; } +static int asf_header_parse_metadata(asf_header_t *header_pub, uint8_t *buffer, int buffer_len) +{ + asf_header_internal_t *header = (asf_header_internal_t *)header_pub; + asf_reader_t reader; + uint16_t i, records_count; + iconv_t iconv_cd; + + if (buffer_len < 2) + return 0; + + if ((iconv_cd = iconv_open ("UTF-8", "UCS-2LE")) == (iconv_t)-1) + return 0; + + asf_reader_init(&reader, buffer, buffer_len); + asf_reader_get_16(&reader, &records_count); + + for (i = 0; i < records_count; i++) + { + uint16_t index, stream, name_len = 0, data_type; + uint32_t data_len = 0; + int stream_id; + + asf_reader_get_16 (&reader, &index); + asf_reader_get_16 (&reader, &stream); + stream &= 0x7f; + asf_reader_get_16 (&reader, &name_len); + asf_reader_get_16 (&reader, &data_type); + asf_reader_get_32 (&reader, &data_len); + + stream_id = asf_header_get_stream_id (&header->pub, stream); + + if (data_len >= 4) + { + char *name = asf_reader_get_string (&reader, name_len, iconv_cd); + if (!strcmp (name, "AspectRatioX")) + { + asf_reader_get_32 (&reader, &header->pub.aspect_ratios[stream_id].x); + data_len -= 4; + } + else if (!strcmp (name, "AspectRatioY")) + { + asf_reader_get_32 (&reader, &header->pub.aspect_ratios[stream_id].y); + data_len -= 4; + } + free (name); + asf_reader_skip (&reader, data_len); + } + else + asf_reader_skip (&reader, data_len + name_len); + } + + iconv_close (iconv_cd); + return 1; +} + static int asf_header_parse_header_extension(asf_header_t *header, uint8_t *buffer, int buffer_len) { asf_reader_t reader; @@ -549,12 +604,14 @@ static int asf_header_parse_header_extension(asf_header_t *header, uint8_t *buff case GUID_EXTENDED_STREAM_PROPERTIES: asf_header_parse_stream_extended_properties(header, asf_reader_get_buffer(&reader), object_data_length); break; + case GUID_METADATA: + asf_header_parse_metadata(header, asf_reader_get_buffer(&reader), object_data_length); + break; case GUID_ADVANCED_MUTUAL_EXCLUSION: case GUID_GROUP_MUTUAL_EXCLUSION: case GUID_STREAM_PRIORITIZATION: case GUID_BANDWIDTH_SHARING: case GUID_LANGUAGE_LIST: - case GUID_METADATA: case GUID_METADATA_LIBRARY: case GUID_INDEX_PARAMETERS: case GUID_MEDIA_OBJECT_INDEX_PARAMETERS: diff --git a/src/demuxers/asfheader.h b/src/demuxers/asfheader.h index b895a1817..265f0e643 100644 --- a/src/demuxers/asfheader.h +++ b/src/demuxers/asfheader.h @@ -320,6 +320,7 @@ struct asf_header_s { asf_stream_t *streams[ASF_MAX_NUM_STREAMS]; asf_stream_extension_t *stream_extensions[ASF_MAX_NUM_STREAMS]; uint32_t bitrates[ASF_MAX_NUM_STREAMS]; + struct { uint32_t x, y; } aspect_ratios[ASF_MAX_NUM_STREAMS]; }; struct asf_file_s { diff --git a/src/demuxers/demux_asf.c b/src/demuxers/demux_asf.c index 2b8114a0d..3af265ce4 100644 --- a/src/demuxers/demux_asf.c +++ b/src/demuxers/demux_asf.c @@ -351,6 +351,14 @@ static void asf_send_video_header (demux_asf_t *this, int stream) { BUF_FLAG_FRAME_END; buf->decoder_info[0] = 0; + + if (this->asf_header->aspect_ratios[stream].x && this->asf_header->aspect_ratios[stream].y) + { + buf->decoder_flags |= BUF_FLAG_ASPECT; + buf->decoder_info[1] = bih->biWidth * this->asf_header->aspect_ratios[stream].x; + buf->decoder_info[2] = bih->biHeight * this->asf_header->aspect_ratios[stream].y; + } + buf->size = asf_stream->private_data_length - 11; memcpy (buf->content, bih, buf->size); buf->type = this->streams[stream].buf_type; -- cgit v1.2.3 From 9512237d4627c2568be7d1125a1f5cc034ba8377 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Wed, 2 Jul 2008 18:01:05 +0100 Subject: provide PTHREAD_CFLAGS when needed --- src/xine-engine/Makefile.am | 4 ++-- src/xine-utils/Makefile.am | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/xine-engine/Makefile.am b/src/xine-engine/Makefile.am index 17dd96b10..03176fb80 100644 --- a/src/xine-engine/Makefile.am +++ b/src/xine-engine/Makefile.am @@ -1,8 +1,8 @@ include $(top_srcdir)/misc/Makefile.common include $(top_srcdir)/lib/Makefile.common -AM_CFLAGS = $(X_CFLAGS) $(FT2_CFLAGS) $(FONTCONFIG_CFLAGS) $(VISIBILITY_FLAG) -AM_CPPFLAGS = $(ZLIB_CPPFLAGS) -DXINE_LIBRARY_COMPILE +AM_CFLAGS = $(X_CFLAGS) $(FT2_CFLAGS) $(FONTCONFIG_CFLAGS) $(PTHREAD_CFLAGS) $(VISIBILITY_FLAG) +AM_CPPFLAGS = $(ZLIB_CPPFLAGS) $(PTHREAD_CFLAGS) -DXINE_LIBRARY_COMPILE LIBTOOL = $(SHELL) $(top_builddir)/libtool lib_LTLIBRARIES = libxine.la diff --git a/src/xine-utils/Makefile.am b/src/xine-utils/Makefile.am index 6af0d29bd..a599f9b12 100644 --- a/src/xine-utils/Makefile.am +++ b/src/xine-utils/Makefile.am @@ -12,7 +12,7 @@ endif endif AM_CFLAGS = $(X_CFLAGS) $(VISIBILITY_FLAG) -AM_CPPFLAGS=-DXINE_LIBRARY_COMPILE +AM_CPPFLAGS= $(PTHREAD_CFLAGS) -DXINE_LIBRARY_COMPILE libxineutils_la_SOURCES = $(pppc_files) \ cpu_accel.c \ -- cgit v1.2.3 From 4bec128b08b0b1fb42d482ac6fb802ab98aa556d Mon Sep 17 00:00:00 2001 From: Simon Farnsworth Date: Wed, 2 Jul 2008 12:21:43 +0100 Subject: Don't segfault when the user requests an input the card doesn't posess. --- src/input/input_v4l.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/input/input_v4l.c b/src/input/input_v4l.c index 29ed9899b..00c579c44 100644 --- a/src/input/input_v4l.c +++ b/src/input/input_v4l.c @@ -1608,7 +1608,8 @@ static void v4l_plugin_dispose (input_plugin_t *this_gen) { data. */ free(this->audio_content_base); free(this->video_content_base); - free(this->frames_base->extra_info); + if (this->frames_base) + free(this->frames_base->extra_info); free(this->frames_base); #ifdef LOG -- cgit v1.2.3 From 2b0e330c2642081066316ca5ec9965912cd248de Mon Sep 17 00:00:00 2001 From: Chris Rankin Date: Wed, 2 Jul 2008 19:30:39 +0100 Subject: Build fix for external ffmpeg --- src/post/planar/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/post/planar/Makefile.am b/src/post/planar/Makefile.am index 36405bfc2..c49243252 100644 --- a/src/post/planar/Makefile.am +++ b/src/post/planar/Makefile.am @@ -4,7 +4,7 @@ POSTPROC_INT_LIB = $(top_builddir)/src/libffmpeg/libavcodec/libpostproc/libpostp if HAVE_FFMPEG postproc_lib = $(FFMPEG_POSTPROC_LIBS) -ff_cflags = $(FFMPEG_POSTPROC_CFLAGS) +ff_cflags = $(FFMPEG_CFLAGS) $(FFMPEG_POSTPROC_CFLAGS) else ff_cflags = -I$(top_srcdir)/src/libffmpeg/libavcodec postproc_lib = $(POSTPROC_INT_LIB) -- cgit v1.2.3