Merge remote-tracking branch 'tangocash/master'

Origin commit data
------------------
Branch: master
Commit: 7d4bd621e1
Author: max_10 <max_10@gmx.de>
Date: 2017-12-20 (Wed, 20 Dec 2017)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
max_10
2017-12-20 21:21:17 +01:00
7 changed files with 160 additions and 6 deletions

View File

@@ -427,7 +427,6 @@ void cPlayback::FindAllPids(int *apids, unsigned int *ac3flags, unsigned int *nu
lt_info("%s\n", __func__); lt_info("%s\n", __func__);
int max_numpida = *numpida; int max_numpida = *numpida;
*numpida = 0; *numpida = 0;
/*
if(player && player->manager && player->manager->audio) { if(player && player->manager && player->manager->audio) {
char ** TrackList = NULL; char ** TrackList = NULL;
player->manager->audio->Command(player, MANAGER_LIST, &TrackList); player->manager->audio->Command(player, MANAGER_LIST, &TrackList);
@@ -471,7 +470,7 @@ void cPlayback::FindAllPids(int *apids, unsigned int *ac3flags, unsigned int *nu
free(TrackList); free(TrackList);
*numpida=j; *numpida=j;
} }
}*/ }
} }
void cPlayback::FindAllSubtitlePids(int *pids, unsigned int *numpids, std::string *language) void cPlayback::FindAllSubtitlePids(int *pids, unsigned int *numpids, std::string *language)
@@ -512,9 +511,9 @@ void cPlayback::FindAllSubtitlePids(int *pids, unsigned int *numpids, std::strin
void cPlayback::FindAllTeletextsubtitlePids(int *pids, unsigned int *numpids, std::string *language, int *mags, int *pages) void cPlayback::FindAllTeletextsubtitlePids(int *pids, unsigned int *numpids, std::string *language, int *mags, int *pages)
{ {
lt_info("%s\n", __func__); lt_info("%s\n", __func__);
/*
int max_numpids = *numpids; int max_numpids = *numpids;
*numpids = 0; *numpids = 0;
/*
if(player && player->manager && player->manager->teletext) { if(player && player->manager && player->manager->teletext) {
char ** TrackList = NULL; char ** TrackList = NULL;
player->manager->teletext->Command(player, MANAGER_LIST, &TrackList); player->manager->teletext->Command(player, MANAGER_LIST, &TrackList);
@@ -621,7 +620,7 @@ void cPlayback::GetMetadata(std::vector<std::string> &keys, std::vector<std::str
char **metadata = NULL; char **metadata = NULL;
if (player && player->playback) if (player && player->playback)
{ {
//player->playback->Command(player, PLAYBACK_METADATA, &metadata); player->playback->Command(player, PLAYBACK_METADATA, &metadata);
if (metadata) if (metadata)
{ {
for (char **m = metadata; *m;) for (char **m = metadata; *m;)

View File

@@ -2580,6 +2580,67 @@ static int32_t container_ffmpeg_get_info(Context_t *context, char **infoString)
return cERR_CONTAINER_FFMPEG_NO_ERROR; return cERR_CONTAINER_FFMPEG_NO_ERROR;
} }
static int container_ffmpeg_get_metadata(Context_t * context, char ***p)
{
Track_t *videoTrack = NULL;
Track_t *audioTrack = NULL;
AVDictionaryEntry *tag = NULL;
size_t psize = 1;
char **pp;
if (!context) {
fprintf(stderr, "BUG %s:%d\n", __func__, __LINE__);
return cERR_CONTAINER_FFMPEG_ERR;
}
if (!p || *p) {
fprintf(stderr, "BUG %s:%d\n", __func__, __LINE__);
return cERR_CONTAINER_FFMPEG_ERR;
}
context->manager->video->Command(context, MANAGER_GET_TRACK, &videoTrack);
context->manager->audio->Command(context, MANAGER_GET_TRACK, &audioTrack);
if (avContextTab[0]->metadata)
psize += av_dict_count(avContextTab[0]->metadata);
if (videoTrack)
psize += av_dict_count(((AVStream *)(videoTrack->stream))->metadata);
if (audioTrack)
psize += av_dict_count(((AVStream *)(audioTrack->stream))->metadata);
*p = malloc(sizeof(char *) * psize * 2);
if (!*p) {
fprintf(stderr, "MALLOC %s:%d\n", __func__, __LINE__);
return cERR_CONTAINER_FFMPEG_ERR;
}
pp = *p;
if (avContextTab[0]->metadata)
while ((tag = av_dict_get(avContextTab[0]->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
*pp++ = strdup(tag->key);
*pp++ = strdup(tag->value);
}
if (videoTrack) {
tag = NULL;
while ((tag = av_dict_get(((AVStream *)(videoTrack->stream))->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
*pp++ = strdup(tag->key);
*pp++ = strdup(tag->value);
}
}
if (audioTrack) {
tag = NULL;
while ((tag = av_dict_get(((AVStream *)(audioTrack->stream))->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
*pp++ = strdup(tag->key);
*pp++ = strdup(tag->value);
}
}
*pp++ = NULL;
*pp = NULL;
return cERR_CONTAINER_FFMPEG_NO_ERROR;
}
static int32_t Command(void *_context, ContainerCmd_t command, void *argument) static int32_t Command(void *_context, ContainerCmd_t command, void *argument)
{ {
Context_t *context = (Context_t *) _context; Context_t *context = (Context_t *) _context;
@@ -2666,6 +2727,11 @@ static int32_t Command(void *_context, ContainerCmd_t command, void *argument)
*((int32_t *)argument) = size; *((int32_t *)argument) = size;
break; break;
} }
case CONTAINER_GET_METADATA:
{
ret = container_ffmpeg_get_metadata(context, (char ***) argument);
break;
}
default: default:
ffmpeg_err("ContainerCmd %d not supported!\n", command); ffmpeg_err("ContainerCmd %d not supported!\n", command);
ret = cERR_CONTAINER_FFMPEG_ERR; ret = cERR_CONTAINER_FFMPEG_ERR;

View File

@@ -24,7 +24,8 @@ typedef enum
CONTAINER_SET_BUFFER_SIZE, CONTAINER_SET_BUFFER_SIZE,
CONTAINER_GET_BUFFER_SIZE, CONTAINER_GET_BUFFER_SIZE,
CONTAINER_GET_BUFFER_STATUS, CONTAINER_GET_BUFFER_STATUS,
CONTAINER_STOP_BUFFER CONTAINER_STOP_BUFFER,
CONTAINER_GET_METADATA
} ContainerCmd_t; } ContainerCmd_t;
typedef struct Container_s typedef struct Container_s

View File

@@ -3,7 +3,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdint.h> #include <stdint.h>
typedef enum {PLAYBACK_OPEN, PLAYBACK_CLOSE, PLAYBACK_PLAY, PLAYBACK_STOP, PLAYBACK_PAUSE, PLAYBACK_CONTINUE, PLAYBACK_FLUSH, PLAYBACK_TERM, PLAYBACK_FASTFORWARD, PLAYBACK_SEEK, PLAYBACK_SEEK_ABS, PLAYBACK_PTS, PLAYBACK_LENGTH, PLAYBACK_SWITCH_AUDIO, PLAYBACK_SWITCH_SUBTITLE, PLAYBACK_INFO, PLAYBACK_SLOWMOTION, PLAYBACK_FASTBACKWARD, PLAYBACK_GET_FRAME_COUNT} PlaybackCmd_t; typedef enum {PLAYBACK_OPEN, PLAYBACK_CLOSE, PLAYBACK_PLAY, PLAYBACK_STOP, PLAYBACK_PAUSE, PLAYBACK_CONTINUE, PLAYBACK_FLUSH, PLAYBACK_TERM, PLAYBACK_FASTFORWARD, PLAYBACK_SEEK, PLAYBACK_SEEK_ABS, PLAYBACK_PTS, PLAYBACK_LENGTH, PLAYBACK_SWITCH_AUDIO, PLAYBACK_SWITCH_SUBTITLE, PLAYBACK_INFO, PLAYBACK_SLOWMOTION, PLAYBACK_FASTBACKWARD, PLAYBACK_GET_FRAME_COUNT, PLAYBACK_METADATA} PlaybackCmd_t;
typedef struct PlaybackHandler_s typedef struct PlaybackHandler_s
{ {

View File

@@ -126,6 +126,41 @@ static int ManagerAdd(Context_t *context, Track_t track)
return cERR_AUDIO_MGR_NO_ERROR; return cERR_AUDIO_MGR_NO_ERROR;
} }
static char **ManagerList(Context_t * context __attribute__ ((unused)))
{
int i = 0, j = 0;
char **tracklist = NULL;
audio_mgr_printf(10, "%s::%s\n", FILENAME, __FUNCTION__);
if (Tracks != NULL) {
tracklist = malloc(sizeof(char *) * ((TrackCount * 2) + 1));
if (tracklist == NULL) {
audio_mgr_err("%s:%s malloc failed\n", FILENAME, __FUNCTION__);
return NULL;
}
for (i = 0, j = 0; i < TrackCount; i++, j += 2) {
if (Tracks[i].pending)
continue;
size_t len = strlen(Tracks[i].Name) + 20;
char tmp[len];
snprintf(tmp, len, "%d %s\n", Tracks[i].Id, Tracks[i].Name);
tracklist[j] = strdup(tmp);
tracklist[j + 1] = strdup(Tracks[i].Encoding);
}
tracklist[j] = NULL;
}
audio_mgr_printf(10, "%s::%s return %p (%d - %d)\n", FILENAME,
__FUNCTION__, tracklist, j, TrackCount);
return tracklist;
}
#if 0
static TrackDescription_t *ManagerList(Context_t *context __attribute__((unused))) static TrackDescription_t *ManagerList(Context_t *context __attribute__((unused)))
{ {
int i = 0; int i = 0;
@@ -156,6 +191,7 @@ static TrackDescription_t *ManagerList(Context_t *context __attribute__((unused
//audio_mgr_printf(10, "%s::%s return %p (%d - %d)\n", FILENAME, __FUNCTION__, tracklist, j, TrackCount); //audio_mgr_printf(10, "%s::%s return %p (%d - %d)\n", FILENAME, __FUNCTION__, tracklist, j, TrackCount);
return tracklist; return tracklist;
} }
#endif
static int ManagerDel(Context_t *context) static int ManagerDel(Context_t *context)
{ {

View File

@@ -125,6 +125,41 @@ static int ManagerAdd(Context_t *context, Track_t track)
return cERR_VIDEO_MGR_NO_ERROR; return cERR_VIDEO_MGR_NO_ERROR;
} }
static char **ManagerList(Context_t * context __attribute__ ((unused)))
{
int i = 0, j = 0;
char **tracklist = NULL;
video_mgr_printf(10, "%s::%s\n", FILENAME, __FUNCTION__);
if (Tracks != NULL) {
tracklist = malloc(sizeof(char *) * ((TrackCount * 2) + 1));
if (tracklist == NULL) {
video_mgr_err("%s:%s malloc failed\n", FILENAME, __FUNCTION__);
return NULL;
}
for (i = 0, j = 0; i < TrackCount; i++, j += 2) {
if (Tracks[i].pending)
continue;
size_t len = strlen(Tracks[i].Name) + 20;
char tmp[len];
snprintf(tmp, len, "%d %s\n", Tracks[i].Id, Tracks[i].Name);
tracklist[j] = strdup(tmp);
tracklist[j + 1] = strdup(Tracks[i].Encoding);
}
tracklist[j] = NULL;
}
video_mgr_printf(10, "%s::%s return %p (%d - %d)\n", FILENAME,
__FUNCTION__, tracklist, j, TrackCount);
return tracklist;
}
#if 0
static char **ManagerList(Context_t *context __attribute__((unused))) static char **ManagerList(Context_t *context __attribute__((unused)))
{ {
int i = 0, j = 0; int i = 0, j = 0;
@@ -155,6 +190,7 @@ static char **ManagerList(Context_t *context __attribute__((unused)))
video_mgr_printf(10, "%s::%s return %p (%d - %d)\n", FILENAME, __FUNCTION__, tracklist, j, TrackCount); video_mgr_printf(10, "%s::%s return %p (%d - %d)\n", FILENAME, __FUNCTION__, tracklist, j, TrackCount);
return tracklist; return tracklist;
} }
#endif
static int ManagerDel(Context_t *context) static int ManagerDel(Context_t *context)
{ {

View File

@@ -583,6 +583,17 @@ static int32_t PlaybackInfo(Context_t *context, char **infoString)
return ret; return ret;
} }
static int PlaybackMetadata(Context_t * context, char ***metadata)
{
int ret = cERR_PLAYBACK_NO_ERROR;
if (context->container && context->container->selectedContainer)
context->container->selectedContainer->Command(context,
CONTAINER_GET_METADATA,
metadata);
return ret;
}
static int32_t Command(void *_context, PlaybackCmd_t command, void *argument) static int32_t Command(void *_context, PlaybackCmd_t command, void *argument)
{ {
Context_t *context = (Context_t *) _context; /* to satisfy compiler */ Context_t *context = (Context_t *) _context; /* to satisfy compiler */
@@ -665,6 +676,11 @@ static int32_t Command(void *_context, PlaybackCmd_t command, void *argument)
ret = PlaybackGetFrameCount(context, (uint64_t *)argument); ret = PlaybackGetFrameCount(context, (uint64_t *)argument);
break; break;
} }
case PLAYBACK_METADATA:
{
ret = PlaybackMetadata(context, (char ***) argument);
break;
}
default: default:
playback_err("PlaybackCmd %d not supported!\n", command); playback_err("PlaybackCmd %d not supported!\n", command);
ret = cERR_PLAYBACK_ERROR; ret = cERR_PLAYBACK_ERROR;