Hey,

Im writing a program where I have to use custom IO Callbacks because I have to play video files with a prepended extra header. However, if I try to play a movie with an offset of e.g. 10 bytes and I seek, the movie might play on, but audio doesnt:

[h264 @ 0x240afc0] left block unavailable for requested intra mode at 0 17

[h264 @ 0x240afc0] error while decoding MB 0 17

[h264 @ 0x240afc0] AVC: nal size 399

[h264 @ 0x240afc0] concealing 229 DC, 229 AC, 229 MV errors

[h264 @ 0x240afc0] AVC: nal size 25153

[h264 @ 0x240afc0] no frame!

packet didnt contain a complete frame!

[aac @ 0x20220a0] channel element 2.14 is not allocated


This happens sporadic and I cant figure out why. My Seek_Func just calls a subclassed QFile::seek(...) which returns QFile::seek(... + offset ). Has anybody an Idea why seek often doesnt work? Maybe I am missing a parameter when I create my callback? Btw: The format is recognized correctly, also without seeking the video is played correctly...

Many thanks,
Christoph Winter

MController.cpp:

   ioContext = avio_alloc_context(buffer, BUFFER_SIZE, 0, fileReader,
   ReadFunc, NULL, SeekFunc);
        ioContext->write_flag  = 0;
        ioContext->is_streamed = 1;
        ioContext->seekable    = 1;


MFile.cpp:

   bool MFile::seek(qint64 offset)
   {
        return QFile::seek(offset+10);
   }

Utils.h:

   int64_t SeekFunc(void *opaque, int64_t offset, int whence)
   {
        qDebug() << "SeekFunc offset=" << offset << " whence=" << whence;
        QIODevice *io = (MFile*)opaque;

        int64_t absolute_pos = 0;

        switch(whence)
        {
        case AVSEEK_SIZE:
            return io->size();
        case SEEK_SET:
            absolute_pos = offset;
            break;
        case SEEK_CUR:
            absolute_pos = io->pos() + offset;
        case SEEK_END:
            absolute_pos = io->size() - offset;
        default:
            return -1;
        }
        if( absolute_pos < 0 || absolute_pos > io->size() )
            return -1;
        bool ret = io->seek(absolute_pos);
        return ret;
   }

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to