[FFmpeg-user] H264 Sliced Decoding Access Violation?

Robert Nagy ronag89 at gmail.com
Thu Aug 11 17:10:11 CEST 2011


I'm playing around a bit with thread decoding of H264. I would like to
decode slices.

However, I get an access violation inside of "thread_execute" at the line
"int r = func(s, reinterpret_cast<uint8_t*>(arg) + n*size);".

This works just fine with mpeg2 decoding.

Any ideas as to why I'm getting an access violation? Is it a bug in the
sliced h264 decoder, or am I doing something wrong?

int thread_execute(AVCodecContext* s, int (*func)(AVCodecContext *c2, void
*arg2), void* arg, int* ret, int count, int size)
{
for(size_t n = 0; n < count; ++n) // will be parallel_for
{
int r = func(s, reinterpret_cast<uint8_t*>(arg) + n*size);
if(ret)
      ret[n] = r;
}
return 0;
}

void thread_init(AVCodecContext* s)
{
static const size_t MAX_THREADS = 16; // See mpegvideo.h
static int dummy_opaque;

    s->active_thread_type = FF_THREAD_SLICE;
s->thread_opaque  = &dummy_opaque;
    s->execute  = thread_execute;
    //s->execute2  = thread_execute2; not used
    s->thread_count  = MAX_THREADS; // We are using a task-scheduler, so use
as many "threads/tasks" as possible.
}

void thread_free(AVCodecContext* s)
{
if(!s->thread_opaque)
return;

s->thread_opaque = nullptr;
}

int custom_avcodec_open(AVCodecContext* avctx, AVCodec* codec)
{
avctx->thread_count = 1;
if((codec->id == CODEC_ID_H264) &&
  (codec->capabilities & CODEC_CAP_SLICE_THREADS) &&
  (avctx->thread_type & FF_THREAD_SLICE))
{
thread_init(avctx);
}
// ff_thread_init will not be executed since thread_count == 1.
return avcodec_open(avctx, codec);
}

int custom_avcodec_close(AVCodecContext* avctx)
{
thread_free(avctx);
// ff_thread_free will not be executed since thread_opaque == nullptr.
return avcodec_close(avctx);
}


More information about the ffmpeg-user mailing list