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

📄 cosd.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      if (target!=-1)
       {
        lvSwapItems(IDC_LV_OSD_LINES,target,dragitem);
        lv2osdFormat();
        dragitem=target;
       }
      return TRUE;
     }
    break;
   case WM_LBUTTONUP:
    if (dragitem!=-1)
     {
      dragitem=-1;
      ReleaseCapture();
      return TRUE;
     }
    break;
  }
 return TconfPageDec::msgProc(uMsg,wParam,lParam);
}
void TOSDpageDec::onLineUp(void)
{
 int ii=lvGetSelItem(IDC_LV_OSD_LINES);
 if (ii>=1)
  {
   lvSwapItems(IDC_LV_OSD_LINES,ii,ii-1);
   lv2osdFormat();
  }
}
void TOSDpageDec::onLineDown(void)
{
 int ii=lvGetSelItem(IDC_LV_OSD_LINES);
 if (ii!=-1 && ii<ListView_GetItemCount(hlv)-1)
  {
   lvSwapItems(IDC_LV_OSD_LINES,ii,ii+1);
   lv2osdFormat();
  }
}
void TOSDpageDec::onPresets(void)
{
 int ii=cbxGetCurSel(IDC_CBX_OSD_PRESETS);
 const char_t *curPresetName=(const char_t*)cbxGetCurItemData(IDC_CBX_OSD_PRESETS);
 const char_t *startupPresetName=cfgGetStr(IDFF_OSDstartPreset);
 enum
  {
   IDC_MNI_OSD_PRESETS_NEW       =6000,
   IDC_MNI_OSD_PRESETS_SAVEAS_NEW,
   IDC_MNI_OSD_PRESETS_RENAME,
   IDC_MNI_OSD_PRESETS_DELETE,
   IDC_MNI_OSD_PRESETS_ONSTARTUP,
   IDC_MNI_OSD_PRESETS_SAVEAS,
   IDC_MNI_OSD_PRESETS_SAVEONLY
  };
 HMENU hm=CreatePopupMenu(),hmSaveAs=NULL;
 int ord=0;
 insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_NEW,_l("New"),false);
 int size=deciD->getOSDpresetCount2();
 if (size>1)
  {
   hmSaveAs=CreatePopupMenu();
   int ord2=0;
   for (int i=0;i<size;i++)
    {
     const char_t *name2=deciD->getOSDpresetName2(i);
     if (stricmp(curPresetName,name2)!=0)
      insertMenuItem(hmSaveAs,ord2,IDC_MNI_OSD_PRESETS_SAVEAS+i,name2,false);
    }
   insertSeparator(hmSaveAs,ord2);
   insertMenuItem(hmSaveAs,ord2,IDC_MNI_OSD_PRESETS_SAVEAS_NEW,_l("New preset..."),false);
   insertSubmenu(hm,ord,_l("Save preset to..."),hmSaveAs);
  }
 else
  insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_SAVEAS_NEW,_l("Save as..."),false);
 insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_RENAME,_l("Rename preset..."),false);enable(hm,2,ii!=0);
 insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_DELETE,_l("Delete preset"),false);enable(hm,3,ii!=0);
 insertSeparator(hm,ord);
 insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_ONSTARTUP,_l("Show on startup"),stricmp(startupPresetName,curPresetName)==0);
 if (cfgGet(IDFF_OSDisSave))
  {
   insertSeparator(hm,ord);
   insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_SAVEONLY,_l("Don't display, only save data to file"),!!cfgGet(IDFF_OSDsaveOnly));
  }
 RECT r;
 GetWindowRect(GetDlgItem(m_hwnd,IDC_BT_OSD_PRESETS),&r);
 POINT p={0,r.bottom-r.top};
 ClientToScreen(GetDlgItem(m_hwnd,IDC_BT_OSD_PRESETS),&p);
 int cmd=TrackPopupMenu(_(hm),TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD,p.x,p.y,0,m_hwnd,NULL);
 PostMessage(m_hwnd,WM_NULL,0,0);
 if (cmd!=0)
  if (cmd==IDC_MNI_OSD_PRESETS_SAVEONLY)
   cfgSet(IDFF_OSDsaveOnly,1-cfgGet(IDFF_OSDsaveOnly));
  else if (cmd>=IDC_MNI_OSD_PRESETS_SAVEAS)
   {
    char_t format[256];strcpy(format,deciD->getOSDpresetFormat2(curPresetName));
    char_t newPreset[40];GetMenuString(hmSaveAs,cmd,newPreset,40,MF_BYCOMMAND);
    deciD->setOSDpresetFormat(newPreset,format);
   }
  else
   switch (cmd)
    {
     case IDC_MNI_OSD_PRESETS_RENAME:
      {
       char_t newPresetName[40];strcpy(newPresetName,curPresetName);
       if (inputString(_(-IDD_OSD,_l("New preset name")),_(-IDD_OSD,_l("Enter new preset name")),newPresetName,40))
        if (newPresetName[0] && findPreset(newPresetName)==CB_ERR)
         {
          deciD->setOSDpresetName(ii,newPresetName);
          cfgSet(IDFF_OSDcurPreset,newPresetName);
          if (strcmp(startupPresetName,curPresetName)==0)
           cfgSet(IDFF_OSDstartPreset,newPresetName);
          osds2dlg();
         }
        else
         err(_(-IDD_OSD,_l("Preset already exists")));
       break;
      }
     case IDC_MNI_OSD_PRESETS_SAVEAS_NEW:
      {
       char_t newPresetName[40];strcpy(newPresetName,curPresetName);
       if (inputString(_(-IDD_OSD,_l("New preset name")),_(-IDD_OSD,_l("Enter new preset name")),newPresetName,40))
        if (newPresetName[0] && findPreset(newPresetName)==CB_ERR)
         {
          char_t format[256];strcpy(format,deciD->getOSDpresetFormat2(curPresetName));
          deciD->addOSDpreset(newPresetName,format);
          cfgSet(IDFF_OSDcurPreset,newPresetName);
          osds2dlg();
         }
        else
         err(_(-IDD_OSD,_l("Preset already exists")));
       break;
      }
     case IDC_MNI_OSD_PRESETS_DELETE:
      if (MessageBox(m_hwnd,_(-IDD_OSD,_l("Do you really want to delete current OSD preset?")),_(-IDD_OSD,_l("Delete preset")),MB_ICONQUESTION|MB_YESNO)==IDYES)
       {
        deciD->deleteOSDpreset(curPresetName);
        cfgSet(IDFF_OSDcurPreset,_l("default"));
        if (strcmp(curPresetName,startupPresetName)==0)
         cfgSet(IDFF_OSDstartPreset,_l(""));
        osds2dlg();
       }
      break;
     case IDC_MNI_OSD_PRESETS_NEW:
      {
       char_t newPresetName[40]=_l("");
       if (inputString(_(-IDD_OSD,_l("New preset name")),_(-IDD_OSD,_l("Enter new preset name")),newPresetName,40))
        if (newPresetName[0] && findPreset(newPresetName)==CB_ERR)
         {
          deciD->addOSDpreset(newPresetName,_l(""));
          cfgSet(IDFF_OSDcurPreset,newPresetName);
          osds2dlg();
         }
        else
         err(_(-IDD_OSD,_l("Preset already exists")));
       break;
      }
     case IDC_MNI_OSD_PRESETS_ONSTARTUP:
      {
       if (stricmp(startupPresetName,curPresetName)==0)
        {
         cfgSet(IDFF_OSDstartPreset,_l(""));
         osds2dlg();
        }
       else
        {
         char_t durationS[20];_itoa(cfgGet(IDFF_OSDstartDuration),durationS,10);
         if (inputString(_(-IDD_OSD,_l("Startup OSD preset")),_(-IDD_OSD,_l("Number of frames to show preset")),durationS,20))
          {
           cfgSet(IDFF_OSDstartPreset,curPresetName);
           deci->putParam(IDFF_OSDstartDuration,atoi(durationS));
           osds2dlg();
          }
        }
       break;
      }
    }
 DestroyMenu(hm);
}
void TOSDpageDec::onSave(void)
{
 char_t flnm[MAX_PATH];cfgGet(IDFF_OSDsaveFlnm,flnm,MAX_PATH);
 if (dlgGetFile(true,m_hwnd,_(-IDD_OSD,_l("File where to write statistics")),_l("Comma delimited (*.csv)\0*.csv\0"),_l("csv"),flnm,_l("."),0))
  {
   setDlgItemText(m_hwnd,IDC_ED_OSD_SAVE,flnm);
   cfgSet(IDFF_OSDsaveFlnm,flnm);
  }
}

