summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-23 21:28:28 +0100
committerwm4 <wm4@nowhere>2013-11-23 21:28:28 +0100
commitacfeb869a38d7f7a4e5bb273082e9cc63a02b15a (patch)
tree0a292b527d546780dc8391dde07ce6a70c3f6635 /video
parent4fa2babacc290b94bed0938658447205c0545e27 (diff)
downloadmpv-acfeb869a38d7f7a4e5bb273082e9cc63a02b15a.tar.bz2
mpv-acfeb869a38d7f7a4e5bb273082e9cc63a02b15a.tar.xz
video: merge vd.c into dec_video.c
I don't feel like the separation ever made sense, and it was hard to tell which file a function you were looking for was in.
Diffstat (limited to 'video')
-rw-r--r--video/decode/dec_video.c138
-rw-r--r--video/decode/vd.c175
2 files changed, 138 insertions, 175 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index 6ab67b9dad..f534a427de 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -42,6 +42,19 @@
#include "video/decode/dec_video.h"
+extern const vd_functions_t mpcodecs_vd_ffmpeg;
+
+/* Please do not add any new decoders here. If you want to implement a new
+ * decoder, add it to libavcodec, except for wrappers around external
+ * libraries and decoders requiring binary support. */
+
+const vd_functions_t * const mpcodecs_vd_drivers[] = {
+ &mpcodecs_vd_ffmpeg,
+ /* Please do not add any new decoders here. If you want to implement a new
+ * decoder, add it to libavcodec, except for wrappers around external
+ * libraries and decoders requiring binary support. */
+ NULL
+};
int vd_control(struct sh_video *sh_video, int cmd, void *arg)
{
@@ -292,3 +305,128 @@ void *decode_video(sh_video_t *sh_video, struct demux_packet *packet,
sh_video->num_sorted_pts_problems++;
return mpi;
}
+
+int mpcodecs_reconfig_vo(sh_video_t *sh, const struct mp_image_params *params)
+{
+ struct MPOpts *opts = sh->opts;
+ vf_instance_t *vf = sh->vfilter;
+ int vocfg_flags = 0;
+ struct mp_image_params p = *params;
+
+ sh->vf_reconfig_count++;
+
+ mp_msg(MSGT_DECVIDEO, MSGL_V,
+ "VIDEO: %dx%d %5.3f fps %5.1f kbps (%4.1f kB/s)\n",
+ p.w, p.h, sh->fps, sh->i_bps * 0.008,
+ sh->i_bps / 1000.0);
+
+ mp_msg(MSGT_DECVIDEO, MSGL_V, "VDec: vo config request - %d x %d (%s)\n",
+ p.w, p.h, vo_format_name(p.imgfmt));
+
+ if (get_video_quality_max(sh) <= 0 && opts->divx_quality) {
+ // user wants postprocess but no pp filter yet:
+ sh->vfilter = vf = vf_open_filter(opts, vf, "pp", NULL);
+ }
+
+ // check if libvo and codec has common outfmt (no conversion):
+ int flags = 0;
+ for (;;) {
+ mp_msg(MSGT_VFILTER, MSGL_V, "Trying filter chain:\n");
+ vf_print_filter_chain(MSGL_V, vf);
+
+ flags = vf->query_format(vf, p.imgfmt);
+ mp_msg(MSGT_CPLAYER, MSGL_DBG2, "vo_debug: query(%s) returned 0x%X \n",
+ vo_format_name(p.imgfmt), flags);
+ if ((flags & VFCAP_CSP_SUPPORTED_BY_HW)
+ || (flags & VFCAP_CSP_SUPPORTED))
+ {
+ break;
+ }
+ // TODO: no match - we should use conversion...
+ if (strcmp(vf->info->name, "scale")) {
+ mp_tmsg(MSGT_DECVIDEO, MSGL_INFO, "Could not find matching colorspace - retrying with -vf scale...\n");
+ vf = vf_open_filter(opts, vf, "scale", NULL);
+ continue;
+ }
+ mp_tmsg(MSGT_CPLAYER, MSGL_WARN,
+ "The selected video_out device is incompatible with this codec.\n"\
+ "Try appending the scale filter to your filter list,\n"\
+ "e.g. -vf filter,scale instead of -vf filter.\n");
+ mp_tmsg(MSGT_VFILTER, MSGL_WARN, "Attempted filter chain:\n");
+ vf_print_filter_chain(MSGL_WARN, vf);
+ sh->vf_initialized = -1;
+ return -1; // failed
+ }
+ sh->vfilter = vf;
+
+ // autodetect flipping
+ bool flip = opts->flip;
+ if (flip && !(flags & VFCAP_FLIP)) {
+ // we need to flip, but no flipping filter avail.
+ vf_add_before_vo(&vf, "flip", NULL);
+ sh->vfilter = vf;
+ flip = false;
+ }
+ // time to do aspect ratio corrections...
+
+ float force_aspect = opts->movie_aspect;
+ if (force_aspect > -1.0 && sh->stream_aspect != 0.0)
+ force_aspect = sh->stream_aspect;
+
+ if (force_aspect >= 0)
+ vf_set_dar(&p.d_w, &p.d_h, p.w, p.h, force_aspect);
+
+ if (abs(p.d_w - p.w) >= 4 || abs(p.d_h - p.h) >= 4) {
+ mp_tmsg(MSGT_CPLAYER, MSGL_V, "Aspect ratio is %.2f:1 - "
+ "scaling to correct movie aspect.\n", sh->aspect);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", sh->aspect);
+ } else {
+ p.d_w = p.w;
+ p.d_h = p.h;
+ }
+
+ // Apply user overrides
+ if (opts->requested_colorspace != MP_CSP_AUTO)
+ p.colorspace = opts->requested_colorspace;
+ if (opts->requested_input_range != MP_CSP_LEVELS_AUTO)
+ p.colorlevels = opts->requested_input_range;
+ p.outputlevels = opts->requested_output_range;
+
+ // Detect colorspace from resolution.
+ // Make sure the user-overrides are consistent (no RGB csp for YUV, etc.).
+ mp_image_params_guess_csp(&p);
+
+ vocfg_flags = (flip ? VOFLAG_FLIPPING : 0);
+
+ // Time to config libvo!
+ mp_msg(MSGT_CPLAYER, MSGL_V, "VO Config (%dx%d->%dx%d,flags=%d,0x%X)\n",
+ p.w, p.h, p.d_w, p.d_h, vocfg_flags, p.imgfmt);
+
+ if (vf_reconfig_wrapper(vf, &p, vocfg_flags) < 0) {
+ mp_tmsg(MSGT_CPLAYER, MSGL_WARN, "FATAL: Cannot initialize video driver.\n");
+ sh->vf_initialized = -1;
+ return -1;
+ }
+
+ mp_tmsg(MSGT_VFILTER, MSGL_V, "Video filter chain:\n");
+ vf_print_filter_chain(MSGL_V, vf);
+
+ sh->vf_initialized = 1;
+
+ if (!sh->vf_input)
+ sh->vf_input = talloc(sh, struct mp_image_params);
+ *sh->vf_input = p;
+
+ if (opts->gamma_gamma != 1000)
+ set_video_colors(sh, "gamma", opts->gamma_gamma);
+ if (opts->gamma_brightness != 1000)
+ set_video_colors(sh, "brightness", opts->gamma_brightness);
+ if (opts->gamma_contrast != 1000)
+ set_video_colors(sh, "contrast", opts->gamma_contrast);
+ if (opts->gamma_saturation != 1000)
+ set_video_colors(sh, "saturation", opts->gamma_saturation);
+ if (opts->gamma_hue != 1000)
+ set_video_colors(sh, "hue", opts->gamma_hue);
+
+ return 0;
+}
diff --git a/video/decode/vd.c b/video/decode/vd.c
deleted file mode 100644
index c8c9be3e72..0000000000
--- a/video/decode/vd.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "config.h"
-#include "mpvcore/mp_msg.h"
-#include "mpvcore/options.h"
-
-#include "video/img_format.h"
-
-#include "stream/stream.h"
-#include "demux/stheader.h"
-#include "dec_video.h"
-
-#include "vd.h"
-#include "video/filter/vf.h"
-#include "video/out/vo.h"
-
-extern const vd_functions_t mpcodecs_vd_ffmpeg;
-
-/* Please do not add any new decoders here. If you want to implement a new
- * decoder, add it to libavcodec, except for wrappers around external
- * libraries and decoders requiring binary support. */
-
-const vd_functions_t * const mpcodecs_vd_drivers[] = {
- &mpcodecs_vd_ffmpeg,
- /* Please do not add any new decoders here. If you want to implement a new
- * decoder, add it to libavcodec, except for wrappers around external
- * libraries and decoders requiring binary support. */
- NULL
-};
-
-int mpcodecs_reconfig_vo(sh_video_t *sh, const struct mp_image_params *params)
-{
- struct MPOpts *opts = sh->opts;
- vf_instance_t *vf = sh->vfilter;
- int vocfg_flags = 0;
- struct mp_image_params p = *params;
-
- sh->vf_reconfig_count++;
-
- mp_msg(MSGT_DECVIDEO, MSGL_V,
- "VIDEO: %dx%d %5.3f fps %5.1f kbps (%4.1f kB/s)\n",
- p.w, p.h, sh->fps, sh->i_bps * 0.008,
- sh->i_bps / 1000.0);
-
- mp_msg(MSGT_DECVIDEO, MSGL_V, "VDec: vo config request - %d x %d (%s)\n",
- p.w, p.h, vo_format_name(p.imgfmt));
-
- if (get_video_quality_max(sh) <= 0 && opts->divx_quality) {
- // user wants postprocess but no pp filter yet:
- sh->vfilter = vf = vf_open_filter(opts, vf, "pp", NULL);
- }
-
- // check if libvo and codec has common outfmt (no conversion):
- int flags = 0;
- for (;;) {
- mp_msg(MSGT_VFILTER, MSGL_V, "Trying filter chain:\n");
- vf_print_filter_chain(MSGL_V, vf);
-
- flags = vf->query_format(vf, p.imgfmt);
- mp_msg(MSGT_CPLAYER, MSGL_DBG2, "vo_debug: query(%s) returned 0x%X \n",
- vo_format_name(p.imgfmt), flags);
- if ((flags & VFCAP_CSP_SUPPORTED_BY_HW)
- || (flags & VFCAP_CSP_SUPPORTED))
- {
- break;
- }
- // TODO: no match - we should use conversion...
- if (strcmp(vf->info->name, "scale")) {
- mp_tmsg(MSGT_DECVIDEO, MSGL_INFO, "Could not find matching colorspace - retrying with -vf scale...\n");
- vf = vf_open_filter(opts, vf, "scale", NULL);
- continue;
- }
- mp_tmsg(MSGT_CPLAYER, MSGL_WARN,
- "The selected video_out device is incompatible with this codec.\n"\
- "Try appending the scale filter to your filter list,\n"\
- "e.g. -vf filter,scale instead of -vf filter.\n");
- mp_tmsg(MSGT_VFILTER, MSGL_WARN, "Attempted filter chain:\n");
- vf_print_filter_chain(MSGL_WARN, vf);
- sh->vf_initialized = -1;
- return -1; // failed
- }
- sh->vfilter = vf;
-
- // autodetect flipping
- bool flip = opts->flip;
- if (flip && !(flags & VFCAP_FLIP)) {
- // we need to flip, but no flipping filter avail.
- vf_add_before_vo(&vf, "flip", NULL);
- sh->vfilter = vf;
- flip = false;
- }
- // time to do aspect ratio corrections...
-
- float force_aspect = opts->movie_aspect;
- if (force_aspect > -1.0 && sh->stream_aspect != 0.0)
- force_aspect = sh->stream_aspect;
-
- if (force_aspect >= 0)
- vf_set_dar(&p.d_w, &p.d_h, p.w, p.h, force_aspect);
-
- if (abs(p.d_w - p.w) >= 4 || abs(p.d_h - p.h) >= 4) {
- mp_tmsg(MSGT_CPLAYER, MSGL_V, "Aspect ratio is %.2f:1 - "
- "scaling to correct movie aspect.\n", sh->aspect);
- mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", sh->aspect);
- } else {
- p.d_w = p.w;
- p.d_h = p.h;
- }
-
- // Apply user overrides
- if (opts->requested_colorspace != MP_CSP_AUTO)
- p.colorspace = opts->requested_colorspace;
- if (opts->requested_input_range != MP_CSP_LEVELS_AUTO)
- p.colorlevels = opts->requested_input_range;
- p.outputlevels = opts->requested_output_range;
-
- // Detect colorspace from resolution.
- // Make sure the user-overrides are consistent (no RGB csp for YUV, etc.).
- mp_image_params_guess_csp(&p);
-
- vocfg_flags = (flip ? VOFLAG_FLIPPING : 0);
-
- // Time to config libvo!
- mp_msg(MSGT_CPLAYER, MSGL_V, "VO Config (%dx%d->%dx%d,flags=%d,0x%X)\n",
- p.w, p.h, p.d_w, p.d_h, vocfg_flags, p.imgfmt);
-
- if (vf_reconfig_wrapper(vf, &p, vocfg_flags) < 0) {
- mp_tmsg(MSGT_CPLAYER, MSGL_WARN, "FATAL: Cannot initialize video driver.\n");
- sh->vf_initialized = -1;
- return -1;
- }
-
- mp_tmsg(MSGT_VFILTER, MSGL_V, "Video filter chain:\n");
- vf_print_filter_chain(MSGL_V, vf);
-
- sh->vf_initialized = 1;
-
- if (!sh->vf_input)
- sh->vf_input = talloc(sh, struct mp_image_params);
- *sh->vf_input = p;
-
- if (opts->gamma_gamma != 1000)
- set_video_colors(sh, "gamma", opts->gamma_gamma);
- if (opts->gamma_brightness != 1000)
- set_video_colors(sh, "brightness", opts->gamma_brightness);
- if (opts->gamma_contrast != 1000)
- set_video_colors(sh, "contrast", opts->gamma_contrast);
- if (opts->gamma_saturation != 1000)
- set_video_colors(sh, "saturation", opts->gamma_saturation);
- if (opts->gamma_hue != 1000)
- set_video_colors(sh, "hue", opts->gamma_hue);
-
- return 0;
-}