Subversion Repositories Kolibri OS

Rev

Rev 5603 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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