#!/usr/bin/python
# coding: UTF-8
# Rec10 TS Recording Tools
# Copyright (C) 2009 Yukikaze
import time
import chdb
import configreader
import datetime
import os
import re
import ts2x264
import ts2xvid
import tv2ts
import recdb

global Bitrate_HD
global Bitrate_FHD
global Bitrate_SD
global Bitrate_WQVGA
Bitrate_HD="2000"
Bitrate_FHD="2500"
Bitrate_SD="1250"
Bitrate_WQVGA="200"

def timetv2avi(pout, chtxt, btime, etime,opt):
    bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
    et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
    extt = os.path.splitext(pout)
    tsout = extt[0]
    #tsout=pout####
    #print "4"+tsout
    tnow = datetime.datetime.now()
    wt = bt-tnow
    waitt = wt.seconds-5
    time.sleep(waitt)
    tnow = datetime.datetime.now()
    dt = et-tnow
    rectime = dt.seconds-10
    rectime = str(rectime)
    #print tsout+".ts,"+chdb.chtxtsearch(chtxt)['ch']+","+chdb.chtxtsearch(chtxt)['csch']+","+rectime
    tv2ts.tv2ts(tsout + ".ts", chdb.chtxtsearch(chtxt)['ch'], chdb.chtxtsearch(chtxt)['csch'], rectime)
    aviin = tsout + ".ts"
    dualaudio = 0
    pentaaudio = 0
    if re.search("5",opt):
        pentaaudio = 1
    if re.search("d",opt):
        dualaudio = 1
    if re.search("\[二\]", pout):
        dualaudio = 1
    elif re.search('（二）', pout):
        dualaudio = 1
    elif re.search('\(二\)', pout):
        dualaudio = 1
    if opt=="":
        opts=""
        if chdb.chtxtsearch(chtxt)['bctype'] == 'cs':
            opts=opts+"S2"
            if chtxt == "disch":
                ""
            elif chtxt == "hisch":
                ""
            else:
                opts=opts+"a"
        else:
            opts=opts+"Ha2"
    else:
        opts=opt
    if re.search("x",opt):
        makexvid = 0
    else:
        makexvid = 1
    if dualaudio == 1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    if pentaaudio ==1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    """
    if makexvid==1:
        ts2xvid.ts2xvid(aviin, pout,opts)
    else:
        ts2x264.ts2x264(aviin, pout,opts)
        """
    bt=datetime.datetime.now()+datetime.timedelta(seconds=600)
    btime=bt.strftime("%Y-%m-%d %H:%M:%S")
    et=datetime.datetime.now()+datetime.timedelta(seconds=600)
    etime=et.strftime("%Y-%m-%d %H:%M:%S")
    title=os.path.split(tsout)[1]
    #try:
    #    os.remove(aviin)
    #except:
    #    ""
def tv2avi(pout, chtxt, btime, etime,opt):
    bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
    et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
    dt = et-bt
    time = dt.seconds-10
    time = str(time)
    extt = os.path.splitext(pout)
    tsout = extt[0]
    #tsout=pout####
    #print "4"+tsout
    #print tsout+".ts,"+chdb.chtxtsearch(chtxt)['ch']+","+chdb.chtxtsearch(chtxt)['csch']+","+time
    tv2ts.tv2ts(tsout + ".ts", chdb.chtxtsearch(chtxt)['ch'], chdb.chtxtsearch(chtxt)['csch'], time)
    aviin = tsout + ".ts"
    dualaudio = 0
    pentaaudio = 0 
    if re.search("5",opt):
        pentaaudio = 1
    if re.search("d",opt):
        dualaudio = 1
    if re.search('\[二\]', pout):
        dualaudio = 1
    elif re.search('（二）', pout):
        dualaudio = 1
    elif re.search('\(二\)', pout):
        dualaudio = 1
    opts=""
    if chdb.chtxtsearch(chtxt)['bctype'] == 'cs':
        opts=opts+"S2"
        if chtxt == "disch":
            ""
        elif chtxt == "hisch":
            ""
        else:
            opts=opts+"a"
    else:
        opts=opts+"Ha2"
    if dualaudio == 1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    if pentaaudio ==1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    ts2x264.ts2x264(aviin, pout,opts)
    #os.remove(aviin)
