⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel.c

📁 Sunplus 8202S source code.
💻 C
字号:
//
// FILE
// kernel.c
//
// DESCRIPTION
// kernel interface
//
#include "config.h"
#include "regmap.h"
#include "global.h"
#include "avd.h"
#include "avdctrl.h"
#include "vpp.h"
#include "tvif.h"
#include "aspect.h"

#include "kernel.h"
#include "kinf.h"
#ifdef PNGPIO_CON_TFT
#include "gpio.h"
#endif
#ifdef SUPPORT_SPI
#include "spi.h"
#endif
#ifdef DVD_SETUP_REENG
#include "setup_VA.h"
#include "setup_def.h"
#endif
#ifndef DVDRELEASE
//#define KERNEL_DBG
#endif

#define kern_puts(s)            ((void)0)
#define kern_printf(s...)       ((void)0)
#define kern_show_function()    ((void)0)

#ifdef  KERNEL_DBG
#include "sio.h"
#include "emuio.h"
#include"spv301.h"
#undef  kern_puts
#undef  kern_printf
#undef  kern_show_function
#define kern_puts               puts_w
#define kern_printf             printf_w
#define kern_show_function()    do {kern_puts(__FUNCTION__); kern_puts("\n"); } while (0)
#define MONE_TVSETUP
//#define MONE_SIZECHG
#endif


UINT8   Ksetup_tv_format=0xFF;          // PAL / NTSC / ..
UINT8   Ksetup_tv_aspect=0xFF;          // 0:4:3 1:16:9
UINT8   Ksetup_jpeg_h_aspect=0xFF;          // 0:4:3 1:16:9
UINT8   Ksetup_jpeg_v_aspect=0xFF;          // 0:4:3 1:16:9


//
// FUNCTION
// setup_decode_service
//

void
setup_decode_service(int srv)
{
  switch (srv)
  {
    case SERVICE_ROMV:
      srv_kernel = srv_rom; break;
    case SERVICE_CDDA:
      srv_kernel = srv_cdda; break;

#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
    case SERVICE_CARDFILE:
        {
            extern int srv_cardfile(void);
            srv_kernel = srv_cardfile;
        }
        break;
#endif
#ifdef	SUPPORT_STREAM_BUFFER
    case SERVICE_STREAMING:
        {
            extern int srv_stream(void);
            srv_kernel = srv_stream;
        }
        break;
#endif
    case SERVICE_CD:
    default:
      srv_kernel = srv_cd; break;
  }
}


void
setup_clock_gating(int onoff)
{
    kernel_clock_gating = onoff;
}

void
setup_error_concealment(int onoff)
{
    kernel_error_concealment = onoff;
}

void
enable_portable_bonding(UINT8 onoff)
{
	kernel_portable_bonding = onoff;
}

void
setup_error_mb_limit(int n)
{
    kernel_error_mb_threshold = n;
}


