|
|
|
@ -48,10 +48,6 @@ typedef struct { |
|
|
|
|
SDL_Rect texture_rect; |
|
|
|
|
|
|
|
|
|
int inited; |
|
|
|
|
SDL_Thread *event_thread; |
|
|
|
|
SDL_mutex *mutex; |
|
|
|
|
SDL_cond *init_cond; |
|
|
|
|
int quit; |
|
|
|
|
} SDLContext; |
|
|
|
|
|
|
|
|
|
static const struct sdl_texture_format_entry { |
|
|
|
@ -140,20 +136,9 @@ static int sdl2_write_trailer(AVFormatContext *s) |
|
|
|
|
{ |
|
|
|
|
SDLContext *sdl = s->priv_data; |
|
|
|
|
|
|
|
|
|
sdl->quit = 1; |
|
|
|
|
|
|
|
|
|
if (sdl->texture) |
|
|
|
|
SDL_DestroyTexture(sdl->texture); |
|
|
|
|
sdl->texture = NULL; |
|
|
|
|
if (sdl->event_thread) |
|
|
|
|
SDL_WaitThread(sdl->event_thread, NULL); |
|
|
|
|
sdl->event_thread = NULL; |
|
|
|
|
if (sdl->mutex) |
|
|
|
|
SDL_DestroyMutex(sdl->mutex); |
|
|
|
|
sdl->mutex = NULL; |
|
|
|
|
if (sdl->init_cond) |
|
|
|
|
SDL_DestroyCond(sdl->init_cond); |
|
|
|
|
sdl->init_cond = NULL; |
|
|
|
|
|
|
|
|
|
if (sdl->renderer) |
|
|
|
|
SDL_DestroyRenderer(sdl->renderer); |
|
|
|
@ -204,7 +189,7 @@ static int sdl2_write_header(AVFormatContext *s) |
|
|
|
|
|
|
|
|
|
if (!sdl->texture_fmt) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, |
|
|
|
|
"Unsupported pixel format '%s', choose one of yuv420p, yuyv422, uyvy422, BGRA\n", |
|
|
|
|
"Unsupported pixel format '%s'.\n", |
|
|
|
|
av_get_pix_fmt_name(codecpar->format)); |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
@ -255,7 +240,7 @@ fail: |
|
|
|
|
|
|
|
|
|
static int sdl2_write_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
{ |
|
|
|
|
int ret = 0; |
|
|
|
|
int ret, quit = 0; |
|
|
|
|
SDLContext *sdl = s->priv_data; |
|
|
|
|
AVCodecParameters *codecpar = s->streams[0]->codecpar; |
|
|
|
|
uint8_t *data[4]; |
|
|
|
@ -268,14 +253,14 @@ static int sdl2_write_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
switch (event.key.keysym.sym) { |
|
|
|
|
case SDLK_ESCAPE: |
|
|
|
|
case SDLK_q: |
|
|
|
|
sdl->quit = 1; |
|
|
|
|
quit = 1; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case SDL_QUIT: |
|
|
|
|
sdl->quit = 1; |
|
|
|
|
quit = 1; |
|
|
|
|
break; |
|
|
|
|
case SDL_WINDOWEVENT: |
|
|
|
|
switch(event.window.event){ |
|
|
|
@ -294,13 +279,12 @@ static int sdl2_write_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (sdl->quit) { |
|
|
|
|
if (quit) { |
|
|
|
|
sdl2_write_trailer(s); |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_image_fill_arrays(data, linesize, pkt->data, codecpar->format, codecpar->width, codecpar->height, 1); |
|
|
|
|
SDL_LockMutex(sdl->mutex); |
|
|
|
|
switch (sdl->texture_fmt) { |
|
|
|
|
/* case SDL_PIXELFORMAT_ARGB4444:
|
|
|
|
|
* case SDL_PIXELFORMAT_RGBA4444: |
|
|
|
@ -346,7 +330,6 @@ static int sdl2_write_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
SDL_RenderClear(sdl->renderer); |
|
|
|
|
SDL_RenderCopy(sdl->renderer, sdl->texture, NULL, &sdl->texture_rect); |
|
|
|
|
SDL_RenderPresent(sdl->renderer); |
|
|
|
|
SDL_UnlockMutex(sdl->mutex); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|