Subversion Repositories Kolibri OS

Rev

Rev 6106 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include <sys/types.h>
  2. #include <stdint.h>
  3. #include <libavcodec/avcodec.h>
  4. #include <libavformat/avformat.h>
  5. #include <libswscale/swscale.h>
  6. #include <unistd.h>
  7. #include <stdio.h>
  8. #include <fcntl.h>
  9. #include "winlib/winlib.h"
  10. #include "fplay.h"
  11.  
  12. extern uint32_t  hw2d ;
  13.  
  14. int64_t _lseeki64(int fd, int64_t offset,  int origin )
  15. {
  16.     int off = offset;
  17.     return lseek(fd, off, origin);
  18. }
  19.  
  20. int put_packet(queue_t *q, AVPacket *pkt)
  21. {
  22.     AVPacketList *q_pkt;
  23.  
  24.     q_pkt = av_malloc(sizeof(AVPacketList));
  25.     if (!q_pkt)
  26.         return -1;
  27.  
  28.     q_pkt->pkt = *pkt;
  29.     q_pkt->next = NULL;
  30.  
  31.     mutex_lock(&q->lock);
  32.  
  33.     if (!q->last_pkt)
  34.         q->first_pkt = q_pkt;
  35.     else
  36.         q->last_pkt->next = q_pkt;
  37.  
  38.     q->last_pkt = q_pkt;
  39.     q->size += q_pkt->pkt.size + sizeof(*q_pkt);
  40.     q->count++;
  41.  
  42.     mutex_unlock(&q->lock);
  43.  
  44.     return 0;
  45. }
  46.  
  47. int get_packet(queue_t *q, AVPacket *pkt)
  48. {
  49.     AVPacketList *q_pkt;
  50.     int ret = 0;
  51.  
  52.     mutex_lock(&q->lock);
  53.  
  54.     q_pkt = q->first_pkt;
  55.     if (q_pkt)
  56.     {
  57.         q->first_pkt = q_pkt->next;
  58.         if (!q->first_pkt)
  59.             q->last_pkt = NULL;
  60.  
  61.         q->count--;
  62.         q->size -= q_pkt->pkt.size + sizeof(*q_pkt);
  63.         *pkt = q_pkt->pkt;
  64.         av_free(q_pkt);
  65.         ret = 1;
  66.     };
  67.  
  68.     mutex_unlock(&q->lock);
  69.  
  70.     return ret;
  71. }
  72.  
  73. void blit_raw(ctx_t *ctx, void *raw, int x, int y, int w, int h, int pitch)
  74. {
  75.     int *dst;
  76.     int *src = raw;
  77.     int i, j;
  78.  
  79.     dst = ctx->pixmap_data;
  80.     dst+=  y * ctx->pixmap_pitch/4 + x;
  81.  
  82.     for(i=0; i < h; i++)
  83.     {
  84.         for(j = 0; j < w; j++)
  85.             dst[j] = src[j];
  86.         dst+= ctx->pixmap_pitch/4;
  87.         src+= pitch/4;
  88.     };
  89. };
  90.