More changes to the mpeg parser and encoder.

Original commit message from CVS:
More changes to the mpeg parser and encoder.
It seems like the mpeg2 decoder does not like some MPEG1 videos. Use
mpeg_play for now (eg. AlienSong)
This commit is contained in:
Wim Taymans 2000-05-12 17:33:35 +00:00
parent 1c6911d307
commit 17224d3c8e
8 changed files with 52 additions and 41 deletions

View File

@ -324,6 +324,7 @@ gst/xml/Makefile
libs/Makefile libs/Makefile
libs/riff/Makefile libs/riff/Makefile
libs/colorspace/Makefile libs/colorspace/Makefile
libs/videoscale/Makefile
libs/getbits/Makefile libs/getbits/Makefile
plugins/Makefile plugins/Makefile
plugins/au/Makefile plugins/au/Makefile
@ -355,6 +356,7 @@ plugins/visualization/vumeter/Makefile
plugins/visualization/synaesthesia/Makefile plugins/visualization/synaesthesia/Makefile
plugins/visualization/smoothwave/Makefile plugins/visualization/smoothwave/Makefile
plugins/videosink/Makefile plugins/videosink/Makefile
plugins/videoscale/Makefile
plugins/dvdsrc/Makefile plugins/dvdsrc/Makefile
plugins/vcdsrc/Makefile plugins/vcdsrc/Makefile
plugins/cobin/Makefile plugins/cobin/Makefile

View File

