mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-27 07:23:11 +02:00
raspi: first implementation of PIG in AVDec
This commit is contained in:
@@ -36,6 +36,10 @@
|
||||
#include "avcodec_omx.h"
|
||||
#include "omx_utils.h"
|
||||
|
||||
#include "bcm_host.h"
|
||||
/* set in glfb.cpp */
|
||||
extern DISPMANX_MODEINFO_T output_info;
|
||||
|
||||
static void* acodec_omx_thread(struct codec_init_args_t* args)
|
||||
{
|
||||
struct codec_t* codec = args->codec;
|
||||
@@ -243,14 +247,19 @@ next_packet:
|
||||
omx_set_display_region(pi, 0, 0, 1920, 1080);
|
||||
current = NULL;
|
||||
goto next_packet;
|
||||
} else if (current->msgtype == MSG_ZOOM) {
|
||||
if ((int)current->data) {
|
||||
fprintf(stderr,"4:3 on!\n");
|
||||
omx_set_display_region(pi, 240, 0, 1440, 1080);
|
||||
} else {
|
||||
fprintf(stderr,"4:3 off\n");
|
||||
omx_set_display_region(pi, 0, 0, 1920, 1080);
|
||||
} else if (current->msgtype == MSG_PIG) {
|
||||
struct pig_params_t *pig = (struct pig_params_t *)current->data;
|
||||
if (pig->x < 0)
|
||||
omx_set_display_region(pi, 0, 0, output_info.width, output_info.height);
|
||||
else {
|
||||
int x = pig->x * output_info.width / 1280;
|
||||
int y = pig->y * output_info.height / 720;
|
||||
int w = pig->w * output_info.width / 1280;
|
||||
int h = pig->h * output_info.height / 720;
|
||||
omx_set_display_region(pi, x, y, w, h);
|
||||
}
|
||||
free(pig);
|
||||
free(current);
|
||||
current = NULL;
|
||||
goto next_packet;
|
||||
}
|
||||
|
@@ -99,6 +99,7 @@ class vDec: public Dec, public OpenThreads::Thread
|
||||
public:
|
||||
vDec();
|
||||
~vDec();
|
||||
int set_pig(int x, int y, int w, int h);
|
||||
private:
|
||||
void run();
|
||||
};
|
||||
@@ -253,6 +254,13 @@ int AVDec::set_volume(int vol)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int AVDec::pig(int x, int y, int w, int h)
|
||||
{
|
||||
if (vdec)
|
||||
return vdec->set_pig(x, y, w, h);
|
||||
return -1;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
Dec *d;
|
||||
bool audio;
|
||||
@@ -415,6 +423,17 @@ int aDec::set_volume(int vol)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int vDec::set_pig(int x, int y, int w, int h)
|
||||
{
|
||||
struct pig_params_t *pig = (pig_params_t *)malloc(sizeof(struct pig_params_t));
|
||||
pig->x = x;
|
||||
pig->y = y;
|
||||
pig->w = w;
|
||||
pig->h = h;
|
||||
codec_send_message(&codecs.vcodec, MSG_PIG, pig);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void vDec::run()
|
||||
{
|
||||
hal_set_threadname("hal:vdec");
|
||||
|
@@ -29,7 +29,7 @@ struct packet_t
|
||||
#define MSG_STOP 3
|
||||
#define MSG_PAUSE 4
|
||||
#define MSG_NEW_CHANNEL 5
|
||||
#define MSG_ZOOM 6
|
||||
#define MSG_PIG 6
|
||||
#define MSG_SET_ASPECT_4_3 7
|
||||
#define MSG_SET_ASPECT_16_9 8
|
||||
#define MSG_SET_VOLUME 9
|
||||
@@ -64,6 +64,13 @@ struct codec_t
|
||||
int first_packet;
|
||||
};
|
||||
|
||||
struct pig_params_t{
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
};
|
||||
|
||||
struct codecs_t {
|
||||
pthread_mutex_t playback_mutex; /* Locked by the thread with access to playback - htsp/avplay/etc */
|
||||
|
||||
|
@@ -158,6 +158,7 @@ void cVideo::Pig(int x, int y, int w, int h, int, int)
|
||||
pig_y = y;
|
||||
pig_w = w;
|
||||
pig_h = h;
|
||||
avdec->pig(x, y, w, h);
|
||||
}
|
||||
|
||||
void cVideo::getPictureInfo(int &width, int &height, int &rate)
|
||||
|
Reference in New Issue
Block a user