3
Copyright (C) 1999 Martin Vogt
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU Library General Public License as published by
7
the Free Software Foundation.
9
For more information look at the file COPYRIGHT in this package
14
#include "mpegPlugin.h"
16
#include "../mpegplay/mpegVideoStream.h"
17
#include "../mpegplay/proto.h"
18
#include "../mpegplay/mpegVideoHeader.h"
22
MpegPlugin::MpegPlugin() {
27
MpegPlugin::~MpegPlugin() {
31
void MpegPlugin::init() {
38
void MpegPlugin::decoder_loop() {
41
VideoDecoder* video=NULL;
43
cout << "MpegPlugin::decoder_loop input is NULL"<<endl;
47
cout << "MpegPlugin::decoder_loop output is NULL"<<endl;
51
mpegVideoHeader=new MpegVideoHeader();
52
mpegVideoStream=new MpegVideoStream(input);
54
PictureArray* pictureArray;
56
int skipMode=_SYNC_TO_NONE;
61
case _STREAM_STATE_FIRST_INIT :
62
if (mpegVideoStream->firstInitialize(mpegVideoHeader)==false) {
65
pluginInfo->setLength(getSongLength());
67
// now create pictureArray from the sequence
68
int width=mpegVideoHeader->getMB_Width()*16;
69
int height=mpegVideoHeader->getMB_Height()*16;
71
output->openWindow(width,height,(char*)"kmpg");
72
video=new VideoDecoder(mpegVideoStream,mpegVideoHeader);
73
setStreamState(_STREAM_STATE_INIT);
76
case _STREAM_STATE_INIT :
77
// cout << "mpeg _STREAM_STATE_INI"<<endl;
78
if (skipMode==_SYNC_TO_GOP) {
79
if (mpegVideoStream->nextGOP()==false) {
82
video->resyncToI_Frame();
84
if (skipMode==_SYNC_TO_PIC) {
85
if (mpegVideoStream->nextPIC()==false) {
89
skipMode=_SYNC_TO_NONE;
90
setStreamState(_STREAM_STATE_PLAY);
92
case _STREAM_STATE_PLAY :
93
pictureArray=output->lockPictureArray();
94
skipMode=video->mpegVidRsrc(pictureArray);
96
if (skipMode != _SYNC_TO_NONE) {
97
setStreamState(_STREAM_STATE_INIT);
99
pic=pictureArray->getYUVPictureCallback();
105
output->unlockPictureArray(pictureArray);
106
pictureArray->setYUVPictureCallback(NULL);
108
case _STREAM_STATE_WAIT_FOR_END:
113
cout << "unknown stream state:"<<streamState<<endl;
117
output->flushWindow();
118
// copy sequence back if needed
122
delete mpegVideoStream;
123
delete mpegVideoHeader;
124
mpegVideoStream=NULL;
125
mpegVideoHeader=NULL;
132
// here we can config our decoder with special flags
133
void MpegPlugin::config(const char* key,const char* value,void* user_data) {
134
if (strcmp(key,"-c")==0) {
138
if (strcmp(key,"decode")==0) {
139
if (strcmp(value,"true")==0) {
145
DecoderPlugin::config(key,value,user_data);
150
int MpegPlugin::getSongLength() {