mirror of
https://github.com/Genymobile/scrcpy.git
synced 2025-08-02 22:29:25 +00:00
Do not merge config audio packets
For video streams (at least H.264 and H.265), the config packet containing SPS/PPS must be prepended to the next packet (the following keyframe). For audio streams (at least OPUS), they must not be merged.
This commit is contained in:
parent
d722b9de4d
commit
3f3e60dd7a
1 changed files with 18 additions and 7 deletions
|
@ -191,8 +191,15 @@ run_demuxer(void *data) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Config packets must be merged with the next non-config packet only for
|
||||||
|
// video streams
|
||||||
|
bool must_merge_config_packet = codec->type == AVMEDIA_TYPE_VIDEO;
|
||||||
|
|
||||||
struct sc_packet_merger merger;
|
struct sc_packet_merger merger;
|
||||||
sc_packet_merger_init(&merger);
|
|
||||||
|
if (must_merge_config_packet) {
|
||||||
|
sc_packet_merger_init(&merger);
|
||||||
|
}
|
||||||
|
|
||||||
AVPacket *packet = av_packet_alloc();
|
AVPacket *packet = av_packet_alloc();
|
||||||
if (!packet) {
|
if (!packet) {
|
||||||
|
@ -208,11 +215,13 @@ run_demuxer(void *data) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepend any config packet to the next media packet
|
if (must_merge_config_packet) {
|
||||||
ok = sc_packet_merger_merge(&merger, packet);
|
// Prepend any config packet to the next media packet
|
||||||
if (!ok) {
|
ok = sc_packet_merger_merge(&merger, packet);
|
||||||
av_packet_unref(packet);
|
if (!ok) {
|
||||||
break;
|
av_packet_unref(packet);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ok = sc_demuxer_push_packet(demuxer, packet);
|
ok = sc_demuxer_push_packet(demuxer, packet);
|
||||||
|
@ -225,7 +234,9 @@ run_demuxer(void *data) {
|
||||||
|
|
||||||
LOGD("End of frames");
|
LOGD("End of frames");
|
||||||
|
|
||||||
sc_packet_merger_destroy(&merger);
|
if (must_merge_config_packet) {
|
||||||
|
sc_packet_merger_destroy(&merger);
|
||||||
|
}
|
||||||
|
|
||||||
av_packet_free(&packet);
|
av_packet_free(&packet);
|
||||||
finally_close_sinks:
|
finally_close_sinks:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue