mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-16 11:15:31 +00:00
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:
parent
1c6911d307
commit
17224d3c8e
8 changed files with 52 additions and 41 deletions
|
@ -324,6 +324,7 @@ gst/xml/Makefile
|
|||
libs/Makefile
|
||||
libs/riff/Makefile
|
||||
libs/colorspace/Makefile
|
||||
libs/videoscale/Makefile
|
||||
libs/getbits/Makefile
|
||||
plugins/Makefile
|
||||
plugins/au/Makefile
|
||||
|
@ -355,6 +356,7 @@ plugins/visualization/vumeter/Makefile
|
|||
plugins/visualization/synaesthesia/Makefile
|
||||
plugins/visualization/smoothwave/Makefile
|
||||
plugins/videosink/Makefile
|
||||
plugins/videoscale/Makefile
|
||||
plugins/dvdsrc/Makefile
|
||||
plugins/vcdsrc/Makefile
|
||||
plugins/cobin/Makefile
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/time.h>
|
||||
#define DEBUG_ENABLED
|
||||
//#define DEBUG_ENABLED
|
||||
#include <gstclock.h>
|
||||
|
||||
static GstClock *the_system_clock = NULL;
|
||||
|
@ -54,7 +54,7 @@ GstClock *gst_clock_get_system() {
|
|||
|
||||
void gst_clock_register(GstClock *clock, GstObject *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);
|
||||
num++;
|
||||
}
|
||||
|
@ -89,6 +89,7 @@ void gst_clock_wait(GstClock *clock, GstClockTime time, GstObject *obj) {
|
|||
GstClockTimeDiff diff;
|
||||
GList *elements;
|
||||
|
||||
DEBUG("gst_clock: requesting clock object 0x%p\n", obj);
|
||||
g_mutex_lock(clock->lock);
|
||||
elements = clock->sinkobjects;
|
||||
while (elements && clock->locking) {
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
SUBDIRS = riff colorspace getbits
|
||||
SUBDIRS = riff colorspace getbits videoscale
|
||||
|
||||
DIST_SUBDIRS = riff colorspace getbits
|
||||
DIST_SUBDIRS = riff colorspace getbits videoscale
|
||||
|
|
|
@ -32,13 +32,13 @@
|
|||
|
||||
#include "yuv2rgb.h"
|
||||
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_rgb32(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_bgr32(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_bgr32_mmx(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_rgb24(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_bgr24(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_rgb16(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv422P_to_bgr16_mmx(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv420P_to_rgb32(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv420P_to_bgr32(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv420P_to_bgr32_mmx(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv420P_to_rgb24(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv420P_to_bgr24(GstBuffer *src, GstColorSpaceParameters *params);
|
||||
static GstBuffer *gst_colorspace_yuv420P_to_rgb16(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,
|
||||
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) {
|
||||
DEBUG("gst_colorspace_yuv2rgb_get_converter %d\n", dest);
|
||||
switch(src) {
|
||||
case GST_COLORSPACE_YUV422P:
|
||||
case GST_COLORSPACE_YUV420P:
|
||||
switch(dest) {
|
||||
case GST_COLORSPACE_BGR32:
|
||||
//return gst_colorspace_yuv422P_to_bgr32;
|
||||
return gst_colorspace_yuv422P_to_bgr32_mmx;
|
||||
//return gst_colorspace_yuv420P_to_bgr32;
|
||||
return gst_colorspace_yuv420P_to_bgr32_mmx;
|
||||
case GST_COLORSPACE_RGB32:
|
||||
return gst_colorspace_yuv422P_to_rgb32;
|
||||
return gst_colorspace_yuv420P_to_rgb32;
|
||||
case GST_COLORSPACE_RGB24:
|
||||
return gst_colorspace_yuv422P_to_rgb24;
|
||||
return gst_colorspace_yuv420P_to_rgb24;
|
||||
case GST_COLORSPACE_BGR24:
|
||||
return gst_colorspace_yuv422P_to_bgr24;
|
||||
return gst_colorspace_yuv420P_to_bgr24;
|
||||
case GST_COLORSPACE_RGB555:
|
||||
case GST_COLORSPACE_RGB565:
|
||||
case GST_COLORSPACE_BGR555:
|
||||
return gst_colorspace_yuv422P_to_rgb16;
|
||||
return gst_colorspace_yuv420P_to_rgb16;
|
||||
case GST_COLORSPACE_BGR565:
|
||||
return gst_colorspace_yuv422P_to_bgr16_mmx;
|
||||
return gst_colorspace_yuv420P_to_bgr16_mmx;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -107,12 +107,12 @@ GstColorSpaceConverter gst_colorspace_yuv2rgb_get_converter(GstColorSpace src, G
|
|||
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;
|
||||
int size;
|
||||
GstBuffer *buf = NULL;
|
||||
guchar *out;
|
||||
DEBUG("gst_colorspace_yuv422P_to_bgr32\n");
|
||||
DEBUG("gst_colorspace_yuv420P_to_bgr32\n");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
int size;
|
||||
GstBuffer *buf = NULL;
|
||||
guchar *out;
|
||||
DEBUG("gst_colorspace_yuv422P_to_rgb32\n");
|
||||
DEBUG("gst_colorspace_yuv420P_to_rgb32\n");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
int size;
|
||||
GstBuffer *buf = NULL;
|
||||
guchar *out;
|
||||
DEBUG("gst_colorspace_yuv422P_to_bgr24\n");
|
||||
DEBUG("gst_colorspace_yuv420P_to_bgr24\n");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
int size;
|
||||
GstBuffer *buf = NULL;
|
||||
guchar *out;
|
||||
DEBUG("gst_colorspace_yuv422P_to_rgb24\n");
|
||||
DEBUG("gst_colorspace_yuv420P_to_rgb24\n");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
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->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_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;
|
||||
GstBuffer *buf = NULL;
|
||||
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);
|
||||
|
||||
|
@ -304,9 +304,9 @@ static GstBuffer *gst_colorspace_yuv422P_to_bgr32_mmx(GstBuffer *src, GstColorSp
|
|||
}
|
||||
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;
|
||||
DEBUG("gst_colorspace_yuv422P_to_bgr16_mmx \n");
|
||||
DEBUG("gst_colorspace_yuv420P_to_bgr16_mmx \n");
|
||||
|
||||
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->height,
|
||||
params->width);
|
||||
DEBUG("gst_colorspace_yuv420P_to_bgr16_mmx done\n");
|
||||
|
||||
return src;
|
||||
}
|
||||
|
@ -772,9 +773,11 @@ gst_colorspace_yuv_to_bgr16_mmx(tables, lum, cr, cb, out, rows, cols)
|
|||
|
||||
int y, x;
|
||||
|
||||
DEBUG("gst_colorspace_yuv420P_to_bgr16_mmx %p %p %p\n", lum, cr, cb);
|
||||
|
||||
for (y=rows>>1; y; y--) {
|
||||
for (x=cols8; x; x--) {
|
||||
|
||||
|
||||
movd_m2r(*(mmx_t *)cb, mm0); // 4 Cb 0 0 0 0 u3 u2 u1 u0
|
||||
pxor_r2r(mm7, mm7);
|
||||
movd_m2r(*(mmx_t *)cr, mm1); // 4 Cr 0 0 0 0 v3 v2 v1 v0
|
||||
|
|
1
test/.gitignore
vendored
1
test/.gitignore
vendored
|
@ -38,3 +38,4 @@ mp1parse
|
|||
aviparse
|
||||
avi2mpg
|
||||
vidcapture
|
||||
mp2tomp1
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#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 \
|
||||
mpeg2parse mp1parse mp3play ac3parse ac3play dvdcat fake cobin videotest \
|
||||
aviparse vidcapture avi2mpg
|
||||
aviparse vidcapture avi2mpg mp2tomp1
|
||||
|
||||
SUBDIRS = xml cothreads bindings
|
||||
|
||||
|
@ -17,6 +17,8 @@ mp1parse_CFLAGS = $(shell gnome-config --cflags gnomeui)
|
|||
mp1parse_LDFLAGS = $(shell gnome-config --libs gnomeui)
|
||||
mpeg2parse_CFLAGS = $(shell gnome-config --cflags 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
|
||||
teardown_SOURCES = teardown.c mem.c
|
||||
|
|
|
@ -49,7 +49,7 @@ void new_pad_created(GstElement *parse,GstPad *pad,GstElement *pipeline) {
|
|||
|
||||
// construct queue and connect everything in the main pipelie
|
||||
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_thread));
|
||||
gst_pad_connect(pad,
|
||||
|
@ -67,14 +67,14 @@ void new_pad_created(GstElement *parse,GstPad *pad,GstElement *pipeline) {
|
|||
//} else if (0) {
|
||||
|
||||
gst_plugin_load("mp1videoparse");
|
||||
//gst_plugin_load("mpeg_play");
|
||||
gst_plugin_load("mpeg2play");
|
||||
gst_plugin_load("mpeg_play");
|
||||
//gst_plugin_load("mpeg2play");
|
||||
gst_plugin_load("videosink");
|
||||
// construct internal pipeline elements
|
||||
parse_video = gst_elementfactory_make("mp1videoparse","parse_video");
|
||||
g_return_if_fail(parse_video != NULL);
|
||||
//decode_video = gst_elementfactory_make("mpeg_play","decode_video");
|
||||
decode_video = gst_elementfactory_make("mpeg2play","decode_video");
|
||||
decode_video = gst_elementfactory_make("mpeg_play","decode_video");
|
||||
//decode_video = gst_elementfactory_make("mpeg2play","decode_video");
|
||||
g_return_if_fail(decode_video != NULL);
|
||||
show = gst_elementfactory_make("videosink","show");
|
||||
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
|
||||
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_thread));
|
||||
gst_pad_connect(pad,
|
||||
|
|
|
@ -168,6 +168,7 @@ int main(int argc,char *argv[]) {
|
|||
gst_init(&argc,&argv);
|
||||
gnome_init("MPEG2 Video player","0.0.1",argc,argv);
|
||||
gst_plugin_load("mpeg2parse");
|
||||
//gst_plugin_load("mpeg1parse");
|
||||
|
||||
pipeline = gst_pipeline_new("pipeline");
|
||||
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]);
|
||||
|
||||
parse = gst_elementfactory_make("mpeg2parse","parse");
|
||||
//parse = gst_elementfactory_make("mpeg1parse","parse");
|
||||
g_return_if_fail(parse != NULL);
|
||||
|
||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
|
||||
|
|
Loading…
Reference in a new issue