void TOSDpageDec::applySettings(void)
{
 char_t flnm[MAX_PATH];
 GetDlgItemText(m_hwnd,IDC_ED_OSD_SAVE,flnm,MAX_PATH);
 cfgSet(IDFF_OSDsaveFlnm,flnm);
}

void TOSDpageDec::translate(void)
{
 TconfPageDec::translate();

 nostate=true;
 ListView_DeleteAllItems(hlv);
 for (int i=0;;i++)
  {
   LVITEM lvi;memset(&lvi,0,sizeof(lvi));
   lvi.mask=LVIF_TEXT|LVIF_PARAM;
   lvi.iItem=i+1;
   const char_t *text;
   if (deci->getInfoItem(i,(int*)&lvi.lParam,&text)!=S_OK)
    break;
   lvi.pszText=const_cast<char_t*>(_(IDC_LV_OSD_LINES,text));
   ListView_InsertItem(hlv,&lvi);
  }
 nostate=false;
}

TOSDpageDec::TOSDpageDec(TffdshowPageDec *Iparent):TconfPageDec(Iparent,NULL,0)
{
 dialogId=IDD_OSD;
 idffInter=IDFF_isOSD;resInter=IDC_CHB_OSD;
 static const TbindCheckbox<TOSDpageDec> chb[]=
  {
   IDC_CHB_OSD_SAVE,IDFF_OSDisSave,&TOSDpageDec::save2dlg,
   0,NULL,NULL
  };
 bindCheckboxes(chb);
 static const TbindTrackbar<TOSDpageDec> htbr[]=
  {
   IDC_TBR_OSD_POSX,IDFF_OSDposX,&TOSDpageDec::pos2dlg,
   IDC_TBR_OSD_POSY,IDFF_OSDposY,&TOSDpageDec::pos2dlg,
   0,0,NULL
  };
 bindHtracks(htbr);
 static const TbindCombobox<TOSDpageDec> cbx[]=
  {
   IDC_CBX_OSD_PRESETS,IDFF_OSDcurPreset,BINDCBX_DATATEXT,&TOSDpageDec::osd2dlg,
   0
  };
 bindComboboxes(cbx);
 static const TbindButton<TOSDpageDec> bt[]=
  {
   IDC_BT_OSD_LINE_UP,&TOSDpageDec::onLineUp,
   IDC_BT_OSD_LINE_DOWN,&TOSDpageDec::onLineDown,
   IDC_BT_OSD_PRESETS,&TOSDpageDec::onPresets,
   IDC_BT_OSD_SAVE,&TOSDpageDec::onSave,
   0,NULL
  };
 bindButtons(bt);
}

//================================ TOSDpageDecVideo ================================
bool TOSDpageVideo::reset(bool testonly)
{
 if (!testonly)
  comptrQ<IffdshowDecVideo>(deciD)->resetOSD();
 return true;
}

//================================ TOSDpageDecAudio ================================
void TOSDpageAudio::init(void)
{
 TOSDpageDec::init();

 static const int idPos[]={IDC_LBL_OSD_POSX,IDC_TBR_OSD_POSX,IDC_LBL_OSD_POSY,IDC_TBR_OSD_POSY,0};
 enable(0,idPos);
}

⌨️ 快捷键说明

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