Hi folks,

I'm having some trouble with the decoding of my h.264 movies.  I've tested
with different videos, one 64 frames long and another 52 frames long.  In
both cases, the first 8 frames (exactly 8) weren't decoding.  In other
words, the call to avcodec_decode_video2 returns 0 for the got_picture
variable.  I track the frames read and received for our system and I never
get notice that all the frames were read because my counter doesn't
increase for the first 8...however all of the subsequent calls to
av_read_frame return EOF.  To prevent any confusion (or perhaps just to add
some context), I need the raw data from each decoded frame since I don't
treat them as a frame to a movie but rather a frame of x,y,z positional
data.

I work in Unity but made a plugin to communicate with the libraries to read
and decode the h.264 movies.  This is our update function:

bool H264Stream::Update(int desiredFrame)
{
   if( desiredFrame <= m_FrameRead )
      return true;

   int frameFinished = 0;

   if( av_read_frame( m_AVFormat, &m_Packet ) >= 0 )
   {
      if( m_Packet.stream_index == m_AVStream->index )
      {
         av_frame_unref( m_AVFrame );
         avcodec_decode_video2( m_AVContext, m_AVFrame, &frameFinished,
&m_Packet );

         if( frameFinished != 0 )
         {
            sws_scale( m_SwsContext, m_AVFrame->data, m_AVFrame->linesize,
0, m_AVContext->height, m_Picture->data, m_Picture->linesize );

            m_FrameRead++;

            av_free_packet( &m_Packet );
         }
      }
   }

   return m_FrameRead >= desiredFrame;
}


Oh, quick note, this is my first time using these libraries so if there's
something blatantly wrong with how I'm doing this, please let me know.  :)
  Just keep in mind, it's the full frame of 'raw' data I use (post-decode)
that I pass back into my Unity c# scripts.

Thanks for the help everyone!
-Matt
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to