@ -18,7 +18,7 @@
*/ */
#include <sys/time.h> #include <sys/time.h>
#define DEBUG_ENABLED //#define DEBUG_ENABLED
#include <gstclock.h> #include <gstclock.h>
static GstClock *the_system_clock = NULL; static GstClock *the_system_clock = NULL;
@ -54,7 +54,7 @@ GstClock *gst_clock_get_system() {
void gst_clock_register(GstClock *clock, GstObject *obj) { void gst_clock_register(GstClock *clock, GstObject *obj) {
if (GST_IS_SINK(obj)) { if (GST_IS_SINK(obj)) {
DEBUG("gst_clock: registered sink object 0x%p\n", obj); DEBUG("gst_clock: setting registered sink object 0x%p\n", obj);
clock->sinkobjects = g_list_append(clock->sinkobjects, obj); clock->sinkobjects = g_list_append(clock->sinkobjects, obj);
num++; num++;
} }
@ -89,6 +89,7 @@ void gst_clock_wait(GstClock *clock, GstClockTime time, GstObject *obj) {
GstClockTimeDiff diff; GstClockTimeDiff diff;
GList *elements; GList *elements;
DEBUG("gst_clock: requesting clock object 0x%p\n", obj);
g_mutex_lock(clock->lock); g_mutex_lock(clock->lock);
elements = clock->sinkobjects; elements = clock->sinkobjects;
while (elements && clock->locking) { while (elements && clock->locking) {

View File

@ -1,3 +1,3 @@
SUBDIRS = riff colorspace getbits SUBDIRS = riff colorspace getbits videoscale
DIST_SUBDIRS = riff colorspace getbits DIST_SUBDIRS = riff colorspace getbits videoscale

View File

@ -32,13 +32,13 @@
#include "yuv2rgb.h" #include "yuv2rgb.h"
static GstBuffer *gst_colorspace_yuv422P_to_rgb32(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_rgb32(GstBuffer *src, GstColorSpaceParameters *params);
static GstBuffer *gst_colorspace_yuv422P_to_bgr32(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_bgr32(GstBuffer *src, GstColorSpaceParameters *params);
static GstBuffer *gst_colorspace_yuv422P_to_bgr32_mmx(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_bgr32_mmx(GstBuffer *src, GstColorSpaceParameters *params);
static GstBuffer *gst_colorspace_yuv422P_to_rgb24(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_rgb24(GstBuffer *src, GstColorSpaceParameters *params);
static GstBuffer *gst_colorspace_yuv422P_to_bgr24(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_bgr24(GstBuffer *src, GstColorSpaceParameters *params);
static GstBuffer *gst_colorspace_yuv422P_to_rgb16(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_rgb16(GstBuffer *src, GstColorSpaceParameters *params);
static GstBuffer *gst_colorspace_yuv422P_to_bgr16_mmx(GstBuffer *src, GstColorSpaceParameters *params); static GstBuffer *gst_colorspace_yuv420P_to_bgr16_mmx(GstBuffer *src, GstColorSpaceParameters *params);
static void gst_colorspace_yuv_to_rgb16(GstColorSpaceYUVTables *tables, static void gst_colorspace_yuv_to_rgb16(GstColorSpaceYUVTables *tables,
unsigned char *lum, unsigned char *lum,
@ -79,23 +79,23 @@ static GstColorSpaceYUVTables * gst_colorspace_init_yuv(long depth,
GstColorSpaceConverter gst_colorspace_yuv2rgb_get_converter(GstColorSpace src, GstColorSpace dest) { GstColorSpaceConverter gst_colorspace_yuv2rgb_get_converter(GstColorSpace src, GstColorSpace dest) {
DEBUG("gst_colorspace_yuv2rgb_get_converter %d\n", dest); DEBUG("gst_colorspace_yuv2rgb_get_converter %d\n", dest);
switch(src) { switch(src) {
case GST_COLORSPACE_YUV422P: case GST_COLORSPACE_YUV420P:
switch(dest) { switch(dest) {
case GST_COLORSPACE_BGR32: case GST_COLORSPACE_BGR32:
//return gst_colorspace_yuv422P_to_bgr32; //return gst_colorspace_yuv420P_to_bgr32;
return gst_colorspace_yuv422P_to_bgr32_mmx; return gst_colorspace_yuv420P_to_bgr32_mmx;
case GST_COLORSPACE_RGB32: case GST_COLORSPACE_RGB32:
return gst_colorspace_yuv422P_to_rgb32; return gst_colorspace_yuv420P_to_rgb32;
case GST_COLORSPACE_RGB24: case GST_COLORSPACE_RGB24:
return gst_colorspace_yuv422P_to_rgb24; return gst_colorspace_yuv420P_to_rgb24;
case GST_COLORSPACE_BGR24: case GST_COLORSPACE_BGR24:
return gst_colorspace_yuv422P_to_bgr24; return gst_colorspace_yuv420P_to_bgr24;
case GST_COLORSPACE_RGB555: case GST_COLORSPACE_RGB555:
case GST_COLORSPACE_RGB565: case GST_COLORSPACE_RGB565:
case GST_COLORSPACE_BGR555: case GST_COLORSPACE_BGR555:
return gst_colorspace_yuv422P_to_rgb16; return gst_colorspace_yuv420P_to_rgb16;
case GST_COLORSPACE_BGR565: case GST_COLORSPACE_BGR565:
return gst_colorspace_yuv422P_to_bgr16_mmx; return gst_colorspace_yuv420P_to_bgr16_mmx;
default: default:
break; break;
} }
@ -107,12 +107,12 @@ GstColorSpaceConverter gst_colorspace_yuv2rgb_get_converter(GstColorSpace src, G
return NULL; return NULL;
} }
static GstBuffer *gst_colorspace_yuv422P_to_bgr32(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_bgr32(GstBuffer *src, GstColorSpaceParameters *params) {
static GstColorSpaceYUVTables *color_tables = NULL; static GstColorSpaceYUVTables *color_tables = NULL;
int size; int size;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
guchar *out; guchar *out;
DEBUG("gst_colorspace_yuv422P_to_bgr32\n"); DEBUG("gst_colorspace_yuv420P_to_bgr32\n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
@ -142,12 +142,12 @@ static GstBuffer *gst_colorspace_yuv422P_to_bgr32(GstBuffer *src, GstColorSpaceP
else return src; else return src;
} }
static GstBuffer *gst_colorspace_yuv422P_to_rgb32(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_rgb32(GstBuffer *src, GstColorSpaceParameters *params) {
static GstColorSpaceYUVTables *color_tables = NULL; static GstColorSpaceYUVTables *color_tables = NULL;
int size; int size;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
guchar *out; guchar *out;
DEBUG("gst_colorspace_yuv422P_to_rgb32\n"); DEBUG("gst_colorspace_yuv420P_to_rgb32\n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
@ -177,12 +177,12 @@ static GstBuffer *gst_colorspace_yuv422P_to_rgb32(GstBuffer *src, GstColorSpaceP
else return src; else return src;
} }
static GstBuffer *gst_colorspace_yuv422P_to_bgr24(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_bgr24(GstBuffer *src, GstColorSpaceParameters *params) {
static GstColorSpaceYUVTables *color_tables = NULL; static GstColorSpaceYUVTables *color_tables = NULL;
int size; int size;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
guchar *out; guchar *out;
DEBUG("gst_colorspace_yuv422P_to_bgr24\n"); DEBUG("gst_colorspace_yuv420P_to_bgr24\n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
@ -211,12 +211,12 @@ static GstBuffer *gst_colorspace_yuv422P_to_bgr24(GstBuffer *src, GstColorSpaceP
else return src; else return src;
} }
static GstBuffer *gst_colorspace_yuv422P_to_rgb24(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_rgb24(GstBuffer *src, GstColorSpaceParameters *params) {
static GstColorSpaceYUVTables *color_tables = NULL; static GstColorSpaceYUVTables *color_tables = NULL;
int size; int size;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
guchar *out; guchar *out;
DEBUG("gst_colorspace_yuv422P_to_rgb24\n"); DEBUG("gst_colorspace_yuv420P_to_rgb24\n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
@ -246,10 +246,10 @@ static GstBuffer *gst_colorspace_yuv422P_to_rgb24(GstBuffer *src, GstColorSpaceP
else return src; else return src;
} }
static GstBuffer *gst_colorspace_yuv422P_to_rgb16(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_rgb16(GstBuffer *src, GstColorSpaceParameters *params) {
static GstColorSpaceYUVTables *color_tables = NULL; static GstColorSpaceYUVTables *color_tables = NULL;
int size; int size;
DEBUG("gst_colorspace_yuv422P_to_rgb16\n"); DEBUG("gst_colorspace_yuv420P_to_rgb16\n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
g_return_val_if_fail(params->visual != NULL, NULL); g_return_val_if_fail(params->visual != NULL, NULL);
@ -274,11 +274,11 @@ static GstBuffer *gst_colorspace_yuv422P_to_rgb16(GstBuffer *src, GstColorSpaceP
static mmx_t MMX16_redmask = (mmx_t)(long long)0xf800f800f800f800LL; //dd 07c00 7c00h, 07c007c00h static mmx_t MMX16_redmask = (mmx_t)(long long)0xf800f800f800f800LL; //dd 07c00 7c00h, 07c007c00h
static mmx_t MMX16_grnmask = (mmx_t)(long long)0x07e007e007e007e0LL; //dd 003e0 03e0h, 003e003e0h static mmx_t MMX16_grnmask = (mmx_t)(long long)0x07e007e007e007e0LL; //dd 003e0 03e0h, 003e003e0h
static GstBuffer *gst_colorspace_yuv422P_to_bgr32_mmx(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_bgr32_mmx(GstBuffer *src, GstColorSpaceParameters *params) {
int size; int size;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
guchar *out; guchar *out;
DEBUG("gst_colorspace_yuv422P_to_rgb32_mmx\n"); DEBUG("gst_colorspace_yuv420P_to_rgb32_mmx\n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
@ -304,9 +304,9 @@ static GstBuffer *gst_colorspace_yuv422P_to_bgr32_mmx(GstBuffer *src, GstColorSp
} }
else return src; else return src;
} }
static GstBuffer *gst_colorspace_yuv422P_to_bgr16_mmx(GstBuffer *src, GstColorSpaceParameters *params) { static GstBuffer *gst_colorspace_yuv420P_to_bgr16_mmx(GstBuffer *src, GstColorSpaceParameters *params) {
int size; int size;
DEBUG("gst_colorspace_yuv422P_to_bgr16_mmx \n"); DEBUG("gst_colorspace_yuv420P_to_bgr16_mmx \n");
g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(params != NULL, NULL);
@ -319,6 +319,7 @@ static GstBuffer *gst_colorspace_yuv422P_to_bgr16_mmx(GstBuffer *src, GstColorSp
params->outbuf, params->outbuf,
params->height, params->height,
params->width); params->width);
DEBUG("gst_colorspace_yuv420P_to_bgr16_mmx done\n");
return src; return src;
} }
@ -772,6 +773,8 @@ gst_colorspace_yuv_to_bgr16_mmx(tables, lum, cr, cb, out, rows, cols)
int y, x; int y, x;
DEBUG("gst_colorspace_yuv420P_to_bgr16_mmx %p %p %p\n", lum, cr, cb);
for (y=rows>>1; y; y--) { for (y=rows>>1; y; y--) {
for (x=cols8; x; x--) { for (x=cols8; x; x--) {

1
test/.gitignore vendored
View File

@ -38,3 +38,4 @@ mp1parse
aviparse aviparse
avi2mpg avi2mpg
vidcapture vidcapture
mp2tomp1

View File

@ -1,7 +1,7 @@
#noinst_PROGRAMS = basic m types a r plugin w s args mpg123 mcut push qtest #noinst_PROGRAMS = basic m types a r plugin w s args mpg123 mcut push qtest
noinst_PROGRAMS = qtest spectrum record wave mp3 teardown buffer mp3parse \ noinst_PROGRAMS = qtest spectrum record wave mp3 teardown buffer mp3parse \
mpeg2parse mp1parse mp3play ac3parse ac3play dvdcat fake cobin videotest \ mpeg2parse mp1parse mp3play ac3parse ac3play dvdcat fake cobin videotest \
aviparse vidcapture avi2mpg aviparse vidcapture avi2mpg mp2tomp1
SUBDIRS = xml cothreads bindings SUBDIRS = xml cothreads bindings
@ -17,6 +17,8 @@ mp1parse_CFLAGS = $(shell gnome-config --cflags gnomeui)
mp1parse_LDFLAGS = $(shell gnome-config --libs gnomeui) mp1parse_LDFLAGS = $(shell gnome-config --libs gnomeui)
mpeg2parse_CFLAGS = $(shell gnome-config --cflags gnomeui) mpeg2parse_CFLAGS = $(shell gnome-config --cflags gnomeui)
mpeg2parse_LDFLAGS = $(shell gnome-config --libs gnomeui) mpeg2parse_LDFLAGS = $(shell gnome-config --libs gnomeui)
mp2tomp1_CFLAGS = $(shell gnome-config --cflags gnomeui)
mp2tomp1_LDFLAGS = $(shell gnome-config --libs gnomeui)
buffer_SOURCES = buffer.c mem.c buffer_SOURCES = buffer.c mem.c
teardown_SOURCES = teardown.c mem.c teardown_SOURCES = teardown.c mem.c

View File

@ -49,7 +49,7 @@ void new_pad_created(GstElement *parse,GstPad *pad,GstElement *pipeline) {
// construct queue and connect everything in the main pipelie // construct queue and connect everything in the main pipelie
audio_queue = gst_elementfactory_make("queue","audio_queue"); audio_queue = gst_elementfactory_make("queue","audio_queue");
gtk_object_set(GTK_OBJECT(audio_queue),"max_level",30,NULL); gtk_object_set(GTK_OBJECT(audio_queue),"max_level",300,NULL);
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue)); gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread)); gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
gst_pad_connect(pad, gst_pad_connect(pad,
@ -67,14 +67,14 @@ void new_pad_created(GstElement *parse,GstPad *pad,GstElement *pipeline) {
//} else if (0) { //} else if (0) {
gst_plugin_load("mp1videoparse"); gst_plugin_load("mp1videoparse");
//gst_plugin_load("mpeg_play"); gst_plugin_load("mpeg_play");
gst_plugin_load("mpeg2play"); //gst_plugin_load("mpeg2play");
gst_plugin_load("videosink"); gst_plugin_load("videosink");
// construct internal pipeline elements // construct internal pipeline elements
parse_video = gst_elementfactory_make("mp1videoparse","parse_video"); parse_video = gst_elementfactory_make("mp1videoparse","parse_video");
g_return_if_fail(parse_video != NULL); g_return_if_fail(parse_video != NULL);
//decode_video = gst_elementfactory_make("mpeg_play","decode_video"); decode_video = gst_elementfactory_make("mpeg_play","decode_video");
decode_video = gst_elementfactory_make("mpeg2play","decode_video"); //decode_video = gst_elementfactory_make("mpeg2play","decode_video");
g_return_if_fail(decode_video != NULL); g_return_if_fail(decode_video != NULL);
show = gst_elementfactory_make("videosink","show"); show = gst_elementfactory_make("videosink","show");
g_return_if_fail(show != NULL); g_return_if_fail(show != NULL);
@ -102,7 +102,7 @@ void new_pad_created(GstElement *parse,GstPad *pad,GstElement *pipeline) {
// construct queue and connect everything in the main pipeline // construct queue and connect everything in the main pipeline
video_queue = gst_elementfactory_make("queue","video_queue"); video_queue = gst_elementfactory_make("queue","video_queue");
gtk_object_set(GTK_OBJECT(video_queue),"max_level",30,NULL); gtk_object_set(GTK_OBJECT(video_queue),"max_level",300,NULL);
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue)); gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread)); gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
gst_pad_connect(pad, gst_pad_connect(pad,

View File

@ -168,6 +168,7 @@ int main(int argc,char *argv[]) {
gst_init(&argc,&argv); gst_init(&argc,&argv);
gnome_init("MPEG2 Video player","0.0.1",argc,argv); gnome_init("MPEG2 Video player","0.0.1",argc,argv);
gst_plugin_load("mpeg2parse"); gst_plugin_load("mpeg2parse");
//gst_plugin_load("mpeg1parse");
pipeline = gst_pipeline_new("pipeline"); pipeline = gst_pipeline_new("pipeline");
g_return_if_fail(pipeline != NULL); g_return_if_fail(pipeline != NULL);
@ -187,6 +188,7 @@ int main(int argc,char *argv[]) {
g_print("should be using file '%s'\n",argv[1]); g_print("should be using file '%s'\n",argv[1]);
parse = gst_elementfactory_make("mpeg2parse","parse"); parse = gst_elementfactory_make("mpeg2parse","parse");
//parse = gst_elementfactory_make("mpeg1parse","parse");
g_return_if_fail(parse != NULL); g_return_if_fail(parse != NULL);
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src)); gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));