[FFmpeg-devel] How to get width/height of an H264 stream using its SPS ?

PROMONET Michel michel.promonet at thalesgroup.com
Thu Jul 30 11:16:52 CEST 2015


            Hi,

I don't know if this is the right place to ask for this kind of information.
Basically I am trying to get width and height from the H264 SPS using ffmpeg.

Using a reduced sample like this :

#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>

int main()
{
            const char sps[] = {0, 0, 0, 1, 0x67, 0x42, 0x00, 0x0a, 0xf8, 0x41, 0xa2};

            av_register_all();
            av_log_set_level(AV_LOG_DEBUG);

            AVCodec *const codec = avcodec_find_decoder(CODEC_ID_H264);
            AVCodecContext* ctx = avcodec_alloc_context3(codec);
            ctx->debug = ~0;
            ctx->extradata = (uint8_t *)av_malloc(sizeof(sps) + FF_INPUT_BUFFER_PADDING_SIZE);
            ctx->extradata_size = sizeof(sps);
            memcpy(ctx->extradata,sps,sizeof(sps));
            memset(&ctx->extradata[ctx->extradata_size], 0, FF_INPUT_BUFFER_PADDING_SIZE); // zero padding

avcodec_open2(ctx, codec, NULL);
            char buf[1024];
            avcodec_string(buf,sizeof(buf),ctx,1);
            fprintf(stderr, "%s\n", buf);
fprintf(stderr, "size:%dx%d\n", ctx->width, ctx->height);

            avcodec_close(ctx);
            av_free(ctx);
}

The output of this program is :
[h264 @ 0x68a010] NAL 7/3 at 4/11 length 6
[h264 @ 0x68a010] sps:0 profile:66/10 poc:0 ref:0 8x6 FRM  crop:0/0/0/0  420 0/0 b8 reo:-1
Video: h264, 1 reference frame, none(left), q=2-31, 200 kb/s
size:0x0 0x0

We can see the SPS is decoded and have the needed information to compute width and height (it should be 128x96).
However the avcodec_open2 only fill the opaque H264Context, but does not fill the AVCodecContext information.

Is there a way to decode the SPS, without decoding a frame ?

Thanks for your support.

Best Regards,

Michel.


[@@ THALES GROUP INTERNAL @@]



More information about the ffmpeg-devel mailing list