diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2011-10-21 01:36:02 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2011-10-21 01:36:02 +0000 |
commit | 20336d98d512fe7afb211d85d794192df13b8e68 (patch) | |
tree | 8dcef5f23ddd2647cbd14f3a49a43f6e4b628d36 /pjmedia/src/pjmedia-codec/ffmpeg_codecs.c | |
parent | d495463f14f9ca766726d155d182249fdffed297 (diff) |
Re #1390: Fixed ffmpeg codecs to update size & fps in AVCodecContext after applying SDP fmtp to codec param.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3833 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec/ffmpeg_codecs.c')
-rw-r--r-- | pjmedia/src/pjmedia-codec/ffmpeg_codecs.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/pjmedia/src/pjmedia-codec/ffmpeg_codecs.c b/pjmedia/src/pjmedia-codec/ffmpeg_codecs.c index 62bc4194..ebb53084 100644 --- a/pjmedia/src/pjmedia-codec/ffmpeg_codecs.c +++ b/pjmedia/src/pjmedia-codec/ffmpeg_codecs.c @@ -348,9 +348,19 @@ static pj_status_t h264_preopen(ffmpeg_private *ff) } if (ff->param.dir & PJMEDIA_DIR_ENCODING) { + pjmedia_video_format_detail *vfd; AVCodecContext *ctx = ff->enc_ctx; const char *profile = NULL; + vfd = pjmedia_format_get_video_format_detail(&ff->param.enc_fmt, + PJ_TRUE); + + /* Override generic params after applying SDP fmtp */ + ctx->width = vfd->size.w; + ctx->height = vfd->size.h; + ctx->time_base.num = vfd->fps.denum; + ctx->time_base.den = vfd->fps.num; + /* Apply profile. */ ctx->profile = data->fmtp.profile_idc; switch (ctx->profile) { @@ -475,6 +485,21 @@ static pj_status_t h263_preopen(ffmpeg_private *ff) status = pjmedia_vid_codec_h263_apply_fmtp(&ff->param); } + /* Override generic params after applying SDP fmtp */ + if (ff->param.dir & PJMEDIA_DIR_ENCODING) { + pjmedia_video_format_detail *vfd; + AVCodecContext *ctx = ff->enc_ctx; + + vfd = pjmedia_format_get_video_format_detail(&ff->param.enc_fmt, + PJ_TRUE); + + /* Override generic params after applying SDP fmtp */ + ctx->width = vfd->size.w; + ctx->height = vfd->size.h; + ctx->time_base.num = vfd->fps.denum; + ctx->time_base.den = vfd->fps.num; + } + return status; } @@ -1084,8 +1109,8 @@ static pj_status_t open_ffmpeg_codec(ffmpeg_private *ff, ctx->opaque = ff; } - /* Init codec override generic params or apply specific params before - * the codec opened. + /* Override generic params or apply specific params before opening + * the codec. */ if (ff->desc->preopen) { status = (*ff->desc->preopen)(ff); |