134 files changed, 31073 insertions, 30287 deletions
diff --git a/tvapi/libtv/tv/CTvRecord.cpp b/tvapi/libtv/tv/CTvRecord.cpp index 0327c96..564f4f3 100644 --- a/tvapi/libtv/tv/CTvRecord.cpp +++ b/tvapi/libtv/tv/CTvRecord.cpp @@ -25,252 +25,252 @@ #define DVR_DEV_COUNT (2) typedef struct { - int id; - char file_name[256]; - pthread_t thread; - int running; - int fd; + int id; + char file_name[256]; + pthread_t thread; + int running; + int fd; } DVRData; static DVRData data_threads[DVR_DEV_COUNT]; int pvr_init = 0; CTvRecord::CTvRecord() { - AM_DVR_OpenPara_t dpara; - memset(&dpara, 0, sizeof(dpara)); - AM_DVR_Open(DVR_DEV_NO, &dpara); - data_threads[DVR_DEV_NO].id = 0; - data_threads[DVR_DEV_NO].fd = -1; - data_threads[DVR_DEV_NO].running = 0; - - AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0); - AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE); - - memset(filename, 0, sizeof(filename)); - progid = 0xFFFF; - vpid = 0x1fff; - apid = 0x1fff; + AM_DVR_OpenPara_t dpara; + memset(&dpara, 0, sizeof(dpara)); + AM_DVR_Open(DVR_DEV_NO, &dpara); + data_threads[DVR_DEV_NO].id = 0; + data_threads[DVR_DEV_NO].fd = -1; + data_threads[DVR_DEV_NO].running = 0; + + AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0); + AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE); + + memset(filename, 0, sizeof(filename)); + progid = 0xFFFF; + vpid = 0x1fff; + apid = 0x1fff; } CTvRecord::~CTvRecord() { - AM_DVR_Close(DVR_DEV_NO); + AM_DVR_Close(DVR_DEV_NO); } void CTvRecord::dvr_init(void) { - AM_DVR_OpenPara_t para; - char buf[32]; + AM_DVR_OpenPara_t para; + char buf[32]; - if (pvr_init) - return; + if (pvr_init) + return; - memset(¶, 0, sizeof(para)); - LOGD("%s,%d", "TV", __LINE__); + memset(¶, 0, sizeof(para)); + LOGD("%s,%d", "TV", __LINE__); - AM_DVR_Open(DVR_DEV_NO, ¶); - AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0); - AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE); + AM_DVR_Open(DVR_DEV_NO, ¶); + AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0); + AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE); - snprintf(buf, sizeof(buf), "%d", (512 * 1024)); - AM_FileEcho("/sys/class/dmx/asyncfifo_len", buf); + snprintf(buf, sizeof(buf), "%d", (512 * 1024)); + AM_FileEcho("/sys/class/dmx/asyncfifo_len", buf); - pvr_init = 1; + pvr_init = 1; } char *CTvRecord::GetRecordFileName() { - return filename; + return filename; } void CTvRecord::SetRecordFileName(char *name) { - strcpy(filename, name); + strcpy(filename, name); } void CTvRecord::SetCurRecProgramId(int id) { - progid = id; + progid = id; } int CTvRecord::dvr_data_write(int fd, uint8_t *buf, int size) { - int ret; - int left = size; - uint8_t *p = buf; - LOGD("%s,%d", "TV", __LINE__); - - while (left > 0) { - ret = write(fd, p, left); - if (ret == -1) { - if (errno != EINTR) { - LOGD("Write DVR data failed: %s", strerror(errno)); - break; - } - ret = 0; - } - - left -= ret; - p += ret; - } - - return (size - left); + int ret; + int left = size; + uint8_t *p = buf; + LOGD("%s,%d", "TV", __LINE__); + + while (left > 0) { + ret = write(fd, p, left); + if (ret == -1) { + if (errno != EINTR) { + LOGD("Write DVR data failed: %s", strerror(errno)); + break; + } + ret = 0; + } + + left -= ret; + p += ret; + } + + return (size - left); } void *CTvRecord::dvr_data_thread(void *arg) { - DVRData *dd = (DVRData *)arg; - int cnt; - uint8_t buf[256 * 1024]; - - LOGD("Data thread for DVR%d start ,record file will save to '%s'", dd->id, dd->file_name); - LOGD("%s,%d", "TV", __LINE__); - - while (dd->running) { - cnt = AM_DVR_Read(dd->id, buf, sizeof(buf), 1000); - if (cnt <= 0) { - LOGD("No data available from DVR%d", dd->id); - usleep(200 * 1000); - continue; - } - //AM_DEBUG(1, "read from DVR%d return %d bytes", dd->id, cnt); - if (dd->fd != -1) { - dvr_data_write(dd->fd, buf, cnt); - } - } - - if (dd->fd != -1) { - close(dd->fd); - dd->fd = -1; - } - LOGD("Data thread for DVR%d now exit", dd->id); - - return NULL; + DVRData *dd = (DVRData *)arg; + int cnt; + uint8_t buf[256 * 1024]; + + LOGD("Data thread for DVR%d start ,record file will save to '%s'", dd->id, dd->file_name); + LOGD("%s,%d", "TV", __LINE__); + + while (dd->running) { + cnt = AM_DVR_Read(dd->id, buf, sizeof(buf), 1000); + if (cnt <= 0) { + LOGD("No data available from DVR%d", dd->id); + usleep(200 * 1000); + continue; + } + //AM_DEBUG(1, "read from DVR%d return %d bytes", dd->id, cnt); + if (dd->fd != -1) { + dvr_data_write(dd->fd, buf, cnt); + } + } + + if (dd->fd != -1) { + close(dd->fd); + dd->fd = -1; + } + LOGD("Data thread for DVR%d now exit", dd->id); + + return NULL; } void CTvRecord::start_data_thread(int dev_no) { - DVRData *dd = &data_threads[dev_no]; - - if (dd->running) - return; - LOGD("%s,%d,dev=%d", "TV", __LINE__, dev_no); - dd->fd = open(dd->file_name, O_TRUNC | O_WRONLY | O_CREAT, 0666); - if (dd->fd == -1) { - LOGD("Cannot open record file '%s' for DVR%d, %s", dd->file_name, dd->id, strerror(errno)); - return; - } - dd->running = 1; - pthread_create(&dd->thread, NULL, dvr_data_thread, dd); + DVRData *dd = &data_threads[dev_no]; + + if (dd->running) + return; + LOGD("%s,%d,dev=%d", "TV", __LINE__, dev_no); + dd->fd = open(dd->file_name, O_TRUNC | O_WRONLY | O_CREAT, 0666); + if (dd->fd == -1) { + LOGD("Cannot open record file '%s' for DVR%d, %s", dd->file_name, dd->id, strerror(errno)); + return; + } + dd->running = 1; + pthread_create(&dd->thread, NULL, dvr_data_thread, dd); } void CTvRecord::get_cur_program_pid(int progId) { - CTvProgram prog; - int aindex; - CTvProgram::Audio *pA; - CTvProgram::Video *pV; - int ret = CTvProgram::selectByID(progId, prog); - if (ret != 0) return; - - LOGD("%s,%d", "TV", __LINE__); - pV = prog.getVideo(); - if (pV != NULL) { - setvpid(pV->getPID()); - } - - aindex = prog.getCurrAudioTrackIndex(); - if (-1 == aindex) { //db is default - aindex = prog.getCurrentAudio(String8("eng")); - if (aindex >= 0) { - prog.setCurrAudioTrackIndex(progId, aindex); - } - } - - if (aindex >= 0) { - pA = prog.getAudio(aindex); - if (pA != NULL) { - setapid(pA->getPID()); - } - } + CTvProgram prog; + int aindex; + CTvProgram::Audio *pA; + CTvProgram::Video *pV; + int ret = CTvProgram::selectByID(progId, prog); + if (ret != 0) return; + + LOGD("%s,%d", "TV", __LINE__); + pV = prog.getVideo(); + if (pV != NULL) { + setvpid(pV->getPID()); + } + + aindex = prog.getCurrAudioTrackIndex(); + if (-1 == aindex) { //db is default + aindex = prog.getCurrentAudio(String8("eng")); + if (aindex >= 0) { + prog.setCurrAudioTrackIndex(progId, aindex); + } + } + + if (aindex >= 0) { + pA = prog.getAudio(aindex); + if (pA != NULL) { + setapid(pA->getPID()); + } + } } int CTvRecord::start_dvr() { - AM_DVR_StartRecPara_t spara; - int pid_cnt; - int pids[2]; - - /**仅测试最多8个PID*/ - get_cur_program_pid(progid); - pids[0] = getvpid(); - pids[1] = getapid(); - - strcpy(data_threads[DVR_DEV_NO].file_name, GetRecordFileName()); - LOGD("%s,%d", "TV", __LINE__); - //sprintf(data_threads[DVR_DEV_NO].file_name,"%s","/storage/external_storage/sda4/testdvr.ts"); - spara.pid_count = 2; - memcpy(&spara.pids, pids, sizeof(pids)); - - if (AM_DVR_StartRecord(DVR_DEV_NO, &spara) == AM_SUCCESS) { - start_data_thread(DVR_DEV_NO); - } - - return 0; + AM_DVR_StartRecPara_t spara; + int pid_cnt; + int pids[2]; + + /**仅测试最多8个PID*/ + get_cur_program_pid(progid); + pids[0] = getvpid(); + pids[1] = getapid(); + + strcpy(data_threads[DVR_DEV_NO].file_name, GetRecordFileName()); + LOGD("%s,%d", "TV", __LINE__); + //sprintf(data_threads[DVR_DEV_NO].file_name,"%s","/storage/external_storage/sda4/testdvr.ts"); + spara.pid_count = 2; + memcpy(&spara.pids, pids, sizeof(pids)); + + if (AM_DVR_StartRecord(DVR_DEV_NO, &spara) == AM_SUCCESS) { + start_data_thread(DVR_DEV_NO); + } + + return 0; } void CTvRecord::stop_data_thread(int dev_no) { - DVRData *dd = &data_threads[dev_no]; - LOGD("%s,%d", "TV", __LINE__); - - if (! dd->running) - return; - dd->running = 0; - pthread_join(dd->thread, NULL); - LOGD("Data thread for DVR%d has exit", dd->id); + DVRData *dd = &data_threads[dev_no]; + LOGD("%s,%d", "TV", __LINE__); + + if (! dd->running) + return; + dd->running = 0; + pthread_join(dd->thread, NULL); + LOGD("Data thread for DVR%d has exit", dd->id); } void CTvRecord::StartRecord(int id) { - AM_DVR_OpenPara_t dpara; - fe_status_t status; - char buf[32]; - - AM_FEND_GetStatus(FEND_DEV_NO, &status); - - if (status & FE_HAS_LOCK) { - LOGD("locked\n"); - } else { - LOGD("unlocked\n"); - return ; - } - SetCurRecProgramId(id); - start_dvr(); - - return; + AM_DVR_OpenPara_t dpara; + fe_status_t status; + char buf[32]; + + AM_FEND_GetStatus(FEND_DEV_NO, &status); + + if (status & FE_HAS_LOCK) { + LOGD("locked\n"); + } else { + LOGD("unlocked\n"); + return ; + } + SetCurRecProgramId(id); + start_dvr(); + + return; } void CTvRecord::StopRecord() { - int i = 0; - LOGD("stop record for %d", DVR_DEV_NO); - AM_DVR_StopRecord(DVR_DEV_NO); + int i = 0; + LOGD("stop record for %d", DVR_DEV_NO); + AM_DVR_StopRecord(DVR_DEV_NO); - //for (i=0; i< DVR_DEV_COUNT; i++) - { - if (data_threads[DVR_DEV_NO].running) - stop_data_thread(DVR_DEV_NO); - //LOGD("Closing DMX%d...", i); - } + //for (i=0; i< DVR_DEV_COUNT; i++) + { + if (data_threads[DVR_DEV_NO].running) + stop_data_thread(DVR_DEV_NO); + //LOGD("Closing DMX%d...", i); + } } void CTvRecord::SetRecCurTsOrCurProgram(int sel) { - int i = 0; - char buf[50]; - memset(buf, 0, sizeof(buf)); - for (; i < 3; i++) { - snprintf(buf, sizeof(buf), "/sys/class/stb/dvr%d_mode", i); - if (sel) - AM_FileEcho(buf, "ts"); - else - AM_FileEcho(buf, "pid"); - } + int i = 0; + char buf[50]; + memset(buf, 0, sizeof(buf)); + for (; i < 3; i++) { + snprintf(buf, sizeof(buf), "/sys/class/stb/dvr%d_mode", i); + if (sel) + AM_FileEcho(buf, "ts"); + else + AM_FileEcho(buf, "pid"); + } } |