//
// FUNCTION
// setup_tv_format(tvfmt)
//
// DESCRIPTION
// setup TV format
// see kernel.h for supported formats
// if auto then adjust TV format according to current decoding format.
//
void
setup_tv_format(int tvfmt)
{
    #ifdef SUPPORT_FUNCTION_MENU
    #ifdef SUPPORT_SPI
    if(((pdvd_mode == PDVD_MODE) && (tvfmt != TV_FORMAT_NTSC)) || (pdvd_timer))
      return;
    #endif
    #endif
#ifdef ADD_DVI311_SETUP//@Kevin For outo set 2k40525
static unsigned char format_change_sign=0x84;
format_change_sign=dvi311_tv_mode;
#endif

    // now update system tv-format
    if (tvfmt==TV_FORMAT_AUTO && is_avd_tv_auto())
    {
        unsigned decfmt = get_decode_format();
        if (decfmt==DECODE_FORMAT_525)
		{
			tvfmt=TV_FORMAT_525_DEFAULT;
			#ifdef ADD_DVI311_SETUP
			dvi311_tv_mode=0x85;    //kevin@2k40517
			#endif
		}
#ifdef GBM_FORCE_PAL_OUTPUT_NTSC_WHEN_PALM_PALN_AUTO		//gerry,2004-2-10 15:04
        else if (decfmt==DECODE_FORMAT_625)
		{
			tvfmt=TV_FORMAT_525_DEFAULT;
			#ifdef ADD_DVI311_SETUP
			dvi311_tv_mode=0x85;    //kevin@2k40517
			#endif
		}
#else//GBM_FORCE_PAL_OUTPUT_NTSC_WHEN_PALM_PALN_AUTO
        else if (decfmt==DECODE_FORMAT_625)
		{
			tvfmt=TV_FORMAT_625_DEFAULT;
			#ifdef ADD_DVI311_SETUP
			dvi311_tv_mode=0x84;    //kevin@2k40517
			#endif
		}
#endif//GBM_FORCE_PAL_OUTPUT_NTSC_WHEN_PALM_PALN_AUTO
    }

    // force initial selection when tvfmt==AUTO
    if (Ksetup_tv_format==0xFF && tvfmt==TV_FORMAT_AUTO)
    {
        tvfmt=TV_FORMAT_AUTO_DEFAULT;
#ifdef ADD_DVI311_SETUP
dvi311_tv_mode=0x84;    //kevin@2k40517
#endif
    }

#ifdef ADD_DVI311_SETUP
if(format_change_sign!=dvi311_tv_mode)
    {   
        if(dvi311_tv_mode>0x84 && dvi311_mode==Mode_576P)// NTSC and 480P   @kevin 2k40708
            dvi311_mode=Mode_480P;
        if(dvi311_tv_mode==0x84 && dvi311_mode==Mode_480P)// PAL and 576P   @kevin 2k40708
            dvi311_mode=Mode_576P;
        #ifdef DVD_SETUP_REENG//Modifed by chenzhao on 2004-11-24 21:8   
            setup_VA[SETUP_VA_SPV311MODE]=dvi311_mode+MIN_ITEM_SEL;
        #endif
	scaler_main();
    }
#endif

    // setup tvfmt.
    if (tvfmt!=TV_FORMAT_AUTO && tvfmt!=Ksetup_tv_format)
    {
        int line625;

        Ksetup_tv_format = tvfmt;

#ifdef	MONE_TVSETUP
        kern_printf("\t %x\n", tvfmt);
#endif

        if (tvfmt==TV_FORMAT_PAL)
        {
            line625 = 1;
            #ifdef PNGPIO_CON_TFT//reset gpio59
            PAL_SET();
            #ifdef EASTWIN
            init_an2526h_pal();
            #endif
            #endif
            tv_setup_pal();
        }
#ifdef  SUPPORT_PALN
        else if (tvfmt==TV_FORMAT_PALN)
        {
            line625 = 1;
            tv_setup_pal_n();
        }
#endif
#ifdef  SUPPORT_PALNc
        else if (tvfmt==TV_FORMAT_PALNC)
        {
            line625 = 1;
            tv_setup_pal_nc();
        }
#endif
#ifdef  SUPPORT_PALM
        else if (tvfmt==TV_FORMAT_PALM)
        {
            line625 = 0;
            tv_setup_pal_m();
        }
#endif
#ifdef  SUPPORT_PAL60
        else if (tvfmt==TV_FORMAT_PAL60)
        {
            line625 = 0;
            #ifdef PNGPIO_CON_TFT //gpio59 is set high
            PAL_SET();
            #ifdef EASTWIN
            init_an2526h_pal();
            #endif
            #endif
            tv_setup_pal60();
        }
#endif
#ifdef  SUPPORT_NTSCJ
        else if (tvfmt==TV_FORMAT_NTSCJ)
        {
            line625 = 0;
            tv_setup_ntscj();
        }
#endif
        else                // default to support NTSC
        {
            line625 = 0;
            #ifdef PNGPIO_CON_TFT //gpio59 is set high
            NTSC_SET();
            #ifdef EASTWIN
            init_an2526h_ntsc();
            #endif
            #endif
            tv_setup_ntsc();
        }
        setVPP_TVformat(line625);

        dis_field_cntr = 0;
        dec_field_cntr = 0;

#ifdef SUPPORT_MP4
		frctl_set_display_rate();
		frctl_clear_count();
#endif
    }

#ifdef GBM_DEFAULT_NTSC_CAPTION_OFF			//gerry,2004-2-13 14:18
	tv_l21_enable(0);
#endif//GBM_DEFAULT_NTSC_CAPTION_OFF

}


