[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: |
Fri, 19 Oct 2007 10:29:17 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/10/19 10:29:17
Modified files:
. : ChangeLog
server/parser : video_stream_def.cpp
Log message:
* server/parser/video_stream_def.cpp (read): rework the input
buffer padding to be cleaner, safer and a bit faster (only
memset the pad); (destructor): get rid of the embedded video
frames. Add TODO items.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4644&r2=1.4645
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/video_stream_def.cpp?cvsroot=gnash&r1=1.20&r2=1.21
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4644
retrieving revision 1.4645
diff -u -b -r1.4644 -r1.4645
--- ChangeLog 19 Oct 2007 09:30:23 -0000 1.4644
+++ ChangeLog 19 Oct 2007 10:29:17 -0000 1.4645
@@ -1,5 +1,12 @@
2007-10-19 Sandro Santilli <address@hidden>
+ * server/parser/video_stream_def.cpp (read): rework the input
+ buffer padding to be cleaner, safer and a bit faster (only
+ memset the pad); (destructor): get rid of the embedded video
+ frames. Add TODO items.
+
+2007-10-19 Sandro Santilli <address@hidden>
+
* server/parser/video_stream_def.{cpp,h}: keep _decoder by
boost::scoped_ptr. Fixes bug #21284.
* server/swf/tag_loaders.cpp (video_loader): don't abort on malformed
Index: server/parser/video_stream_def.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/video_stream_def.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- server/parser/video_stream_def.cpp 19 Oct 2007 09:30:24 -0000 1.20
+++ server/parser/video_stream_def.cpp 19 Oct 2007 10:29:17 -0000 1.21
@@ -16,7 +16,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-// $Id: video_stream_def.cpp,v 1.20 2007/10/19 09:30:24 strk Exp $
+// $Id: video_stream_def.cpp,v 1.21 2007/10/19 10:29:17 strk Exp $
#include "video_stream_def.h"
#include "video_stream_instance.h"
@@ -42,7 +42,11 @@
video_stream_definition::~video_stream_definition()
{
- m_video_frames.clear(); // TODO: isn't this useless ?
+ for (EmbedFrameMap::iterator i=m_video_frames.begin(),
e=m_video_frames.end();
+ i!=e; ++i)
+ {
+ delete i->second;
+ }
}
@@ -88,32 +92,39 @@
// it belongs.
in->skip_bytes(2); //int frameNum = in->read_u16();
- // We need to make the buffer a bit bigger than the data
- // to avoid libavcodec (ffmpeg) making illegal reads.
- // The reason is a bit sketchy, but it seems that the h263
- // decoder (perhaps other decoders as well) assumes that the
- // buffer with the data is bigger than the data it contains.
- // We make the buffer 4 bytes bigger than the data, and set
- // them to 0.
-
- // The data size is 4 bytes smaller than this, but because of
- // what is mentioned above we don't subtract the 4 bytes.
- int size = in->get_tag_length();
- uint8_t* data = new uint8_t[size];
- memset(data, 0, size);
- for (int i = 0; i < size-4; i++) // The size-variable 4 bytes
bigger than the data
+ // We need to make the buffer a FF_INPUT_BUFFER_PADDING_SIZE
+ // bigger than the data to avoid libavcodec (ffmpeg) making
+ // illegal reads. Also, we must ensure first 23 bits to be
+ // zeroed out. We'll zero out all padding.
+ unsigned int padding = FF_INPUT_BUFFER_PADDING_SIZE;
+ unsigned int dataSize = in->get_tag_end_position() -
in->get_position();
+ unsigned int totSize = dataSize+padding;
+
+ boost::scoped_array<uint8_t> data ( new uint8_t[totSize] );
+ for (unsigned int i = 0; i < dataSize; ++i)
{
data[i] = in->read_u8();
}
+ memset(&data[dataSize], 0, padding); // padd with zeroes
- image::image_base* img = _decoder->decodeToImage(data, size);
+ // TODO: should we pass dataSize instead of totSize to
decodeToImage ?
+ std::auto_ptr<image::image_base> img (
_decoder->decodeToImage(data.get(), totSize) );
- if (img) {
- m_video_frames[m->get_loading_frame()] = img;
- } else {
+ if ( img.get() )
+ {
+ // TODO: why don't we use the frame number specified
+ // in the tag instead of skipping it ?
+ size_t frameNum = m->get_loading_frame();
+
+ // TODO: use a private function for this as we
+ // should eventually delete any previously
+ // existing element for key frameNum
+ m_video_frames[frameNum] = img.release();
+ }
+ else
+ {
log_error(_("An error occured while decoding video
frame in frame %d"), m->get_loading_frame());
}
- delete [] data;
}
}
- [Gnash-commit] gnash ChangeLog server/parser/video_stream_def.cpp,
Sandro Santilli <=