Ignore:
Timestamp:
12/08/20 01:35:11 (3 years ago)
Author:
obi
Message:

[libeplayer3] update to v68

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/libeplayer3/output/writer/mipsel/writer.c

    r42431 r44958  
    2626#include <string.h>
    2727#include <errno.h>
     28#include <pthread.h>
    2829
    2930#include "misc.h"
    3031#include "writer.h"
     32#include "common.h"
     33#include "debug.h"
    3134
    3235/* ***************************** */
    3336/* Makros/Constants              */
    3437/* ***************************** */
    35 
    36 #define WRITER_DEBUG
    37 
    38 #ifdef WRITER_DEBUG
    39 
    40 static short debug_level = 0;
    41 
    42 #define writer_printf(level, x...) do { \
    43 if (debug_level >= level) printf(x); } while (0)
    44 #else
    45 #define writer_printf(level, x...)
    46 #endif
    47 
    48 #ifndef WRITER_SILENT
    49 #define writer_err(x...) do { printf(x); } while (0)
    50 #else
    51 #define writer_err(x...)
    52 #endif
     38#define getDVBMutex(pmtx) do { if (pmtx) pthread_mutex_lock(pmtx);} while(false);
     39#define releaseDVBMutex(pmtx) do { if (pmtx) pthread_mutex_unlock(pmtx);} while(false);
    5340
    5441/* ***************************** */
    5542/* Types                         */
    5643/* ***************************** */
     44typedef enum {
     45    DVB_STS_UNKNOWN,
     46    DVB_STS_SEEK,
     47    DVB_STS_PAUSE,
     48    DVB_STS_EXIT
     49} DVBState_t;
    5750
    5851/* ***************************** */
     
    7467    &WriterAudioWMA,
    7568    &WriterAudioWMAPRO,
    76    
     69    &WriterAudioOPUS,
     70    &WriterAudioVORBIS,
     71
    7772    &WriterVideoH264,
    7873    &WriterVideoH265,
     
    8681    &WriterVideoVP8,
    8782    &WriterVideoVP9,
    88     &WriterVideoSPARK,
     83    &WriterVideoFLV,
    8984    &WriterVideoWMV,
     85    &WriterVideoMJPEG,
     86    &WriterVideoRV40,
     87    &WriterVideoRV30,
     88    &WriterVideoAVS2,
    9089    NULL
    9190};
     
    9897/*  Functions                    */
    9998/* ***************************** */
    100 ssize_t write_with_retry(int fd, const void *buf, size_t size)
     99ssize_t WriteWithRetry(Context_t *context, int pipefd, int fd, void *pDVBMtx, const void *buf, int size)
     100{
     101    fd_set rfds;
     102    fd_set wfds;
     103
     104    ssize_t ret;
     105    int retval = -1;
     106    int maxFd = pipefd > fd ? pipefd : fd;
     107    struct timeval tv;
     108
     109    while(size > 0 && 0 == PlaybackDieNow(0) && !context->playback->isSeeking)
     110    {
     111        FD_ZERO(&rfds);
     112        FD_ZERO(&wfds);
     113
     114        FD_SET(pipefd, &rfds);
     115        FD_SET(fd, &wfds);
     116
     117        /* When we PAUSE LINUX DVB outputs buffers, then audio/video buffers
     118         * will continue to be filled. Unfortunately, in such case after resume
     119         * select() will never return with fd set - bug in DVB drivers?
     120         * There are to workarounds possible:
     121         *   1. write to pipe at resume to return from select() immediately
     122         *   2. make timeout select(), limit max time spend in the select()
     123         *      to for example 0,1s
     124         *   (at now first workaround is used)
     125         */
     126        //tv.tv_sec = 0;
     127        //tv.tv_usec = 100000; // 100ms
     128       
     129        retval = select(maxFd + 1, &rfds, &wfds, NULL, NULL); //&tv);
     130        if (retval < 0)
     131        {
     132            break;
     133        }
     134       
     135        //if (retval == 0)
     136        //{
     137        //    //printf("RETURN FROM SELECT DUE TO TIMEOUT\n");
     138        //    continue;
     139        //}
     140       
     141        if(FD_ISSET(pipefd, &rfds))
     142        {
     143            FlushPipe(pipefd);
     144            //printf("RETURN FROM SELECT DUE TO pipefd SET\n");
     145            continue;
     146        }
     147       
     148        if(FD_ISSET(fd, &wfds))
     149        {
     150            ret = write(fd, buf, size);
     151            if (ret < 0)
     152            {
     153                switch(errno)
     154                {
     155                    case EINTR:
     156                    case EAGAIN:
     157                        continue;
     158                    default:
     159                        retval = -3;
     160                        break;
     161                }
     162                if (retval < 0)
     163                {
     164                    break;
     165                }
     166               
     167                return ret;
     168            }
     169            else if (ret == 0)
     170            {
     171                // printf("This should not happen. Select return fd ready to write, but write return 0, errno [%d]\n", errno);
     172                // wait 10ms before next try
     173                tv.tv_sec = 0;
     174                tv.tv_usec = 10000; // 10ms
     175                retval = select(pipefd + 1, &rfds, NULL, NULL, &tv);
     176                if (retval)
     177                    FlushPipe(pipefd);
     178                continue;
     179            }
     180           
     181            size -= ret;
     182            buf += ret;
     183        }
     184    }
     185    return 0;
     186}
     187
     188ssize_t write_with_retry(int fd, const void *buf, int size)
    101189{
    102190    ssize_t ret;
    103191    int retval = 0;
    104 //obi
    105 //    while(size > 0 && 0 == PlaybackDieNow(0))
    106     while(size > 0)
    107 //obi (end)
     192    while(size > 0 && 0 == PlaybackDieNow(0))
    108193    {
    109194        ret = write(fd, buf, size);
    110         //printf("[%d] write [%lld]\n", fd, ret);
    111195        if (ret < 0)
    112196        {
     
    146230}
    147231
    148 ssize_t writev_with_retry(int fd, const struct iovec *iov, size_t ic)
     232ssize_t writev_with_retry(int fd, const struct iovec *iov, int ic)
    149233{
    150234    ssize_t len = 0;
     
    156240        if(PlaybackDieNow(0))
    157241        {
    158 //obi
    159 //            return -1;
    160 //obi (end)
     242            return -1;
    161243        }
    162244    }
Note: See TracChangeset for help on using the changeset viewer.