according to the doc, av_read_packet does not check wether the data in the decoded frame is a valid image or not. As it is always the 8 first "frames" missing, I would assume it is the header that gets decoded first. Have you noticed missing images when comparing the first real decoded image and your stream in a player ?
2014-07-21 18:37 GMT+02:00 Matt Orlando <[email protected]>: > 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 > >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
