diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-10-06 04:28:59 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-10-06 04:48:00 +0300 |
commit | 7fd3eb0f74e7986e07556077ed654bad7869add8 (patch) | |
tree | 8d293145c0ef2bc31ca63f79dccb4e3b57294c82 /libmpcodecs | |
parent | ef438b3a6b5bc714d521dd46d3ccb798ecd31eed (diff) | |
parent | cbbc886820e981f488660708678f528e1d243121 (diff) | |
download | mpv-7fd3eb0f74e7986e07556077ed654bad7869add8.tar.bz2 mpv-7fd3eb0f74e7986e07556077ed654bad7869add8.tar.xz |
Merge svn changes up to r29752
As part of merging subtitle-in-terminal changes make
update_subtitles() only clear existing subtitles if called with the
reset argument, and not try to set new ones. Later calls should set
the needed new subtitles, and this change avoids some problems with
trying to set subtitles when mp_property_sub() in command.c gets
called from initialization code before full initialization.
Diffstat (limited to 'libmpcodecs')
-rw-r--r-- | libmpcodecs/ad_ffmpeg.c | 1 | ||||
-rw-r--r-- | libmpcodecs/ad_twin.c | 2 | ||||
-rw-r--r-- | libmpcodecs/ae_lavc.c | 2 | ||||
-rw-r--r-- | libmpcodecs/vd.c | 7 | ||||
-rw-r--r-- | libmpcodecs/vd_ffmpeg.c | 2 | ||||
-rw-r--r-- | libmpcodecs/ve_lavc.c | 4 | ||||
-rw-r--r-- | libmpcodecs/ve_x264.c | 47 |
7 files changed, 23 insertions, 42 deletions
diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c index bf3da1cbbe..fd354f8ba7 100644 --- a/libmpcodecs/ad_ffmpeg.c +++ b/libmpcodecs/ad_ffmpeg.c @@ -68,6 +68,7 @@ static int init(sh_audio_t *sh_audio) } lavc_context->request_channels = audio_output_channels; lavc_context->codec_tag = sh_audio->format; //FOURCC + lavc_context->codec_type = CODEC_TYPE_AUDIO; lavc_context->codec_id = lavc_codec->id; // not sure if required, imho not --A'rpi /* alloc extra data */ diff --git a/libmpcodecs/ad_twin.c b/libmpcodecs/ad_twin.c index 395567128a..280b4cb8c1 100644 --- a/libmpcodecs/ad_twin.c +++ b/libmpcodecs/ad_twin.c @@ -184,7 +184,7 @@ void uninit(sh_audio_t *sh) FreeLibrary(vqf_dll); } -int control(sh_audio_t *sh_audio,int cmd,void* arg, ...) +static int control(sh_audio_t *sh_audio,int cmd,void* arg, ...) { switch(cmd) { case ADCTRL_QUERY_FORMAT: diff --git a/libmpcodecs/ae_lavc.c b/libmpcodecs/ae_lavc.c index 81b76ee062..4032141c72 100644 --- a/libmpcodecs/ae_lavc.c +++ b/libmpcodecs/ae_lavc.c @@ -170,6 +170,8 @@ int mpae_init_lavc(audio_encoder_t *encoder) return 0; } + lavc_actx->codec_type = CODEC_TYPE_AUDIO; + lavc_actx->codec_id = lavc_acodec->id; // put sample parameters lavc_actx->channels = encoder->params.channels; lavc_actx->sample_rate = encoder->params.sample_rate; diff --git a/libmpcodecs/vd.c b/libmpcodecs/vd.c index 62a3fcbdda..1910af62ee 100644 --- a/libmpcodecs/vd.c +++ b/libmpcodecs/vd.c @@ -121,8 +121,9 @@ int mpcodecs_config_vo(sh_video_t *sh, int w, int h, if (!sh->disp_w || !sh->disp_h) return 0; - mp_tmsg(MSGT_DECVIDEO, MSGL_INFO, "VDec: vo config request - %d x %d (preferred colorspace: %s)\n", w, h, - vo_format_name(preferred_outfmt)); + mp_msg(MSGT_DECVIDEO, MSGL_V, + "VDec: vo config request - %d x %d (preferred colorspace: %s)\n", + w, h, vo_format_name(preferred_outfmt)); if (get_video_quality_max(sh) <= 0 && divx_quality) { // user wants postprocess but no pp filter yet: @@ -216,7 +217,7 @@ int mpcodecs_config_vo(sh_video_t *sh, int w, int h, return 0; // failed } out_fmt = sh->codec->outfmt[j]; - mp_tmsg(MSGT_CPLAYER, MSGL_INFO, "VDec: using %s as output csp (no %d)\n", + mp_msg(MSGT_CPLAYER, MSGL_V, "VDec: using %s as output csp (no %d)\n", vo_format_name(out_fmt), j); sh->outfmtidx = j; sh->vfilter = vf; diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c index dfc7958a23..886a07f3cb 100644 --- a/libmpcodecs/vd_ffmpeg.c +++ b/libmpcodecs/vd_ffmpeg.c @@ -246,6 +246,8 @@ static int init(sh_video_t *sh){ ctx->avctx = avcodec_alloc_context(); avctx = ctx->avctx; avctx->opaque = sh; + avctx->codec_type = CODEC_TYPE_VIDEO; + avctx->codec_id = lavc_codec->id; #if CONFIG_VDPAU if(lavc_codec->capabilities & CODEC_CAP_HWACCEL_VDPAU){ diff --git a/libmpcodecs/ve_lavc.c b/libmpcodecs/ve_lavc.c index c9d60a202a..f798378dbe 100644 --- a/libmpcodecs/ve_lavc.c +++ b/libmpcodecs/ve_lavc.c @@ -331,7 +331,7 @@ static int config(struct vf_instance* vf, int width, int height, int d_width, int d_height, unsigned int flags, unsigned int outfmt){ int size, i; - void *p; + char *p; mux_v->bih->biWidth=width; mux_v->bih->biHeight=height; @@ -1047,6 +1047,8 @@ static int vf_open(vf_instance_t *vf, char* args){ vf->priv->pic = avcodec_alloc_frame(); vf->priv->context = avcodec_alloc_context(); + vf->priv->context->codec_type = CODEC_TYPE_VIDEO; + vf->priv->context->codec_id = vf->priv->codec->id; return 1; } diff --git a/libmpcodecs/ve_x264.c b/libmpcodecs/ve_x264.c index 3a909cdfb7..6733b8c641 100644 --- a/libmpcodecs/ve_x264.c +++ b/libmpcodecs/ve_x264.c @@ -59,20 +59,6 @@ static int turbo = 0; static x264_param_t param; static int parse_error = 0; -static int encode_nals(uint8_t *buf, int size, x264_nal_t *nals, int nnal){ - uint8_t *p = buf; - int i; - - for(i = 0; i < nnal; i++){ - int s = x264_nal_encode(p, &size, 1, nals + i); - if(s < 0) - return -1; - p += s; - } - - return p - buf; -} - static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts); static int encode_frame(struct vf_instance *vf, x264_picture_t *pic_in); @@ -189,21 +175,13 @@ static int config(struct vf_instance* vf, int width, int height, int d_width, in } if(!param.b_repeat_headers){ - uint8_t *extradata; x264_nal_t *nal; - int extradata_size, nnal, i, s = 0; + int extradata_size, nnal; - x264_encoder_headers(mod->x264, &nal, &nnal); - - /* 5 bytes NAL header + worst case escaping */ - for(i = 0; i < nnal; i++) - s += 5 + nal[i].i_payload * 4 / 3; - - extradata = malloc(s); - extradata_size = encode_nals(extradata, s, nal, nnal); + extradata_size = x264_encoder_headers(mod->x264, &nal, &nnal); mod->mux->bih= realloc(mod->mux->bih, sizeof(BITMAPINFOHEADER) + extradata_size); - memcpy(mod->mux->bih + 1, extradata, extradata_size); + memcpy(mod->mux->bih + 1, nal->p_payload, extradata_size); mod->mux->bih->biSize= sizeof(BITMAPINFOHEADER) + extradata_size; } @@ -218,12 +196,10 @@ static int config(struct vf_instance* vf, int width, int height, int d_width, in static int control(struct vf_instance* vf, int request, void *data) { h264_module_t *mod=(h264_module_t*)vf->priv; - int count = 256; // giant HACK, x264_encoder_encode may incorrectly return 0 - // when threads > 1 and delayed frames pending switch(request){ case VFCTRL_FLUSH_FRAMES: - while(encode_frame(vf, NULL) == 0 && --count); - while(encode_frame(vf, NULL) > 0); + while (x264_encoder_delayed_frames(mod->x264) > 0) + encode_frame(vf, NULL); return CONTROL_TRUE; default: return CONTROL_UNKNOWN; @@ -273,23 +249,20 @@ static int encode_frame(struct vf_instance *vf, x264_picture_t *pic_in) x264_picture_t pic_out; x264_nal_t *nal; int i_nal; - int i_size = 0; - int i; + int i_size; - if(x264_encoder_encode(mod->x264, &nal, &i_nal, pic_in, &pic_out) < 0) { + i_size = x264_encoder_encode(mod->x264, &nal, &i_nal, pic_in, &pic_out); + + if(i_size<0) { mp_msg(MSGT_MENCODER, MSGL_ERR, "x264_encoder_encode failed\n"); return -1; } - - for(i=0; i < i_nal; i++) { - int i_data = mod->mux->buffer_size - i_size; - i_size += x264_nal_encode(mod->mux->buffer + i_size, &i_data, 1, &nal[i]); - } if(i_size>0) { int keyframe = (pic_out.i_type == X264_TYPE_IDR) || (pic_out.i_type == X264_TYPE_I && param.i_frame_reference == 1 && !param.i_bframe); + memcpy(mod->mux->buffer, nal->p_payload, i_size); muxer_write_chunk(mod->mux, i_size, keyframe?0x10:0, MP_NOPTS_VALUE, MP_NOPTS_VALUE); } else |