//
//
//
void
setup_tv_aspect(int aspect)
{
    if (aspect!=Ksetup_tv_aspect)
    {
        Ksetup_tv_aspect = aspect;
        tv_setup_aspect(aspect);
    }
}


//
//
void
setup_display_brightness(int br)
{
    setVPP_YOffset(br);
}


//
// FUNCTION
// setup_display_format
//
void
setup_display_format(int __hsize, int __vsize, int __src_aspect, int __zoom, int __progressive)
{
    set_vpp_src_aspect(__src_aspect);               // set video-source aspect-ratio
    setVPP_PictureSize(__hsize, __vsize);       // set-size
    if (__progressive)                          // progressive?
    {
        setVPP_chroma_vint_frame();             // chroma: full-frame
        setVPP_luma_vint_frame();               // luma: full-frame
    }
    else
    {
        setVPP_chroma_vint_field();             // chroma: previous-line
        setVPP_luma_vint_field();               // luma: current field
    }
    setVPP_Display(__zoom);                     // other display parameters
}



//
//
//

void set_jpeg_aspect_ratio(int h_ratio, int v_ratio)
{

Ksetup_jpeg_h_aspect = h_ratio;
Ksetup_jpeg_v_aspect = v_ratio;

}


void
set_jpeg_pic_size(int __hsize, int __vsize, int __zoom)
{
    kern_printf("set_jpeg_pic_size(%d,%d,%d);\n", __hsize, __vsize, __zoom);
    setVPP_ExpansionMode(VPP_EXPANSION_ASPECT);
    setup_display_format(__hsize, __vsize, PIXEL_ASPECT_ALMOST_FULL, __zoom, 1);
    set_jpeg_aspect_ratio(240,240); // max 255;
    setVPP_DoItNow();
}


UINT16  old_hsize;
UINT16  old_vsize;


//
// FUNCTION
// void set_dis_pic_size(h,v)
//
// DESCRIPTION
// generic vpp setup
// setup video according to
//  __hsize,
//  __vsize,
//
// will depends on following characterists
//  preview?
//  vpp_zoom
//  tv_format
//  mode_aspect
//
void
set_dis_pic_size(int __hsize, int __vsize)
{
    int __zoom;
    int __progressive;
    int __src_aspect;
    int __out_aspect;

#ifdef MONE_SIZECHG
    if (old_hsize!=__hsize || old_vsize!=__vsize) {
        printf_nw("change resolution to %dx%d\n", __hsize, __vsize);
    }
#endif

    //
    old_hsize = __hsize;
    old_vsize = __vsize;

    //
    // fix parameter for PREVIEW mode
    if (IsAVDPreview()) {
        // PREVIEW
        __hsize         = 720;          // override fixed size
        __vsize         = 480;
        __zoom          = 0;
        __src_aspect    = ASPECT_4_3;
        __out_aspect    = OUTPUT_ASPECT_NORMAL;
    } else {
        // NORMAL
        __zoom          = vpp_zoom;
        __src_aspect    = mode_aspect;
        __out_aspect    = get_output_aspect();
    }
    __progressive = 1;

    // Setup TV format
    setup_tv_format(tv_format);

    // Setup TV output-aspect (wss signal)
    setup_tv_aspect(__out_aspect);

    // Setup VPP expansion mode
    setVPP_ExpansionMode(VPP_EXPANSION_FIXED);

    // Setup VPP parameters (size, aspect and zoom)
    setup_display_format(__hsize,__vsize,__src_aspect,__zoom,__progressive);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -