summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dec_video.c52
-rw-r--r--mplayer.c87
2 files changed, 139 insertions, 0 deletions
diff --git a/dec_video.c b/dec_video.c
index 8724c1a0aa..b6474e49ed 100644
--- a/dec_video.c
+++ b/dec_video.c
@@ -84,6 +84,58 @@ void convert_linux(unsigned char *puc_y, int stride_y,
}
#endif
+int get_video_quality_max(sh_video_t *sh_video){
+ switch(sh_video->codec->driver){
+#ifdef USE_DIRECTSHOW
+ case VFM_DSHOW:
+ return 4;
+#endif
+#ifdef MPEG12_POSTPROC
+ case VFM_MPEG:
+#endif
+ case VFM_DIVX4:
+ case VFM_ODIVX:
+ return 6;
+ }
+ return 0;
+}
+
+void set_video_quality(sh_video_t *sh_video,int quality){
+ switch(sh_video->codec->driver){
+#ifdef ARCH_X86
+#ifdef USE_DIRECTSHOW
+ case VFM_DSHOW: {
+ if(quality<0 || quality>4) quality=4;
+ DS_SetValue_DivX("Quality",quality);
+ }
+ break;
+#endif
+#endif
+#ifdef MPEG12_POSTPROC
+ case VFM_MPEG: {
+ if(quality<0 || quality>6) quality=6;
+ picture->pp_options=(1<<quality)-1;
+ }
+ break;
+#endif
+ case VFM_DIVX4:
+ case VFM_ODIVX: {
+ DEC_SET dec_set;
+ if(quality<0 || quality>6) quality=6;
+ dec_set.postproc_level=(1<<quality)-1;
+ decore(0x123,DEC_OPT_SETPP,&dec_set,NULL);
+ }
+ break;
+ }
+}
+
+int set_video_colors(sh_video_t *sh_video,char *item,int value){
+ if(!strcmp(sh_video->codec->name,"divxds")){
+ DS_SetValue_DivX(item,value);
+ return 1;
+ }
+ return 0;
+}
int init_video(sh_video_t *sh_video){
unsigned int out_fmt=sh_video->codec->outfmt[sh_video->outfmtidx];
diff --git a/mplayer.c b/mplayer.c
index fcf8c3fc89..a8deb9485d 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -173,6 +173,10 @@ int read_asf_header(demuxer_t *demuxer);
demuxer_t* demux_open(stream_t *stream,int file_format);
int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
+int get_video_quality_max(sh_video_t *sh_video);
+void set_video_quality(sh_video_t *sh_video,int quality);
+int set_video_colors(sh_video_t *sh_video,char *item,int value);
+
// MPEG video stream parser:
#include "parse_es.h"
@@ -227,6 +231,7 @@ extern void avi_fixate();
// options:
int osd_level=2;
int divx_quality=0;
+int auto_quality=-1;
char *seek_to_sec=NULL;
off_t seek_to_byte=0;
int has_audio=1;
@@ -461,6 +466,11 @@ int osd_visible=100;
int osd_function=OSD_PLAY;
int osd_last_pts=-303;
+int v_bright=50;
+int v_cont=50;
+int v_hue=50;
+int v_saturation=50;
+
//float a_frame=0; // Audio
float rel_seek_secs=0;
@@ -1565,6 +1575,83 @@ if(1)
case 'm':
mixer_usemaster=!mixer_usemaster;
break;
+
+ // Contrast:
+ case '1':
+ case '2':
+ if(c=='2'){
+ if ( v_cont++ > 100 ) v_cont = 100;
+ } else {
+ if ( v_cont-- < 0 ) v_cont = 0;
+ }
+ if(set_video_colors(sh_video,"Contrast",v_cont)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_CONTRAST;
+ vo_osd_progbar_value=(v_cont)*10/4;
+ }
+#endif
+ }
+ break;
+
+ // Brightness:
+ case '3':
+ case '4':
+ if(c=='4'){
+ if ( v_bright++ > 100 ) v_bright = 100;
+ } else {
+ if ( v_bright-- < 0 ) v_bright = 0;
+ }
+ if(set_video_colors(sh_video,"Brightness",v_bright)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_BRIGHTNESS;
+ vo_osd_progbar_value=(v_bright)*10/4;
+ }
+#endif
+ }
+ break;
+
+ // Hue:
+ case '5':
+ case '6':
+ if(c=='6'){
+ if ( v_hue++ > 100 ) v_hue = 100;
+ } else {
+ if ( v_hue-- < 0 ) v_hue = 0;
+ }
+ if(set_video_colors(sh_video,"Hue",v_hue)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_HUE;
+ vo_osd_progbar_value=(v_hue)*10/4;
+ }
+#endif
+ }
+ break;
+
+ // Saturation:
+ case '7':
+ case '8':
+ if(c=='8'){
+ if ( v_saturation++ > 100 ) v_saturation = 100;
+ } else {
+ if ( v_saturation-- < 0 ) v_saturation = 0;
+ }
+ if(set_video_colors(sh_video,"Saturation",v_saturation)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_SATURATION;
+ vo_osd_progbar_value=(v_saturation)*10/4;
+ }
+#endif
+ }
+ break;
+
case 'd':
frame_dropping=(frame_dropping+1)%3;
printf("== drop: %d == \n",frame_dropping);