diff options
Diffstat (limited to 'video/codecs/mpeg.cpp')
-rw-r--r-- | video/codecs/mpeg.cpp | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/video/codecs/mpeg.cpp b/video/codecs/mpeg.cpp deleted file mode 100644 index 4540b4182e..0000000000 --- a/video/codecs/mpeg.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/debug.h" -#include "common/stream.h" -#include "common/system.h" -#include "common/textconsole.h" -#include "graphics/surface.h" -#include "graphics/yuv_to_rgb.h" - -#include "video/codecs/mpeg.h" - -namespace Video { - -MPEGDecoder::MPEGDecoder() : Codec() { - _pixelFormat = g_system->getScreenFormat(); - _surface = 0; - - _mpegDecoder = mpeg2_init(); - - if (!_mpegDecoder) - error("Could not initialize libmpeg2"); - - _mpegInfo = mpeg2_info(_mpegDecoder); -} - -MPEGDecoder::~MPEGDecoder() { - mpeg2_close(_mpegDecoder); - - if (_surface) { - _surface->free(); - delete _surface; - } -} - -const Graphics::Surface *MPEGDecoder::decodeImage(Common::SeekableReadStream *stream) { - uint32 framePeriod; - decodePacket(stream, framePeriod); - return _surface; -} - -bool MPEGDecoder::decodePacket(Common::SeekableReadStream *packet, uint32 &framePeriod, Graphics::Surface *dst) { - // Decode as much as we can out of this packet - uint32 size = 0xFFFFFFFF; - mpeg2_state_t state; - bool foundFrame = false; - framePeriod = 0; - - do { - state = mpeg2_parse(_mpegDecoder); - - switch (state) { - case STATE_BUFFER: - size = packet->read(_buffer, BUFFER_SIZE); - mpeg2_buffer(_mpegDecoder, _buffer, _buffer + size); - break; - case STATE_SLICE: - case STATE_END: - if (_mpegInfo->display_fbuf) { - foundFrame = true; - const mpeg2_sequence_t *sequence = _mpegInfo->sequence; - - framePeriod += sequence->frame_period; - - if (!dst) { - // If no destination is specified, use our internal storage - if (!_surface) { - _surface = new Graphics::Surface(); - _surface->create(sequence->picture_width, sequence->picture_height, _pixelFormat); - } - - dst = _surface; - } - - YUVToRGBMan.convert420(dst, Graphics::YUVToRGBManager::kScaleITU, _mpegInfo->display_fbuf->buf[0], - _mpegInfo->display_fbuf->buf[1], _mpegInfo->display_fbuf->buf[2], sequence->picture_width, - sequence->picture_height, sequence->width, sequence->chroma_width); - } - break; - default: - break; - } - } while (size != 0); - - return foundFrame; -} - -} // End of namespace Video |