def b252avi(pout, chtxt,opt):
    #bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
    #et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
    extt = os.path.splitext(pout)
    tsout = extt[0]
    #tsout=pout####
    #print "4"+tsout
    #tnow = datetime.datetime.now()
    #wt = bt-tnow
    #waitt = wt.seconds-5
    #time.sleep(waitt)
    #tnow = datetime.datetime.now()
    #dt = et-tnow
    #rectime = dt.seconds-10
    #rectime = str(rectime)
    tv2ts.b252ts(tsout + ".ts", chdb.chtxtsearch(chtxt)['ch'], chdb.chtxtsearch(chtxt)['csch'])
    #tv2ts.tv2ts(tsout + ".ts", chdb.chtxtsearch(chtxt)['ch'], chdb.chtxtsearch(chtxt)['csch'], rectime)
    aviin = tsout + ".ts"
    dualaudio = 0
    pentaaudio = 0
    if re.search("5",opt):
        pentaaudio = 1
    if re.search("d",opt):
        dualaudio = 1
    if re.search('\[二\]', pout):
        dualaudio = 1
    elif re.search('（二）', pout):
        dualaudio = 1
    elif re.search('\(二\)', pout):
        dualaudio = 1
    if opt=="":
        opts=""
        if chdb.chtxtsearch(chtxt)['bctype'] == 'cs':
            opts=opts+"S2"
            if chtxt == "disch":
                ""
            elif chtxt == "hisch":
                ""
            else:
                opts=opts+"a"
        else:
            opts=opts+"Ha2"
    else:
        opts=opt
    if re.search("x",opt):
        makexvid = 0
    else:
        makexvid = 1
    if dualaudio == 1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    if pentaaudio ==1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    if makexvid==1:
        ts2xvid.ts2xvid(aviin, pout,opts)
    else:
        ts2x264.ts2x264(aviin, pout,opts)
    #try:
    #    os.remove(aviin)
    #except:
    #    ""

    """
    pout = pout.encode('utf-8')
    extt = os.path.splitext(pout)
    tsout = extt[0]
    #print tsout+".ts,"+chdb.chtxtsearch(chtxt)['ch']+","+chdb.chtxtsearch(chtxt)['csch']+","+time
    tv2ts.b252ts(tsout + ".ts", chdb.chtxtsearch(chtxt)['ch'], chdb.chtxtsearch(chtxt)['csch'])
    aviin = tsout + ".ts"
    dualaudio = 0
    if re.search("d",opt):
        dualaudio = 1
    if re.search('\[二\]', pout):
        dualaudio = 1
    elif re.search('（二）', pout):
        dualaudio = 1
    elif re.search('\(二\)', pout):
        dualaudio = 1
    opts=""
    if chdb.chtxtsearch(chtxt)['bctype'] == 'cs':
        opts=opts+"S2"
        if chtxt == "disch":
            ""
        elif chtxt == "hisch":
            ""
        else:
            opts=opts+"a"
    else:
        opts=opts+"Ha2"
    if dualaudio == 1:
        dualaudiots2avi(aviin, tsout + "sa.avi")
        aviin = tsout + "sa.avi"
    ts2x264.ts2x264(aviin, pout,opts)
    #os.remove(aviin)

    """

def dualaudiots2avi(pin, pout):
    bontsdemux = configreader.getpath('bontsdemux')
    wine = configreader.getpath('wine')
    cmdwine = configreader.getpath('cmdwine')
    bonpin = "Z:\\" + pin[1:]
    outf = os.path.splitext(pin)[0]
    bonpout = "Z:\\" + outf[1:]
    exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" -delay 167 -nd -sound 0 -o \"" + bonpout + "\" -start -quit"
    #print exe
    exe = 'xvfb-run -a ' + exe
    #exe='export Display=:2&&'+exe
    print exe
    os.system(exe)
    ffpin1 = pin.replace("ts", "wav")
    ffpin2 = pin.replace("ts", "m2v")
    exe = "ffmpeg -y  -i \'" + ffpin1 + "\' -i \'" + ffpin2 + "\' -r 29.97 -vsync 200 -vcodec copy -acodec libmp3lame -async 200 -ab 128k -f avi  \'" + pout + "\'"
    #print exe
    os.system(exe)
    os.remove(ffpin1)
    os.remove(ffpin2)

def pentaaudiots2avi(pin, pout):
    bontsdemux = configreader.getpath('bontsdemux')
    wine = configreader.getpath('wine')
    cmdwine = configreader.getpath('cmdwine')
    bonpin = "Z:\\" + pin[1:]
    outf = os.path.splitext(pin)[0]
    bonpout = "Z:\\" + outf[1:]
    exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" -delay 167 -nd -sound 3 -o \"" + bonpout + "\" -start -quit"
    #print exe
    exe = 'xvfb-run -a ' + exe
    #exe='export Display=:2&&'+exe
    print exe
    os.system(exe)
    ffpin1 = pin.replace("ts", "wav")
    ffpin2 = pin.replace("ts", "m2v")
    exe = "ffmpeg -y  -i \'" + ffpin1 + "\' -i \'" + ffpin2 + "\' -r 29.97 -vsync 200 -vcodec copy -acodec libmp3lame -async 200 -ab 128k -f avi  \'" + pout + "\'"
    #print exe
    os.system(exe)
    os.remove(ffpin1)
    os.remove(ffpin2)

