[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/parser/video_stream_def.cpp
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/parser/video_stream_def.cpp |
Date: |
Tue, 04 Dec 2007 21:42:18 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/12/04 21:42:18
Modified files:
. : ChangeLog
server/parser : video_stream_def.cpp
Log message:
read frame number from tag, improve robustness of parser and other
minor cleanups
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5083&r2=1.5084
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/video_stream_def.cpp?cvsroot=gnash&r1=1.28&r2=1.29
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5083
retrieving revision 1.5084
diff -u -b -r1.5083 -r1.5084
--- ChangeLog 4 Dec 2007 21:22:54 -0000 1.5083
+++ ChangeLog 4 Dec 2007 21:42:17 -0000 1.5084
@@ -1,7 +1,8 @@
2007-12-04 Sandro Santilli <address@hidden>
* server/parser/video_stream_def.cpp (readDefineVideoFrame): read all
- data at once rather then reading a byte each iteration of a loop (!)
+ data at once rather then reading a byte each iteration of a loop,
+ read frame number from tag, improve robustness and other minor
cleanups.
* server/stream.cpp: reduce direct accesses to the underlying stream
in preparation for using a cache buffer.
* libmedia/Makefile.am: don't put <tab> characters before variable
Index: server/parser/video_stream_def.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/video_stream_def.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- server/parser/video_stream_def.cpp 4 Dec 2007 21:22:54 -0000 1.28
+++ server/parser/video_stream_def.cpp 4 Dec 2007 21:42:18 -0000 1.29
@@ -16,7 +16,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-// $Id: video_stream_def.cpp,v 1.28 2007/12/04 21:22:54 strk Exp $
+// $Id: video_stream_def.cpp,v 1.29 2007/12/04 21:42:18 strk Exp $
#include "video_stream_def.h"
#include "video_stream_instance.h"
@@ -58,6 +58,9 @@
m_start_frame = m->get_loading_frame();
+ // numFrames:2 width:2 height:2 flags:1
+ in->ensureBytes(8);
+
m_num_frames = in->read_u16();
_width = in->read_u16();
@@ -71,6 +74,7 @@
m_smoothing_flags = in->read_bit();
m_codec_id = static_cast<media::videoCodecType>(in->read_u8());
+
#ifdef USE_FFMPEG
_decoder.reset( new media::VideoDecoderFfmpeg() );
#elif defined(SOUND_GST)
@@ -91,10 +95,13 @@
assert(tag == SWF::VIDEOFRAME);
assert ( _decoder.get() ); // not allowed to be called for a
dynamically-created video_stream_def
- // We don't use the videoframe number, but instead
- // each video frame is tied to the swf-frame where
- // it belongs.
- in->skip_bytes(2); //int frameNum = in->read_u16();
+ in->ensureBytes(2);
+ unsigned int frameNum = in->read_u16(); // in->skip_bytes(2);
+ if ( m->get_loading_frame() != frameNum )
+ {
+ log_debug("frameNum field in tag is %d, currently loading frame
is %d, we'll use the latter.");
+ frameNum = m->get_loading_frame();
+ }
// We need to make the buffer a FF_INPUT_BUFFER_PADDING_SIZE
// bigger than the data to avoid libavcodec (ffmpeg) making
@@ -112,30 +119,32 @@
// Check what kind of frame this is
media::videoFrameType ft;
if (m_codec_id == media::VIDEO_CODEC_H263) {
+ //log_debug("H263 embedded video!");
// Parse the h263 header to determine the frame type. The
position of the
// info varies if the frame size is custom.
- std::auto_ptr<BitsReader> br (new BitsReader(data.get(),
totSize));
- boost::uint32_t tmp = br->read_uint(30);
- tmp = br->read_uint(3);
- if (tmp == 0) tmp = br->read_uint(32);
- else if (tmp == 1) tmp = br->read_uint(16);
+ BitsReader br(data.get(), totSize);
+ boost::uint32_t tmp = br.read_uint(30);
+ tmp = br.read_uint(3);
+ if (tmp == 0) tmp = br.read_uint(32);
+ else if (tmp == 1) tmp = br.read_uint(16);
// Finally we're at the info, read and use
- tmp = br->read_uint(3);
+ tmp = br.read_uint(3);
if (tmp == 0) ft = media::KEY_FRAME;
else if (tmp == 1) ft = media::INTER_FRAME;
else ft = media::DIS_INTER_FRAME;
} else if (m_codec_id == media::VIDEO_CODEC_VP6 || m_codec_id ==
media::VIDEO_CODEC_VP6A) {
// Get the info from the VP6 header
- if (!(data.get()[0] & 0x80)) ft = media::KEY_FRAME;
+ //if (!(data.get()[0] & 0x80)) ft = media::KEY_FRAME;
+ if (! (data[0] & 0x80) ) ft = media::KEY_FRAME;
else ft = media::INTER_FRAME;
} else {
ft = media::KEY_FRAME;
}
- setFrameData(m->get_loading_frame(), data, totSize, ft);
+ setFrameData(frameNum, data, totSize, ft);
}